From e38941e81ed9e2df80c18e37a0b21c86f3046405 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 4 Nov 2016 19:16:44 +0530 Subject: [PATCH 1/2] restructuring iot-plugins removing mobile/iot base plugins and other restructuring --- .../build.xml | 2 +- .../pom.xml | 0 .../src/assembly/src.xml | 0 .../accelerometer_receiver.xml | 0 .../accelerometer_receiver/artifact.xml | 0 .../accelerometer_script.xml | 0 .../accelerometer_script/artifact.xml | 0 .../accelerometer_store/artifact.xml | 0 .../org_wso2_iot_devices_accelerometer.xml | 0 .../accelerometer_stream/artifact.xml | 0 ....wso2.iot.devices.accelerometer_1.0.0.json | 0 .../accelerometer_sensor/artifacts.xml | 0 .../carbonapps/battery_sensor/artifacts.xml | 0 .../battery_receiver/artifact.xml | 0 .../battery_receiver/battery_receiver.xml | 0 .../battery_script/artifact.xml | 0 .../battery_script/battery_script.xml | 0 .../battery_sensor/battery_store/artifact.xml | 0 .../org_wso2_iot_devices_battery.xml | 0 .../battery_stream/artifact.xml | 0 .../org.wso2.iot.devices.battery_1.0.0.json | 0 .../carbonapps/gps_sensor/artifacts.xml | 0 .../gps_sensor/gps_receiver/artifact.xml | 0 .../gps_sensor/gps_receiver/gps_receiver.xml | 0 .../gps_sensor/gps_script/artifact.xml | 0 .../gps_sensor/gps_script/gps_script.xml | 0 .../gps_sensor/gps_store/artifact.xml | 0 .../gps_store/org_wso2_iot_devices_gps.xml | 0 .../gps_sensor/gps_stream/artifact.xml | 0 .../org.wso2.iot.devices.gps_1.0.0.json | 0 .../carbonapps/gravity_sensor/artifacts.xml | 0 .../gravity_receiver/artifact.xml | 0 .../gravity_receiver/gravity_receiver.xml | 0 .../gravity_script/artifact.xml | 0 .../gravity_script/gravity_script.xml | 0 .../gravity_sensor/gravity_store/artifact.xml | 0 .../org_wso2_iot_devices_gravity.xml | 0 .../gravity_stream/artifact.xml | 0 .../org.wso2.iot.devices.gravity_1.0.0.json | 0 .../carbonapps/gyroscope_sensor/artifacts.xml | 0 .../gyroscope_receiver/artifact.xml | 0 .../gyroscope_receiver/gyroscope_receiver.xml | 0 .../gyroscope_script/artifact.xml | 0 .../gyroscope_script/gyroscope_script.xml | 0 .../gyroscope_store/artifact.xml | 0 .../org_wso2_iot_devices_gyroscope.xml | 0 .../gyroscope_stream/artifact.xml | 0 .../org.wso2.iot.devices.gyroscope_1.0.0.json | 0 .../carbonapps/light_sensor/artifacts.xml | 0 .../light_sensor/light_receiver/artifact.xml | 0 .../light_receiver/light_receiver.xml | 0 .../light_sensor/light_script/artifact.xml | 0 .../light_script/light_script.xml | 0 .../light_sensor/light_store/artifact.xml | 0 .../org_wso2_iot_devices_light.xml | 0 .../light_sensor/light_stream/artifact.xml | 0 .../org.wso2.iot.devices.light_1.0.0.json | 0 .../carbonapps/magnetic_sensor/artifacts.xml | 0 .../magnetic_receiver/artifact.xml | 0 .../magnetic_receiver/magnetic_receiver.xml | 0 .../magnetic_script/artifact.xml | 0 .../magnetic_script/magnetic_script.xml | 0 .../magnetic_store/artifact.xml | 0 .../org_wso2_iot_devices_magnetic.xml | 0 .../magnetic_stream/artifact.xml | 0 .../org.wso2.iot.devices.magnetic_1.0.0.json | 0 .../carbonapps/pressure_sensor/artifacts.xml | 0 .../pressure_receiver/artifact.xml | 0 .../pressure_receiver/pressure_receiver.xml | 0 .../pressure_script/artifact.xml | 0 .../pressure_script/pressure_script.xml | 0 .../pressure_store/artifact.xml | 0 .../org_wso2_iot_devices_pressure.xml | 0 .../pressure_stream/artifact.xml | 0 .../org.wso2.iot.devices.pressure_1.0.0.json | 0 .../carbonapps/proximity_sensor/artifacts.xml | 0 .../proximity_receiver/artifact.xml | 0 .../proximity_receiver/proximity_receiver.xml | 0 .../proximity_script/artifact.xml | 0 .../proximity_script/proximity_script.xml | 0 .../proximity_store/artifact.xml | 0 .../org_wso2_iot_devices_proximity.xml | 0 .../proximity_stream/artifact.xml | 0 .../org.wso2.iot.devices.proximity_1.0.0.json | 0 .../carbonapps/rotation_sensor/artifacts.xml | 0 .../rotation_receiver/artifact.xml | 0 .../rotation_receiver/rotation_receiver.xml | 0 .../rotation_script/artifact.xml | 0 .../rotation_script/rotation_script.xml | 0 .../rotation_store/artifact.xml | 0 .../org_wso2_iot_devices_rotation.xml | 0 .../rotation_stream/artifact.xml | 0 .../org.wso2.iot.devices.rotation_1.0.0.json | 0 .../carbonapps/speed_sensor/artifacts.xml | 0 .../speed_sensor/speed_publisher/artifact.xml | 0 .../speed_publisher/speed_publisher.xml | 0 .../speed_sensor/speed_receiver/artifact.xml | 0 .../speed_receiver/speed_receiver.xml | 0 .../speed_sensor/speed_store/artifact.xml | 0 .../org_wso2_iot_devices_speed.xml | 0 .../speed_sensor/speed_stream/artifact.xml | 0 .../org.wso2.iot.devices.speed_1.0.0.json | 0 .../temperature_sensor/artifacts.xml | 0 .../temperature_publisher/artifact.xml | 0 .../temperature_publisher.xml | 0 .../temperature_receiver/artifact.xml | 0 .../temperature_receiver.xml | 0 .../temperature_script/artifact.xml | 0 .../temperature_script/temperature_script.xml | 0 .../temperature_store/artifact.xml | 0 .../org_wso2_iot_devices_temperature.xml | 0 .../temperature_stream/artifact.xml | 0 ...rg.wso2.iot.devices.temperature_1.0.0.json | 0 .../carbonapps/turn_sensor/artifacts.xml | 0 .../turn_sensor/turn_publisher/artifact.xml | 0 .../turn_publisher/turn_publisher.xml | 0 .../turn_sensor/turn_receiver/artifact.xml | 0 .../turn_receiver/turn_receiver.xml | 0 .../turn_sensor/turn_store/artifact.xml | 0 .../turn_store/org_wso2_iot_devices_turn.xml | 0 .../turn_sensor/turn_stream/artifact.xml | 0 .../org.wso2.iot.devices.turn_1.0.0.json | 0 .../iot-analytics/pom.xml | 2 +- components/analytics/pom.xml | 58 + .../app/build.gradle | 0 .../app/src/main/AndroidManifest.xml | 0 .../wso2/org/wso2_senseagent/BuildConfig.java | 0 .../wso2/org/wso2_senseagent/Manifest.java | 0 .../carbon/wso2/org/wso2_senseagent/R.java | 0 .../iot/android/sense/RegisterActivity.java | 0 .../sense/beacon/BeaconDetactorService.java | 0 .../sense/beacon/BeaconScanedData.java | 0 .../sense/beacon/BeaconServiceUtility.java | 0 .../sense/beacon/MonitoringActivity.java | 0 .../bmonitor/BeaconMonitoringActivity.java | 0 .../bmonitor/BluetoothLeDeviceStore.java | 0 .../sense/bmonitor/BluetoothLeScanner.java | 0 .../sense/bmonitor/BluetoothUtils.java | 0 .../sense/bmonitor/CsvWriterHelper.java | 0 .../sense/bmonitor/LeDeviceListAdapter.java | 0 .../android/sense/bmonitor/TimeFormatter.java | 0 .../sense/bmonitor/UtcDateFormatter.java | 0 .../sense/constants/SenseConstants.java | 0 .../data/publisher/DataPublisherReceiver.java | 0 .../data/publisher/DataPublisherService.java | 0 .../android/sense/data/publisher/Event.java | 0 .../mqtt/AndroidSenseMQTTHandler.java | 0 .../mqtt/transport/MQTTTransportHandler.java | 0 .../mqtt/transport/TransportHandler.java | 0 .../transport/TransportHandlerException.java | 0 .../sense/event/SenseScheduleReceiver.java | 0 .../iot/android/sense/event/SenseService.java | 0 .../sense/event/streams/DataReader.java | 0 .../event/streams/Location/LocationData.java | 0 .../streams/Location/LocationDataReader.java | 0 .../event/streams/SenseDataCollector.java | 0 .../event/streams/Sensor/SensorData.java | 0 .../streams/Sensor/SensorDataReader.java | 0 .../sense/event/streams/Speed/SpeedData.java | 0 .../event/streams/Speed/SpeedDataReader.java | 0 .../event/streams/battery/BatteryData.java | 0 .../streams/battery/BatteryDataReceiver.java | 0 .../realtimeviewer/ActivitySelectSensor.java | 0 .../realtimeviewer/datastore/TempStore.java | 0 .../event/RealTimeSensorChangeReceiver.java | 0 .../event/realtimesensor/RealTimeSensor.java | 0 .../realtimesensor/RealTimeSensorReader.java | 0 .../AvailableSensorsInDevice.java | 0 .../sensorlisting/SupportedSensors.java | 0 .../view/adaptor/SensorViewAdaptor.java | 0 .../sensor/selector/SelectSensorDialog.java | 0 .../sense/speech/detector/IVoiceControl.java | 0 .../detector/WordRecognitionActivity.java | 0 .../detector/util/ListeningActivity.java | 0 .../speech/detector/util/ProcessWords.java | 0 .../detector/util/StringSimilarity.java | 0 .../util/VoiceRecognitionListener.java | 0 .../sense/speech/detector/util/WordData.java | 0 .../iot/android/sense/util/LocalRegistry.java | 0 .../iot/android/sense/util/SenseClient.java | 0 .../sense/util/SenseClientAsyncExecutor.java | 0 .../android/sense/util/SenseDataHolder.java | 0 .../iot/android/sense/util/SenseUtils.java | 0 .../iot/android/sense/util/SenseWakeLock.java | 0 .../sense/util/dto/AccessTokenInfo.java | 0 .../sense/util/dto/AndroidConfiguration.java | 0 .../util/dto/AndroidSenseManagerService.java | 0 .../ApiApplicationRegistrationService.java | 0 .../util/dto/ApiRegistrationProfile.java | 0 .../dto/DynamicClientRegistrationService.java | 0 .../sense/util/dto/OAuthApplicationInfo.java | 0 .../util/dto/OAuthRequestInterceptor.java | 0 .../android/sense/util/dto/RegisterInfo.java | 0 .../sense/util/dto/RegistrationProfile.java | 0 .../sense/util/dto/TokenIssuerService.java | 0 .../app/src/main/res/drawable/beacon.png | Bin .../app/src/main/res/drawable/beacon_red.png | Bin .../app/src/main/res/drawable/mic.png | Bin .../src/main/res/drawable/pushtoserver.png | Bin .../src/main/res/drawable/round_button.xml | 0 .../app/src/main/res/drawable/sensor.png | Bin .../src/main/res/drawable/side_nav_bar.xml | 0 .../app/src/main/res/drawable/wso2logo.png | Bin .../activity_activity_select_sensor.xml | 0 .../res/layout/activity_beacon_monitoring.xml | 0 .../src/main/res/layout/activity_monitor.xml | 0 .../src/main/res/layout/activity_register.xml | 0 .../res/layout/activity_sense_settings.xml | 0 .../res/layout/activity_speech_sense_main.xml | 0 .../layout/app_bar_activity_select_sensor.xml | 0 .../main/res/layout/beacon_activity_list.xml | 0 .../layout/content_activity_select_sensor.xml | 0 .../main/res/layout/display_sensor_values.xml | 0 .../layout/fragment_select_sensor_dialog.xml | 0 .../src/main/res/layout/list_item_device.xml | 0 .../nav_header_activity_select_sensor.xml | 0 .../src/main/res/layout/tupple_monitoring.xml | 0 .../src/main/res/layout/web_view_activity.xml | 0 ...activity_activity_select_sensor_drawer.xml | 0 .../main/res/menu/activity_select_sensor.xml | 0 .../src/main/res/menu/menu_sense_settings.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../app/src/main/res/mipmap-hdpi/wso2logo.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../src/main/res/raw/client_truststore.bks | Bin .../app/src/main/res/raw/wso2carbon.cer | Bin .../app/src/main/res/values-v21/styles.xml | 0 .../app/src/main/res/values-w820dp/dimens.xml | 0 .../app/src/main/res/values/device.xml | 0 .../app/src/main/res/values/dimens.xml | 0 .../app/src/main/res/values/strings.xml | 0 .../res/values/strings_activity_register.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../build.gradle | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradlew | 0 .../gradlew.bat | 0 .../pom.xml | 0 .../settings.gradle | 0 .../build.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../android_sense_execution.siddhiql | 0 .../android_sense_execution/artifact.xml | 0 .../android_sense_publisher.xml | 0 .../android_sense_publisher/artifact.xml | 0 .../android_sense_receiver.xml | 2 +- .../android_sense_receiver/artifact.xml | 0 .../android_sense_stream/artifact.xml | 0 .../org.wso2.iot.android.sense_1.0.0.json | 0 .../carbonapps/androidsense/artifacts.xml | 0 .../carbonapps/word_count/artifacts.xml | 0 .../word_count_receiver/artifact.xml | 0 .../word_count_receiver.xml | 0 .../word_count/word_count_script/artifact.xml | 0 .../word_count_script/word_count_script.xml | 0 .../word_count/word_count_store/artifact.xml | 0 .../org_wso2_iot_devices_wordcount.xml | 0 .../word_count/word_count_stream/artifact.xml | 0 .../org.wso2.iot.devices.wordcount_1.0.0.json | 0 .../pom.xml | 0 .../service/impl/AndroidSenseService.java | 0 .../service/impl/AndroidSenseServiceImpl.java | 0 .../impl/constants/AndroidSenseConstants.java | 0 .../service/impl/util/APIUtil.java | 0 .../impl/util/AndroidConfiguration.java | 0 .../service/impl/util/SensorRecord.java | 0 .../src/main/webapp/META-INF/permissions.xml | 0 .../webapp/META-INF/webapp-classloading.xml | 0 .../src/main/webapp/WEB-INF/cxf-servlet.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/android_sense.js | 0 .../device-view.hbs | 0 .../device-view.js | 0 .../device-view.json | 0 .../public/images/android-sense-icon.png | Bin .../public/images/thumb.png | Bin .../configuration.hbs | 0 .../configuration.json | 0 .../public/js/platform-configuration.js | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/device-stats.js | 0 .../public/js/moment.min.js | 0 .../public/js/socket.io.min.js | 0 .../private/config.json | 0 .../public/asset/androidsense.apk | Bin .../public/css/styles.css | 0 .../public/images/android-sense-icon.png | Bin .../public/images/myDevices_analytics.png | Bin .../public/images/publishDataView.png | Bin .../public/images/registerView.png | Bin .../public/images/selectSensorView.png | Bin .../public/images/thumb.png | Bin .../public/js/download.js | 0 .../public/js/jquery.validate.js | 0 .../type-view.hbs | 0 .../type-view.js | 0 .../type-view.json | 0 .../androidsense-plugin/pom.xml | 0 .../build.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../arduino_execution.siddhiql | 0 .../Arduino/arduino_execution/artifact.xml | 0 .../arduino_receiver/arduino_receiver.xml | 2 +- .../Arduino/arduino_receiver/artifact.xml | 0 .../Arduino/arduino_stream/artifact.xml | 0 .../org.wso2.iot.arduino_1.0.0.json | 0 .../carbonapps/Arduino/artifacts.xml | 0 .../pom.xml | 0 .../arduino/service/impl/ArduinoService.java | 0 .../service/impl/ArduinoServiceImpl.java | 0 .../impl/constants/ArduinoConstants.java | 0 .../service/impl/dto/SensorRecord.java | 0 .../impl/exception/ArduinoException.java | 0 .../arduino/service/impl/util/APIUtil.java | 0 .../impl/util/ArduinoServiceUtils.java | 0 .../arduino/service/impl/util/ZipArchive.java | 0 .../arduino/service/impl/util/ZipUtil.java | 0 .../src/main/webapp/META-INF/permissions.xml | 0 .../webapp/META-INF/webapp-classloading.xml | 0 .../src/main/webapp/WEB-INF/cxf-servlet.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/arduino.js | 0 .../device-view.hbs | 0 .../device-view.js | 0 .../device-view.json | 0 .../public/images/ardunio-icon.png | Bin .../public/images/thumb.png | Bin .../configuration.hbs | 0 .../configuration.json | 0 .../public/js/platform-configuration.js | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/device-stats.js | 0 .../public/js/moment.min.js | 0 .../public/js/socket.io.min.js | 0 .../private/config.json | 0 .../public/css/styles.css | 0 .../public/images/ardunio-icon.png | Bin .../public/images/myDevices_analytics.png | Bin .../public/images/schematicsGuide.png | Bin .../public/images/thumb.png | Bin .../public/js/download.js | 0 .../public/js/jquery.validate.js | 0 .../type-view.hbs | 0 .../type-view.json | 0 .../arduino-plugin/pom.xml | 0 .../{iot-plugins => device-types}/pom.xml | 4 +- .../build.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../carbonapps/raspberrypi/artifacts.xml | 0 .../raspberrypi_execution/artifact.xml | 0 .../raspberrypi_execution.siddhiql | 0 .../raspberrypi_receiver/artifact.xml | 0 .../raspberrypi_receiver.xml | 2 +- .../raspberrypi_stream/artifact.xml | 0 .../org.wso2.iot.raspberrypi_1.0.0.json | 0 .../pom.xml | 0 .../service/impl/RaspberryPiService.java | 0 .../service/impl/RaspberryPiServiceImpl.java | 0 .../impl/constants/RaspberrypiConstants.java | 0 .../service/impl/dto/SensorRecord.java | 0 .../impl/exception/RaspberrypiException.java | 0 .../service/impl/util/APIUtil.java | 0 .../service/impl/util/ZipArchive.java | 0 .../service/impl/util/ZipUtil.java | 0 .../src/main/webapp/META-INF/permissions.xml | 0 .../webapp/META-INF/webapp-classloading.xml | 0 .../src/main/webapp/WEB-INF/cxf-servlet.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/raspberrypi.js | 0 .../device-view.hbs | 0 .../device-view.js | 0 .../device-view.json | 0 .../public/images/respberry-icon.png | Bin .../public/images/thumb.png | Bin .../configuration.hbs | 0 .../configuration.json | 0 .../public/js/platform-configuration.js | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/device-stats.js | 0 .../public/js/moment.min.js | 0 .../public/js/socket.io.min.js | 0 .../private/config.json | 0 .../public/css/styles.css | 0 .../public/images/myDevices_analytics.png | Bin .../public/images/respberry-icon.png | Bin .../public/images/schematicsGuide.png | Bin .../public/images/thumb.png | Bin .../public/js/download.js | 0 .../public/js/jquery.validate.js | 0 .../type-view.hbs | 0 .../type-view.json | 0 .../raspberrypi-plugin/pom.xml | 0 .../pom.xml | 0 .../agent/advanced/Bootstrap.java | 0 .../http/FireAlarmHTTPCommunicator.java | 0 .../mqtt/FireAlarmMQTTCommunicator.java | 0 .../xmpp/FireAlarmXMPPCommunicator.java | 0 .../advanced/core/AgentConfiguration.java | 0 .../agent/advanced/core/AgentConstants.java | 0 .../agent/advanced/core/AgentManager.java | 0 .../advanced/core/AgentUtilOperations.java | 0 .../enrollment/EnrollmentManager.java | 0 .../AgentCoreOperationException.java | 0 .../agent/advanced/sidhdhi/SidhdhiQuery.java | 0 .../transport/CommunicationUtils.java | 0 .../advanced/transport/TransportHandler.java | 0 .../transport/TransportHandlerException.java | 0 .../advanced/transport/TransportUtils.java | 0 .../transport/http/HTTPTransportHandler.java | 0 .../transport/mqtt/MQTTTransportHandler.java | 0 .../transport/xmpp/XMPPTransportHandler.java | 0 .../virtual/VirtualHardwareManager.java | 0 .../agent/advanced/virtual/ui/AgentUI.java | 0 .../src/main/resources/alarm-off.gif | Bin .../src/main/resources/alarm-on.gif | Bin .../src/main/resources/cep_query.txt | 0 .../main/resources/deviceConfig.properties | 0 .../src/main/resources/fireAlarmSound.mid | Bin .../src/main/ui/build.xml | 0 .../src/main/ui/manifest.mf | 0 .../src/main/ui/nbproject/build-impl.xml | 0 .../src/main/ui/nbproject/genfiles.properties | 0 .../ui/nbproject/private/private.properties | 0 .../src/main/ui/nbproject/private/private.xml | 0 .../src/main/ui/nbproject/project.properties | 0 .../src/main/ui/nbproject/project.xml | 0 .../src/main/ui/src/bulb-on.jpg | Bin .../mgt/iot/agent/virtual/VirtualAgentUI.java | 0 .../mgt/iot/agent/virtual/ui/AgentUI.form | 0 .../mgt/iot/agent/virtual/ui/AgentUI.java | 0 .../pom.xml | 0 .../iot/virtualfirealarm/agent/Bootstrap.java | 0 .../http/FireAlarmHTTPCommunicator.java | 0 .../mqtt/FireAlarmMQTTCommunicator.java | 0 .../xmpp/FireAlarmXMPPCommunicator.java | 0 .../agent/core/AgentConfiguration.java | 0 .../agent/core/AgentConstants.java | 0 .../agent/core/AgentManager.java | 0 .../agent/core/AgentUtilOperations.java | 0 .../agent/enrollment/EnrollmentManager.java | 0 .../AgentCoreOperationException.java | 0 .../agent/transport/CommunicationUtils.java | 0 .../agent/transport/TransportHandler.java | 0 .../transport/TransportHandlerException.java | 0 .../agent/transport/TransportUtils.java | 0 .../transport/http/HTTPTransportHandler.java | 0 .../transport/mqtt/MQTTTransportHandler.java | 0 .../transport/xmpp/XMPPTransportHandler.java | 0 .../agent/virtual/VirtualHardwareManager.java | 0 .../agent/virtual/ui/AgentUI.java | 0 .../src/main/resources/alarm-off.gif | Bin .../src/main/resources/alarm-on.gif | Bin .../main/resources/deviceConfig.properties | 0 .../src/main/resources/fireAlarmSound.mid | Bin .../src/main/ui/build.xml | 0 .../src/main/ui/manifest.mf | 0 .../src/main/ui/nbproject/build-impl.xml | 0 .../src/main/ui/nbproject/genfiles.properties | 0 .../ui/nbproject/private/private.properties | 0 .../src/main/ui/nbproject/private/private.xml | 0 .../src/main/ui/nbproject/project.properties | 0 .../src/main/ui/nbproject/project.xml | 0 .../src/main/ui/src/bulb-on.jpg | Bin .../mgt/iot/agent/virtual/VirtualAgentUI.java | 0 .../mgt/iot/agent/virtual/ui/AgentUI.form | 0 .../mgt/iot/agent/virtual/ui/AgentUI.java | 0 .../pom.xml | 0 .../service/impl/VirtualFireAlarmService.java | 0 .../impl/VirtualFireAlarmServiceImpl.java | 0 .../service/impl/dto/SensorRecord.java | 0 .../exception/VirtualFireAlarmException.java | 0 .../service/impl/util/APIUtil.java | 0 .../util/VirtualFireAlarmServiceUtils.java | 0 .../util/VirtualFireAlarmUtilConstants.java | 0 .../service/impl/util/ZipArchive.java | 0 .../service/impl/util/ZipUtil.java | 0 .../service/impl/util/util/Utils.java | 0 .../src/main/webapp/META-INF/permissions.xml | 0 .../webapp/META-INF/webapp-classloading.xml | 0 .../src/main/webapp/WEB-INF/cxf-servlet.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 4 +- .../config/DeviceManagementConfiguration.java | 0 .../config/EventListenerConfiguration.java | 0 .../plugin/config/VirtualFirealarmConfig.java | 0 ...irtualFirealarmConfigurationException.java | 0 .../constants/VirtualFireAlarmConstants.java | 0 ...tualFirealarmDeviceMgtPluginException.java | 0 .../plugin/impl/VirtualFireAlarmUtils.java | 0 ...tualFirealarmEventAdapterSubscription.java | 0 ...irtualFirealarmMqttContentTransformer.java | 2 +- .../impl/VirtualFirealarmSecurityManager.java | 0 .../impl/VirtualFirealarmStartupListener.java | 0 ...irtualFirealarmXmppContentTransformer.java | 2 +- .../VirtualFirealarmManagementDataHolder.java | 0 ...alFirealarmManagementServiceComponent.java | 0 .../plugin/mqtt/MqttConfig.java | 0 .../plugin/xmpp/XmppAccount.java | 0 .../plugin/xmpp/XmppConfig.java | 0 .../plugin/xmpp/XmppServerClient.java | 0 .../pom.xml | 0 .../impl/VirtualFireAlarmScepServer.java | 0 .../impl/VirtualFireAlarmScepServerImpl.java | 0 .../exception/VirtualFireAlarmException.java | 0 .../util/VirtualFireAlarmServiceUtils.java | 0 .../service/impl/util/scep/ContentType.java | 0 .../service/impl/util/scep/SCEPOperation.java | 0 .../webapp/META-INF/webapp-classloading.xml | 0 .../src/main/webapp/WEB-INF/cxf-servlet.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 0 .../src/assembly/src.xml | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/virtual_firealarm.js | 0 .../device-view.hbs | 0 .../device-view.js | 0 .../device-view.json | 0 .../public/images/firealarm-icon.png | Bin .../public/images/thumb.png | Bin .../configuration.hbs | 0 .../configuration.json | 0 .../public/js/platform-configuration.js | 0 .../policy-edit.hbs | 0 .../policy-edit.json | 0 .../policy-view.hbs | 0 .../policy-view.json | 0 .../policy-wizard.hbs | 0 .../policy-wizard.json | 0 .../analytics-view.hbs | 0 .../analytics-view.js | 0 .../analytics-view.json | 0 .../public/js/device-stats.js | 0 .../public/js/moment.min.js | 0 .../public/js/socket.io.min.js | 0 .../private/config.json | 0 .../public/css/styles.css | 0 .../public/images/firealarm-icon.png | Bin .../public/images/myDevices_analytics.png | Bin .../public/images/schematicsGuide.png | Bin .../public/images/thumb.png | Bin .../public/js/download.js | 0 .../public/js/jquery.validate.js | 0 .../type-view.hbs | 0 .../type-view.json | 0 .../virtual-fire-alarm-plugin/pom.xml | 2 +- .../pom.xml | 4 +- .../ApplicationOperationsImpl.java | 0 .../DeviceApplicationServiceComponent.java | 0 .../osgiconnector/mdmmgt/beans/MobileApp.java | 0 .../mdmmgt/beans/MobileAppTypes.java | 0 .../beans/android/AndroidApplication.java | 0 .../beans/android/AppStoreApplication.java | 0 .../beans/android/EnterpriseApplication.java | 0 .../mdmmgt/beans/android/WebApplication.java | 0 .../mdmmgt/beans/ios/AppStoreApplication.java | 0 .../beans/ios/EnterpriseApplication.java | 0 .../mdmmgt/beans/ios/IOSApplication.java | 0 .../mdmmgt/beans/ios/RemoveApplication.java | 0 .../mdmmgt/beans/ios/WebClip.java | 0 .../common/DeviceApplicationException.java | 0 .../util/AndroidApplicationOperationUtil.java | 0 .../util/IOSApplicationOperationUtil.java | 0 .../mdmmgt/util/MDMAppConstants.java | 0 .../mdmmgt/util/MDMServiceAPIUtils.java | 0 .../appm-connector}/pom.xml | 11 +- .../pom.xml | 8 +- .../input/adapter/extension/ContentInfo.java | 2 +- .../adapter/extension/ContentTransformer.java | 2 +- .../adapter/extension/ContentValidator.java | 2 +- .../extension/DefaultContentTransformer.java | 2 +- .../extension/DefaultContentValidator.java | 2 +- .../pom.xml | 20 +- .../input/adapter/http/HTTPEventAdapter.java | 6 +- .../adapter/http/HTTPEventAdapterFactory.java | 6 +- .../adapter/http/HTTPMessageServlet.java | 22 +- .../HTTPContentInitializationException.java | 2 +- .../InputAdapterServiceComponent.java | 6 +- .../InputAdapterServiceDataHolder.java | 2 +- .../adapter/http/jwt/JWTAuthenticator.java | 6 +- .../http/oauth/OAuthAuthenticator.java | 6 +- .../oauth/OAuthTokenValidaterStubFactory.java | 6 +- .../OAuthTokenValidationException.java | 2 +- .../adapter/http/util/AuthenticationInfo.java | 2 +- .../http/util/HTTPContentValidator.java | 6 +- .../http/util/HTTPEventAdapterConstants.java | 2 +- .../adapter/http/i18n/Resources.properties | 0 .../pom.xml | 18 +- .../input/adapter/mqtt/MQTTEventAdapter.java | 9 +- .../adapter/mqtt/MQTTEventAdapterFactory.java | 6 +- .../MQTTContentInitializationException.java | 2 +- .../InputAdapterServiceComponent.java | 4 +- .../InputAdapterServiceDataHolder.java | 2 +- .../mqtt/util/MQTTAdapterListener.java | 14 +- .../MQTTBrokerConnectionConfiguration.java | 4 +- .../mqtt/util/MQTTContentValidator.java | 6 +- .../mqtt/util/MQTTEventAdapterConstants.java | 2 +- .../input/adapter/mqtt/util/MQTTUtil.java | 2 +- .../adapter/mqtt/util/PropertyUtils.java | 2 +- .../mqtt/util/RegistrationProfile.java | 2 +- .../adapter/mqtt/i18n/Resources.properties | 0 .../pom.xml | 18 +- .../input/adapter/xmpp/XMPPEventAdapter.java | 9 +- .../adapter/xmpp/XMPPEventAdapterFactory.java | 6 +- .../XMPPContentInitializationException.java | 2 +- .../InputAdapterServiceComponent.java | 4 +- .../InputAdapterServiceDataHolder.java | 2 +- .../xmpp/util/XMPPAdapterListener.java | 14 +- .../xmpp/util/XMPPEventAdapterConstants.java | 2 +- .../XMPPServerConnectionConfiguration.java | 2 +- .../adapter/xmpp/i18n/Resources.properties | 0 .../pom.xml | 18 +- .../output/adapter/mqtt/MQTTEventAdapter.java | 8 +- .../adapter/mqtt/MQTTEventAdapterFactory.java | 6 +- .../MQTTEventAdapterServiceComponent.java | 4 +- .../mqtt/util/MQTTAdapterPublisher.java | 2 +- .../MQTTBrokerConnectionConfiguration.java | 2 +- .../mqtt/util/MQTTEventAdapterConstants.java | 2 +- .../output/adapter/mqtt/util/MQTTUtil.java | 2 +- .../mqtt/util/RegistrationProfile.java | 2 +- .../adapter/mqtt/i18n/Resources.properties | 0 .../pom.xml | 8 +- .../endpoint}/SubscriptionEndpoint.java | 3 +- .../SuperTenantSubscriptionEndpoint.java | 10 +- .../endpoint}/TenantSubscriptionEndpoint.java | 10 +- .../endpoint}/util/ServiceHolder.java | 25 +- .../websocket/endpoint}/util/UIConstants.java | 4 +- .../src/main/webapp/WEB-INF/web.xml | 0 .../pom.xml | 16 +- .../adapter/websocket}/UIEventAdapter.java | 10 +- .../websocket}/UIEventAdapterFactory.java | 7 +- .../UIOutputCallbackControllerService.java | 2 +- ...UIOutputCallbackControllerServiceImpl.java | 8 +- .../authentication/AuthenticationInfo.java | 2 +- .../authentication/Authenticator.java | 2 +- .../authentication/OAuthAuthenticator.java | 4 +- .../oauth/OAuthTokenValdiator.java | 12 +- .../oauth/OAuthTokenValidaterStubFactory.java | 7 +- .../OAuthTokenValidationException.java | 2 +- .../websocket}/authorization/Authorizer.java | 5 +- .../authorization/DeviceAuthorizer.java | 8 +- .../websocket}/config/Authenticator.java | 2 +- .../adapter/websocket}/config/Authorizer.java | 2 +- .../adapter/websocket}/config/Properties.java | 2 +- .../adapter/websocket}/config/Property.java | 2 +- .../websocket}/config/WebsocketConfig.java | 4 +- .../config/WebsocketValidationConfigs.java | 3 +- ...alidationConfigurationFailedException.java | 2 +- .../constants/WebsocketConstants.java | 2 +- .../UIEventAdaptorServiceDataHolder.java | 4 +- .../UILocalEventAdapterServiceComponent.java | 26 +- .../service/WebsocketValidationService.java | 6 +- .../WebsocketValidationServiceImpl.java | 6 +- .../util/UIEventAdapterConstants.java | 6 +- .../util/WebSocketSessionRequest.java | 2 +- .../websocket}/util/WebsocketUtils.java | 4 +- .../websocket}/i18n/Resources.properties | 0 .../pom.xml | 19 +- .../output/adapter/xmpp/XMPPEventAdapter.java | 8 +- .../adapter/xmpp/XMPPEventAdapterFactory.java | 6 +- .../XMPPEventAdapterServiceComponent.java | 4 +- .../xmpp/util/XMPPAdapterPublisher.java | 2 +- .../xmpp/util/XMPPEventAdapterConstants.java | 2 +- .../XMPPServerConnectionConfiguration.java | 2 +- .../adapter/xmpp/i18n/Resources.properties | 0 .../cdmf-transport-adapters}/pom.xml | 22 +- components/extensions/pom.xml | 3 +- .../org.wso2.carbon.device.mgt.iot.ui/pom.xml | 60 - .../jaggeryapps/devicemgt/api/policy-api.jag | 55 - .../devicemgt/app/conf/app-conf.json | 42 - .../public/js/validate-register.js | 163 - .../app/pages/iot.page.register/register.hbs | 75 - .../app/pages/iot.page.register/register.js | 38 - .../app/pages/iot.page.register/register.json | 6 - .../app/pages/iot.page.sign-in/sign-in.hbs | 5 - .../app/pages/iot.page.sign-in/sign-in.json | 4 - .../operation-bar.hbs | 120 - .../operation-bar.js | 55 - .../operation-bar.json | 3 - .../public/js/operation-bar.js | 126 - .../app/units/iot.unit.policy.edit/edit.hbs | 263 - .../app/units/iot.unit.policy.edit/edit.js | 25 - .../app/units/iot.unit.policy.edit/edit.json | 3 - .../public/css/codemirror.css | 342 - .../public/js/codemirror.js | 8720 ----------------- .../public/js/policy-edit.js | 729 -- .../iot.unit.policy.edit/public/js/sql.js | 310 - .../public/css/codemirror.css | 342 - .../public/js/codemirror.js | 8720 ----------------- .../public/js/policy-view.js | 128 - .../iot.unit.policy.view/public/js/sql.js | 310 - .../app/units/iot.unit.policy.view/view.hbs | 112 - .../app/units/iot.unit.policy.view/view.js | 25 - .../app/units/iot.unit.policy.view/view.json | 3 - .../public/css/codemirror.css | 342 - .../public/js/codemirror.js | 8720 ----------------- .../public/js/policy-create.js | 748 -- .../iot.unit.policy.wizard/public/js/sql.js | 310 - .../units/iot.unit.policy.wizard/wizard.hbs | 304 - .../units/iot.unit.policy.wizard/wizard.js | 52 - .../units/iot.unit.policy.wizard/wizard.json | 3 - .../units/iot.unit.ui.header.logo/logo.hbs | 18 - .../units/iot.unit.ui.header.logo/logo.json | 5 - .../pom.xml | 108 - .../url/printer/URLPrinterStartupHandler.java | 60 - .../internal/UrlPrinterDataHolder.java | 42 - .../internal/UrlPrinterServiceComponent.java | 79 - .../src/assembly/src.xml | 36 - .../DeviceManagementAdminService.java | 2 +- .../services/DeviceManagementService.java | 2 +- .../DeviceTypeConfigurationService.java | 2 +- .../services/EventReceiverService.java | 2 +- .../pom.xml | 10 +- .../android/impl/AndroidDeviceManager.java | 23 +- .../android/impl/AndroidFeatureManager.java | 10 +- .../MobileDeviceConfigurationManager.java | 5 +- .../config/MobileDeviceManagementConfig.java | 2 +- .../MobileDeviceManagementRepository.java | 6 +- .../datasource/DataSourceConfigAdapter.java | 2 +- .../datasource/JNDILookupDefinition.java | 2 +- .../datasource/MobileDataSourceConfig.java | 2 +- .../MobileDataSourceConfigurations.java | 2 +- ...tractMobileDeviceManagementDAOFactory.java | 102 + .../android/impl/dao/AndroidDAOFactory.java | 4 - .../AndroidFeatureManagementDAOException.java | 2 - .../android/impl}/dao/MobileDeviceDAO.java | 4 +- .../MobileDeviceManagementDAOException.java | 2 +- .../dao/MobileDeviceManagementDAOFactory.java | 2 +- .../android/impl}/dao/MobileFeatureDAO.java | 4 +- .../impl/dao/impl/AndroidDeviceDAOImpl.java | 8 +- .../impl/AndroidDeviceMgtPluginException.java | 57 + .../impl/dao/impl/AndroidFeatureDAOImpl.java | 8 +- .../impl}/dao/impl/MobileFeatureDAOImpl.java | 10 +- .../util/MobileDeviceManagementDAOUtil.java | 148 + .../android/impl}/dto/MobileDevice.java | 2 +- .../dto/MobileDeviceOperationMapping.java | 2 +- .../android/impl}/dto/MobileFeature.java | 2 +- .../impl}/dto/MobileFeatureProperty.java | 2 +- .../android/impl}/dto/MobileOperation.java | 2 +- .../impl}/dto/MobileOperationProperty.java | 2 +- .../impl/util/AndroidPluginConstants.java | 11 + .../impl/util/MobileDeviceManagementUtil.java | 333 + ...droidDeviceManagementServiceComponent.java | 7 +- .../pom.xml | 60 - .../src/assembly/src.xml | 41 - .../devicemgt/app/conf/app-conf.json | 51 - .../devicemgt/app/conf/config.json | 125 - .../pages/mdm.page.dashboard/dashboard.hbs | 165 - .../app/pages/mdm.page.dashboard/dashboard.js | 42 - .../pages/mdm.page.dashboard/dashboard.json | 4 - .../mdm.page.dashboard/public/js/dashboard.js | 61 - .../app/pages/mdm.page.device.view/view.hbs | 53 - .../app/pages/mdm.page.device.view/view.js | 40 - .../app/pages/mdm.page.device.view/view.json | 4 - .../app/pages/mdm.page.devices/devices.hbs | 150 - .../app/pages/mdm.page.devices/devices.js | 43 - .../app/pages/mdm.page.devices/devices.json | 4 - .../public/js/device-listing.js | 276 - .../app/pages/mdm.page.policies/policies.hbs | 662 -- .../app/pages/mdm.page.policies/policies.js | 59 - .../app/pages/mdm.page.policies/policies.json | 6 - .../public/js/policy-list.js | 366 - .../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 - .../operation-bar.hbs | 32 - .../operation-bar.js | 106 - .../operation-bar.json | 4 - .../public/js/operation-bar.js | 248 - .../templates/hidden-operations-android.hbs | 286 - .../templates/hidden-operations-ios.hbs | 366 - .../public/templates/operations.hbs | 249 - .../operation-mod.hbs | 20 - .../operation-mod.json | 8 - .../public/js/operation-mod.js | 1764 ---- .../mdm.unit.device.qr-modal/qr-modal.hbs | 64 - .../mdm.unit.device.qr-modal/qr-modal.js | 23 - .../mdm.unit.device.qr-modal/qr-modal.json | 3 - .../public/js/device-detail.js | 341 - .../public/js/load-map.js | 54 - .../public/templates/applications-list.hbs | 33 - .../public/templates/operations-log.hbs | 24 - .../public/templates/policy-compliance.hbs | 87 - .../app/units/mdm.unit.device.view/view.hbs | 513 - .../app/units/mdm.unit.device.view/view.js | 211 - .../app/units/mdm.unit.device.view/view.json | 4 - .../units/mdm.unit.lib.leaflet/leaflet.hbs | 6 - .../units/mdm.unit.lib.leaflet/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 .../mdm.unit.lib.leaflet/public/js/leaflet.js | 9 - .../units/mdm.unit.policy.create/create.hbs | 314 - .../units/mdm.unit.policy.create/create.js | 67 - .../units/mdm.unit.policy.create/create.json | 4 - .../public/js/policy-create.js | 2928 ------ .../templates/hidden-operations-android.hbs | 1428 --- .../templates/hidden-operations-ios.hbs | 4861 --------- .../templates/hidden-operations-windows.hbs | 564 -- .../app/units/mdm.unit.policy.edit/edit.hbs | 277 - .../app/units/mdm.unit.policy.edit/edit.js | 40 - .../app/units/mdm.unit.policy.edit/edit.json | 4 - .../mdm.unit.policy.edit/public/js/edit.js | 2691 ----- .../hidden-operations-android-edit.hbs | 1562 --- .../templates/hidden-operations-ios-edit.hbs | 4902 --------- .../hidden-operations-windows-edit.hbs | 566 -- .../mdm.unit.policy.view/public/js/view.js | 2305 ----- .../hidden-operations-android-view.hbs | 1487 --- .../templates/hidden-operations-ios-view.hbs | 4965 ---------- .../hidden-operations-windows-view.hbs | 566 -- .../app/units/mdm.unit.policy.view/view.hbs | 88 - .../app/units/mdm.unit.policy.view/view.js | 25 - .../app/units/mdm.unit.policy.view/view.json | 4 - .../public/js/policy-create.js | 2355 ----- .../templates/hidden-operations-android.hbs | 458 - .../templates/hidden-operations-ios.hbs | 2923 ------ .../templates/hidden-operations-windows.hbs | 495 - .../units/mdm.unit.policy.wizard/wizard.hbs | 295 - .../units/mdm.unit.policy.wizard/wizard.js | 38 - .../units/mdm.unit.policy.wizard/wizard.json | 3 - .../units/mdm.unit.ui.header.logo/logo.hbs | 19 - .../units/mdm.unit.ui.header.logo/logo.json | 5 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.hbs | 119 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.js | 63 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.json | 4 - .../public/js/jquery.qrcode.min.js | 47 - .../public/js/nav-menu.js | 387 - .../public/templates/notifications.hbs | 16 - .../emm-web-agent/api/invoker-api.jag | 104 - .../emm-web-agent/api/user-api.jag | 185 - .../emm-web-agent/app/conf/app-conf.json | 52 - .../emm-web-agent/app/conf/config.json | 108 - .../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 | 43 - .../app/modules/conf-reader/pinch.min.js | 26 - .../emm-web-agent/app/modules/constants.js | 81 - .../modules/enrollments/ios/agent-check.jag | 66 - .../enrollments/ios/agent-controller.jag | 80 - .../modules/enrollments/ios/agent-enroll.jag | 85 - .../app/modules/enrollments/ios/agent.jag | 47 - .../modules/enrollments/ios/certificate.jag | 26 - .../ios/config/ios-manifest-template.hbs | 31 - .../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 - .../emm-web-agent/app/modules/init.js | 34 - .../emm-web-agent/app/modules/login.js | 42 - .../app/modules/oauth/token-handler-utils.js | 328 - .../app/modules/oauth/token-handlers.js | 180 - .../oauth/token-protected-service-invokers.js | 376 - .../app/modules/ua-parser.min.js | 9 - .../emm-web-agent/app/modules/utility.js | 140 - .../download-agent.hbs | 47 - .../download-agent.js | 36 - .../download-agent.json | 6 - .../public/asset/android-agent.apk | Bin 4000566 -> 0 bytes .../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 - .../certificate-error.hbs | 34 - .../certificate-error.json | 6 - .../download-agent.hbs | 68 - .../download-agent.js | 37 - .../download-agent.json | 6 - .../public/asset/Readme.txt | 1 - .../license.hbs | 59 - .../license.js | 24 - .../license.json | 6 - .../js/enrollment-completion-checker-ios.js | 35 - .../mdm.page.enrollments.ios.login/login.hbs | 45 - .../mdm.page.enrollments.ios.login/login.js | 24 - .../mdm.page.enrollments.ios.login/login.json | 6 - .../public/js/enrollment-success-note-ios.js | 35 - .../thank-you.hbs | 52 - .../thank-you.js | 31 - .../thank-you.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 | 79 - .../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 | 352 - .../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 - .../jaggeryapps/emm-web-agent/jaggery.conf | 97 - .../pom.xml | 81 - .../url/printer/URLPrinterStartupHandler.java | 64 - .../internal/URLPrinterDataHolder.java | 42 - ...PrinterStartupHandlerServiceComponent.java | 73 - .../org.wso2.carbon.device.mgt.mobile/pom.xml | 171 - .../AbstractMobileOperationManager.java | 42 - .../DataSourceNotAvailableException.java | 52 - .../mobile/common/MobilePluginConstants.java | 29 - .../MobileDeviceManagementDataHolder.java | 58 - ...obileDeviceManagementServiceComponent.java | 143 - .../MobileDeviceManagementConfigTests.java | 141 - .../mgt/mobile/impl/common/DBTypes.java | 29 - .../impl/common/TestDBConfiguration.java | 90 - .../impl/dao/util/MobileDatabaseUtils.java | 111 - .../malformed-mobile-config-no-api-config.xml | 41 - ...-mobile-config-no-api-publisher-config.xml | 42 - ...malformed-mobile-config-no-apis-config.xml | 42 - .../malformed-mobile-config-no-ds-config.xml | 42 - ...malformed-mobile-config-no-jndi-config.xml | 42 - .../malformed-mobile-config-no-mgt-repo.xml | 42 - .../MobileDeviceManagementConfigSchema.xsd | 69 - .../src/test/resources/log4j.properties | 33 - .../src/test/resources/sql/h2.sql | 55 - .../src/test/resources/testdbconfig.xml | 24 - .../src/test/resources/testng.xml | 27 - components/mobile-plugins/pom.xml | 1 - .../api/services/ConfigurationMgtService.java | 2 +- .../DeviceManagementAdminService.java | 2 +- .../api/services/DeviceManagementService.java | 2 +- .../pom.xml | 11 +- .../WindowsDeviceMgtPluginException.java} | 14 +- .../windows/impl/WindowsDeviceManager.java | 22 +- .../windows/impl/WindowsFeatureManager.java | 10 +- .../MobileDeviceConfigurationManager.java | 78 + .../config/MobileDeviceManagementConfig.java | 42 + .../MobileDeviceManagementRepository.java | 57 + .../datasource/DataSourceConfigAdapter.java | 51 + .../datasource/JNDILookupDefinition.java | 79 + .../datasource/MobileDataSourceConfig.java | 51 + .../MobileDataSourceConfigurations.java} | 22 +- ...tractMobileDeviceManagementDAOFactory.java | 14 +- .../windows/impl/dao/MobileDeviceDAO.java | 74 + .../MobileDeviceManagementDAOException.java | 80 + .../MobileDeviceManagementDAOFactory.java} | 8 +- .../windows/impl/dao/MobileFeatureDAO.java | 110 + .../windows/impl/dao/WindowsDAOFactory.java | 4 - .../WindowsFeatureManagementDAOException.java | 2 - .../impl/dao/impl/WindowsDeviceDAOImpl.java | 8 +- .../impl/dao/impl/WindowsFeatureDAOImpl.java | 8 +- .../util/MobileDeviceManagementDAOUtil.java | 15 +- .../mobile/windows/impl/dto/MobileDevice.java | 135 + .../dto/MobileDeviceOperationMapping.java | 86 + .../windows/impl/dto/MobileFeature.java | 73 + .../impl/dto/MobileFeatureProperty.java | 45 + .../windows/impl/dto/MobileOperation.java | 64 + .../impl/dto/MobileOperationProperty.java | 54 + ...bileDeviceManagementSchemaInitializer.java | 5 +- .../util/MobileDeviceManagementUtil.java | 41 +- .../impl/util/WindowsPluginConstants.java | 48 - ...ndowsDeviceManagementServiceComponent.java | 6 +- .../pom.xml | 2 +- .../src/main/resources/build.properties | 0 .../src/main/resources/p2.inf | 0 .../pom.xml | 6 +- .../pom.xml | 0 .../src/main/resources/build.properties | 0 .../datasources/androidsense-datasources.xml | 0 .../src/main/resources/dbscripts/h2.sql | 0 .../src/main/resources/dbscripts/mssql.sql | 0 .../src/main/resources/dbscripts/mysql.sql | 0 .../src/main/resources/dbscripts/oracle.sql | 0 .../main/resources/dbscripts/postgresql.sql | 0 .../resources/devicetypes/android_sense.xml | 0 .../src/main/resources/p2.inf | 0 .../androidsense-plugin-feature/pom.xml | 0 .../pom.xml | 0 .../main/resources/agent/ArduinoBoardSketch.h | 0 .../resources/agent/ArduinoBoardSketch.ino | 0 .../src/main/resources/agent/Connect.ino | 0 .../src/main/resources/agent/PollServer.ino | 0 .../src/main/resources/agent/PushData.ino | 0 .../main/resources/agent/sketch.properties | 0 .../src/main/resources/build.properties | 0 .../main/resources/devicetypes/arduino.xml | 0 .../src/main/resources/p2.inf | 0 .../arduino-plugin-feature/pom.xml | 0 .../pom.xml | 5 +- .../pom.xml | 0 .../src/main/resources/agent/README.md | 0 .../main/resources/agent/RaspberryService.sh | 0 .../resources/agent/deviceConfig.properties | 0 .../agent/org.eclipse.paho.mqtt.python.tar | Bin .../main/resources/agent/sketch.properties | 0 .../resources/agent/src/RaspberryAgent.py | 0 .../resources/agent/src/RaspberryStats.log | 0 .../main/resources/agent/src/httpServer.py | 0 .../src/main/resources/agent/src/iotUtils.py | 0 .../main/resources/agent/src/mqttConnector.py | 0 .../main/resources/agent/src/running_mode.py | 0 .../src/main/resources/agent/startService.sh | 0 .../src/main/resources/agent/testAgent.sh | 0 .../src/main/resources/build.properties | 0 .../datasources/raspberrypi-datasources.xml | 0 .../src/main/resources/dbscripts/h2.sql | 0 .../src/main/resources/dbscripts/mssql.sql | 0 .../src/main/resources/dbscripts/mysql.sql | 0 .../src/main/resources/dbscripts/oracle.sql | 0 .../main/resources/dbscripts/postgresql.sql | 0 .../resources/devicetypes/raspberrypi.xml | 0 .../src/main/resources/p2.inf | 0 .../raspberrypi-plugin-feature/pom.xml | 0 .../pom.xml | 0 .../resources/advanced_agent/cep_query.txt | 0 .../advanced_agent/deviceConfig.properties | 0 .../advanced_agent/sketch.properties | 0 .../resources/advanced_agent/start-device.sh | 0 .../resources/agent/deviceConfig.properties | 0 .../main/resources/agent/sketch.properties | 0 .../src/main/resources/agent/start-device.sh | 0 .../resources/agent/virtual_firealarm.jks | Bin .../src/main/resources/build.properties | 0 .../src/main/resources/certs/wso2certs.jks | Bin .../main/resources/conf/virtual_firealarm.xml | 0 .../virtual_firealarm-datasources.xml | 0 .../src/main/resources/dbscripts/h2.sql | 0 .../src/main/resources/dbscripts/mssql.sql | 0 .../src/main/resources/dbscripts/mysql.sql | 0 .../src/main/resources/dbscripts/oracle.sql | 0 .../main/resources/dbscripts/postgresql.sql | 0 .../devicetypes/virtual_firealarm.xml | 0 .../src/main/resources/p2.inf | 0 .../virtual-fire-alarm-plugin-feature/pom.xml | 0 .../pom.xml | 38 +- .../src/main/resources/build.properties | 0 .../src/main/resources/p2.inf | 4 + .../main/resources/websocket-validation.xml | 4 +- features/extensions-feature/pom.xml | 1 + .../src/main/resources/p2.inf | 4 - .../pom.xml | 137 - .../src/main/resources/build.properties | 19 - .../email/templates/user-enrollment.vm | 71 - .../email/templates/user-registration.vm | 81 - .../src/main/resources/p2.inf | 5 - .../iot-base-plugin-feature/pom.xml | 41 - .../pom.xml | 59 - .../iot-devicetypes-feature/pom.xml | 20 - .../pom.xml | 18 + .../main/resources/devicetypes/android.xml | 37 + .../src/main/resources/p2.inf | 5 +- .../pom.xml | 158 - .../src/main/resources/build.properties | 1 - .../src/main/resources/conf/mobile-config.xml | 35 - .../dbscripts/plugins/android/h2.sql | 31 - .../dbscripts/plugins/android/mssql.sql | 32 - .../dbscripts/plugins/android/mysql.sql | 32 - .../dbscripts/plugins/android/oracle.sql | 51 - .../dbscripts/plugins/android/postgresql.sql | 30 - .../resources/dbscripts/plugins/ios/h2.sql | 33 - .../resources/dbscripts/plugins/ios/mssql.sql | 35 - .../resources/dbscripts/plugins/ios/mysql.sql | 33 - .../dbscripts/plugins/ios/oracle.sql | 53 - .../dbscripts/plugins/ios/postgresql.sql | 33 - .../dbscripts/plugins/windows/h2.sql | 30 - .../dbscripts/plugins/windows/mssql.sql | 32 - .../dbscripts/plugins/windows/mysql.sql | 34 - .../dbscripts/plugins/windows/oracle.sql | 51 - .../dbscripts/plugins/windows/postgresql.sql | 31 - .../email/templates/user-enrollment.vm | 72 - .../email/templates/user-registration.vm | 82 - .../src/main/resources/p2.inf | 7 - .../mobile-base-plugin-feature/pom.xml | 40 - features/mobile-plugins-feature/pom.xml | 1 - .../pom.xml | 18 + .../main/resources/devicetypes/windows.xml | 37 + .../src/main/resources/p2.inf | 7 +- pom.xml | 32 +- 1185 files changed, 2429 insertions(+), 90785 deletions(-) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml (98%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml (100%) rename components/{iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics => analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics}/src/assembly/src.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/accelerometer_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/accelerometer_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/org_wso2_iot_devices_accelerometer.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/org.wso2.iot.devices.accelerometer_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/battery_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/battery_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/org_wso2_iot_devices_battery.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/org.wso2.iot.devices.battery_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/gps_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/gps_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/org_wso2_iot_devices_gps.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/org.wso2.iot.devices.gps_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/gravity_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/gravity_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/org_wso2_iot_devices_gravity.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/org.wso2.iot.devices.gravity_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/gyroscope_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/gyroscope_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/org_wso2_iot_devices_gyroscope.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/org.wso2.iot.devices.gyroscope_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/light_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/light_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/org_wso2_iot_devices_light.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/org.wso2.iot.devices.light_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/magnetic_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/magnetic_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/org_wso2_iot_devices_magnetic.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/org.wso2.iot.devices.magnetic_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/pressure_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/pressure_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/org_wso2_iot_devices_pressure.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/org.wso2.iot.devices.pressure_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/proximity_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/proximity_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/org_wso2_iot_devices_proximity.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/org.wso2.iot.devices.proximity_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/rotation_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/rotation_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/org_wso2_iot_devices_rotation.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/org.wso2.iot.devices.rotation_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/speed_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/org_wso2_iot_devices_speed.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/org.wso2.iot.devices.speed_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/temperature_publisher.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/temperature_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/temperature_script.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/org_wso2_iot_devices_temperature.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/org.wso2.iot.devices.temperature_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/artifacts.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/turn_receiver.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/org_wso2_iot_devices_turn.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/artifact.xml (100%) rename components/{iot-plugins => analytics}/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/org.wso2.iot.devices.turn_1.0.0.json (100%) rename components/{iot-plugins => analytics}/iot-analytics/pom.xml (96%) create mode 100644 components/analytics/pom.xml rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorDataReader.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedDataReader.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml (100%) rename components/{iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics => device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics}/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/android_sense_execution.siddhiql (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml (95%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/org.wso2.iot.android.sense_1.0.0.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/artifacts.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/word_count_receiver.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/word_count_script.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/org_wso2_iot_devices_wordcount.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/artifact.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/org.wso2.iot.devices.wordcount_1.0.0.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json (100%) rename components/{iot-plugins => device-types}/androidsense-plugin/pom.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml (100%) rename components/{iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics => device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics}/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml (96%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs (100%) rename components/{iot-plugins => device-types}/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json (100%) rename components/{iot-plugins => device-types}/arduino-plugin/pom.xml (100%) rename components/{iot-plugins => device-types}/pom.xml (94%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/artifact.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml (95%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/artifact.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/org.wso2.iot.raspberrypi_1.0.0.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui => device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui}/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json (100%) rename components/{iot-plugins => device-types}/raspberrypi-plugin/pom.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/Bootstrap.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/http/FireAlarmHTTPCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/mqtt/FireAlarmMQTTCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/xmpp/FireAlarmXMPPCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConfiguration.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConstants.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentUtilOperations.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/enrollment/EnrollmentManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/exception/AgentCoreOperationException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/sidhdhi/SidhdhiQuery.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/CommunicationUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandlerException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/http/HTTPTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/mqtt/MQTTTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/xmpp/XMPPTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/VirtualHardwareManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/ui/AgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-off.gif (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-on.gif (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/cep_query.txt (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/deviceConfig.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/fireAlarmSound.mid (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/build.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/manifest.mf (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/build-impl.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/genfiles.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/bulb-on.jpg (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmServiceUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml (97%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java (96%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java (96%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/pom.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServer.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServerImpl.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/exception/VirtualFireAlarmException.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/VirtualFireAlarmServiceUtils.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/ContentType.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/SCEPOperation.java (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/META-INF/webapp-classloading.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/cxf-servlet.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml (100%) rename components/{iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui => device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui}/src/assembly/src.xml (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json (100%) rename components/{iot-plugins => device-types}/virtual-fire-alarm-plugin/pom.xml (97%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml (98%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/ApplicationOperationsImpl.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/internal/DeviceApplicationServiceComponent.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileApp.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileAppTypes.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AndroidApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AppStoreApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/EnterpriseApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/WebApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/AppStoreApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/EnterpriseApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/IOSApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/RemoveApplication.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/WebClip.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/common/DeviceApplicationException.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/AndroidApplicationOperationUtil.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/IOSApplicationOperationUtil.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMAppConstants.java (100%) rename components/extensions/{ => appm-connector}/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMServiceAPIUtils.java (100%) rename components/{mobile-plugins/mobile-base-plugin => extensions/appm-connector}/pom.xml (85%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension}/pom.xml (88%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/extension/ContentInfo.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/extension/ContentTransformer.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/extension/ContentValidator.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/extension/DefaultContentTransformer.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/extension/DefaultContentValidator.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http}/pom.xml (88%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/HTTPEventAdapter.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/HTTPEventAdapterFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/HTTPMessageServlet.java (91%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/exception/HTTPContentInitializationException.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/internal/InputAdapterServiceComponent.java (91%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http}/internal/InputAdapterServiceDataHolder.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/jwt/JWTAuthenticator.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/oauth/OAuthAuthenticator.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/oauth/exception/OAuthTokenValidationException.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/util/AuthenticationInfo.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/util/HTTPContentValidator.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/http/util/HTTPEventAdapterConstants.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt}/input/adapter/http/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt}/pom.xml (89%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/MQTTEventAdapter.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/MQTTEventAdapterFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/exception/MQTTContentInitializationException.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/internal/InputAdapterServiceComponent.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt}/internal/InputAdapterServiceDataHolder.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/MQTTAdapterListener.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/MQTTContentValidator.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/MQTTEventAdapterConstants.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/MQTTUtil.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/PropertyUtils.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/mqtt/util/RegistrationProfile.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt}/input/adapter/mqtt/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp}/pom.xml (86%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/XMPPEventAdapter.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/XMPPEventAdapterFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/exception/XMPPContentInitializationException.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/internal/InputAdapterServiceComponent.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp}/internal/InputAdapterServiceDataHolder.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/util/XMPPAdapterListener.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/util/XMPPEventAdapterConstants.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt}/input/adapter/xmpp/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt}/pom.xml (87%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/MQTTEventAdapter.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/MQTTEventAdapterFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java (92%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/util/MQTTAdapterPublisher.java (99%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/util/MQTTEventAdapterConstants.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/util/MQTTUtil.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/mqtt/util/RegistrationProfile.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt}/output/adapter/mqtt/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint}/pom.xml (88%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint}/SubscriptionEndpoint.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint}/SuperTenantSubscriptionEndpoint.java (92%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint}/TenantSubscriptionEndpoint.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint}/util/ServiceHolder.java (62%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint}/util/UIConstants.java (89%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint}/src/main/webapp/WEB-INF/web.xml (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket}/pom.xml (91%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/UIEventAdapter.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/UIEventAdapterFactory.java (91%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/UIOutputCallbackControllerService.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/UIOutputCallbackControllerServiceImpl.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/AuthenticationInfo.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/Authenticator.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/OAuthAuthenticator.java (83%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/oauth/OAuthTokenValdiator.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/oauth/OAuthTokenValidaterStubFactory.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authentication/oauth/exception/OAuthTokenValidationException.java (93%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authorization/Authorizer.java (86%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/authorization/DeviceAuthorizer.java (85%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/Authenticator.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/Authorizer.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/Properties.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/Property.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/WebsocketConfig.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/WebsocketValidationConfigs.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/config/WebsocketValidationConfigurationFailedException.java (95%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/constants/WebsocketConstants.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/internal/UIEventAdaptorServiceDataHolder.java (94%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/internal/UILocalEventAdapterServiceComponent.java (81%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/service/WebsocketValidationService.java (78%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/service/WebsocketValidationServiceImpl.java (84%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/util/UIEventAdapterConstants.java (89%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/util/WebSocketSessionRequest.java (97%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket}/util/WebsocketUtils.java (89%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/ui => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/websocket}/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp}/pom.xml (83%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/XMPPEventAdapter.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/XMPPEventAdapterFactory.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java (92%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/util/XMPPAdapterPublisher.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/util/XMPPEventAdapterConstants.java (98%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt}/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java (96%) rename components/{iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot => extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt}/output/adapter/xmpp/i18n/Resources.properties (100%) rename components/{iot-plugins/iot-base-plugin => extensions/cdmf-transport-adapters}/pom.xml (70%) delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/pom.xml delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/api/policy-api.jag delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/public/js/validate-register.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/public/js/operation-bar.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/css/codemirror.css delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/codemirror.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/policy-edit.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/sql.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/css/codemirror.css delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/codemirror.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/policy-view.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/sql.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/css/codemirror.css delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/codemirror.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/policy-create.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/sql.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.js delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.json delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/pom.xml delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/URLPrinterStartupHandler.java delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterDataHolder.java delete mode 100644 components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterServiceComponent.java delete mode 100644 components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/MobileDeviceConfigurationManager.java (93%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/MobileDeviceManagementConfig.java (95%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/MobileDeviceManagementRepository.java (88%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/datasource/DataSourceConfigAdapter.java (96%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/datasource/JNDILookupDefinition.java (96%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/datasource/MobileDataSourceConfig.java (95%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/config/datasource/MobileDataSourceConfigurations.java (95%) create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AbstractMobileDeviceManagementDAOFactory.java rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dao/MobileDeviceDAO.java (94%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dao/MobileDeviceManagementDAOException.java (97%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dao/MobileDeviceManagementDAOFactory.java (93%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dao/MobileFeatureDAO.java (96%) create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceMgtPluginException.java rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dao/impl/MobileFeatureDAOImpl.java (96%) create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/util/MobileDeviceManagementDAOUtil.java rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileDevice.java (98%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileDeviceOperationMapping.java (96%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileFeature.java (96%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileFeatureProperty.java (94%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileOperation.java (96%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl}/dto/MobileOperationProperty.java (95%) create mode 100644 components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/MobileDeviceManagementUtil.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/pom.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/assembly/src.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/public/js/dashboard.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/public/js/device-listing.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/css/daterangepicker.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/daterangepicker.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/moment.min.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/js/operation-bar.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-android.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-ios.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/operations.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/public/js/operation-mod.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/device-detail.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/load-map.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/applications-list.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/operations-log.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/policy-compliance.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/css/leaflet.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/layers-2x.png delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/layers.png delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/marker-icon-2x.png delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/marker-icon.png delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/marker-shadow.png delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/leaflet.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/js/policy-create.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-android.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-ios.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-windows.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/js/edit.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-android-edit.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-ios-edit.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-windows-edit.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/js/view.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-android-view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-ios-view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-windows-view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/js/policy-create.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-android.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-ios.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-windows.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/constants.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-check.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handlers.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-protected-service-invokers.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/ua-parser.min.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/utility.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.eot delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/js/responsive-text.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/less/theme-variables.less delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/public/css/wizard-stepper.css delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/pom.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/URLPrinterStartupHandler.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterDataHolder.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterStartupHandlerServiceComponent.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/pom.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/AbstractMobileOperationManager.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceNotAvailableException.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobilePluginConstants.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementDataHolder.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementServiceComponent.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/MobileDeviceManagementConfigTests.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/DBTypes.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfiguration.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/dao/util/MobileDatabaseUtils.java delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-config.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-publisher-config.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-apis-config.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-ds-config.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-jndi-config.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-mgt-repo.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/schema/MobileDeviceManagementConfigSchema.xsd delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/log4j.properties delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/sql/h2.sql delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testdbconfig.xml delete mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testng.xml rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobileDeviceMgtPluginException.java => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/exception/WindowsDeviceMgtPluginException.java} (73%) create 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 create 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 create 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 create 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 create 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 create 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 rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfigurations.java => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/datasource/MobileDataSourceConfigurations.java} (53%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl}/dao/AbstractMobileDeviceManagementDAOFactory.java (87%) create 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 create 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 rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceListener.java => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/MobileDeviceManagementDAOFactory.java} (77%) create 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 rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl}/dao/util/MobileDeviceManagementDAOUtil.java (89%) create 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 create 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 create 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 create 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 create 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 create 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 rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl}/util/MobileDeviceManagementSchemaInitializer.java (91%) rename components/mobile-plugins/{mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile => windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl}/util/MobileDeviceManagementUtil.java (90%) 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 rename features/{iot-plugins-feature/iot-analytics-feature => analytics-feature}/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml (98%) rename features/{iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature => analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature}/src/main/resources/build.properties (100%) rename features/{iot-plugins-feature/iot-analytics-feature => analytics-feature}/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/p2.inf (100%) rename features/{iot-plugins-feature/iot-analytics-feature => analytics-feature}/pom.xml (89%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml (100%) rename features/{iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature => device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature}/src/main/resources/build.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/datasources/androidsense-datasources.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/h2.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mssql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mysql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/oracle.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/postgresql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/devicetypes/android_sense.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/p2.inf (100%) rename features/{iot-plugins-feature => device-types-feature}/androidsense-plugin-feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.h (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.ino (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/Connect.ino (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PollServer.ino (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PushData.ino (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/sketch.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/build.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/devicetypes/arduino.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/p2.inf (100%) rename features/{iot-plugins-feature => device-types-feature}/arduino-plugin-feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/pom.xml (89%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/README.md (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/deviceConfig.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/sketch.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryStats.log (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/httpServer.py (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/iotUtils.py (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/running_mode.py (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/testAgent.sh (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/build.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/datasources/raspberrypi-datasources.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/h2.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mssql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mysql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/oracle.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/postgresql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/devicetypes/raspberrypi.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/p2.inf (100%) rename features/{iot-plugins-feature => device-types-feature}/raspberrypi-plugin-feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/cep_query.txt (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/deviceConfig.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/sketch.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/start-device.sh (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/deviceConfig.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/sketch.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/start-device.sh (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/virtual_firealarm.jks (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/build.properties (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/certs/wso2certs.jks (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/conf/virtual_firealarm.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/datasources/virtual_firealarm-datasources.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/h2.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mssql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mysql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/oracle.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/postgresql.sql (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/devicetypes/virtual_firealarm.xml (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/p2.inf (100%) rename features/{iot-plugins-feature => device-types-feature}/virtual-fire-alarm-plugin-feature/pom.xml (100%) rename features/{iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature => extensions-feature/org.wso2.carbon.device.mgt.adapter.feature}/pom.xml (84%) rename features/{iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature => extensions-feature/org.wso2.carbon.device.mgt.adapter.feature}/src/main/resources/build.properties (100%) create mode 100644 features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf rename features/{iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature => extensions-feature/org.wso2.carbon.device.mgt.adapter.feature}/src/main/resources/websocket-validation.xml (85%) delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/p2.inf delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/pom.xml delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/build.properties delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-enrollment.vm delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-registration.vm delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/p2.inf delete mode 100644 features/iot-plugins-feature/iot-base-plugin-feature/pom.xml delete mode 100644 features/iot-plugins-feature/iot-devicetypes-feature/org.wso2.carbon.device.mgt.iot.devicetypes.feature/pom.xml delete mode 100644 features/iot-plugins-feature/iot-devicetypes-feature/pom.xml create mode 100644 features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/pom.xml delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/build.properties delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/conf/mobile-config.xml delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/h2.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mssql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mysql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/oracle.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/postgresql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/h2.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mssql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mysql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/oracle.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/postgresql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/h2.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mssql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mysql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/oracle.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/postgresql.sql delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-enrollment.vm delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-registration.vm delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/p2.inf delete mode 100644 features/mobile-plugins-feature/mobile-base-plugin-feature/pom.xml create mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/devicetypes/windows.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml similarity index 98% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml index 537f349cc..2582b2686 100644 --- a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml +++ b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/build.xml @@ -17,7 +17,7 @@ ~ under the License. --> - + diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/pom.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/assembly/src.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/assembly/src.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/assembly/src.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/accelerometer_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/accelerometer_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/accelerometer_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/accelerometer_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/accelerometer_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/accelerometer_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/accelerometer_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/accelerometer_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/org_wso2_iot_devices_accelerometer.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/org_wso2_iot_devices_accelerometer.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/org_wso2_iot_devices_accelerometer.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_store/org_wso2_iot_devices_accelerometer.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/org.wso2.iot.devices.accelerometer_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/org.wso2.iot.devices.accelerometer_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/org.wso2.iot.devices.accelerometer_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/accelerometer_stream/org.wso2.iot.devices.accelerometer_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/accelerometer_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/battery_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/battery_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/battery_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_receiver/battery_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/battery_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/battery_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/battery_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_script/battery_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/org_wso2_iot_devices_battery.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/org_wso2_iot_devices_battery.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/org_wso2_iot_devices_battery.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_store/org_wso2_iot_devices_battery.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/org.wso2.iot.devices.battery_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/org.wso2.iot.devices.battery_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/org.wso2.iot.devices.battery_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/battery_sensor/battery_stream/org.wso2.iot.devices.battery_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/gps_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/gps_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/gps_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_receiver/gps_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/gps_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/gps_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/gps_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_script/gps_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/org_wso2_iot_devices_gps.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/org_wso2_iot_devices_gps.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/org_wso2_iot_devices_gps.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_store/org_wso2_iot_devices_gps.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/org.wso2.iot.devices.gps_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/org.wso2.iot.devices.gps_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/org.wso2.iot.devices.gps_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gps_sensor/gps_stream/org.wso2.iot.devices.gps_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/gravity_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/gravity_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/gravity_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_receiver/gravity_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/gravity_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/gravity_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/gravity_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_script/gravity_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/org_wso2_iot_devices_gravity.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/org_wso2_iot_devices_gravity.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/org_wso2_iot_devices_gravity.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_store/org_wso2_iot_devices_gravity.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/org.wso2.iot.devices.gravity_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/org.wso2.iot.devices.gravity_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/org.wso2.iot.devices.gravity_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gravity_sensor/gravity_stream/org.wso2.iot.devices.gravity_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/gyroscope_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/gyroscope_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/gyroscope_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_receiver/gyroscope_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/gyroscope_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/gyroscope_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/gyroscope_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_script/gyroscope_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/org_wso2_iot_devices_gyroscope.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/org_wso2_iot_devices_gyroscope.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/org_wso2_iot_devices_gyroscope.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_store/org_wso2_iot_devices_gyroscope.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/org.wso2.iot.devices.gyroscope_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/org.wso2.iot.devices.gyroscope_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/org.wso2.iot.devices.gyroscope_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/gyroscope_sensor/gyroscope_stream/org.wso2.iot.devices.gyroscope_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/light_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/light_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/light_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_receiver/light_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/light_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/light_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/light_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_script/light_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/org_wso2_iot_devices_light.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/org_wso2_iot_devices_light.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/org_wso2_iot_devices_light.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_store/org_wso2_iot_devices_light.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/org.wso2.iot.devices.light_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/org.wso2.iot.devices.light_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/org.wso2.iot.devices.light_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/light_sensor/light_stream/org.wso2.iot.devices.light_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/magnetic_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/magnetic_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/magnetic_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_receiver/magnetic_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/magnetic_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/magnetic_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/magnetic_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_script/magnetic_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/org_wso2_iot_devices_magnetic.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/org_wso2_iot_devices_magnetic.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/org_wso2_iot_devices_magnetic.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_store/org_wso2_iot_devices_magnetic.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/org.wso2.iot.devices.magnetic_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/org.wso2.iot.devices.magnetic_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/org.wso2.iot.devices.magnetic_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/magnetic_sensor/magnetic_stream/org.wso2.iot.devices.magnetic_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/pressure_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/pressure_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/pressure_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_receiver/pressure_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/pressure_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/pressure_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/pressure_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_script/pressure_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/org_wso2_iot_devices_pressure.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/org_wso2_iot_devices_pressure.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/org_wso2_iot_devices_pressure.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_store/org_wso2_iot_devices_pressure.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/org.wso2.iot.devices.pressure_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/org.wso2.iot.devices.pressure_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/org.wso2.iot.devices.pressure_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/pressure_sensor/pressure_stream/org.wso2.iot.devices.pressure_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/proximity_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/proximity_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/proximity_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_receiver/proximity_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/proximity_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/proximity_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/proximity_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_script/proximity_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/org_wso2_iot_devices_proximity.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/org_wso2_iot_devices_proximity.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/org_wso2_iot_devices_proximity.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_store/org_wso2_iot_devices_proximity.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/org.wso2.iot.devices.proximity_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/org.wso2.iot.devices.proximity_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/org.wso2.iot.devices.proximity_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/proximity_sensor/proximity_stream/org.wso2.iot.devices.proximity_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/rotation_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/rotation_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/rotation_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_receiver/rotation_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/rotation_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/rotation_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/rotation_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_script/rotation_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/org_wso2_iot_devices_rotation.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/org_wso2_iot_devices_rotation.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/org_wso2_iot_devices_rotation.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_store/org_wso2_iot_devices_rotation.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/org.wso2.iot.devices.rotation_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/org.wso2.iot.devices.rotation_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/org.wso2.iot.devices.rotation_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/rotation_sensor/rotation_stream/org.wso2.iot.devices.rotation_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_publisher/speed_publisher.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/speed_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/speed_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/speed_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_receiver/speed_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/org_wso2_iot_devices_speed.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/org_wso2_iot_devices_speed.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/org_wso2_iot_devices_speed.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_store/org_wso2_iot_devices_speed.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/org.wso2.iot.devices.speed_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/org.wso2.iot.devices.speed_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/org.wso2.iot.devices.speed_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/speed_sensor/speed_stream/org.wso2.iot.devices.speed_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/temperature_publisher.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/temperature_publisher.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/temperature_publisher.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_publisher/temperature_publisher.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/temperature_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/temperature_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/temperature_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_receiver/temperature_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/temperature_script.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/temperature_script.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/temperature_script.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_script/temperature_script.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/org_wso2_iot_devices_temperature.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/org_wso2_iot_devices_temperature.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/org_wso2_iot_devices_temperature.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_store/org_wso2_iot_devices_temperature.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/org.wso2.iot.devices.temperature_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/org.wso2.iot.devices.temperature_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/org.wso2.iot.devices.temperature_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/temperature_sensor/temperature_stream/org.wso2.iot.devices.temperature_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/artifacts.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/artifacts.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/artifacts.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/artifacts.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_publisher/turn_publisher.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/turn_receiver.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/turn_receiver.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/turn_receiver.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_receiver/turn_receiver.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/org_wso2_iot_devices_turn.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/org_wso2_iot_devices_turn.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/org_wso2_iot_devices_turn.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_store/org_wso2_iot_devices_turn.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/artifact.xml b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/artifact.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/artifact.xml rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/artifact.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/org.wso2.iot.devices.turn_1.0.0.json b/components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/org.wso2.iot.devices.turn_1.0.0.json similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/org.wso2.iot.devices.turn_1.0.0.json rename to components/analytics/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/main/resources/carbonapps/turn_sensor/turn_stream/org.wso2.iot.devices.turn_1.0.0.json diff --git a/components/iot-plugins/iot-analytics/pom.xml b/components/analytics/iot-analytics/pom.xml similarity index 96% rename from components/iot-plugins/iot-analytics/pom.xml rename to components/analytics/iot-analytics/pom.xml index 4ed9a06fd..d62308eab 100644 --- a/components/iot-plugins/iot-analytics/pom.xml +++ b/components/analytics/iot-analytics/pom.xml @@ -21,7 +21,7 @@ org.wso2.carbon.devicemgt-plugins - iot-plugins + analytics 2.2.5-SNAPSHOT ../pom.xml diff --git a/components/analytics/pom.xml b/components/analytics/pom.xml new file mode 100644 index 000000000..dbf37fa54 --- /dev/null +++ b/components/analytics/pom.xml @@ -0,0 +1,58 @@ + + + + + + + org.wso2.carbon.devicemgt-plugins + carbon-device-mgt-plugins-parent + 2.2.5-SNAPSHOT + ../../pom.xml + + + 4.0.0 + analytics + pom + WSO2 Carbon - Mobile Plugins Extensions + http://wso2.org + + + iot-analytics + + + + + + + org.apache.felix + maven-scr-plugin + 1.7.2 + + + generate-scr-scrdescriptor + + scr + + + + + + + + diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/build.gradle diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/AndroidManifest.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/BuildConfig.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/Manifest.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/gen/agent/sense/android/iot/carbon/wso2/org/wso2_senseagent/R.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/RegisterActivity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconDetactorService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconScanedData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/BeaconServiceUtility.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/beacon/MonitoringActivity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BeaconMonitoringActivity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeDeviceStore.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothLeScanner.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/BluetoothUtils.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/CsvWriterHelper.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/LeDeviceListAdapter.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/TimeFormatter.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/bmonitor/UtcDateFormatter.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/constants/SenseConstants.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherReceiver.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/DataPublisherService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/Event.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/AndroidSenseMQTTHandler.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/MQTTTransportHandler.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandler.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/data/publisher/mqtt/transport/TransportHandlerException.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseScheduleReceiver.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/SenseService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/DataReader.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Location/LocationDataReader.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/SenseDataCollector.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorDataReader.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorDataReader.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Sensor/SensorDataReader.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedDataReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedDataReader.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedDataReader.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/Speed/SpeedDataReader.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/event/streams/battery/BatteryDataReceiver.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/ActivitySelectSensor.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/datastore/TempStore.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/RealTimeSensorChangeReceiver.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensor.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/event/realtimesensor/RealTimeSensorReader.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/AvailableSensorsInDevice.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/sensorlisting/SupportedSensors.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/adaptor/SensorViewAdaptor.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/realtimeviewer/view/sensor/selector/SelectSensorDialog.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/IVoiceControl.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/WordRecognitionActivity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ListeningActivity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/ProcessWords.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/StringSimilarity.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/VoiceRecognitionListener.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/speech/detector/util/WordData.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/LocalRegistry.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClient.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseClientAsyncExecutor.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseDataHolder.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseUtils.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/SenseWakeLock.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AccessTokenInfo.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidConfiguration.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/AndroidSenseManagerService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiApplicationRegistrationService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/ApiRegistrationProfile.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/DynamicClientRegistrationService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthApplicationInfo.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/OAuthRequestInterceptor.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegisterInfo.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/RegistrationProfile.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/java/org/wso2/carbon/iot/android/sense/util/dto/TokenIssuerService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/beacon_red.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/mic.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/pushtoserver.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/round_button.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/sensor.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/side_nav_bar.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/drawable/wso2logo.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_activity_select_sensor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_beacon_monitoring.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_monitor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_register.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_sense_settings.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/activity_speech_sense_main.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/app_bar_activity_select_sensor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/beacon_activity_list.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/content_activity_select_sensor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/display_sensor_values.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/fragment_select_sensor_dialog.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/list_item_device.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/nav_header_activity_select_sensor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/tupple_monitoring.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/layout/web_view_activity.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_activity_select_sensor_drawer.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/activity_select_sensor.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/menu/menu_sense_settings.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-hdpi/wso2logo.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/client_truststore.bks diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/raw/wso2carbon.cer diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-v21/styles.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values-w820dp/dimens.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/device.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/dimens.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/strings_activity_register.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/app/src/main/res/values/styles.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/build.gradle diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradle/wrapper/gradle-wrapper.properties diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/gradlew.bat diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/pom.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.agent/settings.gradle diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/build.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/pom.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/assembly/src.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/assembly/src.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/assembly/src.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/android_sense_execution.siddhiql b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/android_sense_execution.siddhiql similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/android_sense_execution.siddhiql rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/android_sense_execution.siddhiql diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_execution/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/android_sense_publisher.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_publisher/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml similarity index 95% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml index 4b724a35b..4ba6b5ff9 100644 --- a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/android_sense_receiver.xml @@ -21,7 +21,7 @@ carbon.super/android_sense/+/data admin - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTContentValidator + org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTContentValidator default https://localhost:${carbon.https.port}/dynamic-client-web/register tcp://${mqtt.broker.host}:${mqtt.broker.port} diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_receiver/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/org.wso2.iot.android.sense_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/org.wso2.iot.android.sense_1.0.0.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/org.wso2.iot.android.sense_1.0.0.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/android_sense_stream/org.wso2.iot.android.sense_1.0.0.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/androidsense/artifacts.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/artifacts.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/artifacts.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/artifacts.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/artifacts.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/word_count_receiver.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/word_count_receiver.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/word_count_receiver.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_receiver/word_count_receiver.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/word_count_script.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/word_count_script.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/word_count_script.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_script/word_count_script.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/org_wso2_iot_devices_wordcount.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/org_wso2_iot_devices_wordcount.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/org_wso2_iot_devices_wordcount.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_store/org_wso2_iot_devices_wordcount.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/artifact.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/artifact.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/artifact.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/artifact.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/org.wso2.iot.devices.wordcount_1.0.0.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/org.wso2.iot.devices.wordcount_1.0.0.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/org.wso2.iot.devices.wordcount_1.0.0.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.analytics/src/main/resources/carbonapps/word_count/word_count_stream/org.wso2.iot.devices.wordcount_1.0.0.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/pom.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseService.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/AndroidSenseServiceImpl.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/constants/AndroidSenseConstants.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/APIUtil.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/AndroidConfiguration.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/java/org/wso2/carbon/device/mgt/iot/androidsense/service/impl/util/SensorRecord.java diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/permissions.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/META-INF/webapp-classloading.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/cxf-servlet.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.api/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/pom.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/assembly/src.xml diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/analytics-view.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.analytics-view/public/js/android_sense.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.hbs diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/android-sense-icon.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/public/images/thumb.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.hbs diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/configuration.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.platform.configuration/public/js/platform-configuration.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/moment.min.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/socket.io.min.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/private/config.json diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/asset/androidsense.apk diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/css/styles.css diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/android-sense-icon.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/myDevices_analytics.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/publishDataView.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/registerView.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/selectSensorView.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/images/thumb.png diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/download.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/public/js/jquery.validate.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.js diff --git a/components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json similarity index 100% rename from components/iot-plugins/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json rename to components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.json diff --git a/components/iot-plugins/androidsense-plugin/pom.xml b/components/device-types/androidsense-plugin/pom.xml similarity index 100% rename from components/iot-plugins/androidsense-plugin/pom.xml rename to components/device-types/androidsense-plugin/pom.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/build.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/pom.xml diff --git a/components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/assembly/src.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/iot-analytics/org.wso2.carbon.device.mgt.iot.analytics/src/assembly/src.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/assembly/src.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/arduino_execution.siddhiql diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_execution/artifact.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml similarity index 96% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml index 568df1d66..8edadbdf6 100644 --- a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml +++ b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/arduino_receiver.xml @@ -20,7 +20,7 @@ 2 admin - org.wso2.carbon.device.mgt.iot.input.adapter.http.util.HTTPContentValidator + org.wso2.carbon.device.mgt.input.adapter.http.util.HTTPContentValidator default all 100 diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_receiver/artifact.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/artifact.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/arduino_stream/org.wso2.iot.arduino_1.0.0.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.analytics/src/main/resources/carbonapps/Arduino/artifacts.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/pom.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoService.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/ArduinoServiceImpl.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/constants/ArduinoConstants.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/dto/SensorRecord.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/exception/ArduinoException.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/APIUtil.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ArduinoServiceUtils.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipArchive.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/java/org/wso2/carbon/device/mgt/iot/arduino/service/impl/util/ZipUtil.java diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/permissions.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/META-INF/webapp-classloading.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/cxf-servlet.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.api/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/pom.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/assembly/src.xml diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/analytics-view.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.analytics-view/public/js/arduino.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.hbs diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/device-view.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/ardunio-icon.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.device-view/public/images/thumb.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.hbs diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/configuration.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.platform.configuration/public/js/platform-configuration.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/analytics-view.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/device-stats.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/moment.min.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.realtime.analytics-view/public/js/socket.io.min.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/private/config.json diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/css/styles.css diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/ardunio-icon.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/myDevices_analytics.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/schematicsGuide.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/images/thumb.png diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/download.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/public/js/jquery.validate.js diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.hbs diff --git a/components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json b/components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json similarity index 100% rename from components/iot-plugins/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json rename to components/device-types/arduino-plugin/org.wso2.carbon.device.mgt.iot.arduino.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.arduino.type-view/type-view.json diff --git a/components/iot-plugins/arduino-plugin/pom.xml b/components/device-types/arduino-plugin/pom.xml similarity index 100% rename from components/iot-plugins/arduino-plugin/pom.xml rename to components/device-types/arduino-plugin/pom.xml diff --git a/components/iot-plugins/pom.xml b/components/device-types/pom.xml similarity index 94% rename from components/iot-plugins/pom.xml rename to components/device-types/pom.xml index 2a1a3ed14..c252c3393 100644 --- a/components/iot-plugins/pom.xml +++ b/components/device-types/pom.xml @@ -27,7 +27,7 @@ 4.0.0 - iot-plugins + device-types pom WSO2 Carbon - IoT Plugins http://wso2.org @@ -37,8 +37,6 @@ arduino-plugin raspberrypi-plugin virtual-fire-alarm-plugin - iot-base-plugin - iot-analytics diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/build.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/pom.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/assembly/src.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/artifacts.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/artifact.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_execution/raspberrypi_execution.siddhiql diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/artifact.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/artifact.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/artifact.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/artifact.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml similarity index 95% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml index 99c63f458..65846c0b4 100644 --- a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml +++ b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_receiver/raspberrypi_receiver.xml @@ -20,7 +20,7 @@ carbon.super/raspberrypi/+/temperature admin - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTContentValidator + org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTContentValidator default https://localhost:${carbon.https.port}/dynamic-client-web/register tcp://${mqtt.broker.host}:${mqtt.broker.port} diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/artifact.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/artifact.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/artifact.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/artifact.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/org.wso2.iot.raspberrypi_1.0.0.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/org.wso2.iot.raspberrypi_1.0.0.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/org.wso2.iot.raspberrypi_1.0.0.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.analytics/src/main/resources/carbonapps/raspberrypi/raspberrypi_stream/org.wso2.iot.raspberrypi_1.0.0.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/pom.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiService.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/RaspberryPiServiceImpl.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/constants/RaspberrypiConstants.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/dto/SensorRecord.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/exception/RaspberrypiException.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/APIUtil.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipArchive.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/java/org/wso2/carbon/device/mgt/iot/raspberrypi/service/impl/util/ZipUtil.java diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/permissions.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/META-INF/webapp-classloading.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/cxf-servlet.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.api/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/pom.xml diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/assembly/src.xml b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/assembly/src.xml rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/assembly/src.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/analytics-view.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.analytics-view/public/js/raspberrypi.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.hbs diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/device-view.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/respberry-icon.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.device-view/public/images/thumb.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.hbs diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/configuration.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.platform.configuration/public/js/platform-configuration.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/analytics-view.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/device-stats.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/moment.min.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.realtime.analytics-view/public/js/socket.io.min.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/private/config.json diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/css/styles.css diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/myDevices_analytics.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/respberry-icon.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/schematicsGuide.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/images/thumb.png diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/download.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/public/js/jquery.validate.js diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.hbs diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json b/components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json rename to components/device-types/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.raspberrypi.type-view/type-view.json diff --git a/components/iot-plugins/raspberrypi-plugin/pom.xml b/components/device-types/raspberrypi-plugin/pom.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/pom.xml rename to components/device-types/raspberrypi-plugin/pom.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/pom.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/Bootstrap.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/Bootstrap.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/Bootstrap.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/Bootstrap.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/http/FireAlarmHTTPCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/http/FireAlarmHTTPCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/http/FireAlarmHTTPCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/http/FireAlarmHTTPCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/mqtt/FireAlarmMQTTCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/mqtt/FireAlarmMQTTCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/mqtt/FireAlarmMQTTCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/mqtt/FireAlarmMQTTCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/xmpp/FireAlarmXMPPCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/xmpp/FireAlarmXMPPCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/xmpp/FireAlarmXMPPCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/communication/xmpp/FireAlarmXMPPCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConfiguration.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConfiguration.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConfiguration.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConstants.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConstants.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConstants.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentConstants.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentUtilOperations.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentUtilOperations.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentUtilOperations.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/core/AgentUtilOperations.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/enrollment/EnrollmentManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/enrollment/EnrollmentManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/enrollment/EnrollmentManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/enrollment/EnrollmentManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/exception/AgentCoreOperationException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/exception/AgentCoreOperationException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/exception/AgentCoreOperationException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/exception/AgentCoreOperationException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/sidhdhi/SidhdhiQuery.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/sidhdhi/SidhdhiQuery.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/sidhdhi/SidhdhiQuery.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/sidhdhi/SidhdhiQuery.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/CommunicationUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/CommunicationUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/CommunicationUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/CommunicationUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandlerException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandlerException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandlerException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportHandlerException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/TransportUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/http/HTTPTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/http/HTTPTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/http/HTTPTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/http/HTTPTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/mqtt/MQTTTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/mqtt/MQTTTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/mqtt/MQTTTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/mqtt/MQTTTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/xmpp/XMPPTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/xmpp/XMPPTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/xmpp/XMPPTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/transport/xmpp/XMPPTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/VirtualHardwareManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/VirtualHardwareManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/VirtualHardwareManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/VirtualHardwareManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/ui/AgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/ui/AgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/ui/AgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/advanced/virtual/ui/AgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-off.gif b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-off.gif similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-off.gif rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-off.gif diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-on.gif b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-on.gif similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-on.gif rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/alarm-on.gif diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/cep_query.txt b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/cep_query.txt similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/cep_query.txt rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/cep_query.txt diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/deviceConfig.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/deviceConfig.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/deviceConfig.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/deviceConfig.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/fireAlarmSound.mid b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/fireAlarmSound.mid similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/fireAlarmSound.mid rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/resources/fireAlarmSound.mid diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/build.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/build.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/build.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/build.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/manifest.mf b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/manifest.mf similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/manifest.mf rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/manifest.mf diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/build-impl.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/build-impl.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/build-impl.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/build-impl.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/genfiles.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/genfiles.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/genfiles.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/genfiles.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/private/private.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/nbproject/project.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/bulb-on.jpg b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/bulb-on.jpg similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/bulb-on.jpg rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/bulb-on.jpg diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.advanced.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/pom.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/Bootstrap.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/http/FireAlarmHTTPCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/mqtt/FireAlarmMQTTCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/communication/xmpp/FireAlarmXMPPCommunicator.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConfiguration.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentConstants.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/core/AgentUtilOperations.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/enrollment/EnrollmentManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/exception/AgentCoreOperationException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/CommunicationUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportHandlerException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/TransportUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/http/HTTPTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/mqtt/MQTTTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/transport/xmpp/XMPPTransportHandler.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/VirtualHardwareManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/agent/virtual/ui/AgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-off.gif diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/alarm-on.gif diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/deviceConfig.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/resources/fireAlarmSound.mid diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/build.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/manifest.mf diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/build-impl.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/genfiles.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/private/private.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.properties diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/nbproject/project.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/bulb-on.jpg diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/VirtualAgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.form diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.agent.impl/src/main/ui/src/org/wso2/carbon/device/mgt/iot/agent/virtual/ui/AgentUI.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/pom.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmService.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/VirtualFireAlarmServiceImpl.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/dto/SensorRecord.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/exception/VirtualFireAlarmException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/APIUtil.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmServiceUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmServiceUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmServiceUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmServiceUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/VirtualFireAlarmUtilConstants.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipArchive.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/ZipUtil.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/service/impl/util/util/Utils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/permissions.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/META-INF/webapp-classloading.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/cxf-servlet.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.api/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml similarity index 97% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml index 8877ec531..199db7e95 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/pom.xml @@ -68,7 +68,7 @@ javax.sql;resolution:=optional, org.wso2.carbon.device.mgt.common.*, org.wso2.carbon.device.mgt.common, - org.wso2.carbon.device.mgt.iot.*, + org.wso2.carbon.device.mgt.input.adapter.extension.*, org.wso2.carbon.device.mgt.extensions.feature.mgt.*, org.wso2.carbon.utils.*, org.wso2.carbon.context, @@ -141,7 +141,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension org.json.wso2 diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/DeviceManagementConfiguration.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/EventListenerConfiguration.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/VirtualFirealarmConfig.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/config/exception/VirtualFirealarmConfigurationException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/constants/VirtualFireAlarmConstants.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/exception/VirtualFirealarmDeviceMgtPluginException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFireAlarmUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmEventAdapterSubscription.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java similarity index 96% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java index 0cf2a6cfa..bf42dd578 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmMqttContentTransformer.java @@ -2,7 +2,7 @@ package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; import org.json.JSONObject; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmSecurityManager.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmStartupListener.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java similarity index 96% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java index 849091b74..20ae77f46 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java +++ b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/impl/VirtualFirealarmXmppContentTransformer.java @@ -2,7 +2,7 @@ package org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.impl; import org.json.JSONObject; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.constants.VirtualFireAlarmConstants; import org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin.exception.VirtualFirealarmDeviceMgtPluginException; diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementDataHolder.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/internal/VirtualFirealarmManagementServiceComponent.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/mqtt/MqttConfig.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppAccount.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppConfig.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.plugin/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/plugin/xmpp/XmppServerClient.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/pom.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/pom.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServer.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServer.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServer.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServer.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServerImpl.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServerImpl.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServerImpl.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/VirtualFireAlarmScepServerImpl.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/exception/VirtualFireAlarmException.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/exception/VirtualFireAlarmException.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/exception/VirtualFireAlarmException.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/exception/VirtualFireAlarmException.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/VirtualFireAlarmServiceUtils.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/VirtualFireAlarmServiceUtils.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/VirtualFireAlarmServiceUtils.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/VirtualFireAlarmServiceUtils.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/ContentType.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/ContentType.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/ContentType.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/ContentType.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/SCEPOperation.java b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/SCEPOperation.java similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/SCEPOperation.java rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/java/org/wso2/carbon/device/mgt/iot/virtualfirealarm/scep/service/impl/util/scep/SCEPOperation.java diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/META-INF/webapp-classloading.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/META-INF/webapp-classloading.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/META-INF/webapp-classloading.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/cxf-servlet.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/cxf-servlet.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/cxf-servlet.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/web.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/web.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.scep.api/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/pom.xml diff --git a/components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/assembly/src.xml b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml similarity index 100% rename from components/iot-plugins/raspberrypi-plugin/org.wso2.carbon.device.mgt.iot.raspberrypi.ui/src/assembly/src.xml rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/analytics-view.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.analytics-view/public/js/virtual_firealarm.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/device-view.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/firealarm-icon.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.device-view/public/images/thumb.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/configuration.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.platform.configuration/public/js/platform-configuration.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-edit/policy-edit.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-view/policy-view.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.policy-wizard/policy-wizard.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/analytics-view.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/device-stats.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/moment.min.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.realtime.analytics-view/public/js/socket.io.min.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/private/config.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/css/styles.css diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/firealarm-icon.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/myDevices_analytics.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/schematicsGuide.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/images/thumb.png diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/download.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/public/js/jquery.validate.js diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json b/components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json similarity index 100% rename from components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json rename to components/device-types/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.json diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/pom.xml b/components/device-types/virtual-fire-alarm-plugin/pom.xml similarity index 97% rename from components/iot-plugins/virtual-fire-alarm-plugin/pom.xml rename to components/device-types/virtual-fire-alarm-plugin/pom.xml index cb8636148..bca10e0d0 100644 --- a/components/iot-plugins/virtual-fire-alarm-plugin/pom.xml +++ b/components/device-types/virtual-fire-alarm-plugin/pom.xml @@ -29,7 +29,7 @@ 4.0.0 virtual-fire-alarm-plugin pom - WSO2 Carbon - Arduino Plugin + WSO2 Carbon - Virtual Fire Alarm Plugin http://wso2.org diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml similarity index 98% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml index 9e93253aa..a1a31bacb 100644 --- a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml +++ b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/pom.xml @@ -17,12 +17,12 @@ org.wso2.carbon.devicemgt-plugins - extensions + appm-connector 2.2.5-SNAPSHOT ../pom.xml + 4.0.0 - 2.2.5-SNAPSHOT org.wso2.carbon.appmgt.mdm.osgiconnector bundle WSO2 Carbon - App Manager WSO2 MDM OSGI Connector Component diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/ApplicationOperationsImpl.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/ApplicationOperationsImpl.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/ApplicationOperationsImpl.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/ApplicationOperationsImpl.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/internal/DeviceApplicationServiceComponent.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/internal/DeviceApplicationServiceComponent.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/internal/DeviceApplicationServiceComponent.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/internal/DeviceApplicationServiceComponent.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileApp.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileApp.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileApp.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileApp.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileAppTypes.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileAppTypes.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileAppTypes.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/MobileAppTypes.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AndroidApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AndroidApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AndroidApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AndroidApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AppStoreApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AppStoreApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AppStoreApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/AppStoreApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/EnterpriseApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/EnterpriseApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/EnterpriseApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/EnterpriseApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/WebApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/WebApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/WebApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/android/WebApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/AppStoreApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/AppStoreApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/AppStoreApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/AppStoreApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/EnterpriseApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/EnterpriseApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/EnterpriseApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/EnterpriseApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/IOSApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/IOSApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/IOSApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/IOSApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/RemoveApplication.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/RemoveApplication.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/RemoveApplication.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/RemoveApplication.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/WebClip.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/WebClip.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/WebClip.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/beans/ios/WebClip.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/common/DeviceApplicationException.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/common/DeviceApplicationException.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/common/DeviceApplicationException.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/common/DeviceApplicationException.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/AndroidApplicationOperationUtil.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/AndroidApplicationOperationUtil.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/AndroidApplicationOperationUtil.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/AndroidApplicationOperationUtil.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/IOSApplicationOperationUtil.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/IOSApplicationOperationUtil.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/IOSApplicationOperationUtil.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/IOSApplicationOperationUtil.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMAppConstants.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMAppConstants.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMAppConstants.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMAppConstants.java diff --git a/components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMServiceAPIUtils.java b/components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMServiceAPIUtils.java similarity index 100% rename from components/extensions/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMServiceAPIUtils.java rename to components/extensions/appm-connector/org.wso2.carbon.appmgt.mdm.osgiconnector/src/main/java/org/wso2/carbon/appmgt/mdm/osgiconnector/mdmmgt/util/MDMServiceAPIUtils.java diff --git a/components/mobile-plugins/mobile-base-plugin/pom.xml b/components/extensions/appm-connector/pom.xml similarity index 85% rename from components/mobile-plugins/mobile-base-plugin/pom.xml rename to components/extensions/appm-connector/pom.xml index 42c77bb4f..f2b2f75c1 100644 --- a/components/mobile-plugins/mobile-base-plugin/pom.xml +++ b/components/extensions/appm-connector/pom.xml @@ -21,21 +21,19 @@ org.wso2.carbon.devicemgt-plugins - mobile-plugins + extensions 2.2.5-SNAPSHOT ../pom.xml 4.0.0 - mobile-base-plugin + appm-connector pom - WSO2 Carbon - Mobile Plugins + WSO2 Carbon - IoT Base Plugin http://wso2.org - org.wso2.carbon.device.mgt.mobile - org.wso2.carbon.device.mgt.mobile.ui - org.wso2.carbon.device.mgt.mobile.url.printer + org.wso2.carbon.appmgt.mdm.osgiconnector @@ -57,5 +55,4 @@ - diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml similarity index 88% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/pom.xml rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml index 318a64766..cdec6b010 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/pom.xml @@ -18,14 +18,14 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension bundle WSO2 Carbon - Device Mgt Input Adaptor Extensions Module Provides the back-end functionality of Input adaptor @@ -46,7 +46,7 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.input.adapter.extension.* + org.wso2.carbon.device.mgt.input.adapter.extension.* diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentInfo.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentInfo.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentInfo.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentInfo.java index b5cb23acf..4d1db39d0 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentInfo.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentInfo.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.extension; +package org.wso2.carbon.device.mgt.input.adapter.extension; /** * This is the return type of the ContentValidator. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentTransformer.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentTransformer.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentTransformer.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentTransformer.java index 2cad36be5..d86aaaab5 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentTransformer.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentTransformer.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.extension; +package org.wso2.carbon.device.mgt.input.adapter.extension; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentValidator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentValidator.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentValidator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentValidator.java index a003a37d0..d01536c5a 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/ContentValidator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/ContentValidator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.extension; +package org.wso2.carbon.device.mgt.input.adapter.extension; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentTransformer.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentTransformer.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentTransformer.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentTransformer.java index c8c5ab198..9e0f5f256 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentTransformer.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentTransformer.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.extension; +package org.wso2.carbon.device.mgt.input.adapter.extension; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentValidator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentValidator.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentValidator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentValidator.java index 6a41bc270..3e507b10d 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/extension/DefaultContentValidator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.extension/src/main/java/org/wso2/carbon/device/mgt/input/adapter/extension/DefaultContentValidator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.extension; +package org.wso2.carbon.device.mgt.input.adapter.extension; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml similarity index 88% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/pom.xml rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml index 17707c022..5b90b189e 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/pom.xml @@ -18,14 +18,14 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml - 4.0.0 - org.wso2.carbon.device.mgt.iot.input.adapter.http + 4.0.0 + org.wso2.carbon.device.mgt.input.adapter.http bundle WSO2 Carbon - Device Mgt Input Adaptor Module - Http Provides the back-end functionality of Input adaptor @@ -46,7 +46,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension com.googlecode.json-simple.wso2 @@ -105,13 +105,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.input.adapter.http.internal, - org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.* + org.wso2.carbon.device.mgt.input.adapter.http.internal, + org.wso2.carbon.device.mgt.input.adapter.http.internal.* - !org.wso2.carbon.device.mgt.iot.input.adapter.http.internal, - !org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.*, - org.wso2.carbon.device.mgt.iot.input.adapter.http.* + !org.wso2.carbon.device.mgt.input.adapter.http.internal, + !org.wso2.carbon.device.mgt.input.adapter.http.internal.*, + org.wso2.carbon.device.mgt.input.adapter.http.* org.wso2.carbon.event.input.adapter.core, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapter.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapter.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapter.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapter.java index bed31990e..009db280f 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapter.java @@ -13,21 +13,21 @@ * specific language governing permissions and limitations under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http; +package org.wso2.carbon.device.mgt.input.adapter.http; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.http.HttpService; import org.osgi.service.http.NamespaceException; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.InputAdapterServiceDataHolder; +import org.wso2.carbon.device.mgt.input.adapter.http.internal.InputAdapterServiceDataHolder; +import org.wso2.carbon.device.mgt.input.adapter.http.util.HTTPEventAdapterConstants; import org.wso2.carbon.event.input.adapter.core.InputEventAdapter; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterException; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterRuntimeException; import org.wso2.carbon.event.input.adapter.core.exception.TestConnectionNotSupportedException; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.HTTPEventAdapterConstants; import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import javax.servlet.ServletException; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapterFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapterFactory.java index 95fc47759..6ac043edd 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPEventAdapterFactory.java @@ -12,14 +12,14 @@ * 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.iot.input.adapter.http; +package org.wso2.carbon.device.mgt.input.adapter.http; import org.wso2.carbon.event.input.adapter.core.InputEventAdapter; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterFactory; import org.wso2.carbon.event.input.adapter.core.MessageType; import org.wso2.carbon.event.input.adapter.core.Property; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.HTTPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.http.util.HTTPEventAdapterConstants; import org.wso2.carbon.utils.CarbonUtils; import java.util.ArrayList; @@ -34,7 +34,7 @@ import java.util.ResourceBundle; public class HTTPEventAdapterFactory extends InputEventAdapterFactory { private ResourceBundle resourceBundle = - ResourceBundle.getBundle("org.wso2.carbon.device.mgt.iot.input.adapter.http.i18n.Resources", Locale.getDefault()); + ResourceBundle.getBundle("org.wso2.carbon.device.mgt.input.adapter.http.i18n.Resources", Locale.getDefault()); private int httpPort; private int httpsPort; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPMessageServlet.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPMessageServlet.java similarity index 91% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPMessageServlet.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPMessageServlet.java index 19596adf3..8538ef3a2 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/HTTPMessageServlet.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/HTTPMessageServlet.java @@ -13,23 +13,23 @@ * specific language governing permissions and limitations under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http; +package org.wso2.carbon.device.mgt.input.adapter.http; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentValidator; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.exception.HTTPContentInitializationException; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.jwt.JWTAuthenticator; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.oauth.OAuthAuthenticator; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.AuthenticationInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.HTTPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.http.oauth.OAuthAuthenticator; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentInfo; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.http.exception.HTTPContentInitializationException; +import org.wso2.carbon.device.mgt.input.adapter.http.jwt.JWTAuthenticator; +import org.wso2.carbon.device.mgt.input.adapter.http.util.AuthenticationInfo; +import org.wso2.carbon.device.mgt.input.adapter.http.util.HTTPEventAdapterConstants; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/exception/HTTPContentInitializationException.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/exception/HTTPContentInitializationException.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/exception/HTTPContentInitializationException.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/exception/HTTPContentInitializationException.java index 3b30ed4b8..b3668f9b6 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/exception/HTTPContentInitializationException.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/exception/HTTPContentInitializationException.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.exception; +package org.wso2.carbon.device.mgt.input.adapter.http.exception; /** * This exception will thrown when content validator is failed to intialiaze. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceComponent.java similarity index 91% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceComponent.java index 6d452804b..7e5688838 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceComponent.java @@ -15,13 +15,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.internal; +package org.wso2.carbon.device.mgt.input.adapter.http.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; import org.osgi.service.http.HttpService; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.HTTPEventAdapterFactory; +import org.wso2.carbon.device.mgt.input.adapter.http.HTTPEventAdapterFactory; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterFactory; import org.wso2.carbon.user.core.service.RealmService; @@ -36,7 +36,7 @@ import org.wso2.carbon.user.core.service.RealmService; public class InputAdapterServiceComponent { private static final Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.InputAdapterServiceComponent.class); + InputAdapterServiceComponent.class); protected void activate(ComponentContext context) { try { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceDataHolder.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceDataHolder.java index 9938b0861..6f1969e6d 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/internal/InputAdapterServiceDataHolder.java @@ -12,7 +12,7 @@ * 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.iot.input.adapter.mqtt.internal; +package org.wso2.carbon.device.mgt.input.adapter.http.internal; import org.osgi.service.http.HttpService; import org.wso2.carbon.user.core.service.RealmService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/jwt/JWTAuthenticator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/jwt/JWTAuthenticator.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/jwt/JWTAuthenticator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/jwt/JWTAuthenticator.java index 4d1be0250..a61b728e0 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/jwt/JWTAuthenticator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/jwt/JWTAuthenticator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.jwt; +package org.wso2.carbon.device.mgt.input.adapter.http.jwt; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSVerifier; @@ -27,8 +27,8 @@ import org.apache.axis2.transport.http.HTTPConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.core.util.KeyStoreManager; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.InputAdapterServiceDataHolder; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.AuthenticationInfo; +import org.wso2.carbon.device.mgt.input.adapter.http.internal.InputAdapterServiceDataHolder; +import org.wso2.carbon.device.mgt.input.adapter.http.util.AuthenticationInfo; import org.wso2.carbon.user.api.TenantManager; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.api.UserStoreManager; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthAuthenticator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthAuthenticator.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthAuthenticator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthAuthenticator.java index a3e2a7194..408cb745a 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthAuthenticator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthAuthenticator.java @@ -16,15 +16,15 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.oauth; +package org.wso2.carbon.device.mgt.input.adapter.http.oauth; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.transport.http.HTTPConstants; 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.iot.input.adapter.http.internal.InputAdapterServiceDataHolder; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.AuthenticationInfo; +import org.wso2.carbon.device.mgt.input.adapter.http.internal.InputAdapterServiceDataHolder; +import org.wso2.carbon.device.mgt.input.adapter.http.util.AuthenticationInfo; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub; import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationRequestDTO; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java index 101f04620..ee2d7eb87 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/OAuthTokenValidaterStubFactory.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.oauth; +package org.wso2.carbon.device.mgt.input.adapter.http.oauth; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; @@ -33,9 +33,9 @@ import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import org.apache.commons.pool.BasePoolableObjectFactory; import org.apache.log4j.Logger; import org.wso2.carbon.core.util.Utils; +import org.wso2.carbon.device.mgt.input.adapter.http.oauth.exception.OAuthTokenValidationException; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.oauth.exception.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.iot.input.adapter.http.util.HTTPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.http.util.HTTPEventAdapterConstants; import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub; import java.io.IOException; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/exception/OAuthTokenValidationException.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/exception/OAuthTokenValidationException.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/exception/OAuthTokenValidationException.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/exception/OAuthTokenValidationException.java index 09e9cb612..9617d06e0 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/oauth/exception/OAuthTokenValidationException.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/oauth/exception/OAuthTokenValidationException.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.oauth.exception; +package org.wso2.carbon.device.mgt.input.adapter.http.oauth.exception; /** * This Exception will be thrown, when there any interference with token validation flow. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/AuthenticationInfo.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/AuthenticationInfo.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/AuthenticationInfo.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/AuthenticationInfo.java index a9b1588db..1defab039 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/AuthenticationInfo.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/AuthenticationInfo.java @@ -12,7 +12,7 @@ * */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.util; +package org.wso2.carbon.device.mgt.input.adapter.http.util; /** * This will be return after authentication and this will consist of the authenticated user info. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPContentValidator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPContentValidator.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPContentValidator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPContentValidator.java index 31b29039e..d8085d5b5 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPContentValidator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPContentValidator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.http.util; +package org.wso2.carbon.device.mgt.input.adapter.http.util; import com.jayway.jsonpath.JsonPath; import org.apache.commons.logging.Log; @@ -24,8 +24,8 @@ import org.apache.commons.logging.LogFactory; import org.json.simple.JSONArray; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentInfo; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator; import java.util.List; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPEventAdapterConstants.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPEventAdapterConstants.java index 226dbabd5..b2e4e02f2 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/util/HTTPEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/input/adapter/http/util/HTTPEventAdapterConstants.java @@ -12,7 +12,7 @@ * 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.iot.input.adapter.http.util; +package org.wso2.carbon.device.mgt.input.adapter.http.util; /** * This holds the constants related to HTTP event adapter. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/http/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/http/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/http/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.http/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/http/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml similarity index 89% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/pom.xml rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml index 7e2eea4c2..d554e518c 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/pom.xml @@ -18,14 +18,14 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt + org.wso2.carbon.device.mgt.input.adapter.mqtt bundle WSO2 Carbon - Device Mgt Input Adaptor Module - MQTT Provides the back-end functionality of Input adaptor @@ -74,7 +74,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension @@ -105,13 +105,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.internal, - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.internal.* + org.wso2.carbon.device.mgt.input.adapter.mqtt.internal, + org.wso2.carbon.device.mgt.input.adapter.mqtt.internal.* - !org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.internal, - !org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.internal.*, - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.* + !org.wso2.carbon.device.mgt.input.adapter.mqtt.internal, + !org.wso2.carbon.device.mgt.input.adapter.mqtt.internal.*, + org.wso2.carbon.device.mgt.input.adapter.mqtt.* org.wso2.carbon.event.input.adapter.core, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapter.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapter.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java index de5c073e2..ce148c6a4 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapter.java @@ -15,19 +15,18 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt; +package org.wso2.carbon.device.mgt.input.adapter.mqtt; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTBrokerConnectionConfiguration; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTAdapterListener; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTBrokerConnectionConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapter; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterException; import org.wso2.carbon.event.input.adapter.core.exception.TestConnectionNotSupportedException; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTAdapterListener; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTEventAdapterConstants; -import java.util.HashMap; import java.util.Map; import java.util.UUID; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java index bfb5d7640..643bce4fb 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/MQTTEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/MQTTEventAdapterFactory.java @@ -15,10 +15,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt; +package org.wso2.carbon.device.mgt.input.adapter.mqtt; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.util.MQTTEventAdapterConstants; import org.wso2.carbon.event.input.adapter.core.*; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util.MQTTEventAdapterConstants; import java.util.*; @@ -28,7 +28,7 @@ import java.util.*; public class MQTTEventAdapterFactory extends InputEventAdapterFactory { private ResourceBundle resourceBundle = ResourceBundle.getBundle - ("org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.i18n.Resources", Locale.getDefault()); + ("org.wso2.carbon.device.mgt.input.adapter.mqtt.i18n.Resources", Locale.getDefault()); @Override public String getType() { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/exception/MQTTContentInitializationException.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/exception/MQTTContentInitializationException.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/exception/MQTTContentInitializationException.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/exception/MQTTContentInitializationException.java index ddb60f53e..a97496f4d 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/exception/MQTTContentInitializationException.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/exception/MQTTContentInitializationException.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.exception; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.exception; /** * This exception will thrown when content validator is failed to intialiaze. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceComponent.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceComponent.java index 4da8c37ca..4a39cf4f7 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/internal/InputAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceComponent.java @@ -15,13 +15,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.internal; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; import org.osgi.service.http.HttpService; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.MQTTEventAdapterFactory; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.MQTTEventAdapterFactory; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterFactory; import org.wso2.carbon.user.core.service.RealmService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java index fac88721b..77053f658 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/internal/InputAdapterServiceDataHolder.java @@ -12,7 +12,7 @@ * 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.iot.input.adapter.xmpp.internal; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.internal; import org.osgi.service.http.HttpService; import org.wso2.carbon.user.core.service.RealmService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTAdapterListener.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTAdapterListener.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java index ec630d0ce..cf864d583 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTAdapterListener.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTAdapterListener.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,14 +31,14 @@ import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.core.ServerStatus; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentValidator; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentInfo; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentValidator; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterRuntimeException; -import org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.exception.MQTTContentInitializationException; +import org.wso2.carbon.device.mgt.input.adapter.mqtt.exception.MQTTContentInitializationException; import org.wso2.carbon.identity.jwt.client.extension.dto.AccessTokenInfo; import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException; import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java index 2aab777ea..55a4bf057 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java @@ -15,9 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; - -import java.util.Map; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; /** * This holds the configurations related to MQTT Broker. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTContentValidator.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTContentValidator.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTContentValidator.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTContentValidator.java index 0be83f7da..a3de8ffa9 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTContentValidator.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTContentValidator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; import com.jayway.jsonpath.JsonPath; import org.apache.commons.logging.Log; @@ -24,8 +24,8 @@ import org.apache.commons.logging.LogFactory; import org.json.simple.JSONArray; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentInfo; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java index f21b13918..d02d5624f 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTEventAdapterConstants.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; /** diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTUtil.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTUtil.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTUtil.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTUtil.java index 1d1fea18d..ca01b75b6 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/MQTTUtil.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/MQTTUtil.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/PropertyUtils.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/PropertyUtils.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/PropertyUtils.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/PropertyUtils.java index d1cbbcc94..6433bf42b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/PropertyUtils.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/PropertyUtils.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; import org.wso2.carbon.base.ServerConfiguration; import org.wso2.carbon.core.util.Utils; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/RegistrationProfile.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/RegistrationProfile.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/RegistrationProfile.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/RegistrationProfile.java index 5871fa5b8..f5445f170 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/util/RegistrationProfile.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/input/adapter/mqtt/util/RegistrationProfile.java @@ -1,4 +1,4 @@ -package org.wso2.carbon.device.mgt.iot.input.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.input.adapter.mqtt.util; /** * This class represents the data that are required to register diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/mqtt/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/mqtt/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/mqtt/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml similarity index 86% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/pom.xml rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml index 085d98c8d..a8c67073d 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/pom.xml @@ -18,14 +18,14 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp + org.wso2.carbon.device.mgt.input.adapter.xmpp bundle WSO2 Carbon - Device Mgt Input Adaptor Module - XMPP Provides the back-end functionality of Input adaptor @@ -70,7 +70,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension @@ -101,13 +101,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.internal, - org.wso2.carbon.device.mgt.iot.input.adapter.http.internal.* + org.wso2.carbon.device.mgt.input.adapter.xmpp.internal, + org.wso2.carbon.device.mgt.input.adapter.http.internal.* - !org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.internal, - !org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.internal.*, - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.* + !org.wso2.carbon.device.mgt.input.adapter.xmpp.internal, + !org.wso2.carbon.device.mgt.input.adapter.xmpp.internal.*, + org.wso2.carbon.device.mgt.input.adapter.xmpp.* org.wso2.carbon.event.input.adapter.core, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapter.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapter.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapter.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapter.java index 7bfe7989a..78cbba6ab 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapter.java @@ -15,19 +15,18 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp; +package org.wso2.carbon.device.mgt.input.adapter.xmpp; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util.XMPPAdapterListener; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util.XMPPServerConnectionConfiguration; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util.XMPPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.util.XMPPAdapterListener; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.util.XMPPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.util.XMPPServerConnectionConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapter; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterException; import org.wso2.carbon.event.input.adapter.core.exception.TestConnectionNotSupportedException; -import java.util.HashMap; import java.util.Map; import java.util.UUID; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapterFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapterFactory.java index 6878f721e..c60a5157b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/XMPPEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/XMPPEventAdapterFactory.java @@ -15,9 +15,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp; +package org.wso2.carbon.device.mgt.input.adapter.xmpp; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util.XMPPEventAdapterConstants; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.util.XMPPEventAdapterConstants; import org.wso2.carbon.event.input.adapter.core.InputEventAdapter; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterConfiguration; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterFactory; @@ -36,7 +36,7 @@ import java.util.ResourceBundle; public class XMPPEventAdapterFactory extends InputEventAdapterFactory { private ResourceBundle resourceBundle = ResourceBundle.getBundle - ("org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.i18n.Resources", Locale.getDefault()); + ("org.wso2.carbon.device.mgt.input.adapter.xmpp.i18n.Resources", Locale.getDefault()); @Override public String getType() { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/exception/XMPPContentInitializationException.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/exception/XMPPContentInitializationException.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/exception/XMPPContentInitializationException.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/exception/XMPPContentInitializationException.java index ec26e4976..f683554cf 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/exception/XMPPContentInitializationException.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/exception/XMPPContentInitializationException.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.exception; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.exception; /** * This exception will thrown when content validator is failed to intialiaze. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceComponent.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceComponent.java index b02f11075..32db2049b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/internal/InputAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceComponent.java @@ -15,13 +15,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.internal; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; import org.osgi.service.http.HttpService; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.XMPPEventAdapterFactory; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.XMPPEventAdapterFactory; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterFactory; import org.wso2.carbon.user.core.service.RealmService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceDataHolder.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceDataHolder.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java index 95d28c9ef..38296aea8 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.http/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/http/internal/InputAdapterServiceDataHolder.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/internal/InputAdapterServiceDataHolder.java @@ -12,7 +12,7 @@ * 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.iot.input.adapter.http.internal; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.internal; import org.osgi.service.http.HttpService; import org.wso2.carbon.user.core.service.RealmService; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPAdapterListener.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPAdapterListener.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPAdapterListener.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPAdapterListener.java index 9821b3f42..2dd10098a 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPAdapterListener.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPAdapterListener.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -33,12 +33,12 @@ import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.core.ServerStatus; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentInfo; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.ContentValidator; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentTransformer; -import org.wso2.carbon.device.mgt.iot.input.adapter.extension.DefaultContentValidator; -import org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.exception.XMPPContentInitializationException; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentInfo; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.ContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentTransformer; +import org.wso2.carbon.device.mgt.input.adapter.extension.DefaultContentValidator; +import org.wso2.carbon.device.mgt.input.adapter.xmpp.exception.XMPPContentInitializationException; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterListener; import org.wso2.carbon.event.input.adapter.core.exception.InputEventAdapterRuntimeException; import java.util.HashMap; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPEventAdapterConstants.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPEventAdapterConstants.java index b7896453a..fd312abf5 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPEventAdapterConstants.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.util; /** diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java index ac000bd23..a751e6d2c 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java +++ b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/input/adapter/xmpp/util/XMPPServerConnectionConfiguration.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.input.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.input.adapter.xmpp.util; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/xmpp/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot/input/adapter/xmpp/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/input/org.wso2.carbon.device.mgt.input.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/input/adapter/xmpp/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml similarity index 87% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/pom.xml rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml index d25457a9d..b02f81f97 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/pom.xml @@ -18,17 +18,17 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt + org.wso2.carbon.device.mgt.output.adapter.mqtt bundle WSO2 Carbon - Device Mgt Output MQTT Adaptor Module - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt provides the back-end functionality of mqtt adaptor + org.wso2.carbon.device.mgt.output.adapter.mqtt provides the back-end functionality of mqtt adaptor http://wso2.org @@ -94,13 +94,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.internal, - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.internal.* + org.wso2.carbon.device.mgt.output.adapter.mqtt.internal, + org.wso2.carbon.device.mgt.output.adapter.mqtt.internal.* - !org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.internal, - !org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.internal.*, - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.*, + !org.wso2.carbon.device.mgt.output.adapter.mqtt.internal, + !org.wso2.carbon.device.mgt.output.adapter.mqtt.internal.*, + org.wso2.carbon.device.mgt.output.adapter.mqtt.*, org.wso2.carbon.event.output.adapter.core, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapter.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapter.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapter.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapter.java index 9a98060a5..ca7b33393 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapter.java @@ -15,14 +15,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt; +package org.wso2.carbon.device.mgt.output.adapter.mqtt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util.MQTTAdapterPublisher; -import org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util.MQTTEventAdapterConstants; -import org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util.MQTTBrokerConnectionConfiguration; +import org.wso2.carbon.device.mgt.output.adapter.mqtt.util.MQTTAdapterPublisher; +import org.wso2.carbon.device.mgt.output.adapter.mqtt.util.MQTTEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.mqtt.util.MQTTBrokerConnectionConfiguration; import org.wso2.carbon.event.output.adapter.core.EventAdapterUtil; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapter; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterConfiguration; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapterFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapterFactory.java index 0caa6b8f7..d2f7ff3be 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/MQTTEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/MQTTEventAdapterFactory.java @@ -15,9 +15,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt; +package org.wso2.carbon.device.mgt.output.adapter.mqtt; -import org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util.MQTTEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.mqtt.util.MQTTEventAdapterConstants; import org.wso2.carbon.event.output.adapter.core.*; import java.util.*; @@ -27,7 +27,7 @@ import java.util.*; */ public class MQTTEventAdapterFactory extends OutputEventAdapterFactory { private ResourceBundle resourceBundle = - ResourceBundle.getBundle("org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.i18n.Resources", Locale.getDefault()); + ResourceBundle.getBundle("org.wso2.carbon.device.mgt.output.adapter.mqtt.i18n.Resources", Locale.getDefault()); @Override public String getType() { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java similarity index 92% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java index 97a95f27c..80784a4ce 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/internal/MQTTEventAdapterServiceComponent.java @@ -15,12 +15,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.internal; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.MQTTEventAdapterFactory; +import org.wso2.carbon.device.mgt.output.adapter.mqtt.MQTTEventAdapterFactory; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTAdapterPublisher.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTAdapterPublisher.java similarity index 99% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTAdapterPublisher.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTAdapterPublisher.java index dea1fc73f..eee4d6084 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTAdapterPublisher.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTAdapterPublisher.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java index cfee72579..83a8460b8 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTBrokerConnectionConfiguration.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.util; public class MQTTBrokerConnectionConfiguration { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTEventAdapterConstants.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTEventAdapterConstants.java index 194a99f7b..228a8c6b4 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTEventAdapterConstants.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.util; public final class MQTTEventAdapterConstants { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTUtil.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTUtil.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTUtil.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTUtil.java index 636c133ed..0cb463991 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/MQTTUtil.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/MQTTUtil.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/RegistrationProfile.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/RegistrationProfile.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/RegistrationProfile.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/RegistrationProfile.java index aca25c9a3..0a4d93125 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/util/RegistrationProfile.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/java/org/wso2/carbon/device/mgt/output/adapter/mqtt/util/RegistrationProfile.java @@ -1,4 +1,4 @@ -package org.wso2.carbon.device.mgt.iot.output.adapter.mqtt.util; +package org.wso2.carbon.device.mgt.output.adapter.mqtt.util; /** * This class represents the data that are required to register diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/mqtt/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/mqtt/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.mqtt/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/mqtt/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml similarity index 88% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/pom.xml rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml index 558860a88..10449b043 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/pom.xml @@ -20,14 +20,14 @@ - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint + org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint war WSO2 - Webapp for UI Output Event Adapter http://wso2.org @@ -44,7 +44,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.ui + org.wso2.carbon.device.mgt.output.adapter.websocket provided diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SubscriptionEndpoint.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SubscriptionEndpoint.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SubscriptionEndpoint.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SubscriptionEndpoint.java index 9439b422c..fc92f9cb1 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SubscriptionEndpoint.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SubscriptionEndpoint.java @@ -17,10 +17,11 @@ * under the License. * */ +package org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import util.ServiceHolder; +import org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint.util.ServiceHolder; import javax.websocket.CloseReason; import javax.websocket.Session; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SuperTenantSubscriptionEndpoint.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SuperTenantSubscriptionEndpoint.java similarity index 92% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SuperTenantSubscriptionEndpoint.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SuperTenantSubscriptionEndpoint.java index da26bb1d7..ee01f9dc2 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/SuperTenantSubscriptionEndpoint.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/SuperTenantSubscriptionEndpoint.java @@ -16,13 +16,15 @@ * under the License. */ +package org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.AuthenticationInfo; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.Authenticator; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization.Authorizer; -import util.ServiceHolder; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.AuthenticationInfo; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.Authenticator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.Authorizer; +import org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint.util.ServiceHolder; import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import javax.websocket.CloseReason; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/TenantSubscriptionEndpoint.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/TenantSubscriptionEndpoint.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/TenantSubscriptionEndpoint.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/TenantSubscriptionEndpoint.java index 58a3e2d82..c08504903 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/TenantSubscriptionEndpoint.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/TenantSubscriptionEndpoint.java @@ -16,13 +16,15 @@ * under the License. */ +package org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.AuthenticationInfo; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.Authenticator; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization.Authorizer; -import util.ServiceHolder; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.AuthenticationInfo; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.Authenticator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.Authorizer; +import org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint.util.ServiceHolder; import javax.websocket.CloseReason; import javax.websocket.OnClose; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/ServiceHolder.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/ServiceHolder.java similarity index 62% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/ServiceHolder.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/ServiceHolder.java index 755fcd7df..c6ddc4914 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/ServiceHolder.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/ServiceHolder.java @@ -1,11 +1,28 @@ -package util; - +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint.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.iot.output.adapter.ui.UIOutputCallbackControllerService; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.service.WebsocketValidationService; +import org.wso2.carbon.device.mgt.output.adapter.websocket.UIOutputCallbackControllerService; +import org.wso2.carbon.device.mgt.output.adapter.websocket.service.WebsocketValidationService; public class ServiceHolder { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/UIConstants.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/UIConstants.java similarity index 89% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/UIConstants.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/UIConstants.java index 162fc34ce..e3d7be97d 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/java/util/UIConstants.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/endpoint/util/UIConstants.java @@ -16,10 +16,10 @@ * under the License. */ -package util; +package org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint.util; /** - * This class contains the constants related to ui client. + * This class contains the constants related to websocket client. */ public final class UIConstants { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/webapp/WEB-INF/web.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint/src/main/webapp/WEB-INF/web.xml rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint/src/main/webapp/WEB-INF/web.xml diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml similarity index 91% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/pom.xml rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml index a5c8b0d0b..a62dd9ba3 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/pom.xml @@ -19,14 +19,14 @@ - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.output.adapter.ui + org.wso2.carbon.device.mgt.output.adapter.websocket bundle WSO2 Carbon - Event Output UI Adapter Module org.wso2.carbon.event.output.adapter.ui provides the back-end functionality of @@ -108,13 +108,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal, - org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal.* + org.wso2.carbon.device.mgt.output.adapter.websocket.internal, + org.wso2.carbon.device.mgt.output.adapter.websocket.internal.* - !org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal, - !org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal.*, - org.wso2.carbon.device.mgt.iot.output.adapter.ui.* + !org.wso2.carbon.device.mgt.output.adapter.websocket.internal, + !org.wso2.carbon.device.mgt.output.adapter.websocket.internal.*, + org.wso2.carbon.device.mgt.output.adapter.websocket.* org.wso2.carbon.event.output.adapter.core.*, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapter.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapter.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapter.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapter.java index 807396aac..6dfbf7c93 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapter.java @@ -16,7 +16,7 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui; +package org.wso2.carbon.device.mgt.output.adapter.websocket; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -25,15 +25,15 @@ import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.databridge.commons.Attribute; import org.wso2.carbon.databridge.commons.Event; import org.wso2.carbon.databridge.commons.StreamDefinition; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal.UIEventAdaptorServiceDataHolder; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.UIEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.internal.UIEventAdaptorServiceDataHolder; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.UIEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.WebSocketSessionRequest; import org.wso2.carbon.event.output.adapter.core.EventAdapterUtil; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapter; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterConfiguration; import org.wso2.carbon.event.output.adapter.core.exception.OutputEventAdapterException; import org.wso2.carbon.event.output.adapter.core.exception.OutputEventAdapterRuntimeException; import org.wso2.carbon.event.output.adapter.core.exception.TestConnectionNotSupportedException; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.WebSocketSessionRequest; import org.wso2.carbon.event.stream.core.EventStreamService; import org.wso2.carbon.event.stream.core.exception.EventStreamConfigurationException; @@ -147,7 +147,7 @@ public class UIEventAdapter implements OutputEventAdapter { String adapterName = streamSpecifAdapterMap.get(streamId); if (adapterName != null) { - throw new OutputEventAdapterException(("An Output ui event adapter \"" + adapterName + "\" is already" + + throw new OutputEventAdapterException(("An Output websocket event adapter \"" + adapterName + "\" is already" + " exist for stream id \"" + streamId + "\"")); } else { streamSpecifAdapterMap.put(streamId, eventAdapterConfiguration.getName()); diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapterFactory.java similarity index 91% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapterFactory.java index 4c41aed64..3348711d1 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIEventAdapterFactory.java @@ -16,15 +16,14 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui; +package org.wso2.carbon.device.mgt.output.adapter.websocket; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.UIEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.UIEventAdapterConstants; import org.wso2.carbon.event.output.adapter.core.MessageType; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapter; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterConfiguration; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterFactory; import org.wso2.carbon.event.output.adapter.core.Property; -import org.wso2.carbon.utils.CarbonUtils; import java.util.ArrayList; import java.util.List; @@ -37,7 +36,7 @@ import java.util.ResourceBundle; */ public class UIEventAdapterFactory extends OutputEventAdapterFactory { - private ResourceBundle resourceBundle = ResourceBundle.getBundle("org.wso2.carbon.device.mgt.iot.output.adapter.ui.i18n" + + private ResourceBundle resourceBundle = ResourceBundle.getBundle("org.wso2.carbon.device.mgt.output.adapter.websocket.i18n" + ".Resources", Locale.getDefault()); public UIEventAdapterFactory() { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerService.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerService.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerService.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerService.java index 7402fb027..ffcfb72a4 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerService.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerService.java @@ -17,7 +17,7 @@ * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui; +package org.wso2.carbon.device.mgt.output.adapter.websocket; import javax.websocket.Session; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerServiceImpl.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerServiceImpl.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerServiceImpl.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerServiceImpl.java index ba7049b85..b71a6fc78 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/UIOutputCallbackControllerServiceImpl.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/UIOutputCallbackControllerServiceImpl.java @@ -16,12 +16,12 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui; +package org.wso2.carbon.device.mgt.output.adapter.websocket; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal.UIEventAdaptorServiceDataHolder; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.WebSocketSessionRequest; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.UIEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.internal.UIEventAdaptorServiceDataHolder; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.WebSocketSessionRequest; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.UIEventAdapterConstants; import javax.websocket.Session; import java.util.Iterator; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/AuthenticationInfo.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/AuthenticationInfo.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/AuthenticationInfo.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/AuthenticationInfo.java index b533c9225..ead22761f 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/AuthenticationInfo.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/AuthenticationInfo.java @@ -12,7 +12,7 @@ * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/Authenticator.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/Authenticator.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/Authenticator.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/Authenticator.java index 56af71cb8..a9a5dc07b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/Authenticator.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/Authenticator.java @@ -12,7 +12,7 @@ * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication; import javax.websocket.Session; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/OAuthAuthenticator.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/OAuthAuthenticator.java similarity index 83% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/OAuthAuthenticator.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/OAuthAuthenticator.java index a3d38d7dd..7eaab2b5b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/OAuthAuthenticator.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/OAuthAuthenticator.java @@ -12,9 +12,9 @@ * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.oauth.OAuthTokenValdiator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.oauth.OAuthTokenValdiator; import javax.websocket.Session; public class OAuthAuthenticator implements Authenticator { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValdiator.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValdiator.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValdiator.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValdiator.java index 5587293fb..5c55a5c21 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValdiator.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValdiator.java @@ -12,17 +12,17 @@ * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.oauth; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.oauth; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.transport.http.HTTPConstants; 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.iot.output.adapter.ui.authentication.AuthenticationInfo; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.config.Property; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.config.WebsocketConfig; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.constants.WebsocketConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.AuthenticationInfo; +import org.wso2.carbon.device.mgt.output.adapter.websocket.config.Property; +import org.wso2.carbon.device.mgt.output.adapter.websocket.config.WebsocketConfig; +import org.wso2.carbon.device.mgt.output.adapter.websocket.constants.WebsocketConstants; 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; @@ -72,7 +72,7 @@ public class OAuthTokenValdiator { Properties properties = getWebSocketConfig(); this.stubs = new GenericObjectPool(new OAuthTokenValidaterStubFactory(properties)); } catch (IOException e) { - log.error("Failed to parse the web socket org.wso2.carbon.device.mgt.iot.output.adapter.ui.config file " + + log.error("Failed to parse the web socket org.wso2.carbon.device.mgt.output.adapter.websocket.config file " + WEBSOCKET_CONFIG_LOCATION, e); } } diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValidaterStubFactory.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValidaterStubFactory.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValidaterStubFactory.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValidaterStubFactory.java index 10f056e4c..b1e417be0 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/OAuthTokenValidaterStubFactory.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/OAuthTokenValidaterStubFactory.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.oauth; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.oauth; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; @@ -33,9 +33,8 @@ import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.pool.BasePoolableObjectFactory; -import org.apache.log4j.Logger; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.oauth.exception.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.constants.WebsocketConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.oauth.exception.OAuthTokenValidationException; +import org.wso2.carbon.device.mgt.output.adapter.websocket.constants.WebsocketConstants; import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub; import java.io.IOException; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/exception/OAuthTokenValidationException.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/exception/OAuthTokenValidationException.java similarity index 93% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/exception/OAuthTokenValidationException.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/exception/OAuthTokenValidationException.java index 282a22748..a1d8d4bbc 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authentication/oauth/exception/OAuthTokenValidationException.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authentication/oauth/exception/OAuthTokenValidationException.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.oauth.exception; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.oauth.exception; /** * This Exception will be thrown, when there any interference with token validation flow. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/Authorizer.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/Authorizer.java similarity index 86% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/Authorizer.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/Authorizer.java index 2bd3850f3..65809a358 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/Authorizer.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/Authorizer.java @@ -16,12 +16,11 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authorization; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.AuthenticationInfo; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.AuthenticationInfo; import javax.websocket.Session; -import java.util.Map; /** * Check whether the client is authorized to connect. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/DeviceAuthorizer.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/DeviceAuthorizer.java similarity index 85% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/DeviceAuthorizer.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/DeviceAuthorizer.java index d663a1913..b82cb5713 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/authorization/DeviceAuthorizer.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/authorization/DeviceAuthorizer.java @@ -15,11 +15,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization; +package org.wso2.carbon.device.mgt.output.adapter.websocket.authorization; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.AuthenticationInfo; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.constants.WebsocketConstants; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.WebSocketSessionRequest; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.AuthenticationInfo; +import org.wso2.carbon.device.mgt.output.adapter.websocket.constants.WebsocketConstants; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.WebSocketSessionRequest; import javax.websocket.Session; import java.util.Map; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authenticator.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authenticator.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authenticator.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authenticator.java index 4a4846592..25c0794ea 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authenticator.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authenticator.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authorizer.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authorizer.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authorizer.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authorizer.java index 96af781cc..03cc6b9fd 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Authorizer.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Authorizer.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Properties.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Properties.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Properties.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Properties.java index 2b4796430..9620f46a4 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Properties.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Properties.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Property.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Property.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Property.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Property.java index 252e3ae48..7b14dbbe6 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/Property.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/Property.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketConfig.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketConfig.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketConfig.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketConfig.java index ee44677d3..a29da168e 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketConfig.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketConfig.java @@ -16,10 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import org.w3c.dom.Document; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.util.WebsocketUtils; +import org.wso2.carbon.device.mgt.output.adapter.websocket.util.WebsocketUtils; import org.wso2.carbon.utils.CarbonUtils; import javax.xml.bind.JAXBContext; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigs.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigs.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigs.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigs.java index cf82fecd5..020cfd2ce 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigs.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigs.java @@ -16,13 +16,12 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; /** diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigurationFailedException.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigurationFailedException.java similarity index 95% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigurationFailedException.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigurationFailedException.java index 766eea3ee..cc1eb08c5 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/config/WebsocketValidationConfigurationFailedException.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/config/WebsocketValidationConfigurationFailedException.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.config; +package org.wso2.carbon.device.mgt.output.adapter.websocket.config; public class WebsocketValidationConfigurationFailedException extends Exception { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/constants/WebsocketConstants.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/constants/WebsocketConstants.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/constants/WebsocketConstants.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/constants/WebsocketConstants.java index 31a9f1dd4..8aea2637f 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/constants/WebsocketConstants.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/constants/WebsocketConstants.java @@ -16,7 +16,7 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.constants; +package org.wso2.carbon.device.mgt.output.adapter.websocket.constants; /** * This holds the constants related to this feature diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UIEventAdaptorServiceDataHolder.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UIEventAdaptorServiceDataHolder.java similarity index 94% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UIEventAdaptorServiceDataHolder.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UIEventAdaptorServiceDataHolder.java index 024c0228e..ec3c32217 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UIEventAdaptorServiceDataHolder.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UIEventAdaptorServiceDataHolder.java @@ -16,9 +16,9 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal; +package org.wso2.carbon.device.mgt.output.adapter.websocket.internal; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.UIOutputCallbackControllerServiceImpl; +import org.wso2.carbon.device.mgt.output.adapter.websocket.UIOutputCallbackControllerServiceImpl; import org.wso2.carbon.event.stream.core.EventStreamService; import java.util.concurrent.ConcurrentHashMap; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UILocalEventAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UILocalEventAdapterServiceComponent.java similarity index 81% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UILocalEventAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UILocalEventAdapterServiceComponent.java index 7e8a12277..ce5aa792b 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/internal/UILocalEventAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/internal/UILocalEventAdapterServiceComponent.java @@ -16,21 +16,21 @@ * under the License. * */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.internal; +package org.wso2.carbon.device.mgt.output.adapter.websocket.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.UIEventAdapterFactory; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.UIOutputCallbackControllerServiceImpl; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.Authenticator; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization.Authorizer; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.config.WebsocketConfig; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.config.WebsocketValidationConfigurationFailedException; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.service.WebsocketValidationService; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.service.WebsocketValidationServiceImpl; +import org.wso2.carbon.device.mgt.output.adapter.websocket.UIEventAdapterFactory; +import org.wso2.carbon.device.mgt.output.adapter.websocket.UIOutputCallbackControllerServiceImpl; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.Authenticator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.Authorizer; +import org.wso2.carbon.device.mgt.output.adapter.websocket.config.WebsocketConfig; +import org.wso2.carbon.device.mgt.output.adapter.websocket.config.WebsocketValidationConfigurationFailedException; +import org.wso2.carbon.device.mgt.output.adapter.websocket.service.WebsocketValidationService; +import org.wso2.carbon.device.mgt.output.adapter.websocket.service.WebsocketValidationServiceImpl; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterFactory; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.UIOutputCallbackControllerService; +import org.wso2.carbon.device.mgt.output.adapter.websocket.UIOutputCallbackControllerService; import org.wso2.carbon.event.stream.core.EventStreamService; /** @@ -44,7 +44,7 @@ public class UILocalEventAdapterServiceComponent { private static final Log log = LogFactory.getLog(UILocalEventAdapterServiceComponent.class); /** - * initialize the ui adapter service here service here. + * initialize the websocket adapter service here service here. * * @param context */ @@ -61,7 +61,7 @@ public class UILocalEventAdapterServiceComponent { UIEventAdaptorServiceDataHolder.registerUIOutputCallbackRegisterServiceInternal( UIOutputCallbackRegisterServiceImpl); if (log.isDebugEnabled()) { - log.debug("Successfully deployed the output ui adapter service"); + log.debug("Successfully deployed the output websocket adapter service"); } try { WebsocketConfig.getInstance().init(); @@ -91,7 +91,7 @@ public class UILocalEventAdapterServiceComponent { "in the websocket validation configuration.", e); } } catch (RuntimeException e) { - log.error("Can not create the output ui adapter service ", e); + log.error("Can not create the output websocket adapter service ", e); } catch (Throwable e) { log.error("Error occurred while activating UI Event Adapter Service Component", e); } diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationService.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationService.java similarity index 78% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationService.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationService.java index 7df67d969..439e9fc78 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationService.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationService.java @@ -16,10 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.service; +package org.wso2.carbon.device.mgt.output.adapter.websocket.service; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.Authenticator; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization.Authorizer; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.Authenticator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.Authorizer; /** * This returns the configured authenticator and authorizer for websocket. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationServiceImpl.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationServiceImpl.java similarity index 84% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationServiceImpl.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationServiceImpl.java index e9f6d3d96..7a17c0ba3 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/service/WebsocketValidationServiceImpl.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/service/WebsocketValidationServiceImpl.java @@ -16,10 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.service; +package org.wso2.carbon.device.mgt.output.adapter.websocket.service; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authentication.Authenticator; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.authorization.Authorizer; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authentication.Authenticator; +import org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.Authorizer; /** * This returns the configured authenticator and authorizer for websocket. diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/UIEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/UIEventAdapterConstants.java similarity index 89% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/UIEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/UIEventAdapterConstants.java index d64c1ce4d..bef12b7c3 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/UIEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/UIEventAdapterConstants.java @@ -16,17 +16,17 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.util; +package org.wso2.carbon.device.mgt.output.adapter.websocket.util; /** - * This class contains the constants related to ui Output Event Adaptor. + * This class contains the constants related to websocket Output Event Adaptor. */ public class UIEventAdapterConstants { private UIEventAdapterConstants() { } - public static final String ADAPTER_TYPE_UI = "secured-ui"; + public static final String ADAPTER_TYPE_UI = "secured-websocket"; public static final String ADAPTER_USAGE_TIPS_PREFIX = "ui.usage.tips_prefix"; public static final String ADAPTER_USAGE_TIPS_POSTFIX = "ui.usage.tips_postfix"; public static final String ADAPTER_UI_DEFAULT_OUTPUT_STREAM_VERSION = "1.0.0"; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebSocketSessionRequest.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebSocketSessionRequest.java similarity index 97% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebSocketSessionRequest.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebSocketSessionRequest.java index 822028089..1988d1b84 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebSocketSessionRequest.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebSocketSessionRequest.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.util; +package org.wso2.carbon.device.mgt.output.adapter.websocket.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebsocketUtils.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebsocketUtils.java similarity index 89% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebsocketUtils.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebsocketUtils.java index c049e4540..162bc9955 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/ui/util/WebsocketUtils.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/java/org/wso2/carbon/device/mgt/output/adapter/websocket/util/WebsocketUtils.java @@ -16,10 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.ui.util; +package org.wso2.carbon.device.mgt.output.adapter.websocket.util; import org.w3c.dom.Document; -import org.wso2.carbon.device.mgt.iot.output.adapter.ui.config.WebsocketValidationConfigurationFailedException; +import org.wso2.carbon.device.mgt.output.adapter.websocket.config.WebsocketValidationConfigurationFailedException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/ui/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/websocket/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.ui/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/ui/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.websocket/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/websocket/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/pom.xml b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml similarity index 83% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/pom.xml rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml index a5d1035ba..6fb6cd619 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/pom.xml +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/pom.xml @@ -18,17 +18,18 @@ --> - iot-base-plugin + cdmf-adapters org.wso2.carbon.devicemgt-plugins 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml + 4.0.0 - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp + org.wso2.carbon.device.mgt.output.adapter.xmpp bundle WSO2 Carbon - Device Mgt Output MQTT Adaptor Module - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp provides the back-end functionality of xmpp adaptor + org.wso2.carbon.device.mgt.output.adapter.xmpp provides the back-end functionality of xmpp adaptor http://wso2.org @@ -82,13 +83,13 @@ ${project.artifactId} ${project.artifactId} - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.internal, - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.internal.* + org.wso2.carbon.device.mgt.output.adapter.xmpp.internal, + org.wso2.carbon.device.mgt.output.adapter.xmpp.internal.* - !org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.internal, - !org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.internal.*, - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.*, + !org.wso2.carbon.device.mgt.output.adapter.xmpp.internal, + !org.wso2.carbon.device.mgt.output.adapter.xmpp.internal.*, + org.wso2.carbon.device.mgt.output.adapter.xmpp.*, org.wso2.carbon.event.output.adapter.core, diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapter.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapter.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapter.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapter.java index d90c8e5c1..8e3965d79 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapter.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapter.java @@ -15,14 +15,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp; +package org.wso2.carbon.device.mgt.output.adapter.xmpp; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util.XMPPEventAdapterConstants; -import org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util.XMPPAdapterPublisher; -import org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util.XMPPServerConnectionConfiguration; +import org.wso2.carbon.device.mgt.output.adapter.xmpp.util.XMPPEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.xmpp.util.XMPPAdapterPublisher; +import org.wso2.carbon.device.mgt.output.adapter.xmpp.util.XMPPServerConnectionConfiguration; import org.wso2.carbon.event.output.adapter.core.EventAdapterUtil; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapter; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterConfiguration; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapterFactory.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapterFactory.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapterFactory.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapterFactory.java index 8ffa169f2..2afabc0fa 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/XMPPEventAdapterFactory.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/XMPPEventAdapterFactory.java @@ -15,9 +15,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp; +package org.wso2.carbon.device.mgt.output.adapter.xmpp; -import org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util.XMPPEventAdapterConstants; +import org.wso2.carbon.device.mgt.output.adapter.xmpp.util.XMPPEventAdapterConstants; import org.wso2.carbon.event.output.adapter.core.*; import java.util.*; @@ -27,7 +27,7 @@ import java.util.*; */ public class XMPPEventAdapterFactory extends OutputEventAdapterFactory { private ResourceBundle resourceBundle = - ResourceBundle.getBundle("org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.i18n.Resources", Locale.getDefault()); + ResourceBundle.getBundle("org.wso2.carbon.device.mgt.output.adapter.xmpp.i18n.Resources", Locale.getDefault()); @Override public String getType() { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java similarity index 92% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java index c8d1806ed..a9bb6fdca 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/internal/XMPPEventAdapterServiceComponent.java @@ -15,12 +15,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.internal; +package org.wso2.carbon.device.mgt.output.adapter.xmpp.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.XMPPEventAdapterFactory; +import org.wso2.carbon.device.mgt.output.adapter.xmpp.XMPPEventAdapterFactory; import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPAdapterPublisher.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPAdapterPublisher.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPAdapterPublisher.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPAdapterPublisher.java index 8ed9fcc3f..2d3486bfc 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPAdapterPublisher.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPAdapterPublisher.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.output.adapter.xmpp.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPEventAdapterConstants.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPEventAdapterConstants.java similarity index 98% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPEventAdapterConstants.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPEventAdapterConstants.java index 9db36385c..25922792e 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPEventAdapterConstants.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPEventAdapterConstants.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.output.adapter.xmpp.util; public final class XMPPEventAdapterConstants { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java similarity index 96% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java index 51e696e20..87c671049 100644 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java +++ b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/java/org/wso2/carbon/device/mgt/output/adapter/xmpp/util/XMPPServerConnectionConfiguration.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.iot.output.adapter.xmpp.util; +package org.wso2.carbon.device.mgt.output.adapter.xmpp.util; public class XMPPServerConnectionConfiguration { diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/i18n/Resources.properties b/components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/xmpp/i18n/Resources.properties similarity index 100% rename from components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/iot/output/adapter/xmpp/i18n/Resources.properties rename to components/extensions/cdmf-transport-adapters/output/org.wso2.carbon.device.mgt.output.adapter.xmpp/src/main/resources/org/wso2/carbon/device/mgt/output/adapter/xmpp/i18n/Resources.properties diff --git a/components/iot-plugins/iot-base-plugin/pom.xml b/components/extensions/cdmf-transport-adapters/pom.xml similarity index 70% rename from components/iot-plugins/iot-base-plugin/pom.xml rename to components/extensions/cdmf-transport-adapters/pom.xml index 46c906fc9..8c16ebfc8 100644 --- a/components/iot-plugins/iot-base-plugin/pom.xml +++ b/components/extensions/cdmf-transport-adapters/pom.xml @@ -21,28 +21,26 @@ org.wso2.carbon.devicemgt-plugins - iot-plugins + extensions 2.2.5-SNAPSHOT ../pom.xml 4.0.0 - iot-base-plugin + cdmf-transport-adapters pom WSO2 Carbon - IoT Base Plugin http://wso2.org - org.wso2.carbon.device.mgt.iot.url.printer - org.wso2.carbon.device.mgt.iot.ui - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp - org.wso2.carbon.device.mgt.iot.output.adapter.ui - org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint - org.wso2.carbon.device.mgt.iot.input.adapter.extension - org.wso2.carbon.device.mgt.iot.input.adapter.http - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp + input/org.wso2.carbon.device.mgt.input.adapter.extension + input/org.wso2.carbon.device.mgt.input.adapter.http + input/org.wso2.carbon.device.mgt.input.adapter.mqtt + input/org.wso2.carbon.device.mgt.input.adapter.xmpp + output/org.wso2.carbon.device.mgt.output.adapter.mqtt + output/org.wso2.carbon.device.mgt.output.adapter.xmpp + output/org.wso2.carbon.device.mgt.output.adapter.websocket + output/org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint diff --git a/components/extensions/pom.xml b/components/extensions/pom.xml index 1a01e0208..39c7bb71a 100644 --- a/components/extensions/pom.xml +++ b/components/extensions/pom.xml @@ -33,7 +33,8 @@ http://wso2.org - org.wso2.carbon.appmgt.mdm.osgiconnector + appm-connector + cdmf-transport-adapters diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/pom.xml b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/pom.xml deleted file mode 100644 index 23f2221e5..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - iot-base-plugin - org.wso2.carbon.devicemgt-plugins - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.iot.ui - WSO2 Carbon - IoT Server UI - pom - - - - - maven-assembly-plugin - 2.5.5 - - ${project.artifactId}-${carbon.devicemgt.plugins.version} - false - - src/assembly/src.xml - - - - - create-archive - package - - single - - - - - - - - \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/api/policy-api.jag b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/api/policy-api.jag deleted file mode 100644 index 43379ec75..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/api/policy-api.jag +++ /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. - */ - -var uri = request.getRequestURI(); -var uriMatcher = new URIMatcher(String(uri)); - -var log = new Log("api/policy-api.jag"); - -var constants = require("/app/modules/constants.js"); -var policyModule = require("/app/modules/business-controllers/policy.js")["policyModule"]; - -var deviceType, deviceId; - -var user = session.get(constants.USER_SESSION_KEY); - -var responseProcessor = require('utils').response; -response.contentType = 'application/json'; - -if (!user) { - response = responseProcessor.buildErrorResponse(response, 401, "Unauthorized"); -} else { - if (uriMatcher.match("/{context}/api/policies/add")) { - var content = request.getContent(); - var policyName = content.policyName; - var policyDefinition = content.profile.policyDefinition; - var policyDescription = content.profile.policyDescription; - deviceType = content.profile.deviceType.name; - deviceId = content.deviceId; - try { - response.content = policyModule.addPolicy(policyName, deviceType, policyDefinition, - policyDescription, deviceId); - } catch (e) { - log.error("Exception occurred while trying to add new policy under name:" + policyName, e); - // http status code 500 refers to - Internal Server Error. - responseProcessor.buildErrorResponse(response, 500, "Internal server error"); - } - } -} -%> diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json deleted file mode 100644 index ecd4c2ed5..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "appName": "IoT Server", - "cachingEnabled": true, - "debuggingEnabled": false, - "permissionRoot": "/", - "loginPage": "cdmf.page.sign-in", - "adminServicesUrl": "https://${server.ip}:${server.https_port}/admin/services/", - "authModule": { - "enabled": true, - "login": { - "onSuccess": { - "script": "/app/modules/login.js", - "page": "cdmf.page.dashboard" - }, - "onFail": { - "script": "/app/modules/login.js", - "page": "cdmf.page.sign-in" - } - }, - "logout": { - "onSuccess": { - "page": "cdmf.page.sign-in" - }, - "onFail": { - "page": "cdmf.page.dashboard" - } - }, - "sso": { - "enabled": false, - "issuer" : "devicemgt", - "appName" : "devicemgt", - "identityProviderUrl" : "https://localhost:9443/samlsso", - "acs": "https://localhost:9443/devicemgt/uuf/sso/acs", - "identityAlias": "wso2carbon", - "responseSigningEnabled" : "true", - "useTenantKey": false - } - }, - "errorPages": { - "default": "uuf.page.error" - } -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/public/js/validate-register.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/public/js/validate-register.js deleted file mode 100644 index ea67fcc83..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/public/js/validate-register.js +++ /dev/null @@ -1,163 +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. - */ - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param inputString Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -function inputIsValid(regExp, inputString) { - regExp = new RegExp(regExp); - return regExp.test(inputString); -} - -/** - * Checks if an email address has the valid format or not. - * - * @param email Email address - * @returns {boolean} true if email has the valid format, otherwise false. - */ -function emailIsValid(email) { - var regExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; - return regExp.test(email); -} - -$(document).ready(function(){ - - /** - * Following click function would execute - * when a user clicks on "Add User" button - * on Add User page in WSO2 Devicemgt Console. - */ - $("button#add-user-btn").click(function () { - - var usernameInput = $("input#user_name"); - var firstnameInput = $("input#first_name"); - var lastnameInput = $("input#last_name"); - var emailInput = $("input#email"); - var passwordInput = $("input#password"); - var passwordConfirmationInput = $("input#password_confirmation"); - - var username = usernameInput.val().trim(); - var firstname = firstnameInput.val(); - var lastname = lastnameInput.val(); - var emailAddress = emailInput.val(); - var password = passwordInput.val(); - var passwordConfirmation = passwordConfirmationInput.val(); - var errorMsgWrapper = "#user-create-error-msg"; - var errorMsg = "#user-create-error-msg span"; - - if (!firstname) { - $(errorMsg).text("Firstname is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!inputIsValid(firstnameInput.data("regex"), firstname)) { - $(errorMsg).text(firstnameInput.data("errormsg")); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!lastname) { - $(errorMsg).text("Lastname is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!inputIsValid(lastnameInput.data("regex"), lastname)) { - $(errorMsg).text(lastnameInput.data("errormsg")); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!username) { - $(errorMsg).text("Username is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!inputIsValid(usernameInput.data("regex"), username)) { - $(errorMsg).text(usernameInput.data("errormsg")); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!emailAddress) { - $(errorMsg).text("Email is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!emailIsValid(emailAddress)) { - $(errorMsg).text(emailInput.data("errormsg")); - $(errorMsgWrapper).removeClass("hidden"); - } else if (!password) { - $(errorMsg).text("Password is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (password.length < 6) { - $(errorMsg).text("Password is a required field. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else if (password != passwordConfirmation) { - $(errorMsg).text("Please enter the same password for confirmation."); - $(errorMsgWrapper).removeClass("hidden"); - } else { - $(errorMsgWrapper).addClass("hidden"); - $("#add-user-btn").prop('disabled', true); - - var addUserFormData = {}; - addUserFormData.username = username; - addUserFormData.firstname = firstname; - addUserFormData.lastname = lastname; - addUserFormData.emailAddress = emailAddress; - addUserFormData.password = $("input#password").val(); - addUserFormData.userRoles = null; - - var context = $(".form-login-box").data("context"); - var addUserAPI = context + "/api/user/register"; - - $.ajax({ - type: 'POST', - url: addUserAPI, - contentType: 'application/json', - data: JSON.stringify(addUserFormData), - success: function (data) { - $("#add-user-btn").prop('disabled', false); - if (data == 200) { - $('.wr-validation-summary strong').html( - " Successfully Submitted."); - $('.wr-validation-summary').removeClass("alert-danger"); - $('.wr-validation-summary').addClass("alert-success"); - } else if (data == 201) { - $('.wr-validation-summary strong').html( - " User created succssfully. You will be " + - "redirected to login page."); - $('.wr-validation-summary').removeClass("alert-danger"); - $('.wr-validation-summary').addClass("alert-success"); - $("#add-user-btn").prop('disabled', true); - setTimeout(function () { - window.location = context + "/login"; - }, 2000); - } else if (data == 400) { - $('.wr-validation-summary strong').html( - " Exception at backend."); - $('.wr-validation-summary').removeClass("alert-danger"); - $('.wr-validation-summary').addClass("alert-warning"); - } else if (data == 403) { - $('.wr-validation-summary strong').html("Action not permitted."); - } else if (data == 409) { - $('.wr-validation-summary strong').html( - " User name already exists."); - $('.wr-validation-summary').removeClass("alert-default"); - $('.wr-validation-summary').addClass("alert-success"); - } - $('.wr-validation-summary').removeClass("hidden"); - $('#password').val(''); - $('#password_confirmation').val(''); - }, - error: function (err) { - $("#add-user-btn").prop('disabled', false); - $('.wr-validation-summary strong').html( - " An unexpected error occurred."); - $('.wr-validation-summary').removeClass("hidden"); - } - }); - } - }); -}); diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.hbs deleted file mode 100644 index e68e3ef1d..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.hbs +++ /dev/null @@ -1,75 +0,0 @@ -{{unit "cdmf.unit.ui.title" pageTitle="Register"}} - -{{#zone "content"}} - {{unit "uuf.unit.lib.form-validation"}} - - -{{/zone}} - -{{#zone "bottomJs"}} - {{js "js/validate-register.js"}} -{{/zone}} diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.js deleted file mode 100644 index f359aabc9..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.js +++ /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. - */ - -/** - * Returns the dynamic state to be populated by add-user page. - * - * @param context Object that gets updated with the dynamic state of this page to be presented - * @returns {*} A context object that returns the dynamic state of this page to be presented - */ -function onRequest(context) { - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var page = {}; - page["usernameJSRegEx"] = devicemgtProps.userValidationConfig.usernameJSRegEx; - page["usernameHelpText"] = devicemgtProps.userValidationConfig.usernameHelpMsg; - page["usernameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.usernameRegExViolationErrorMsg; - page["firstnameJSRegEx"] = devicemgtProps.userValidationConfig.firstnameJSRegEx; - page["firstnameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.firstnameRegExViolationErrorMsg; - page["lastnameJSRegEx"] = devicemgtProps.userValidationConfig.lastnameJSRegEx; - page["lastnameRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.lastnameRegExViolationErrorMsg; - page["emailJSRegEx"] = devicemgtProps.userValidationConfig.emailJSRegEx; - page["emailRegExViolationErrorMsg"] = devicemgtProps.userValidationConfig.emailRegExViolationErrorMsg; - return page; -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.json deleted file mode 100644 index 58346ba14..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.register/register.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/register", - "isAnonymous": true, - "layout": "uuf.layout.sign-in" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.hbs deleted file mode 100644 index 4ab4ff871..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.hbs +++ /dev/null @@ -1,5 +0,0 @@ -{{#zone "signInForm-below"}} - -{{/zone}} diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.json deleted file mode 100644 index dea3950ba..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/iot.page.sign-in/sign-in.json +++ /dev/null @@ -1,4 +0,0 @@ -{ -"version": "1.0.0", -"extends": "cdmf.page.sign-in" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.hbs deleted file mode 100644 index ca52690eb..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.hbs +++ /dev/null @@ -1,120 +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 icon}} - - {{else}} - - {{/if}} - {{name}} - - -
-
-
-
-

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

-

- {{description}} -
-

- -
- {{#each params.0.pathParams}} - -
- {{/each}} - {{#each params.0.formParams}} - -
- {{/each}} - {{#each params.0.queryParams}} - -
- {{/each}} - - - -
-
-
-
-
- {{/each}} -
-{{else}} -
-

- Operations Loading Failed!

-
-{{/if}} - - - -{{#zone "bottomJs"}} - {{js "js/operation-bar.js"}} -{{/zone}} diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.js deleted file mode 100644 index d1a58b9bd..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.js +++ /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. - */ - -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 controlOperations = operationModule.getControlOperations(device.type); - var queryParams = []; - var formParams = []; - var pathParams = []; - for (var i = 0; i < controlOperations.length; i++) { - var currentParamList = controlOperations[i]["params"]; - 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]["params"] = currentParamList; - } - 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; -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/operation-bar.json deleted file mode 100644 index 688e93980..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.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/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/public/js/operation-bar.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/public/js/operation-bar.js deleted file mode 100644 index 68bb7f5f1..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.device.operation-bar/public/js/operation-bar.js +++ /dev/null @@ -1,126 +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. - */ - -/* - * 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 uriencodedQueryStr = ""; - var uriencodedFormStr = ""; - var payload = {}; - form.find("input").each(function () { - var input = $(this); - if (input.data("param-type") == "path") { - uri = uri.replace("{" + input.attr("id") + "}", input.val()); - } else if (input.data("param-type") == "query") { - var prefix = (uriencodedQueryStr == "") ? "?" : "&"; - uriencodedQueryStr += prefix + input.attr("id") + "=" + input.val(); - } else if (input.data("param-type") == "form") { - var prefix = (uriencodedFormStr == "") ? "" : "&"; - uriencodedFormStr += prefix + input.attr("id") + "=" + input.val(); - //payload[input.attr("id")] = input.val(); - } - }); - uri += uriencodedQueryStr; - var httpMethod = form.attr("method").toUpperCase(); - var contentType = form.attr("enctype"); - console.log(payload); - if (contentType == undefined || contentType.isEmpty()) { - 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"); - 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); - $(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; - description.html(reason); - $(modalPopupContent).html(content.html()); - }; - //executing http request - if (httpMethod == "GET") { - invokerUtil.get(uri, successCallBack, errorCallBack, contentType); - } else if (httpMethod == "POST") { - 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'); - }); -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.hbs deleted file mode 100644 index acf0c66e1..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.hbs +++ /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. -}} -{{#zone "topCss"}} - {{css "css/codemirror.css"}} -{{/zone}} -
-
- - - - - - - - - -
-
-

EDIT POLICY

-
-
-
-
-
-

Step 1: Edit current profile

-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
- - - -
-
-{{#zone "bottomJs"}} - {{js "js/codemirror.js"}} - {{js "js/sql.js"}} - {{js "js/policy-edit.js"}} -{{/zone}} - diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.js deleted file mode 100644 index 3f4446f30..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.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 log = new Log("policy-view-edit-unit backend js"); - log.debug("calling policy-view-edit-unit"); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - context.roles = userModule.getRoles().content; - return context; -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.json deleted file mode 100644 index fd2590129..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/edit.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/css/codemirror.css b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/css/codemirror.css deleted file mode 100644 index e749a5211..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/css/codemirror.css +++ /dev/null @@ -1,342 +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. - */ - -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; - left: -30px; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -@-moz-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@-webkit-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - height: 100%; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; - left: -30px; -} -.CodeMirror-gutter-wrapper { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror ::selection { background: #d7d4f0; } -.CodeMirror ::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/codemirror.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/codemirror.js deleted file mode 100644 index 20f3f95ed..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/codemirror.js +++ /dev/null @@ -1,8720 +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 is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - module.exports = mod(); - else if (typeof define == "function" && define.amd) // AMD - return define([], mod); - else // Plain browser env - this.CodeMirror = mod(); -})(function() { - "use strict"; - - // BROWSER SNIFFING - - // Kludges for bugs and behavior differences that can't be feature - // detected are enabled based on userAgent etc sniffing. - - var gecko = /gecko\/\d/i.test(navigator.userAgent); - var ie_upto10 = /MSIE \d/.test(navigator.userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); - var ie = ie_upto10 || ie_11up; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); - var webkit = /WebKit\//.test(navigator.userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); - var chrome = /Chrome\//.test(navigator.userAgent); - var presto = /Opera\//.test(navigator.userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); - var phantom = /PhantomJS/.test(navigator.userAgent); - - var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); - // This is woefully incomplete. Suggestions for alternative methods welcome. - var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); - var mac = ios || /Mac/.test(navigator.platform); - var windows = /win/i.test(navigator.platform); - - var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) presto_version = Number(presto_version[1]); - if (presto_version && presto_version >= 15) { presto = false; webkit = true; } - // Some browsers use the wrong event properties to signal cmd/ctrl on OS X - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || (ie && ie_version >= 9); - - // Optimize some code when these features are not used. - var sawReadOnlySpans = false, sawCollapsedSpans = false; - - // EDITOR CONSTRUCTOR - - // A CodeMirror instance represents an editor. This is the object - // that user code is usually dealing with. - - function CodeMirror(place, options) { - if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - setGuttersForLineNumbers(options); - - var doc = options.value; - if (typeof doc == "string") doc = new Doc(doc, options.mode); - this.doc = doc; - - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input); - display.wrapper.CodeMirror = this; - updateGutters(this); - themeChanged(this); - if (options.lineWrapping) - this.display.wrapper.className += " CodeMirror-wrap"; - if (options.autofocus && !mobile) display.input.focus(); - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - }; - - var cm = this; - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || cm.hasFocus()) - setTimeout(bind(onFocus, this), 20); - else - onBlur(this); - - for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) - optionHandlers[opt](this, options[opt], Init); - maybeUpdateLineNumberWidth(this); - if (options.finishInit) options.finishInit(this); - for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - display.lineDiv.style.textRendering = "auto"; - } - - // DISPLAY CONSTRUCTOR - - // The display handles the DOM integration, both for input reading - // and content drawing. It holds references to DOM nodes and - // display-related state. - - function Display(place, doc, input) { - var d = this; - this.input = input; - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = elt("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; - - if (place) { - if (place.appendChild) place.appendChild(d.wrapper); - else place(d.wrapper); - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - - d.activeTouch = null; - - input.init(d); - } - - // STATE UPDATES - - // Used to get the editor into a consistent state again when options change. - - function loadMode(cm) { - cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - - function resetModeState(cm) { - cm.doc.iter(function(line) { - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - }); - cm.doc.frontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) regChange(cm); - } - - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function(){updateScrollbars(cm);}, 100); - } - - // Returns a function that estimates the height of a line, to use as - // first approximation until the line becomes visible (and is thus - // properly measurable). - function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function(line) { - if (lineIsHidden(cm.doc, line)) return 0; - - var widgetsHeight = 0; - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; - } - - if (wrapping) - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - else - return widgetsHeight + th; - }; - } - - function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function(line) { - var estHeight = est(line); - if (estHeight != line.height) updateLineHeight(line, estHeight); - }); - } - - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - - function guttersChanged(cm) { - updateGutters(cm); - regChange(cm); - setTimeout(function(){alignHorizontally(cm);}, 20); - } - - // Rebuild the gutter elements, ensure the margin to the left of the - // code matches their width. - function updateGutters(cm) { - var gutters = cm.display.gutters, specs = cm.options.gutters; - removeChildren(gutters); - for (var i = 0; i < specs.length; ++i) { - var gutterClass = specs[i]; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt; - gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = i ? "" : "none"; - updateGutterSpace(cm); - } - - function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth; - cm.display.sizer.style.marginLeft = width + "px"; - } - - // Compute the character length of a line, taking into account - // collapsed ranges (see markText) that might hide parts, and join - // other lines onto it. - function lineLength(line) { - if (line.height == 0) return 0; - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found = merged.find(0, true); - len -= cur.text.length - found.from.ch; - cur = found.to.line; - len += cur.text.length - found.to.ch; - } - return len; - } - - // Find the longest line in the document. - function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function(line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - - // Make sure the gutters options contains the element - // "CodeMirror-linenumbers" when the lineNumbers option is true. - function setGuttersForLineNumbers(options) { - var found = indexOf(options.gutters, "CodeMirror-linenumbers"); - if (found == -1 && options.lineNumbers) { - options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); - } else if (found > -1 && !options.lineNumbers) { - options.gutters = options.gutters.slice(0); - options.gutters.splice(found, 1); - } - } - - // SCROLLBARS - - // Prepare DOM reads needed to update the scrollbars. Done in one - // shot to minimize update/measure roundtrips. - function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - - function NativeScrollbars(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - place(vert); place(horiz); - - on(vert, "scroll", function() { - if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); - }); - on(horiz, "scroll", function() { - if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); - }); - - this.checkedOverlay = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - - NativeScrollbars.prototype = copyObj({ - update: function(measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedOverlay && measure.clientHeight > 0) { - if (sWidth == 0) this.overlayHack(); - this.checkedOverlay = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; - }, - setScrollLeft: function(pos) { - if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; - }, - setScrollTop: function(pos) { - if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; - }, - overlayHack: function() { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.minHeight = this.vert.style.minWidth = w; - var self = this; - var barMouseDown = function(e) { - if (e_target(e) != self.vert && e_target(e) != self.horiz) - operation(self.cm, onMouseDown)(e); - }; - on(this.vert, "mousedown", barMouseDown); - on(this.horiz, "mousedown", barMouseDown); - }, - clear: function() { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - } - }, NativeScrollbars.prototype); - - function NullScrollbars() {} - - NullScrollbars.prototype = copyObj({ - update: function() { return {bottom: 0, right: 0}; }, - setScrollLeft: function() {}, - setScrollTop: function() {}, - clear: function() {} - }, NullScrollbars.prototype); - - CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function() { - if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); - }); - node.setAttribute("cm-not-content", "true"); - }, function(pos, axis) { - if (axis == "horizontal") setScrollLeft(cm, pos); - else setScrollTop(cm, pos); - }, cm); - if (cm.display.scrollbars.addClass) - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - function updateScrollbars(cm, measure) { - if (!measure) measure = measureForScrollbars(cm); - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - updateHeightsInViewport(cm); - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } - } - - // Re-synchronize the fake scrollbars with the actual size of the - // content. - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else d.scrollbarFiller.style.display = ""; - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else d.gutterFiller.style.display = ""; - } - - // Compute the lines that are visible in a given viewport (defaults - // the the current scroll position). viewport may contain top, - // height, and ensure (see op.scrollToPos) properties. - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)}; - } - - // LINE NUMBERS - - // Re-align line numbers and gutter marks to compensate for - // horizontal scrolling. - function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) if (!view[i].hidden) { - if (cm.options.fixedGutter && view[i].gutter) - view[i].gutter.style.left = left; - var align = view[i].alignable; - if (align) for (var j = 0; j < align.length; j++) - align[j].style.left = left; - } - if (cm.options.fixedGutter) - display.gutters.style.left = (comp + gutterW) + "px"; - } - - // Used to ensure that the line number gutter is still the right - // size for the current document size. Returns true when an update - // is needed. - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) return false; - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm); - return true; - } - return false; - } - - function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)); - } - - // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, - // but using getBoundingClientRect to get a sub-pixel-accurate - // result. - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - - // DISPLAY DRAWING - - function DisplayUpdate(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - } - - DisplayUpdate.prototype.signal = function(emitter, type) { - if (hasHandler(emitter, type)) - this.events.push(arguments); - }; - DisplayUpdate.prototype.finish = function() { - for (var i = 0; i < this.events.length; i++) - signal.apply(null, this.events[i]); - }; - - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - - // Does the actual updating of the line display. Bails out - // (returning false) when there is nothing to be done and forced is - // false. - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false; - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - return false; - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); - if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - return false; - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var focused = activeElt(); - if (toUpdate > 4) display.lineDiv.style.display = "none"; - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) display.lineDiv.style.display = ""; - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true; - } - - function postUpdateDisplay(cm, update) { - var force = update.force, viewport = update.viewport; - for (var first = true;; first = false) { - if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { - force = true; - } else { - force = false; - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - break; - } - if (!updateDisplayIfNeeded(cm, update)) break; - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - } - - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } - } - - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - update.finish(); - } - } - - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - var total = measure.docHeight + cm.display.barHeight; - cm.display.heightForcer.style.top = total + "px"; - cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; - } - - // Read the actual heights of the rendered lines, and update their - // stored heights to match. - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], height; - if (cur.hidden) continue; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - } - var diff = cur.line.height - height; - if (height < 2) height = textHeight(display); - if (diff > .001 || diff < -.001) { - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) for (var j = 0; j < cur.rest.length; j++) - updateWidgetHeight(cur.rest[j]); - } - } - } - - // Read and store the height of line widgets associated with the - // given line. - function updateWidgetHeight(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) - line.widgets[i].height = line.widgets[i].node.offsetHeight; - } - - // Do a bulk-read of the DOM positions and sizes needed to draw the - // view, so that we don't interleave reading and writing to the DOM. - function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; - width[cm.options.gutters[i]] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth}; - } - - // Sync the actual display DOM structure with display.view, removing - // nodes for lines that are no longer in view, and creating the ones - // that are not there yet, and updating the ones that are out of - // date. - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - node.style.display = "none"; - else - node.parentNode.removeChild(node); - return next; - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) { - } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) cur = rm(cur); - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) cur = rm(cur); - } - - // When an aspect of a line changes, a string is added to - // lineView.changes. This updates the relevant part of the line's - // DOM structure. - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") updateLineText(cm, lineView); - else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); - else if (type == "class") updateLineClasses(lineView); - else if (type == "widget") updateLineWidgets(cm, lineView, dims); - } - lineView.changes = null; - } - - // Lines with gutter elements, widgets or a background class need to - // be wrapped, and have the extra elements added to the wrapper div - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) lineView.node.style.zIndex = 2; - } - return lineView.node; - } - - function updateLineBackground(lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) cls += " CodeMirror-linebackground"; - if (lineView.background) { - if (cls) lineView.background.className = cls; - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - } - } - - // Wrapper around buildLineContent which will reuse the structure - // in display.externalMeasured when possible. - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - - // Redraw the line's text. Interacts with the background and text - // classes because the mode may output tokens that influence these - // classes. - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) lineView.node = built.pre; - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - - function updateLineClasses(lineView) { - updateLineBackground(lineView); - if (lineView.line.wrapClass) - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - else if (lineView.node != lineView.text) - lineView.node.className = ""; - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + - (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + - "px; width: " + dims.gutterTotalWidth + "px"); - cm.display.input.setUneditable(gutterWrap); - wrap.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) - gutterWrap.className += " " + lineView.line.gutterClass; - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " - + cm.display.lineNumInnerWidth + "px")); - if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; - if (found) - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + - dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) lineView.alignable = null; - for (var node = lineView.node.firstChild, next; node; node = next) { - var next = node.nextSibling; - if (node.className == "CodeMirror-linewidget") - lineView.node.removeChild(node); - } - insertLineWidgets(cm, lineView, dims); - } - - // Build a line's DOM representation from scratch - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) lineView.bgClass = built.bgClass; - if (built.textClass) lineView.textClass = built.textClass; - - updateLineClasses(lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node; - } - - // A lineView may contain multiple logical lines (when merged by - // collapsed spans). The widgets for all of them need to be drawn. - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); - } - - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) return; - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); - if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) - wrap.insertBefore(node, lineView.gutter || lineView.text); - else - wrap.appendChild(node); - signalLater(widget, "redraw"); - } - } - - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - - // POSITION OBJECT - - // A Pos instance represents a position within the text. - var Pos = CodeMirror.Pos = function(line, ch) { - if (!(this instanceof Pos)) return new Pos(line, ch); - this.line = line; this.ch = ch; - }; - - // Compare two positions, return 0 if they are the same, a negative - // number when a is less, and a positive number otherwise. - var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; - - function copyPos(x) {return Pos(x.line, x.ch);} - function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } - function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } - - // INPUT HANDLING - - function ensureFocus(cm) { - if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } - } - - function isReadOnly(cm) { - return cm.options.readOnly || cm.doc.cantEdit; - } - - // This will be set to an array of strings when copying, so that, - // when pasting, we know what kind of selections the copied text - // was made out of. - var lastCopied = null; - - function applyTextInput(cm, inserted, deleted, sel) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) sel = doc.sel; - - var textLines = splitLines(inserted), multiPaste = null; - // When pasing N lines into N selections, insert one line per selection - if (cm.state.pasteIncoming && sel.ranges.length > 1) { - if (lastCopied && lastCopied.join("\n") == inserted) - multiPaste = sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); - else if (textLines.length == sel.ranges.length) - multiPaste = map(textLines, function(l) { return [l]; }); - } - - // Normal behavior is to insert the new text into every selection - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range = sel.ranges[i]; - var from = range.from(), to = range.to(); - if (range.empty()) { - if (deleted && deleted > 0) // Handle deletion - from = Pos(from.line, from.ch - deleted); - else if (cm.state.overwrite && !cm.state.pasteIncoming) // Handle overwrite - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - } - var updateInput = cm.curOp.updateInput; - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, - origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - // When an 'electric' character is inserted, immediately trigger a reindent - if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && - cm.options.smartIndent && range.head.ch < 100 && - (!i || sel.ranges[i - 1].head.line != range.head.line)) { - var mode = cm.getModeAt(range.head); - var end = changeEnd(changeEvent); - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indentLine(cm, end.line, "smart"); - break; - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) - indentLine(cm, end.line, "smart"); - } - } - } - ensureCursorVisible(cm); - cm.curOp.updateInput = updateInput; - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = false; - } - - function copyableRanges(cm) { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return {text: text, ranges: ranges}; - } - - function disableBrowserMagic(field) { - field.setAttribute("autocorrect", "off"); - field.setAttribute("autocapitalize", "off"); - field.setAttribute("spellcheck", "false"); - } - - // TEXTAREA INPUT STYLE - - function TextareaInput(cm) { - this.cm = cm; - // See input.poll and input.reset - this.prevInput = ""; - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false; - // Self-resetting timeout for the poller - this.polling = new Delayed(); - // Tracks when input.reset has punted to just putting a short - // string into the textarea instead of the full selection. - this.inaccurateSelection = false; - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false; - }; - - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) te.style.width = "1000px"; - else te.setAttribute("wrap", "off"); - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) te.style.border = "1px solid black"; - disableBrowserMagic(te); - return div; - } - - TextareaInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = this.cm; - - // Wraps and hides input textarea - var div = this.wrapper = hiddenTextarea(); - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - var te = this.textarea = div.firstChild; - display.wrapper.insertBefore(div, display.wrapper.firstChild); - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) te.style.width = "0px"; - - on(te, "input", function() { - if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; - input.poll(); - }); - - on(te, "paste", function() { - // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 - // Add a char to the end of textarea before paste occur so that - // selection doesn't span to the end of textarea. - if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { - var start = te.selectionStart, end = te.selectionEnd; - te.value += "$"; - // The selection end needs to be set before the start, otherwise there - // can be an intermediate non-empty selection between the two, which - // can override the middle-click paste buffer on linux and cause the - // wrong thing to get pasted. - te.selectionEnd = end; - te.selectionStart = start; - cm.state.fakedLastChar = true; - } - cm.state.pasteIncoming = true; - input.fastPoll(); - }); - - function prepareCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (input.inaccurateSelection) { - input.prevInput = ""; - input.inaccurateSelection = false; - te.value = lastCopied.join("\n"); - selectInput(te); - } - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") cm.state.cutIncoming = true; - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - - on(display.scroller, "paste", function(e) { - if (eventInWidget(display, e)) return; - cm.state.pasteIncoming = true; - input.focus(); - }); - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function(e) { - if (!eventInWidget(display, e)) e_preventDefault(e); - }); - }, - - prepareSelection: function() { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc; - var result = prepareSelection(cm); - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result; - }, - - showSelection: function(drawn) { - var cm = this.cm, display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }, - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - reset: function(typing) { - if (this.contextMenuPending) return; - var minimal, selected, cm = this.cm, doc = cm.doc; - if (cm.somethingSelected()) { - this.prevInput = ""; - var range = doc.sel.primary(); - minimal = hasCopyEvent && - (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); - var content = minimal ? "-" : selected || cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) selectInput(this.textarea); - if (ie && ie_version >= 9) this.hasSelection = content; - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) this.hasSelection = null; - } - this.inaccurateSelection = minimal; - }, - - getField: function() { return this.textarea; }, - - supportsTouch: function() { return false; }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus(); } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } - }, - - blur: function() { this.textarea.blur(); }, - - resetPosition: function() { - this.wrapper.style.top = this.wrapper.style.left = 0; - }, - - receivedFocus: function() { this.slowPoll(); }, - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - slowPoll: function() { - var input = this; - if (input.pollingFast) return; - input.polling.set(this.cm.options.pollInterval, function() { - input.poll(); - if (input.cm.state.focused) input.slowPoll(); - }); - }, - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - fastPoll: function() { - var missed = false, input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) {missed = true; input.polling.set(60, p);} - else {input.pollingFast = false; input.slowPoll();} - } - input.polling.set(20, p); - }, - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - poll: function() { - var cm = this.cm, input = this.textarea, prevInput = this.prevInput; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (!cm.state.focused || (hasSelection(input) && !prevInput) || - isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) - return false; - // See paste handler for more on the fakedLastChar kludge - if (cm.state.pasteIncoming && cm.state.fakedLastChar) { - input.value = input.value.substring(0, input.value.length - 1); - cm.state.fakedLastChar = false; - } - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) return false; - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false; - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 0x200b && !prevInput) prevInput = "\u200b"; - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; - - var self = this; - runInOp(cm, function() { - applyTextInput(cm, text.slice(same), prevInput.length - same); - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; - else self.prevInput = text; - }); - return true; - }, - - ensurePolled: function() { - if (this.pollingFast && this.poll()) this.pollingFast = false; - }, - - onKeyPress: function() { - if (ie && ie_version >= 9) this.hasSelection = null; - this.fastPoll(); - }, - - onContextMenu: function(e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea; - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) return; // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - - var oldCSS = te.style.cssText; - input.wrapper.style.position = "absolute"; - te.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + - "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + - (ie ? "rgba(255, 255, 255, .05)" : "transparent") + - "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) - display.input.focus(); - if (webkit) window.scrollTo(null, oldScrollY); - display.input.reset(); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) te.value = input.prevInput = " "; - input.contextMenuPending = true; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "\u200b" + (selected ? te.value : ""); - te.value = "\u21da"; // Used to catch context-menu undo - te.value = extval; - input.prevInput = selected ? "" : "\u200b"; - te.selectionStart = 1; te.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - input.contextMenuPending = false; - input.wrapper.style.position = "relative"; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); - var i = 0, poll = function() { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") - operation(cm, commands.selectAll)(cm); - else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); - else display.input.reset(); - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) prepareSelectAllHack(); - if (captureRightClick) { - e_stop(e); - var mouseup = function() { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }, - - setUneditable: nothing, - - needsContentAttribute: false - }, TextareaInput.prototype); - - // CONTENTEDITABLE INPUT STYLE - - function ContentEditableInput(cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.gracePeriod = false; - } - - ContentEditableInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = "true"; - disableBrowserMagic(div); - - on(div, "paste", function(e) { - var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); - if (pasted) { - e.preventDefault(); - cm.replaceSelection(pasted, null, "paste"); - } - }); - - on(div, "compositionstart", function(e) { - var data = e.data; - input.composing = {sel: cm.doc.sel, data: data, startData: data}; - if (!data) return; - var prim = cm.doc.sel.primary(); - var line = cm.getLine(prim.head.line); - var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); - if (found > -1 && found <= prim.head.ch) - input.composing.sel = simpleSelection(Pos(prim.head.line, found), - Pos(prim.head.line, found + data.length)); - }); - on(div, "compositionupdate", function(e) { - input.composing.data = e.data; - }); - on(div, "compositionend", function(e) { - var ours = input.composing; - if (!ours) return; - if (e.data != ours.startData && !/\u200b/.test(e.data)) - ours.data = e.data; - // Need a small delay to prevent other code (input event, - // selection polling) from doing damage when fired right after - // compositionend. - setTimeout(function() { - if (!ours.handled) - input.applyComposition(ours); - if (input.composing == ours) - input.composing = null; - }, 50); - }); - - on(div, "touchstart", function() { - input.forceCompositionEnd(); - }); - - on(div, "input", function() { - if (input.composing) return; - if (!input.pollContent()) - runInOp(input.cm, function() {regChange(cm);}); - }); - - function onCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (e.type == "cut") cm.replaceSelection("", null, "cut"); - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.operation(function() { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - // iOS exposes the clipboard API, but seems to discard content inserted into it - if (e.clipboardData && !ios) { - e.preventDefault(); - e.clipboardData.clearData(); - e.clipboardData.setData("text/plain", lastCopied.join("\n")); - } else { - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.join("\n"); - var hadFocus = document.activeElement; - selectInput(te); - setTimeout(function() { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - }, 50); - } - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }, - - prepareSelection: function() { - var result = prepareSelection(this.cm, false); - result.focus = this.cm.state.focused; - return result; - }, - - showSelection: function(info) { - if (!info || !this.cm.display.view.length) return; - if (info.focus) this.showPrimarySelection(); - this.showMultipleSelections(info); - }, - - showPrimarySelection: function() { - var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); - var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && - cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) - return; - - var start = posToDOM(this.cm, prim.from()); - var end = posToDOM(this.cm, prim.to()); - if (!start && !end) return; - - var view = this.cm.display.view; - var old = sel.rangeCount && sel.getRangeAt(0); - if (!start) { - start = {node: view[0].measure.map[2], offset: 0}; - } else if (!end) { // FIXME dangerously hacky - var measure = view[view.length - 1].measure; - var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; - } - - try { var rng = range(start.node, start.offset, end.offset, end.node); } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - sel.removeAllRanges(); - sel.addRange(rng); - if (old && sel.anchorNode == null) sel.addRange(old); - else if (gecko) this.startGracePeriod(); - } - this.rememberSelection(); - }, - - startGracePeriod: function() { - var input = this; - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function() { - input.gracePeriod = false; - if (input.selectionChanged()) - input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); - }, 20); - }, - - showMultipleSelections: function(info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }, - - rememberSelection: function() { - var sel = window.getSelection(); - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; - }, - - selectionInEditor: function() { - var sel = window.getSelection(); - if (!sel.rangeCount) return false; - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node); - }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor") this.div.focus(); - }, - blur: function() { this.div.blur(); }, - getField: function() { return this.div; }, - - supportsTouch: function() { return true; }, - - receivedFocus: function() { - var input = this; - if (this.selectionInEditor()) - this.pollSelection(); - else - runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); - - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }, - - selectionChanged: function() { - var sel = window.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; - }, - - pollSelection: function() { - if (!this.composing && !this.gracePeriod && this.selectionChanged()) { - var sel = window.getSelection(), cm = this.cm; - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) runInOp(cm, function() { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; - }); - } - }, - - pollContent: function() { - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); - var from = sel.from(), to = sel.to(); - if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; - - var fromIndex; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - var fromLine = lineNo(display.view[0].line); - var fromNode = display.view[0].node; - } else { - var fromLine = lineNo(display.view[fromIndex].line); - var fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - if (toIndex == display.view.length - 1) { - var toLine = display.viewTo - 1; - var toNode = display.view[toIndex].node; - } else { - var toLine = lineNo(display.view[toIndex + 1].line) - 1; - var toNode = display.view[toIndex + 1].node.previousSibling; - } - - var newText = splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } - else break; - } - - var cutFront = 0, cutEnd = 0; - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - ++cutFront; - var newBot = lst(newText), oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - ++cutEnd; - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); - newText[0] = newText[0].slice(cutFront); - - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true; - } - }, - - ensurePolled: function() { - this.forceCompositionEnd(); - }, - reset: function() { - this.forceCompositionEnd(); - }, - forceCompositionEnd: function() { - if (!this.composing || this.composing.handled) return; - this.applyComposition(this.composing); - this.composing.handled = true; - this.div.blur(); - this.div.focus(); - }, - applyComposition: function(composing) { - if (composing.data && composing.data != composing.startData) - operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); - }, - - setUneditable: function(node) { - node.setAttribute("contenteditable", "false"); - }, - - onKeyPress: function(e) { - e.preventDefault(); - operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); - }, - - onContextMenu: nothing, - resetPosition: nothing, - - needsContentAttribute: true - }, ContentEditableInput.prototype); - - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) return null; - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - - var order = getOrder(line), side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, "left"); - result.offset = result.collapse == "right" ? result.end : result.start; - return result; - } - - function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } - - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); - node = null; offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) return null; - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i]; - if (lineView.node == lineNode) - return locateNodeInLineView(lineView, node, offset); - } - } - - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false; - if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad); - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) offset = textNode.nodeValue.length; - } - while (topNode.parentNode != wrapper) topNode = topNode.parentNode; - var measure = lineView.measure, maps = measure.maps; - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map = i < 0 ? measure.map : maps[i]; - for (var j = 0; j < map.length; j += 3) { - var curNode = map[j + 2]; - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); - var ch = map[j] + offset; - if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; - return Pos(line, ch); - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) return badPos(found, bad); - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) - return badPos(Pos(found.line, found.ch - dist), bad); - else - dist += after.textContent.length; - } - for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) - return badPos(Pos(found.line, found.ch + dist), bad); - else - dist += after.textContent.length; - } - } - - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false; - function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText != null) { - if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); - text += cmText; - return; - } - var markerID = node.getAttribute("cm-marker"), range; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range = found[0].find())) - text += getBetween(cm.doc, range.from, range.to).join("\n"); - return; - } - if (node.getAttribute("contenteditable") == "false") return; - for (var i = 0; i < node.childNodes.length; i++) - walk(node.childNodes[i]); - if (/^(pre|div|p)$/i.test(node.nodeName)) - closing = true; - } else if (node.nodeType == 3) { - var val = node.nodeValue; - if (!val) return; - if (closing) { - text += "\n"; - closing = false; - } - text += val; - } - } - for (;;) { - walk(from); - if (from == to) break; - from = from.nextSibling; - } - return text; - } - - CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; - - // SELECTION / CURSOR - - // Selection objects are immutable. A new one is created every time - // the selection changes. A selection is one or more non-overlapping - // (and non-touching) ranges, sorted, and an integer that indicates - // which one is the primary selection (the one that's scrolled into - // view, that getCursor returns, etc). - function Selection(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - } - - Selection.prototype = { - primary: function() { return this.ranges[this.primIndex]; }, - equals: function(other) { - if (other == this) return true; - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; - for (var i = 0; i < this.ranges.length; i++) { - var here = this.ranges[i], there = other.ranges[i]; - if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; - } - return true; - }, - deepCopy: function() { - for (var out = [], i = 0; i < this.ranges.length; i++) - out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); - return new Selection(out, this.primIndex); - }, - somethingSelected: function() { - for (var i = 0; i < this.ranges.length; i++) - if (!this.ranges[i].empty()) return true; - return false; - }, - contains: function(pos, end) { - if (!end) end = pos; - for (var i = 0; i < this.ranges.length; i++) { - var range = this.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - return i; - } - return -1; - } - }; - - function Range(anchor, head) { - this.anchor = anchor; this.head = head; - } - - Range.prototype = { - from: function() { return minPos(this.anchor, this.head); }, - to: function() { return maxPos(this.anchor, this.head); }, - empty: function() { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - } - }; - - // Take an unsorted, potentially overlapping set of ranges, and - // build a selection out of it. 'Consumes' ranges array (modifying - // it). - function normalizeSelection(ranges, primIndex) { - var prim = ranges[primIndex]; - ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - if (cmp(prev.to(), cur.from()) >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) --primIndex; - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - - // Most of the external API clips given positions to make sure they - // actually exist within the document. - function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} - function clipPos(doc, pos) { - if (pos.line < doc.first) return Pos(doc.first, 0); - var last = doc.first + doc.size - 1; - if (pos.line > last) return Pos(last, getLine(doc, last).text.length); - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) return Pos(pos.line, linelen); - else if (ch < 0) return Pos(pos.line, 0); - else return pos; - } - function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} - function clipPosArray(doc, array) { - for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); - return out; - } - - // SELECTION UPDATES - - // The 'scroll' parameter given to many of these indicated whether - // the new cursor position should be scrolled into view after - // modifying the selection. - - // If shift is held or the extend flag is set, extends a range to - // include a given position (and optionally a second position). - // Otherwise, simply returns the range between the given positions. - // Used for cursor motion and such. - function extendRange(doc, range, head, other) { - if (doc.cm && doc.cm.display.shift || doc.extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - - // Extend the primary selection range, discard the rest. - function extendSelection(doc, head, other, options) { - setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); - } - - // Extend all selections (pos is an array of selections with length - // equal the number of selections) - function extendSelections(doc, heads, options) { - for (var out = [], i = 0; i < doc.sel.ranges.length; i++) - out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); - var newSel = normalizeSelection(out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - - // Updates a single range in the selection. - function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); - } - - // Reset the selection to a single range. - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - - // Give beforeSelectionChange handlers a change to influence a - // selection update. - function filterSelectionChange(doc, sel) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); - } - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); - else return sel; - } - - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - - // Set a new selection. - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - sel = filterSelectionChange(doc, sel); - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm) - ensureCursorVisible(doc.cm); - } - - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) return; - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - - // Verify that the selection does not partially select any atomic - // marked ranges. - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); - } - - // Return a selection that does not partially select any atomic - // ranges. - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) out = sel.ranges.slice(0, i); - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel; - } - - // Ensure a given position is not inside an atomic range. - function skipAtomic(doc, pos, bias, mayClear) { - var flipped = false, curPos = pos; - var dir = bias || 1; - doc.cantEdit = false; - search: for (;;) { - var line = getLine(doc, curPos.line); - if (line.markedSpans) { - for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) break; - else {--i; continue;} - } - } - if (!m.atomic) continue; - var newPos = m.find(dir < 0 ? -1 : 1); - if (cmp(newPos, curPos) == 0) { - newPos.ch += dir; - if (newPos.ch < 0) { - if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); - else newPos = null; - } else if (newPos.ch > line.text.length) { - if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); - else newPos = null; - } - if (!newPos) { - if (flipped) { - // Driven in a corner -- no valid cursor position found at all - // -- try again *with* clearing, if we didn't already - if (!mayClear) return skipAtomic(doc, pos, bias, true); - // Otherwise, turn off editing until further notice, and return the start of the doc - doc.cantEdit = true; - return Pos(doc.first, 0); - } - flipped = true; newPos = pos; dir = -dir; - } - } - curPos = newPos; - continue search; - } - } - } - return curPos; - } - } - - // SELECTION DRAWING - - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - - function prepareSelection(cm, primary) { - var doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (primary === false && i == doc.sel.primIndex) continue; - var range = doc.sel.ranges[i]; - var collapsed = range.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - drawSelectionCursor(cm, range, curFragment); - if (!collapsed) - drawSelectionRange(cm, range, selFragment); - } - return result; - } - - // Draws a cursor for the given range - function drawSelectionCursor(cm, range, output) { - var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } - } - - // Draws the given range as a highlighted selection - function drawSelectionRange(cm, range, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - - function add(left, top, width, bottom) { - if (top < 0) top = 0; - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + - "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + - "px; height: " + (bottom - top) + "px")); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - - iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { - var leftPos = coords(from, "left"), rightPos, left, right; - if (from == to) { - rightPos = leftPos; - left = right = leftPos.left; - } else { - rightPos = coords(to - 1, "right"); - if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } - left = leftPos.left; - right = rightPos.right; - } - if (fromArg == null && from == 0) left = leftSide; - if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part - add(left, leftPos.top, null, leftPos.bottom); - left = leftSide; - if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); - } - if (toArg == null && to == lineLen) right = rightSide; - if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) - start = leftPos; - if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) - end = rightPos; - if (left < leftSide + 1) left = leftSide; - add(left, rightPos.top, right - left, rightPos.bottom); - }); - return {start: start, end: end}; - } - - var sFrom = range.from(), sTo = range.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - - output.appendChild(fragment); - } - - // Cursor-blinking - function restartBlink(cm) { - if (!cm.state.focused) return; - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - display.blinker = setInterval(function() { - display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - else if (cm.options.cursorBlinkRate < 0) - display.cursorDiv.style.visibility = "hidden"; - } - - // HIGHLIGHT WORKER - - function startWorker(cm, time) { - if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.frontier < doc.first) doc.frontier = doc.first; - if (doc.frontier >= cm.display.viewTo) return; - var end = +new Date + cm.options.workTime; - var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); - var changedLines = []; - - doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { - if (doc.frontier >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var highlighted = highlightLine(cm, line, state, true); - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) line.styleClasses = newCls; - else if (oldCls) line.styleClasses = null; - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; - if (ischange) changedLines.push(doc.frontier); - line.stateAfter = copyState(doc.mode, state); - } else { - processLine(cm, line.text, state); - line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; - } - ++doc.frontier; - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - if (changedLines.length) runInOp(cm, function() { - for (var i = 0; i < changedLines.length; i++) - regLineChange(cm, changedLines[i], "text"); - }); - } - - // Finds the line to start with when starting a parse. Tries to - // find a line with a stateAfter, so that it can start with a - // valid state. If that fails, it returns the line with the - // smallest indentation, which tends to need the least context to - // parse correctly. - function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) return doc.first; - var line = getLine(doc, search - 1); - if (line.stateAfter && (!precise || search <= doc.frontier)) return search; - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - - function getStateBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) return true; - var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; - if (!state) state = startState(doc.mode); - else state = copyState(doc.mode, state); - doc.iter(pos, n, function(line) { - processLine(cm, line.text, state); - var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; - line.stateAfter = save ? copyState(doc.mode, state) : null; - ++pos; - }); - if (precise) doc.frontier = pos; - return state; - } - - // POSITION MEASUREMENT - - function paddingTop(display) {return display.lineSpace.offsetTop;} - function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} - function paddingH(display) { - if (display.cachedPaddingH) return display.cachedPaddingH; - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; - return data; - } - - function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - - // Ensure the lineView.wrapping.heights array is populated. This is - // an array of bottom offsets for the lines that make up a drawn - // line. When lineWrapping is on, there might be more than one - // height. - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - heights.push(rect.bottom - rect.top); - } - } - - // Find a line map (mapping character offsets to text nodes) and a - // measurement cache for the given line number. (A line view might - // contain multiple lines when collapsed ranges are present.) - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - return {map: lineView.measure.map, cache: lineView.measure.cache}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineView.rest[i] == line) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineNo(lineView.rest[i]) > lineN) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; - } - - // Render a line into the hidden node display.externalMeasured. Used - // when measurement is needed for a line that's not in the viewport. - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - - // Get a {top, bottom, left, right} box (in line-local coordinates) - // for a given character. - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - - // Find a line view that corresponds to the given line number. - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - return cm.display.view[findViewIndex(cm, lineN)]; - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - return ext; - } - - // Measurement can be split in two steps, the set-up work that - // applies to the whole line, and the measurement of the actual - // character. Functions like coordsChar, that need to do a lot of - // measurements in a row, can thus ensure that the set-up work is - // only done once. - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) - view = null; - else if (view && view.changes) - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - if (!view) - view = updateExternalMeasurement(cm, line); - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - }; - } - - // Given a prepared measurement object, measures the position of an - // actual character (or fetches it from the cache). - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) ch = -1; - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - prepared.rect = prepared.view.text.getBoundingClientRect(); - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) prepared.cache[key] = found; - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom}; - } - - var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - - function nodeAndOffsetInLineMap(map, ch, bias) { - var node, start, end, collapse; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map.length; i += 3) { - var mStart = map[i], mEnd = map[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) collapse = "right"; - } - if (start != null) { - node = map[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - collapse = bias; - if (bias == "left" && start == 0) - while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { - node = map[(i -= 3) + 2]; - collapse = "left"; - } - if (bias == "right" && start == mEnd - mStart) - while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { - node = map[(i += 3) + 2]; - collapse = "right"; - } - break; - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; - } - - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, start = place.start, end = place.end, collapse = place.collapse; - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { - rect = node.parentNode.getBoundingClientRect(); - } else if (ie && cm.options.lineWrapping) { - var rects = range(node, start, end).getClientRects(); - if (rects.length) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = nullRect; - } else { - rect = range(node, start, end).getBoundingClientRect() || nullRect; - } - if (rect.left || rect.right || start == 0) break; - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) collapse = bias = "right"; - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = node.getBoundingClientRect(); - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; - else - rect = nullRect; - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - for (var i = 0; i < heights.length - 1; i++) - if (mid < heights[i]) break; - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) result.bogus = true; - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result; - } - - // Work around problem with bounding client rects on ranges being - // returned incorrectly when zoomed on IE10 and below. - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - return rect; - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY}; - } - - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - lineView.measure.caches[i] = {}; - } - } - - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - clearLineMeasurementCacheFor(cm.display.view[i]); - } - - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; - cm.display.lineNumChars = null; - } - - function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } - function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } - - // Converts a {top, bottom, left, right} box from line-local - // coordinates into another coordinate system. Context may be one of - // "line", "div" (display.lineDiv), "local"/null (editor), "window", - // or "page". - function intoCoordSystem(cm, lineObj, rect, context) { - if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { - var size = widgetHeight(lineObj.widgets[i]); - rect.top += size; rect.bottom += size; - } - if (context == "line") return rect; - if (!context) context = "local"; - var yOff = heightAtLine(lineObj); - if (context == "local") yOff += paddingTop(cm.display); - else yOff -= cm.display.viewOffset; - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect; - } - - // Coverts a box from "div" coords to another coordinate system. - // Context may be "window", "page", "div", or "local"/null. - function fromCoordSystem(cm, coords, context) { - if (context == "div") return coords; - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; - } - - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) lineObj = getLine(cm.doc, pos.line); - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - - // Returns a box for a given cursor position, which may have an - // 'other' property containing the position of the secondary cursor - // on a bidi boundary. - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) m.left = m.right; else m.right = m.left; - return intoCoordSystem(cm, lineObj, m, context); - } - function getBidi(ch, partPos) { - var part = order[partPos], right = part.level % 2; - if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { - part = order[--partPos]; - ch = bidiRight(part) - (part.level % 2 ? 0 : 1); - right = true; - } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { - part = order[++partPos]; - ch = bidiLeft(part) - part.level % 2; - right = false; - } - if (right && ch == part.to && ch > part.from) return get(ch - 1); - return get(ch, right); - } - var order = getOrder(lineObj), ch = pos.ch; - if (!order) return get(ch); - var partPos = getBidiPartAt(order, ch); - var val = getBidi(ch, partPos); - if (bidiOther != null) val.other = getBidi(ch, bidiOther); - return val; - } - - // Used to cheaply estimate the coordinates for a position. Used for - // intermediate scroll updates. - function estimateCoords(cm, pos) { - var left = 0, pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height}; - } - - // Positions returned by coordsChar contain some extra information. - // xRel is the relative x position of the input coordinates compared - // to the found position (so xRel > 0 means the coordinates are to - // the right of the character position, for example). When outside - // is true, that means the coordinates lie outside the line's - // vertical range. - function PosWithInfo(line, ch, outside, xRel) { - var pos = Pos(line, ch); - pos.xRel = xRel; - if (outside) pos.outside = true; - return pos; - } - - // Compute the character position closest to the given coordinates. - // Input must be lineSpace-local ("div" coordinate system). - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) return PosWithInfo(doc.first, 0, true, -1); - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); - if (x < 0) x = 0; - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var merged = collapsedSpanAtEnd(lineObj); - var mergedPos = merged && merged.find(0, true); - if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) - lineN = lineNo(lineObj = mergedPos.to.line); - else - return found; - } - } - - function coordsCharInner(cm, lineObj, lineNo, x, y) { - var innerOff = y - heightAtLine(lineObj); - var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - - function getX(ch) { - var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); - wrongLine = true; - if (innerOff > sp.bottom) return sp.left - adjust; - else if (innerOff < sp.top) return sp.left + adjust; - else wrongLine = false; - return sp.left; - } - - var bidi = getOrder(lineObj), dist = lineObj.text.length; - var from = lineLeft(lineObj), to = lineRight(lineObj); - var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; - - if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); - // Do a binary search between these bounds. - for (;;) { - if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { - var ch = x < fromX || x - fromX <= toX - x ? from : to; - var xDiff = x - (ch == from ? fromX : toX); - while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; - var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, - xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); - return pos; - } - var step = Math.ceil(dist / 2), middle = from + step; - if (bidi) { - middle = from; - for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); - } - var middleX = getX(middle); - if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} - else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} - } - } - - var measureText; - // Compute the default text height. - function textHeight(display) { - if (display.cachedTextHeight != null) return display.cachedTextHeight; - if (measureText == null) { - measureText = elt("pre"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) display.cachedTextHeight = height; - removeChildren(display.measure); - return height || 1; - } - - // Compute the default character width. - function charWidth(display) { - if (display.cachedCharWidth != null) return display.cachedCharWidth; - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor]); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) display.cachedCharWidth = width; - return width || 10; - } - - // OPERATIONS - - // Operations are used to wrap a series of changes to the editor - // state in such a way that each change won't have to update the - // cursor and display (which would be awkward, slow, and - // error-prone). Instead, display updates are batched and then all - // combined and executed at once. - - var operationGroup = null; - - var nextOpId = 0; - // Start a new operation. - function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId // Unique ID - }; - if (operationGroup) { - operationGroup.ops.push(cm.curOp); - } else { - cm.curOp.ownsGroup = operationGroup = { - ops: [cm.curOp], - delayedCallbacks: [] - }; - } - } - - function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - callbacks[i](); - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); - } - } while (i < callbacks.length); - } - - // Finish an operation, updating the display and signalling delayed events - function endOperation(cm) { - var op = cm.curOp, group = op.ownsGroup; - if (!group) return; - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - for (var i = 0; i < group.ops.length; i++) - group.ops[i].cm.curOp = null; - endOperations(group); - } - } - - // The DOM updates done when an operation finishes are batched so - // that the minimum number of relayouts are required. - function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R1(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W1(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R2(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W2(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_finish(ops[i]); - } - - function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) findMaxLine(cm); - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); - } - - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - - function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) updateHeightsInViewport(cm); - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - op.preparedSelection = display.input.prepareSelection(); - } - - function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - cm.display.maxLineChanged = false; - } - - if (op.preparedSelection) - cm.display.input.showSelection(op.preparedSelection); - if (op.updatedDisplay) - setDocumentHeight(cm, op.barMeasure); - if (op.updatedDisplay || op.startHeight != cm.doc.height) - updateScrollbars(cm, op.barMeasure); - - if (op.selectionChanged) restartBlink(cm); - - if (cm.state.focused && op.updateInput) - cm.display.input.reset(op.typing); - if (op.focus && op.focus == activeElt()) ensureFocus(op.cm); - } - - function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) postUpdateDisplay(cm, op.update); - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - display.wheelStartX = display.wheelStartY = null; - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { - doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); - display.scrollbars.setScrollTop(doc.scrollTop); - display.scroller.scrollTop = doc.scrollTop; - } - if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { - doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); - display.scrollbars.setScrollLeft(doc.scrollLeft); - display.scroller.scrollLeft = doc.scrollLeft; - alignHorizontally(cm); - } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) for (var i = 0; i < hidden.length; ++i) - if (!hidden[i].lines.length) signal(hidden[i], "hide"); - if (unhidden) for (var i = 0; i < unhidden.length; ++i) - if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); - - if (display.wrapper.offsetHeight) - doc.scrollTop = cm.display.scroller.scrollTop; - - // Fire change events, and delayed event handlers - if (op.changeObjs) - signal(cm, "changes", cm, op.changeObjs); - if (op.update) - op.update.finish(); - } - - // Run the given function in an operation - function runInOp(cm, f) { - if (cm.curOp) return f(); - startOperation(cm); - try { return f(); } - finally { endOperation(cm); } - } - // Wraps a function in an operation. Returns the wrapped function. - function operation(cm, f) { - return function() { - if (cm.curOp) return f.apply(cm, arguments); - startOperation(cm); - try { return f.apply(cm, arguments); } - finally { endOperation(cm); } - }; - } - // Used to add methods to editor and doc instances, wrapping them in - // operations. - function methodOp(f) { - return function() { - if (this.curOp) return f.apply(this, arguments); - startOperation(this); - try { return f.apply(this, arguments); } - finally { endOperation(this); } - }; - } - function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) return f.apply(this, arguments); - startOperation(cm); - try { return f.apply(this, arguments); } - finally { endOperation(cm); } - }; - } - - // VIEW TRACKING - - // These objects are used to represent the visible (currently drawn) - // part of the document. A LineView may correspond to multiple - // logical lines, if those are connected by collapsed ranges. - function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - - // Create a range of LineView objects for the given lines. - function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - - // Updates the display.view data structure for a given change to the - // document. From and to are in pre-change coordinates. Lendiff is - // the amount of lines added or subtracted by the change. This is - // used for changes that span multiple lines, or change the way - // lines are divided into visual lines. regLineChange (below) - // registers single-line changes. - function regChange(cm, from, to, lendiff) { - if (from == null) from = cm.doc.first; - if (to == null) to = cm.doc.first + cm.doc.size; - if (!lendiff) lendiff = 0; - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - display.updateLineNumbers = from; - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - resetView(cm); - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut = viewCuttingPoint(cm, from, from, -1); - if (cut) { - display.view = display.view.slice(0, cut.index); - display.viewTo = cut.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - ext.lineN += lendiff; - else if (from < ext.lineN + ext.size) - display.externalMeasured = null; - } - } - - // Register a change to a single line. Type must be one of "text", - // "gutter", "class", "widget" - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - display.externalMeasured = null; - - if (line < display.viewFrom || line >= display.viewTo) return; - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) return; - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) arr.push(type); - } - - // Clear the view. - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - - // Find the view element corresponding to a given line. Return null - // when the line isn't visible. - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) return null; - n -= cm.display.viewFrom; - if (n < 0) return null; - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) return i; - } - } - - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - return {index: index, lineN: newN}; - for (var i = 0, n = cm.display.viewFrom; i < index; i++) - n += view[i].size; - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) return null; - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) return null; - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN}; - } - - // Force the view to cover a given range, adding empty view element - // or clipping off existing ones as needed. - function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - else if (display.viewFrom < from) - display.view = display.view.slice(findViewIndex(cm, from)); - display.viewFrom = from; - if (display.viewTo < to) - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - else if (display.viewTo > to) - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - display.viewTo = to; - } - - // Count the number of lines in the view whose DOM representation is - // out of date (or nonexistent). - function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; - } - return dirty; - } - - // EVENT HANDLERS - - // Attach the necessary event handlers when initializing the editor - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - on(d.scroller, "dblclick", operation(cm, function(e) { - if (signalDOMEvent(cm, e)) return; - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - else - on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0}; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); - prevTouch = d.activeTouch; - prevTouch.end = +new Date; - } - }; - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) return false; - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1; - } - function farAway(touch, other) { - if (other.left == null) return true; - var dx = other.left - touch.left, dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20; - } - on(d.scroller, "touchstart", function(e) { - if (!isMouseLikeTouchEvent(e)) { - clearTimeout(touchFinished); - var now = +new Date; - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null}; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function() { - if (d.activeTouch) d.activeTouch.moved = true; - }); - on(d.scroller, "touchend", function(e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range; - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - range = new Range(pos, pos); - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - range = cm.findWordAt(pos); - else // Triple tap - range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - cm.setSelection(range.anchor, range.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function() { - if (d.scroller.clientHeight) { - setScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); - on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - d.dragFunctions = { - simple: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, - start: function(e){onDragStart(cm, e);}, - drop: operation(cm, onDrop) - }; - - var inp = d.input.getField(); - on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", bind(onFocus, cm)); - on(inp, "blur", bind(onBlur, cm)); - } - - function dragDropChanged(cm, value, old) { - var wasOn = old && old != CodeMirror.Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.simple); - toggle(cm.display.scroller, "dragover", funcs.simple); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - - // Called when the window resizes - function onResize(cm) { - var d = cm.display; - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - return; - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - - // MOUSE EVENTS - - // Return true when the given mouse event happened in a widget - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - return true; - } - } - - // Given a mouse event, find the corresponding position. If liberal - // is false, it checks whether a gutter or scrollbar was clicked, - // and returns null if it was. forRect is used by rectangular - // selections, and tries to estimate a character position even for - // coordinates beyond the right of the text. - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e) { return null; } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - - // A mouse down can be a single click, double click, triple click, - // start of selection drag, start of text drag, new cursor - // (ctrl-click), rectangle drag (alt-drag), or xwin - // middle-click-paste. Or it might be a click on something we should - // not interfere with, such as a scrollbar or widget. - function onMouseDown(e) { - var cm = this, display = cm.display; - if (display.activeTouch && display.input.supportsTouch() || signalDOMEvent(cm, e)) return; - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function(){display.scroller.draggable = true;}, 100); - } - return; - } - if (clickInGutter(cm, e)) return; - var start = posFromMouse(cm, e); - window.focus(); - - switch (e_button(e)) { - case 1: - if (start) - leftButtonDown(cm, e, start); - else if (e_target(e) == display.scroller) - e_preventDefault(e); - break; - case 2: - if (webkit) cm.state.lastMiddleDown = +new Date; - if (start) extendSelection(cm.doc, start); - setTimeout(function() {display.input.focus();}, 20); - e_preventDefault(e); - break; - case 3: - if (captureRightClick) onContextMenu(cm, e); - else delayBlurEvent(cm); - break; - } - } - - var lastClick, lastDoubleClick; - function leftButtonDown(cm, e, start) { - if (ie) setTimeout(bind(ensureFocus, cm), 0); - else cm.curOp.focus = activeElt(); - - var now = +new Date, type; - if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { - type = "triple"; - } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { - type = "double"; - lastDoubleClick = {time: now, pos: start}; - } else { - type = "single"; - lastClick = {time: now, pos: start}; - } - - var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; - if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && - type == "single" && (contained = sel.contains(start)) > -1 && - !sel.ranges[contained].empty()) - leftButtonStartDrag(cm, e, start, modifier); - else - leftButtonSelect(cm, e, start, type, modifier); - } - - // Start a text drag. When it ends, see if any dragging actually - // happen, and treat as a click if it didn't. - function leftButtonStartDrag(cm, e, start, modifier) { - var display = cm.display; - var dragEnd = operation(cm, function(e2) { - if (webkit) display.scroller.draggable = false; - cm.state.draggingText = false; - off(document, "mouseup", dragEnd); - off(display.scroller, "drop", dragEnd); - if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { - e_preventDefault(e2); - if (!modifier) - extendSelection(cm.doc, start); - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if (webkit || ie && ie_version == 9) - setTimeout(function() {document.body.focus(); display.input.focus();}, 20); - else - display.input.focus(); - } - }); - // Let the drag handler handle this. - if (webkit) display.scroller.draggable = true; - cm.state.draggingText = dragEnd; - // IE's approach to draggable - if (display.scroller.dragDrop) display.scroller.dragDrop(); - on(document, "mouseup", dragEnd); - on(display.scroller, "drop", dragEnd); - } - - // Normal selection, as opposed to text dragging. - function leftButtonSelect(cm, e, start, type, addNew) { - var display = cm.display, doc = cm.doc; - e_preventDefault(e); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (addNew && !e.shiftKey) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - ourRange = ranges[ourIndex]; - else - ourRange = new Range(start, start); - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - - if (e.altKey) { - type = "rect"; - if (!addNew) ourRange = new Range(start, start); - start = posFromMouse(cm, e, true, true); - ourIndex = -1; - } else if (type == "double") { - var word = cm.findWordAt(start); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, word.anchor, word.head); - else - ourRange = word; - } else if (type == "triple") { - var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, line.anchor, line.head); - else - ourRange = line; - } else { - ourRange = extendRange(doc, ourRange, start); - } - - if (!addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) return; - lastPos = pos; - - if (type == "rect") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - else if (text.length > leftPos) - ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - if (!ranges.length) ranges.push(new Range(start, start)); - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var anchor = oldRange.anchor, head = pos; - if (type != "single") { - if (type == "double") - var range = cm.findWordAt(pos); - else - var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); - if (cmp(range.anchor, anchor) > 0) { - head = range.head; - anchor = minPos(oldRange.from(), range.anchor); - } else { - head = range.anchor; - anchor = maxPos(oldRange.to(), range.head); - } - } - var ranges = startSel.ranges.slice(0); - ranges[ourIndex] = new Range(clipPos(doc, anchor), head); - setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, type == "rect"); - if (!cur) return; - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) setTimeout(operation(cm, function() { - if (counter != curCount) return; - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - - function done(e) { - counter = Infinity; - e_preventDefault(e); - display.input.focus(); - off(document, "mousemove", move); - off(document, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function(e) { - if (!e_button(e)) done(e); - else extend(e); - }); - var up = operation(cm, done); - on(document, "mousemove", move); - on(document, "mouseup", up); - } - - // Determines whether an event happened in the gutter, and fires the - // handlers for the corresponding event. - function gutterEvent(cm, e, type, prevent, signalfn) { - try { var mX = e.clientX, mY = e.clientY; } - catch(e) { return false; } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; - if (prevent) e_preventDefault(e); - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.options.gutters[i]; - signalfn(cm, type, cm, line, gutter, e); - return e_defaultPrevented(e); - } - } - } - - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true, signalLater); - } - - // Kludge to work around strange IE behavior where it'll sometimes - // re-fire a series of drag-related events right after the drop (#1551) - var lastDrop = 0; - - function onDrop(e) { - var cm = this; - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - return; - e_preventDefault(e); - if (ie) lastDrop = +new Date; - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || isReadOnly(cm)) return; - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var loadFile = function(file, i) { - var reader = new FileReader; - reader.onload = operation(cm, function() { - text[i] = reader.result; - if (++read == n) { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); - } - }); - reader.readAsText(file); - }; - for (var i = 0; i < n; ++i) loadFile(files[i], i); - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(function() {cm.display.input.focus();}, 20); - return; - } - try { - var text = e.dataTransfer.getData("Text"); - if (text) { - if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) - var selected = cm.listSelections(); - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) for (var i = 0; i < selected.length; ++i) - replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); - cm.replaceSelection(text, "around", "paste"); - cm.display.input.focus(); - } - } - catch(e){} - } - } - - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; - - e.dataTransfer.setData("Text", cm.getSelection()); - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) img.parentNode.removeChild(img); - } - } - - // SCROLL EVENTS - - // Sync the scrollable area and scrollbars, ensure the viewport - // covers the visible area. - function setScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) return; - cm.doc.scrollTop = val; - if (!gecko) updateDisplaySimple(cm, {top: val}); - if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (gecko) updateDisplaySimple(cm); - startWorker(cm, 100); - } - // Sync scroller and scrollbar, ensure the gutter elements are - // aligned. - function setScrollLeft(cm, val, isScroller) { - if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; - cm.display.scrollbars.setScrollLeft(val); - } - - // Since the delta values reported on mouse wheel events are - // unstandardized between browsers and even browser versions, and - // generally horribly unpredictable, this code starts by measuring - // the scroll effect that the first few mouse wheel events have, - // and, from that, detects the way it can convert deltas to pixel - // offsets afterwards. - // - // The reason we want to know the amount a wheel event will scroll - // is that it gives us a chance to update the display before the - // actual scrolling happens, reducing flickering. - - var wheelSamples = 0, wheelPixelsPerUnit = null; - // Fill in a browser-detected starting value on browsers where we - // know one. These don't have to be accurate -- the result of them - // being wrong would just be a slight flicker on the first wheel - // scroll (if it is large enough). - if (ie) wheelPixelsPerUnit = -.53; - else if (gecko) wheelPixelsPerUnit = 15; - else if (chrome) wheelPixelsPerUnit = -.7; - else if (safari) wheelPixelsPerUnit = -1/3; - - var wheelEventDelta = function(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; - else if (dy == null) dy = e.wheelDelta; - return {x: dx, y: dy}; - }; - CodeMirror.wheelEventPixels = function(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - }; - - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - if (!(dx && scroll.scrollWidth > scroll.clientWidth || - dy && scroll.scrollHeight > scroll.clientHeight)) return; - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy) - setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); - setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); - e_preventDefault(e); - display.wheelStartX = null; // Abort measurement, if in progress - return; - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) top = Math.max(0, top + pixels - 50); - else bot = Math.min(cm.doc.height, bot + pixels + 50); - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function() { - if (display.wheelStartX == null) return; - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) return; - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } - } - - // KEY EVENTS - - // Run a handler that was bound to a key. - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) return false; - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, done = false; - try { - if (isReadOnly(cm)) cm.state.suppressEdits = true; - if (dropShift) cm.display.shift = false; - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - - function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) return result; - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm); - } - - var stopSeq = new Delayed; - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) return "handled"; - stopSeq.set(50, function() { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); - name = seq + " " + name; - } - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - cm.state.keySeq = name; - if (result == "handled") - signalLater(cm, "keyHandled", cm, name, e); - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - if (seq && !result && /\'$/.test(name)) { - e_preventDefault(e); - return true; - } - return !!result; - } - - // Handle a key from the keydown event. - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) return false; - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) - || dispatchKey(cm, name, e, function(b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - return doHandleBinding(cm, b); - }); - } else { - return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); - } - } - - // Handle a key from the keypress event - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, - function(b) { return doHandleBinding(cm, b, true); }); - } - - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) return; - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - cm.replaceSelection("", null, "cut"); - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - showCrossHair(cm); - } - - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - - function onKeyUp(e) { - if (e.keyCode == 16) this.doc.sel.shift = false; - signalDOMEvent(this, e); - } - - function onKeyPress(e) { - var cm = this; - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (handleCharBinding(cm, e, ch)) return; - cm.display.input.onKeyPress(e); - } - - // FOCUS/BLUR EVENTS - - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function() { - if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - onBlur(cm); - } - }, 100); - } - - function onFocus(cm) { - if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; - - if (cm.options.readOnly == "nocursor") return; - if (!cm.state.focused) { - signal(cm, "focus", cm); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm) { - if (cm.state.delayingBlurEvent) return; - - if (cm.state.focused) { - signal(cm, "blur", cm); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); - } - - // CONTEXT MENU HANDLING - - // To make the context menu work, we need to briefly unhide the - // textarea (making it as unobtrusive as possible) to let the - // right-click take effect on it. - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; - cm.display.input.onContextMenu(e); - } - - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) return false; - return gutterEvent(cm, e, "gutterContextMenu", false, signal); - } - - // UPDATING - - // Compute the position of the end of a change (its 'to' property - // refers to the pre-change end). - var changeEnd = CodeMirror.changeEnd = function(change) { - if (!change.text) return change.to; - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - }; - - // Adjust a position to refer to the post-change position of the - // same text, or the end of the change if the change covers it. - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) return pos; - if (cmp(pos, change.to) <= 0) return changeEnd(change); - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; - return Pos(line, ch); - } - - function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(out, doc.sel.primIndex); - } - - function offsetPos(pos, old, nw) { - if (pos.line == old.line) - return Pos(nw.line, pos.ch - old.ch + nw.ch); - else - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - - // Used by replaceSelections to allow moving the selection to the - // start or around the replaced test. Hint may be "start" or "around". - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - - // Allow "beforeChange" event handlers to influence a change - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function() { this.canceled = true; } - }; - if (update) obj.update = function(from, to, text, origin) { - if (from) this.from = clipPos(doc, from); - if (to) this.to = clipPos(doc, to); - if (text) this.text = text; - if (origin !== undefined) this.origin = origin; - }; - signal(doc, "beforeChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); - - if (obj.canceled) return null; - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; - } - - // Apply a change to a document, and add it to the document's - // history, and propagating it to all linked documents. - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - if (doc.cm.state.suppressEdits) return; - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) return; - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); - } else { - makeChangeInner(doc, change); - } - } - - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); - } - - // Revert a change stored in a document's history. - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - if (doc.cm && doc.cm.state.suppressEdits) return; - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - for (var i = 0; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - break; - } - if (i == source.length) return; - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return; - } - selAfter = event; - } - else break; - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - for (var i = event.changes.length - 1; i >= 0; --i) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return; - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - } - } - - // Sub-views need their line numbers shifted when text is added - // above or below them in the parent document. - function shiftDoc(doc, distance) { - if (distance == 0) return; - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function(range) { - return new Range(Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - regLineChange(doc.cm, l, "gutter"); - } - } - - // More lower-level change function, handling only a single document - // (not linked ones). - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) return; - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) selAfter = computeSelAfterChange(doc, change); - if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); - else updateDoc(doc, change, spans); - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - } - - // Handle the interaction of a change to a document with the editor - // that this document is part of. - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function(line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - signalCursorActivity(cm); - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function(line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) cm.curOp.updateMaxLine = true; - } - - // Adjust frontier, schedule worker - doc.frontier = Math.min(doc.frontier, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - regChange(cm); - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - regLineChange(cm, from.line, "text"); - else - regChange(cm, from.line, to.line + 1, lendiff); - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) signalLater(cm, "change", cm, obj); - if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - cm.display.selForContextMenu = null; - } - - function replaceRange(doc, code, from, to, origin) { - if (!to) to = from; - if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } - if (typeof code == "string") code = splitLines(code); - makeChange(doc, {from: from, to: to, text: code, origin: origin}); - } - - // SCROLLING THINGS INTO VIEW - - // If an editor sits on the top or bottom of the window, partially - // scrolled out of view, this ensures that the cursor is visible. - function maybeScrollWindow(cm, coords) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) return; - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (coords.top + box.top < 0) doScroll = true; - else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + - (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + - (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + - coords.left + "px; width: 2px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - - // Scroll a given position into view (immediately), verifying that - // it actually became visible (as line heights are accurately - // measured, the position of something may 'drift' during drawing). - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) margin = 0; - for (var limit = 0; limit < 5; limit++) { - var changed = false, coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), - Math.min(coords.top, endCoords.top) - margin, - Math.max(coords.left, endCoords.left), - Math.max(coords.bottom, endCoords.bottom) + margin); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - setScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; - } - if (!changed) break; - } - return coords; - } - - // Scroll a given set of coordinates into view (immediately). - function scrollIntoView(cm, x1, y1, x2, y2) { - var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); - if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); - if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); - } - - // Calculate a new scroll position needed to scroll the given - // rectangle into view. Returns an object with scrollTop and - // scrollLeft properties. When these are undefined, the - // vertical/horizontal position does not need to be adjusted. - function calculateScrollPos(cm, x1, y1, x2, y2) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (y1 < 0) y1 = 0; - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (y2 - y1 > screen) y2 = y1 + screen; - var docBottom = cm.doc.height + paddingVert(display); - var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; - if (y1 < screentop) { - result.scrollTop = atTop ? 0 : y1; - } else if (y2 > screentop + screen) { - var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); - if (newTop != screentop) result.scrollTop = newTop; - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); - var tooWide = x2 - x1 > screenw; - if (tooWide) x2 = x1 + screenw; - if (x1 < 10) - result.scrollLeft = 0; - else if (x1 < screenleft) - result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); - else if (x2 > screenw + screenleft - 3) - result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; - return result; - } - - // Store a relative adjustment to the scroll position in the current - // operation (to be applied when the operation finishes). - function addToScrollPos(cm, left, top) { - if (left != null || top != null) resolveScrollToPos(cm); - if (left != null) - cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; - if (top != null) - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - - // Make sure that at the end of the operation the current cursor is - // shown. - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(), from = cur, to = cur; - if (!cm.options.lineWrapping) { - from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; - to = Pos(cur.line, cur.ch + 1); - } - cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; - } - - // When an operation has its scrollToPos property set, and another - // scroll action is applied before the end of the operation, this - // 'simulates' scrolling that position into view in a cheap way, so - // that the effect of intermediate scroll commands is not ignored. - function resolveScrollToPos(cm) { - var range = cm.curOp.scrollToPos; - if (range) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); - var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), - Math.min(from.top, to.top) - range.margin, - Math.max(from.right, to.right), - Math.max(from.bottom, to.bottom) + range.margin); - cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - } - - // API UTILITIES - - // Indent the given line. The how parameter can be "smart", - // "add"/null, "subtract", or "prev". When aggressive is false - // (typically set to true for forced single-line indents), empty - // lines are not indented, and places where the mode returns Pass - // are left alone. - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) how = "add"; - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) how = "prev"; - else state = getStateBefore(cm, n); - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) line.stateAfter = null; - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) return; - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); - else indentation = 0; - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} - if (pos < indentation) indentString += spaceStr(indentation - pos); - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i, new Range(pos, pos)); - break; - } - } - } - line.stateAfter = null; - } - - // Utility for applying a change to a line by handle or number, - // returning the number and optionally registering the line as - // changed. - function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); - else no = lineNo(handle); - if (no == null) return null; - if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); - return line; - } - - // Helper for deleting text near the selection(s), used to implement - // backspace, delete, and similar functionality. - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function() { - for (var i = kill.length - 1; i >= 0; i--) - replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); - ensureCursorVisible(cm); - }); - } - - // Used for horizontal relative motion. Dir is -1 or 1 (left or - // right), unit can be "char", "column" (like char, but doesn't - // cross line boundaries), "word" (across next word), or "group" (to - // the start of next group of word or non-word-non-whitespace - // chars). The visually param controls whether, in right-to-left - // text, direction 1 means to move towards the next index in the - // string, or towards the character to the right of the current - // position. The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosH(doc, pos, dir, unit, visually) { - var line = pos.line, ch = pos.ch, origDir = dir; - var lineObj = getLine(doc, line); - var possible = true; - function findNextLine() { - var l = line + dir; - if (l < doc.first || l >= doc.first + doc.size) return (possible = false); - line = l; - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); - if (next == null) { - if (!boundToLine && findNextLine()) { - if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); - else ch = dir < 0 ? lineObj.text.length : 0; - } else return (possible = false); - } else ch = next; - return true; - } - - if (unit == "char") moveOnce(); - else if (unit == "column") moveOnce(true); - else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) break; - var cur = lineObj.text.charAt(ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) type = "s"; - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce();} - break; - } - - if (type) sawType = type; - if (dir > 0 && !moveOnce(!first)) break; - } - } - var result = skipAtomic(doc, Pos(line, ch), origDir, true); - if (!possible) result.hitSide = true; - return result; - } - - // For relative vertical movement. Dir may be -1 or 1. Unit can be - // "page" or "line". The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - for (;;) { - var target = coordsChar(cm, x, y); - if (!target.outside) break; - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } - y += dir * 5; - } - return target; - } - - // EDITOR METHODS - - // The publicly visible API. Note that methodOp(f) means - // 'wrap f in an operation, performed on its `this` parameter'. - - // This is not the complete set of editor methods. Most of the - // methods defined on the Doc type are also injected into - // CodeMirror.prototype, for backwards compatibility and - // convenience. - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") return; - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - operation(this, optionHandlers[option])(this, value, old); - }, - - getOption: function(option) {return this.options[option];}, - getDoc: function() {return this.doc;}, - - addKeyMap: function(map, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); - }, - removeKeyMap: function(map) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - if (maps[i] == map || maps[i].name == map) { - maps.splice(i, 1); - return true; - } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) throw new Error("Overlays may not be stateful."); - this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; - else dir = dir ? "add" : "subtract"; - } - if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); - }), - indentSelection: methodOp(function(how) { - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) { - var from = range.from(), to = range.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - indentLine(this, j, how); - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); - } else if (range.head.line > end) { - indentLine(this, range.head.line, how, true); - end = range.head.line; - if (i == this.doc.sel.primIndex) ensureCursorVisible(this); - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise); - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) type = styles[2]; - else for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; - else if (styles[mid * 2 + 1] < ch) before = mid + 1; - else { type = styles[mid * 2 + 2]; break; } - } - var cut = type ? type.indexOf("cm-overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) return mode; - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0]; - }, - - getHelpers: function(pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) return found; - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) found.push(help[mode[type]]); - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) found.push(val); - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i = 0; i < help._global.length; i++) { - var cur = help._global[i]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) - found.push(cur.val); - } - return found; - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getStateBefore(this, line + 1, precise); - }, - - cursorCoords: function(start, mode) { - var pos, range = this.doc.sel.primary(); - if (start == null) pos = range.head; - else if (typeof start == "object") pos = clipPos(this.doc, start); - else pos = start ? range.from() : range.to(); - return cursorCoords(this, pos, mode || "page"); - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function(line, mode) { - var end = false, lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) line = this.doc.first; - else if (line > last) { line = last; end = true; } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + - (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - - defaultTextHeight: function() { return textHeight(this.display); }, - defaultCharWidth: function() { return charWidth(this.display); }, - - setGutterMarker: methodOp(function(line, gutterID, value) { - return changeLine(this.doc, line, "gutter", function(line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) line.gutterMarkers = null; - return true; - }); - }), - - clearGutter: methodOp(function(gutterID) { - var cm = this, doc = cm.doc, i = doc.first; - doc.iter(function(line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - line.gutterMarkers[gutterID] = null; - regLineChange(cm, i, "gutter"); - if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; - } - ++i; - }); - }), - - lineInfo: function(line) { - if (typeof line == "number") { - if (!isLine(this.doc, line)) return null; - var n = line; - line = getLine(this.doc, line); - if (!line) return null; - } else { - var n = lineNo(line); - if (n == null) return null; - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets}; - }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - top = pos.top - node.offsetHeight; - else if (pos.bottom + node.offsetHeight <= vspace) - top = pos.bottom; - if (left + node.offsetWidth > hspace) - left = hspace - node.offsetWidth; - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") left = 0; - else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; - node.style.left = left + "px"; - } - if (scroll) - scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - return commands[cmd](this); - }, - - findPosH: function(from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) break; - } - return cur; - }, - - moveH: methodOp(function(dir, unit) { - var cm = this; - cm.extendSelectionsBy(function(range) { - if (cm.display.shift || cm.doc.extend || range.empty()) - return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); - else - return dir < 0 ? range.from() : range.to(); - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - doc.replaceSelection("", null, "+delete"); - else - deleteNearSelection(this, function(range) { - var other = findPosH(doc, range.head, dir, unit, false); - return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; - }); - }), - - findPosV: function(from, amount, unit, goalColumn) { - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) x = coords.left; - else coords.left = x; - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) break; - } - return cur; - }, - - moveV: methodOp(function(dir, unit) { - var cm = this, doc = this.doc, goals = []; - var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function(range) { - if (collapse) - return dir < 0 ? range.from() : range.to(); - var headPos = cursorCoords(cm, range.head, "div"); - if (range.goalColumn != null) headPos.left = range.goalColumn; - goals.push(headPos.left); - var pos = findPosV(cm, headPos, dir, unit); - if (unit == "page" && range == doc.sel.primary()) - addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); - return pos; - }, sel_move); - if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) - doc.sel.ranges[i].goalColumn = goals[i]; - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function(ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} - : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; - while (start > 0 && check(line.charAt(start - 1))) --start; - while (end < line.length && check(line.charAt(end))) ++end; - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) return; - if (this.state.overwrite = !this.state.overwrite) - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - else - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return this.display.input.getField() == activeElt(); }, - - scrollTo: methodOp(function(x, y) { - if (x != null || y != null) resolveScrollToPos(this); - if (x != null) this.curOp.scrollLeft = x; - if (y != null) this.curOp.scrollTop = y; - }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; - }, - - scrollIntoView: methodOp(function(range, margin) { - if (range == null) { - range = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) margin = this.options.cursorScrollMargin; - } else if (typeof range == "number") { - range = {from: Pos(range, 0), to: null}; - } else if (range.from == null) { - range = {from: range, to: null}; - } - if (!range.to) range.to = range.from; - range.margin = margin || 0; - - if (range.from.line != null) { - resolveScrollToPos(this); - this.curOp.scrollToPos = range; - } else { - var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), - Math.min(range.from.top, range.to.top) - range.margin, - Math.max(range.from.right, range.to.right), - Math.max(range.from.bottom, range.to.bottom) + range.margin); - this.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - }), - - setSize: methodOp(function(width, height) { - var cm = this; - function interpret(val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - } - if (width != null) cm.display.wrapper.style.width = interpret(width); - if (height != null) cm.display.wrapper.style.height = interpret(height); - if (cm.options.lineWrapping) clearLineMeasurementCache(this); - var lineNo = cm.display.viewFrom; - cm.doc.iter(lineNo, cm.display.viewTo, function(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) - if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } - ++lineNo; - }); - cm.curOp.forceUpdate = true; - signal(cm, "refresh", this); - }), - - operation: function(f){return runInOp(this, f);}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - estimateLineHeights(this); - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - this.scrollTo(doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - - getInputField: function(){return this.display.input.getField();}, - getWrapperElement: function(){return this.display.wrapper;}, - getScrollerElement: function(){return this.display.scroller;}, - getGutterElement: function(){return this.display.gutters;} - }; - eventMixin(CodeMirror); - - // OPTION DEFAULTS - - // The default configuration options. - var defaults = CodeMirror.defaults = {}; - // Functions to run when options are changed. - var optionHandlers = CodeMirror.optionHandlers = {}; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) optionHandlers[name] = - notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; - } - - // Passed to option handlers when there is no old value. - var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function(cm, val) { - cm.setValue(val); - }, true); - option("mode", null, function(cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function(cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - if (old != CodeMirror.Init) cm.refresh(); - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function() { - throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME - }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function(cm) { - themeChanged(cm); - guttersChanged(cm); - }, true); - option("keyMap", "default", function(cm, val, old) { - var next = getKeyMap(val); - var prev = old != CodeMirror.Init && getKeyMap(old); - if (prev && prev.detach) prev.detach(cm, next); - if (next.attach) next.attach(cm, prev || null); - }); - option("extraKeys", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("fixedGutter", true, function(cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); - option("scrollbarStyle", "native", function(cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("firstLineNumber", 1, guttersChanged, true); - option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - - option("readOnly", false, function(cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - cm.display.disabled = true; - } else { - cm.display.disabled = false; - if (!val) cm.display.input.reset(); - } - }); - option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); - option("dragDrop", true, dragDropChanged); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function(cm){cm.refresh();}, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function(cm, val) { - if (!val) cm.display.input.resetPosition(); - }); - - option("tabindex", null, function(cm, val) { - cm.display.input.getField().tabIndex = val || ""; - }); - option("autofocus", null); - - // MODE DEFINITION AND QUERYING - - // Known modes, by name and by MIME - var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - CodeMirror.defineMode = function(name, mode) { - if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; - }; - - CodeMirror.defineMIME = function(mime, spec) { - mimeModes[mime] = spec; - }; - - // Given a MIME type, a {name, ...options} config object, or a name - // string, return a mode config object. - CodeMirror.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") found = {name: found}; - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return CodeMirror.resolveMode("application/xml"); - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; - }; - - // Given a mode spec (anything that resolveMode accepts), find and - // initialize an actual mode object. - CodeMirror.getMode = function(options, spec) { - var spec = CodeMirror.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) return CodeMirror.getMode(options, "text/plain"); - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) continue; - if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) modeObj.helperType = spec.helperType; - if (spec.modeProps) for (var prop in spec.modeProps) - modeObj[prop] = spec.modeProps[prop]; - - return modeObj; - }; - - // Minimal default mode. - CodeMirror.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; - }); - CodeMirror.defineMIME("text/plain", "null"); - - // This can be used to attach properties to mode objects from - // outside the actual mode definition. - var modeExtensions = CodeMirror.modeExtensions = {}; - CodeMirror.extendMode = function(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); - }; - - // EXTENSIONS - - CodeMirror.defineExtension = function(name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function(name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.defineOption = option; - - var initHooks = []; - CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; - - var helpers = CodeMirror.helpers = {}; - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; - - // MODE STATE HANDLING - - // Utility functions for working with state. Exported because nested - // modes need to do this for their inner modes. - - var copyState = CodeMirror.copyState = function(mode, state) { - if (state === true) return state; - if (mode.copyState) return mode.copyState(state); - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) val = val.concat([]); - nstate[n] = val; - } - return nstate; - }; - - var startState = CodeMirror.startState = function(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - }; - - // Given a mode and a state (for that mode), find the inner mode and - // state at the position that the state refers to. - CodeMirror.innerMode = function(mode, state) { - while (mode.innerMode) { - var info = mode.innerMode(state); - if (!info || info.mode == mode) break; - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state}; - }; - - // STANDARD COMMANDS - - // Commands are parameter-less actions that can be performed on an - // editor, mostly used for keybindings. - var commands = CodeMirror.commands = { - selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, - singleSelection: function(cm) { - cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function(cm) { - deleteNearSelection(cm, function(range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - return {from: range.head, to: Pos(range.head.line + 1, 0)}; - else - return {from: range.head, to: Pos(range.head.line, len)}; - } else { - return {from: range.from(), to: range.to()}; - } - }); - }, - deleteLine: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; - }); - }, - delLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), to: range.from()}; - }); - }, - delWrappedLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()}; - }); - }, - delWrappedLineRight: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos }; - }); - }, - undo: function(cm) {cm.undo();}, - redo: function(cm) {cm.redo();}, - undoSelection: function(cm) {cm.undoSelection();}, - redoSelection: function(cm) {cm.redoSelection();}, - goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, - goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, - goLineStart: function(cm) { - cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1}); - }, - goLineStartSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - return lineStartSmart(cm, range.head); - }, {origin: "+move", bias: 1}); - }, - goLineEnd: function(cm) { - cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1}); - }, - goLineRight: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - }, sel_move); - }, - goLineLeft: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div"); - }, sel_move); - }, - goLineLeftSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); - return pos; - }, sel_move); - }, - goLineUp: function(cm) {cm.moveV(-1, "line");}, - goLineDown: function(cm) {cm.moveV(1, "line");}, - goPageUp: function(cm) {cm.moveV(-1, "page");}, - goPageDown: function(cm) {cm.moveV(1, "page");}, - goCharLeft: function(cm) {cm.moveH(-1, "char");}, - goCharRight: function(cm) {cm.moveH(1, "char");}, - goColumnLeft: function(cm) {cm.moveH(-1, "column");}, - goColumnRight: function(cm) {cm.moveH(1, "column");}, - goWordLeft: function(cm) {cm.moveH(-1, "word");}, - goGroupRight: function(cm) {cm.moveH(1, "group");}, - goGroupLeft: function(cm) {cm.moveH(-1, "group");}, - goWordRight: function(cm) {cm.moveH(1, "word");}, - delCharBefore: function(cm) {cm.deleteH(-1, "char");}, - delCharAfter: function(cm) {cm.deleteH(1, "char");}, - delWordBefore: function(cm) {cm.deleteH(-1, "word");}, - delWordAfter: function(cm) {cm.deleteH(1, "word");}, - delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, - delGroupAfter: function(cm) {cm.deleteH(1, "group");}, - indentAuto: function(cm) {cm.indentSelection("smart");}, - indentMore: function(cm) {cm.indentSelection("add");}, - indentLess: function(cm) {cm.indentSelection("subtract");}, - insertTab: function(cm) {cm.replaceSelection("\t");}, - insertSoftTab: function(cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); - } - cm.replaceSelections(spaces); - }, - defaultTab: function(cm) { - if (cm.somethingSelected()) cm.indentSelection("add"); - else cm.execCommand("insertTab"); - }, - transposeChars: function(cm) { - runInOp(cm, function() { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) - cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function(cm) { - runInOp(cm, function() { - var len = cm.listSelections().length; - for (var i = 0; i < len; i++) { - var range = cm.listSelections()[i]; - cm.replaceRange("\n", range.anchor, range.head, "+input"); - cm.indentLine(range.from().line + 1, null, true); - ensureCursorVisible(cm); - } - }); - }, - toggleOverwrite: function(cm) {cm.toggleOverwrite();} - }; - - - // STANDARD KEYMAPS - - var keyMap = CodeMirror.keyMap = {}; - - keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - // Note that the save and find-related commands aren't defined by - // default. User code or addons can define them. Unknown commands - // are simply ignored. - keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" - }; - // Very basic readline/emacs-style bindings, which are standard on Mac. - keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - - // KEYMAP DISPATCH - - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; - else if (/^a(lt)?$/i.test(mod)) alt = true; - else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; - else if (/^s(hift)$/i.test(mod)) shift = true; - else throw new Error("Unrecognized modifier name: " + mod); - } - if (alt) name = "Alt-" + name; - if (ctrl) name = "Ctrl-" + name; - if (cmd) name = "Cmd-" + name; - if (shift) name = "Shift-" + name; - return name; - } - - // This is a kludge to keep keymaps mostly working as raw objects - // (backwards compatibility) while at the same time support features - // like normalization and multi-stroke key bindings. It compiles a - // new normalized keymap, and then updates the old object to reflect - // this. - CodeMirror.normalizeKeyMap = function(keymap) { - var copy = {}; - for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; - if (value == "...") { delete keymap[keyname]; continue; } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val, name; - if (i == keys.length - 1) { - name = keyname; - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) copy[name] = val; - else if (prev != val) throw new Error("Inconsistent bindings for " + name); - } - delete keymap[keyname]; - } - for (var prop in copy) keymap[prop] = copy[prop]; - return keymap; - }; - - var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { - map = getKeyMap(map); - var found = map.call ? map.call(key, context) : map[key]; - if (found === false) return "nothing"; - if (found === "...") return "multi"; - if (found != null && handle(found)) return "handled"; - - if (map.fallthrough) { - if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") - return lookupKey(key, map.fallthrough, handle, context); - for (var i = 0; i < map.fallthrough.length; i++) { - var result = lookupKey(key, map.fallthrough[i], handle, context); - if (result) return result; - } - } - }; - - // Modifier key presses don't count as 'real' key presses for the - // purpose of keymap fallthrough. - var isModifierKey = CodeMirror.isModifierKey = function(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - }; - - // Look up the name of a key as indicated by an event object. - var keyName = CodeMirror.keyName = function(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) return false; - var base = keyNames[event.keyCode], name = base; - if (name == null || event.altGraphKey) return false; - if (event.altKey && base != "Alt") name = "Alt-" + name; - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; - if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; - return name; - }; - - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - - // FROMTEXTAREA - - CodeMirror.fromTextArea = function(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) - options.tabindex = textarea.tabIndex; - if (!options.placeholder && textarea.placeholder) - options.placeholder = textarea.placeholder; - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form, realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function() { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - options.finishInit = function(cm) { - cm.save = save; - cm.getTextArea = function() { return textarea; }; - cm.toTextArea = function() { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (typeof textarea.form.submit == "function") - textarea.form.submit = realSubmit; - } - }; - }; - - textarea.style.display = "none"; - var cm = CodeMirror(function(node) { - textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - return cm; - }; - - // STRING STREAM - - // Fed to the mode parsers, provides helper functions to make - // parsers more succinct. - - var StringStream = CodeMirror.StringStream = function(string, tabSize) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - }; - - StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == this.lineStart;}, - peek: function() {return this.string.charAt(this.pos) || undefined;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - indentation: function() { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } - }; - - // TEXTMARKERS - - // Created with markText and setBookmark methods. A TextMarker is a - // handle that can be used to clear or find a marked position in the - // document. Line objects hold arrays (markedSpans) containing - // {from, to, marker} object pointing to such marker objects, and - // indicating that such a marker is present on that line. Multiple - // lines may point to the same marker when it spans across lines. - // The spans will have null for their from/to properties when the - // marker continues beyond the start/end of the line. Markers have - // links back to the lines they currently touch. - - var nextMarkerId = 0; - - var TextMarker = CodeMirror.TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - eventMixin(TextMarker); - - // Clear the marker. - TextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) startOperation(cm); - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) signalLater(this, "clear", found.from, found.to); - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); - else if (cm) { - if (span.to != null) max = lineNo(line); - if (span.from != null) min = lineNo(line); - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) - updateLineHeight(line, textHeight(cm.display)); - } - if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { - var visual = visualLine(this.lines[i]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - - if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) reCheckSelection(cm.doc); - } - if (cm) signalLater(cm, "markerCleared", cm, this); - if (withOp) endOperation(cm); - if (this.parent) this.parent.clear(); - }; - - // Find the position of the marker in the document. Returns a {from, - // to} object by default. Side can be passed to get a specific side - // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the - // Pos objects returned contain a line object, rather than a line - // number (used to prevent looking up the same line twice). - TextMarker.prototype.find = function(side, lineObj) { - if (side == null && this.type == "bookmark") side = 1; - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) return from; - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) return to; - } - } - return from && {from: from, to: to}; - }; - - // Signals that the marker's widget changed, and surrounding layout - // should be recomputed. - TextMarker.prototype.changed = function() { - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) return; - runInOp(cm, function() { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - updateLineHeight(line, line.height + dHeight); - } - }); - }; - - TextMarker.prototype.attachLine = function(line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function(line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - - // Collapsed markers have unique ids, in order to be able to order - // them, which is needed for uniquely determining an outer marker - // when they overlap (they may nest, but not partially overlap). - var nextMarkerId = 0; - - // Create a marker, wire it up to the right lines, and - function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) return markTextShared(doc, from, to, options, type); - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) copyObj(options, marker, false); - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - return marker; - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); - if (options.insertLeft) marker.widgetNode.insertLeft = true; - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - sawCollapsedSpans = true; - } - - if (marker.addToHistory) - addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function(line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - updateMaxLine = true; - if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null)); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { - if (lineIsHidden(doc, line)) updateLineHeight(line, 0); - }); - - if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); - - if (marker.readOnly) { - sawReadOnlySpans = true; - if (doc.history.done.length || doc.history.undone.length) - doc.clearHistory(); - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) cm.curOp.updateMaxLine = true; - if (marker.collapsed) - regChange(cm, from.line, to.line + 1); - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); - if (marker.atomic) reCheckSelection(cm.doc); - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - - // SHARED TEXTMARKERS - - // A shared marker spans multiple linked documents. It is - // implemented as a meta-marker-object controlling multiple normal - // markers. - var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - markers[i].parent = this; - }; - eventMixin(SharedTextMarker); - - SharedTextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - this.markers[i].clear(); - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function(side, lineObj) { - return this.primary.find(side, lineObj); - }; - - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function(doc) { - if (widget) options.widgetNode = widget.cloneNode(true); - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - if (doc.linked[i].isParent) return; - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), - function(m) { return m.parent; }); - } - - function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - - function detachSharedMarkers(markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], linked = [marker.primary.doc];; - linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - } - } - - // TEXTMARKER SPANS - - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; - } - - // Search an array of spans for a span matching the given marker. - function getMarkedSpanFor(spans, marker) { - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) return span; - } - } - // Remove a span from an array, returning undefined if no spans are - // left (we don't store arrays for lines without spans). - function removeMarkedSpan(spans, span) { - for (var r, i = 0; i < spans.length; ++i) - if (spans[i] != span) (r || (r = [])).push(spans[i]); - return r; - } - // Add a span to a line. - function addMarkedSpan(line, span) { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - span.marker.attachLine(line); - } - - // Used for the algorithm that adjusts markers for a change in the - // document. These functions cut an array of spans at a given - // character position, returning an array of remaining chunks (or - // undefined if nothing remains). - function markedSpansBefore(old, startCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } - return nw; - } - - // Given a change object, compute the new set of marker spans that - // cover the line in which the change took place. Removes spans - // entirely within the change, reconnects spans belonging to the - // same marker that appear on both sides of the change, and cuts off - // spans partially within the change. Returns an array of span - // arrays with one element for each line in (after) the change. - function stretchSpansOverChange(doc, change) { - if (change.full) return null; - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) return null; - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) span.to = startCh; - else if (sameLine) span.to = found.to == null ? null : found.to + offset; - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i = 0; i < last.length; ++i) { - var span = last[i]; - if (span.to != null) span.to += offset; - if (span.from == null) { - var found = getMarkedSpanFor(first, span.marker); - if (!found) { - span.from = offset; - if (sameLine) (first || (first = [])).push(span); - } - } else { - span.from += offset; - if (sameLine) (first || (first = [])).push(span); - } - } - } - // Make sure we didn't create any zero-length spans - if (first) first = clearEmptySpans(first); - if (last && last != first) last = clearEmptySpans(last); - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - for (var i = 0; i < first.length; ++i) - if (first[i].to == null) - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); - for (var i = 0; i < gap; ++i) - newMarkers.push(gapMarkers); - newMarkers.push(last); - } - return newMarkers; - } - - // Remove spans that are empty and don't have a clearWhenEmpty - // option of false. - function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - spans.splice(i--, 1); - } - if (!spans.length) return null; - return spans; - } - - // Used for un/re-doing changes from the history. Combines the - // result of computing the existing spans with the set of spans that - // existed in the history (so that deleting around a span and then - // undoing brings back the span). - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) return stretched; - if (!stretched) return old; - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - if (oldCur[k].marker == span.marker) continue spans; - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old; - } - - // Used to 'clip' out readOnly ranges when making a change. - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function(line) { - if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - (markers || (markers = [])).push(mark); - } - }); - if (!markers) return null; - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - newParts.push({from: p.from, to: m.from}); - if (dto > 0 || !mk.inclusiveRight && !dto) - newParts.push({from: m.to, to: p.to}); - parts.splice.apply(parts, newParts); - j += newParts.length - 1; - } - } - return parts; - } - - // Connect or disconnect spans from a line. - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.detachLine(line); - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.attachLine(line); - line.markedSpans = spans; - } - - // Helpers used when computing which overlapping collapsed span - // counts as the larger one. - function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } - function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } - - // Returns a number indicating which of two overlapping collapsed - // spans is larger (and thus includes the other). Falls back to - // comparing ids when the spans cover exactly the same range. - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) return lenDiff; - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) return -fromCmp; - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) return toCmp; - return b.id - a.id; - } - - // Find out whether a line ends or starts in a collapsed span. If - // so, return the marker for that span. - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - found = sp.marker; - } - return found; - } - function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } - function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } - - // Test whether there exists a collapsed span that partially - // overlaps (covers the start or end, but not both) of a new span. - // Such overlap is not allowed. - function conflictingCollapsedRange(doc, lineNo, from, to, marker) { - var line = getLine(doc, lineNo); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) continue; - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; - if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || - fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) - return true; - } - } - - // A visual line is a line as drawn on the screen. Folding, for - // example, can cause multiple logical lines to appear on the same - // visual line. This finds the start of the visual line that the - // given line is part of (usually that is the line itself). - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - line = merged.find(-1, true).line; - return line; - } - - // Returns an array of logical lines that continue the visual line - // started by the argument, or undefined if there are no such lines. - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - - // Get the line number of the start of the visual line that the - // given line number is part of. - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) return lineN; - return lineNo(vis); - } - // Get the line number of the start of the next visual line after - // the given line. - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) return lineN; - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) return lineN; - while (merged = collapsedSpanAtEnd(line)) - line = merged.find(1, true).line; - return lineNo(line) + 1; - } - - // Compute whether a line is hidden. Lines count as hidden when they - // are part of a visual line that starts with another line, or when - // they are entirely covered by collapsed, non-widget span. - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) continue; - if (sp.from == null) return true; - if (sp.marker.widgetNode) continue; - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - return true; - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) - return true; - for (var sp, i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) return true; - } - } - - // LINE WIDGETS - - // Line widgets are block elements displayed above or below a line. - - var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { - if (options) for (var opt in options) if (options.hasOwnProperty(opt)) - this[opt] = options[opt]; - this.doc = doc; - this.node = node; - }; - eventMixin(LineWidget); - - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - addToScrollPos(cm, null, diff); - } - - LineWidget.prototype.clear = function() { - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) return; - for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); - if (!ws.length) line.widgets = null; - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) runInOp(cm, function() { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - }; - LineWidget.prototype.changed = function() { - var oldH = this.height, cm = this.doc.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) return; - updateLineHeight(line, line.height + diff); - if (cm) runInOp(cm, function() { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - }); - }; - - function widgetHeight(widget) { - if (widget.height != null) return widget.height; - var cm = widget.doc.cm; - if (!cm) return 0; - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; - if (widget.noHScroll) - parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.offsetHeight; - } - - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) cm.display.alignWidgets = true; - changeLine(doc, handle, "widget", function(line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) widgets.push(widget); - else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) addToScrollPos(cm, null, widget.height); - cm.curOp.forceUpdate = true; - } - return true; - }); - return widget; - } - - // LINE DATA STRUCTURE - - // Line objects. These hold state related to a line, including - // highlighting info (the styles array). - var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; - }; - eventMixin(Line); - Line.prototype.lineNo = function() { return lineNo(this); }; - - // Change the content (text, markers) of a line. Automatically - // invalidates cached information and tries to re-estimate the - // line's height. - function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - if (line.order != null) line.order = null; - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) updateLineHeight(line, estHeight); - } - - // Detach a line from the document tree and its markers. - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - - function extractLineClasses(type, output) { - if (type) for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) break; - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - output[prop] = lineClass[2]; - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - output[prop] += " " + lineClass[2]; - } - return type; - } - - function callBlankLine(mode, state) { - if (mode.blankLine) return mode.blankLine(state); - if (!mode.innerMode) return; - var inner = CodeMirror.innerMode(mode, state); - if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); - } - - function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; - var style = mode.token(stream, state); - if (stream.pos > stream.start) return style; - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - - // Utility for getTokenAt and getLineTokens - function takeToken(cm, pos, precise, asArray) { - function getObj(copy) { - return {start: stream.start, end: stream.pos, - string: stream.current(), - type: style || null, - state: copy ? copyState(doc.mode, state) : state}; - } - - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize), tokens; - if (asArray) tokens = []; - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, state); - if (asArray) tokens.push(getObj(true)); - } - return asArray ? tokens : getObj(); - } - - // Run the given mode's parser over a line, calling f for each token. - function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) processLine(cm, text, state, stream.pos); - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) style = "m-" + (style ? mName + " " + style : mName); - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 50000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 characters - var pos = Math.min(stream.pos, curStart + 50000); - f(pos, curStyle); - curStart = pos; - } - } - - // Compute a style array (an array starting with a mode generation - // -- for invalidation -- followed by pairs of end positions and - // style strings), which is used to highlight the tokens on the - // line. - function highlightLine(cm, line, state, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, state, function(end, style) { - st.push(end, style); - }, lineClasses, forceToEnd); - - // Run overlays, adjust style array. - for (var o = 0; o < cm.state.overlays.length; ++o) { - var overlay = cm.state.overlays[o], i = 1, at = 0; - runMode(cm, line.text, overlay.mode, true, function(end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - st.splice(i, 1, end, st[i+1], i_end); - i += 2; - at = Math.min(end, i_end); - } - if (!style) return; - if (overlay.opaque) { - st.splice(start, i - start, end, "cm-overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; - } - } - }, lineClasses); - } - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; - } - - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); - line.styles = result.styles; - if (result.classes) line.styleClasses = result.classes; - else if (line.styleClasses) line.styleClasses = null; - if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; - } - return line.styles; - } - - // Lightweight form of highlight -- proceed over this line and - // update state, but don't save a style array. Used for lines that - // aren't currently visible. - function processLine(cm, text, state, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize); - stream.start = stream.pos = startAt || 0; - if (text == "") callBlankLine(mode, state); - while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { - readToken(mode, stream, state); - stream.start = stream.pos; - } - } - - // Convert a style as returned by a mode (either null, or a string - // containing one or more styles) to a CSS style. This is cached, - // and also looks for line-wide styles. - var styleToClassCache = {}, styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) return null; - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - - // Render the DOM representation of the text of a line. Also builds - // up a 'line map', which points at the DOM nodes that represent - // specific stretches of text, and is used by the measuring code. - // The returned object contains the DOM node, this map, and - // information about line-wide styles that were set by the mode. - function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: elt("pre", [content]), content: content, - col: 0, pos: 0, cm: cm, - splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order; - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) - builder.addToken = buildTokenBadBidi(builder.addToken, order); - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - if (line.styleClasses.textClass) - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) - builder.content.className = "cm-tab-wrap-hack"; - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - - return builder; - } - - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token; - } - - // Build up the DOM representation for a single token, and add it to - // the line map. Takes care to render special characters separately. - function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) return; - var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; - var special = builder.cm.state.specialChars, mustWrap = false; - if (!special.test(text)) { - builder.col += text.length; - var content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) mustWrap = true; - builder.pos += text.length; - } else { - var content = document.createDocumentFragment(), pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) break; - pos += skipped + 1; - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt.setAttribute("role", "presentation"); - txt.setAttribute("cm-text", "\t"); - builder.col += tabWidth; - } else { - var txt = builder.cm.options.specialCharPlaceholder(m[0]); - txt.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt); - builder.pos++; - } - } - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || ""; - if (startStyle) fullStyle += startStyle; - if (endStyle) fullStyle += endStyle; - var token = elt("span", [content], fullStyle, css); - if (title) token.title = title; - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - - function splitSpaces(old) { - var out = " "; - for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; - out += " "; - return out; - } - - // Work around nonsense dimensions being reported for stretches of - // right-to-left text. - function buildTokenBadBidi(inner, order) { - return function(builder, text, style, startStyle, endStyle, title, css) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - for (var i = 0; i < order.length; i++) { - var part = order[i]; - if (part.to > start && part.from <= start) break; - } - if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) builder.map.push(builder.pos, builder.pos + size, widget); - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - widget = builder.content.appendChild(document.createElement("span")); - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - } - - // Outputs a number of spans to make up a line, taking highlighting - // and marked text into account. - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i = 1; i < styles.length; i+=2) - builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); - return; - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = ""; - collapsed = null; nextChange = Infinity; - var foundBookmarks = []; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (sp.from <= pos && (sp.to == null || sp.to > pos)) { - if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } - if (m.className) spanStyle += " " + m.className; - if (m.css) css = m.css; - if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; - if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; - if (m.title && !title) title = m.title; - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - collapsed = sp; - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) return; - } - if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) - buildCollapsedSpan(builder, 0, foundBookmarks[j]); - } - if (pos >= len) break; - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } - } - - // DOCUMENT DATA STRUCTURE - - // By default, updates that start and end at the beginning of a line - // are treated specially, in order to make the association of line - // widgets and marker elements with the text behave more intuitive. - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - - // Perform a change on the document data structure. - function updateDoc(doc, change, markedSpans, estimateHeight) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null;} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - for (var i = start, result = []; i < end; ++i) - result.push(new Line(text[i], spansFor(i), estimateHeight)); - return result; - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) doc.remove(from.line, nlines); - if (added.length) doc.insert(from.line, added); - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added = linesFor(1, text.length - 1); - added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added = linesFor(1, text.length - 1); - if (nlines > 1) doc.remove(from.line + 1, nlines - 1); - doc.insert(from.line + 1, added); - } - - signalLater(doc, "change", doc, change); - } - - // The document is represented as a BTree consisting of leaves, with - // chunk of lines in them, and branches, with up to ten leaves or - // other branch nodes below them. The top node is always a branch - // node, and is the document object itself (meaning it has - // additional methods and properties). - // - // All nodes have parent links. The tree is used both to go from - // line numbers to line objects, and to go from objects to numbers. - // It also indexes by height, and is used to convert between height - // and line object, and to find the total height of the document. - // - // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - for (var i = 0, height = 0; i < lines.length; ++i) { - lines[i].parent = this; - height += lines[i].height; - } - this.height = height; - } - - LeafChunk.prototype = { - chunkSize: function() { return this.lines.length; }, - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - for (var i = at, e = at + n; i < e; ++i) { - var line = this.lines[i]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) lines[i].parent = this; - }, - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - for (var e = at + n; at < e; ++at) - if (op(this.lines[at])) return true; - } - }; - - function BranchChunk(children) { - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - - BranchChunk.prototype = { - chunkSize: function() { return this.size; }, - removeInner: function(at, n) { - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) break; - at = 0; - } else at -= sz; - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function(lines) { - for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); - }, - insertInner: function(at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - while (child.lines.length > 50) { - var spilled = child.lines.splice(child.lines.length - 25, 25); - var newleaf = new LeafChunk(spilled); - child.height -= newleaf.height; - this.children.splice(i + 1, 0, newleaf); - newleaf.parent = this; - } - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) return; - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function(at, n, op) { - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) return true; - if ((n -= used) == 0) break; - at = 0; - } else at -= sz; - } - } - }; - - var nextDocId = 0; - var Doc = CodeMirror.Doc = function(text, mode, firstLine) { - if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); - if (firstLine == null) firstLine = 0; - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.frontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - - if (typeof text == "string") text = splitLines(text); - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) this.iterN(from - this.first, to - from, op); - else this.iterN(this.first, this.first + this.size, from); - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) height += lines[i].height; - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: splitLines(code), origin: "setValue", full: true}, true); - setSelection(this, simpleSelection(top)); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, - - getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, - getLineNumber: function(line) {return lineNo(line);}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") line = getLine(this, line); - return visualLine(line); - }, - - lineCount: function() {return this.size;}, - firstLine: function() {return this.first;}, - lastLine: function() {return this.first + this.size - 1;}, - - clipPos: function(pos) {return clipPos(this, pos);}, - - getCursor: function(start) { - var range = this.sel.primary(), pos; - if (start == null || start == "head") pos = range.head; - else if (start == "anchor") pos = range.anchor; - else if (start == "end" || start == "to" || start === false) pos = range.to(); - else pos = range.from(); - return pos; - }, - listSelections: function() { return this.sel.ranges; }, - somethingSelected: function() {return this.sel.somethingSelected();}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads, options)); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - extendSelections(this, map(this.sel.ranges, f), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - if (!ranges.length) return; - for (var i = 0, out = []; i < ranges.length; i++) - out[i] = new Range(clipPos(this, ranges[i].anchor), - clipPos(this, ranges[i].head)); - if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); - setSelection(this, normalizeSelection(out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) return lines; - else return lines.join(lineSep || "\n"); - }, - getSelections: function(lineSep) { - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) sel = sel.join(lineSep || "\n"); - parts[i] = sel; - } - return parts; - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - dup[i] = code; - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i = changes.length - 1; i >= 0; i--) - makeChange(this, changes[i]); - if (newSel) setSelectionReplaceHistory(this, newSel); - else if (this.cm) ensureCursorVisible(this.cm); - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend;}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; - for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; - return {undo: done, redo: undone}; - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration);}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)}; - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) line[prop] = cls; - else if (classTest(cls).test(line[prop])) return false; - else line[prop] += " " + cls; - return true; - }); - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) return false; - else if (cls == null) line[prop] = null; - else { - var found = cur.match(classTest(cls)); - if (!found) return false; - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - removeLineWidget: function(widget) { widget.clear(); }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - markers.push(span.marker.parent || span.marker); - } - return markers; - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo = from.line; - this.iter(from.line, to.line + 1, function(line) { - var spans = line.markedSpans; - if (spans) for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(lineNo == from.line && from.ch > span.to || - span.from == null && lineNo != from.line|| - lineNo == to.line && span.from > to.ch) && - (!filter || filter(span.marker))) - found.push(span.marker.parent || span.marker); - } - ++lineNo; - }); - return found; - }, - getAllMarks: function() { - var markers = []; - this.iter(function(line) { - var sps = line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) - if (sps[i].from != null) markers.push(sps[i].marker); - }); - return markers; - }, - - posFromIndex: function(off) { - var ch, lineNo = this.first; - this.iter(function(line) { - var sz = line.text.length + 1; - if (sz > off) { ch = off; return true; } - off -= sz; - ++lineNo; - }); - return clipPos(this, Pos(lineNo, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) return 0; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + 1; - }); - return index; - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - - linkedDoc: function(options) { - if (!options) options = {}; - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) from = options.from; - if (options.to != null && options.to < to) to = options.to; - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); - if (options.sharedHist) copy.history = this.history; - (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function(other) { - if (other instanceof CodeMirror) other = other.doc; - if (this.linked) for (var i = 0; i < this.linked.length; ++i) { - var link = this.linked[i]; - if (link.doc != other) continue; - this.linked.splice(i, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode;}, - getEditor: function() {return this.cm;} - }); - - // Public alias. - Doc.prototype.eachLine = Doc.prototype.iter; - - // Set up methods on CodeMirror's prototype to redirect to the editor's document. - var dontDelegate = "iter insert remove copy getEditor".split(" "); - for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - CodeMirror.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments);}; - })(Doc.prototype[prop]); - - eventMixin(Doc); - - // Call f for all linked documents. - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) continue; - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) continue; - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } - } - propagate(doc, null, true); - } - - // Attach a document to an editor. - function attachDoc(cm, doc) { - if (doc.cm) throw new Error("This document is already in use."); - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - if (!cm.options.lineWrapping) findMaxLine(cm); - cm.options.mode = doc.modeOption; - regChange(cm); - } - - // LINE UTILITIES - - // Find the line object corresponding to the given line number. - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); - for (var chunk = doc; !chunk.lines;) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break; } - n -= sz; - } - } - return chunk.lines[n]; - } - - // Get the part of a document between two positions, as an array of - // strings. - function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function(line) { - var text = line.text; - if (n == end.line) text = text.slice(0, end.ch); - if (n == start.line) text = text.slice(start.ch); - out.push(text); - ++n; - }); - return out; - } - // Get the lines between from and to, as array of strings. - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function(line) { out.push(line.text); }); - return out; - } - - // Update the height of a line, propagating the height change - // upwards to parent nodes. - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) for (var n = line; n; n = n.parent) n.height += diff; - } - - // Given a line object, find its line number by walking up through - // its parent links. - function lineNo(line) { - if (line.parent == null) return null; - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) break; - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first; - } - - // Find the line at the given vertical position, using the height - // information in the document tree. - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i = 0; i < chunk.children.length; ++i) { - var child = chunk.children[i], ch = child.height; - if (h < ch) { chunk = child; continue outer; } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) break; - h -= lh; - } - return n + i; - } - - - // Find the height above the given line. - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) break; - else h += line.height; - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i = 0; i < p.children.length; ++i) { - var cur = p.children[i]; - if (cur == chunk) break; - else h += cur.height; - } - } - return h; - } - - // Get the bidi ordering for the given line (and cache it). Returns - // false for lines that are fully left-to-right, and an array of - // BidiSpan objects otherwise. - function getOrder(line) { - var order = line.order; - if (order == null) order = line.order = bidiOrdering(line.text); - return order; - } - - // HISTORY - - function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1; - } - - // Create a history change event from an updateDoc-style change - // object. - function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); - return histChange; - } - - // Pop all selection events off the end of a history array. Stop at - // a change event. - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) array.pop(); - else break; - } - } - - // Find the top change event in the history. Pop off selection - // events that are in the way. - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - - // Register a change in the history. Merges changes that are within - // a single operation, ore are close together with an origin that - // allows merging (starting with "+") into a single event. - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - var last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - pushSelectionToHistory(doc.sel, hist.done); - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) hist.done.shift(); - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) signal(doc, "historyAdded"); - } - - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - - // Called whenever the selection changes, sets the new selection as - // the pending selection in the history, and pushes the old pending - // selection into the 'done' array when it was significantly - // different (in number of selected ranges, emptiness, or time). - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - hist.done[hist.done.length - 1] = sel; - else - pushSelectionToHistory(sel, hist.done); - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - clearSelectionEvents(hist.undone); - } - - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - dest.push(sel); - } - - // Used to store marked span information in the history. - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { - if (line.markedSpans) - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - ++n; - }); - } - - // When un/re-doing restores text containing marked spans, those - // that have been explicitly cleared should not be restored. - function removeClearedSpans(spans) { - if (!spans) return null; - for (var i = 0, out; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } - else if (out) out.push(spans[i]); - } - return !out ? spans : out.length ? out : null; - } - - // Retrieve and filter the old marked spans stored in a change event. - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) return null; - for (var i = 0, nw = []; i < change.text.length; ++i) - nw.push(removeClearedSpans(found[i])); - return nw; - } - - // Used both to provide a JSON-safe object in .getHistory, and, when - // detaching a document, to split the history in two - function copyHistoryArray(events, newGroup, instantiateSel) { - for (var i = 0, copy = []; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m; - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } - } - } - return copy; - } - - // Rebasing/resetting history to deal with externally-sourced changes - - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - - // Tries to rebase an array of history events given a change in the - // document. If the change touches the same lines as the event, the - // event, and everything 'behind' it, is discarded. If the change is - // before the event, the event's positions are updated. Uses a - // copy-on-write scheme for the positions, to avoid having to - // reallocate them all on every rebase, but also avoid problems with - // shared position objects being unsafely updated. - function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j = 0; j < sub.changes.length; ++j) { - var cur = sub.changes[j]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } - } - - function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - - // EVENT UTILITIES - - // Due to the fact that we still support jurassic IE versions, some - // compatibility wrappers are needed. - - var e_preventDefault = CodeMirror.e_preventDefault = function(e) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - }; - var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { - if (e.stopPropagation) e.stopPropagation(); - else e.cancelBubble = true; - }; - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; - - function e_target(e) {return e.target || e.srcElement;} - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) b = 1; - else if (e.button & 2) b = 3; - else if (e.button & 4) b = 2; - } - if (mac && e.ctrlKey && b == 1) b = 3; - return b; - } - - // EVENT HANDLING - - // Lightweight event framework. on/off also work on DOM nodes, - // registering native DOM handlers. - - var on = CodeMirror.on = function(emitter, type, f) { - if (emitter.addEventListener) - emitter.addEventListener(type, f, false); - else if (emitter.attachEvent) - emitter.attachEvent("on" + type, f); - else { - var map = emitter._handlers || (emitter._handlers = {}); - var arr = map[type] || (map[type] = []); - arr.push(f); - } - }; - - var off = CodeMirror.off = function(emitter, type, f) { - if (emitter.removeEventListener) - emitter.removeEventListener(type, f, false); - else if (emitter.detachEvent) - emitter.detachEvent("on" + type, f); - else { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - for (var i = 0; i < arr.length; ++i) - if (arr[i] == f) { arr.splice(i, 1); break; } - } - }; - - var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); - }; - - var orphanDelayedCallbacks = null; - - // Often, we want to signal events at a point where we are in the - // middle of some work, but don't want the handler to start calling - // other methods on the editor, which might be in an inconsistent - // state or simply not expect any other events to happen. - // signalLater looks whether there are any handlers, and schedules - // them to be executed when the last operation ends, or, if no - // operation is active, when a timeout fires. - function signalLater(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - function bnd(f) {return function(){f.apply(null, args);};}; - for (var i = 0; i < arr.length; ++i) - list.push(bnd(arr[i])); - } - - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) delayed[i](); - } - - // The DOM events that CodeMirror handles can be overridden by - // registering a (non-DOM) handler on the editor for the event name, - // and preventDefault-ing the event in that handler. - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) return; - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) - set.push(arr[i]); - } - - function hasHandler(emitter, type) { - var arr = emitter._handlers && emitter._handlers[type]; - return arr && arr.length > 0; - } - - // Add on and off methods to a constructor's prototype, to make - // registering events on such objects more convenient. - function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; - } - - // MISC UTILITIES - - // Number of pixels added to scroller and sizer to hide scrollbar - var scrollerGap = 30; - - // Returned or thrown by various protocols to signal 'I'm not - // handling this'. - var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; - - // Reused option objects for setSelection & friends - var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; - - function Delayed() {this.id = null;} - Delayed.prototype.set = function(ms, f) { - clearTimeout(this.id); - this.id = setTimeout(f, ms); - }; - - // Counts the column offset in a string, taking tabs into account. - // Used mostly to find indentation. - var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) end = string.length; - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - return n + (end - i); - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } - }; - - // The inverse of countColumn -- find the offset that corresponds to - // a particular column. - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) nextTab = string.length; - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - return pos + Math.min(skipped, goal - col); - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) return pos; - } - } - - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) - spaceStrs.push(lst(spaceStrs) + " "); - return spaceStrs[n]; - } - - function lst(arr) { return arr[arr.length-1]; } - - var selectInput = function(node) { node.select(); }; - if (ios) // Mobile Safari apparently has a bug where select() is broken. - selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; - else if (ie) // Suppress mysterious IE10 errors - selectInput = function(node) { try { node.select(); } catch(_e) {} }; - - function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - if (array[i] == elt) return i; - return -1; - } - function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); - return out; - } - - function nothing() {} - - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) copyObj(props, inst); - return inst; - }; - - function copyObj(obj, target, overwrite) { - if (!target) target = {}; - for (var prop in obj) - if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - target[prop] = obj[prop]; - return target; - } - - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args);}; - } - - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - var isWordCharBasic = CodeMirror.isWordChar = function(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - }; - function isWordChar(ch, helper) { - if (!helper) return isWordCharBasic(ch); - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; - return helper.test(ch); - } - - function isEmpty(obj) { - for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; - return true; - } - - // Extending unicode characters. A series of a non-extending char + - // any number of extending chars is treated as a single unit as far - // as editing and measuring is concerned. This is not fully correct, - // since some scripts/fonts/browsers also treat other configurations - // of code points as a group. - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } - - // DOM UTILITIES - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) e.className = className; - if (style) e.style.cssText = style; - if (typeof content == "string") e.appendChild(document.createTextNode(content)); - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); - return e; - } - - var range; - if (document.createRange) range = function(node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r; - }; - else range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r; } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - e.removeChild(e.firstChild); - return e; - } - - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - - var contains = CodeMirror.contains = function(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - child = child.parentNode; - if (parent.contains) - return parent.contains(child); - do { - if (child.nodeType == 11) child = child.host; - if (child == parent) return true; - } while (child = child.parentNode); - }; - - function activeElt() { return document.activeElement; } - // Older versions of IE throws unspecified error when touching - // document.activeElement in some cases (during loading, in iframe) - if (ie && ie_version < 11) activeElt = function() { - try { return document.activeElement; } - catch(e) { return document.body; } - }; - - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } - var rmClass = CodeMirror.rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - var addClass = CodeMirror.addClass = function(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; - }; - function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; - return b; - } - - // WINDOW-WIDE EVENTS - - // These must be handled carefully, because naively registering a - // handler for each editor will cause the editors to never be - // garbage collected. - - function forEachCodeMirror(f) { - if (!document.body.getElementsByClassName) return; - var byClass = document.body.getElementsByClassName("CodeMirror"); - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) f(cm); - } - } - - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) return; - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function() { - if (resizeTimer == null) resizeTimer = setTimeout(function() { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function() { - forEachCodeMirror(onBlur); - }); - } - - // FEATURE DETECTION - - // Detect drag-and-drop - var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) return false; - var div = elt('div'); - return "draggable" in div || "dragDrop" in div; - }(); - - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node; - } - - // Feature-detect IE's crummy client rect reporting for bidi text - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) return badBidiRects; - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) - var r1 = range(txt, 1, 2).getBoundingClientRect(); - return badBidiRects = (r1.right - r0.right < 3); - } - - // See if "".split is the broken IE version, if so, provide an - // alternative way to split lines. - var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) nl = string.length; - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function(string){return string.split(/\r\n?|\n/);}; - - var hasSelection = window.getSelection ? function(te) { - try { return te.selectionStart != te.selectionEnd; } - catch(e) { return false; } - } : function(te) { - try {var range = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range || range.parentElement() != te) return false; - return range.compareEndPoints("StartToEnd", range) != 0; - }; - - var hasCopyEvent = (function() { - var e = elt("div"); - if ("oncopy" in e) return true; - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - })(); - - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) return badZoomedRects; - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - - // KEY NAMES - - var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; - CodeMirror.keyNames = keyNames; - (function() { - // Number keys - for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); - // Alphabetic keys - for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); - // Function keys - for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; - })(); - - // BIDI HELPERS - - function iterateBidiSections(order, from, to, f) { - if (!order) return f(from, to, "ltr"); - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); - found = true; - } - } - if (!found) f(from, to, "ltr"); - } - - function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } - function bidiRight(part) { return part.level % 2 ? part.from : part.to; } - - function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } - function lineRight(line) { - var order = getOrder(line); - if (!order) return line.text.length; - return bidiRight(lst(order)); - } - - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) lineN = lineNo(visual); - var order = getOrder(visual); - var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); - return Pos(lineN, ch); - } - function lineEnd(cm, lineN) { - var merged, line = getLine(cm.doc, lineN); - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - lineN = null; - } - var order = getOrder(line); - var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); - return Pos(lineN == null ? lineNo(line) : lineN, ch); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS); - } - return start; - } - - function compareBidiLevel(order, a, b) { - var linedir = order[0].level; - if (a == linedir) return true; - if (b == linedir) return false; - return a < b; - } - var bidiOther; - function getBidiPartAt(order, pos) { - bidiOther = null; - for (var i = 0, found; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < pos && cur.to > pos) return i; - if ((cur.from == pos || cur.to == pos)) { - if (found == null) { - found = i; - } else if (compareBidiLevel(order, cur.level, order[found].level)) { - if (cur.from != cur.to) bidiOther = found; - return i; - } else { - if (cur.from != cur.to) bidiOther = i; - return found; - } - } - } - return found; - } - - function moveInLine(line, pos, dir, byUnit) { - if (!byUnit) return pos + dir; - do pos += dir; - while (pos > 0 && isExtendingChar(line.text.charAt(pos))); - return pos; - } - - // This is needed in order to move 'visually' through bi-directional - // text -- i.e., pressing left should make the cursor go left, even - // when in RTL text. The tricky part is the 'jumps', where RTL and - // LTR text touch each other. This often requires the cursor offset - // to move more than one unit, in order to visually move one unit. - function moveVisually(line, start, dir, byUnit) { - var bidi = getOrder(line); - if (!bidi) return moveLogically(line, start, dir, byUnit); - var pos = getBidiPartAt(bidi, start), part = bidi[pos]; - var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); - - for (;;) { - if (target > part.from && target < part.to) return target; - if (target == part.from || target == part.to) { - if (getBidiPartAt(bidi, target) == pos) return target; - part = bidi[pos += dir]; - return (dir > 0) == part.level % 2 ? part.to : part.from; - } else { - part = bidi[pos += dir]; - if (!part) return null; - if ((dir > 0) == part.level % 2) - target = moveInLine(line, part.to, -1, byUnit); - else - target = moveInLine(line, part.from, 1, byUnit); - } - } - } - - function moveLogically(line, start, dir, byUnit) { - var target = start + dir; - if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; - return target < 0 || target > line.text.length ? null : target; - } - - // Bidirectional ordering algorithm - // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm - // that this (partially) implements. - - // One-char codes used for character types: - // L (L): Left-to-Right - // R (R): Right-to-Left - // r (AL): Right-to-Left Arabic - // 1 (EN): European Number - // + (ES): European Number Separator - // % (ET): European Number Terminator - // n (AN): Arabic Number - // , (CS): Common Number Separator - // m (NSM): Non-Spacing Mark - // b (BN): Boundary Neutral - // s (B): Paragraph Separator - // t (S): Segment Separator - // w (WS): Whitespace - // N (ON): Other Neutrals - - // Returns null if characters are ordered as they appear - // (left-to-right), or an array of sections ({from, to, level} - // objects) in the order in which they occur visually. - var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6ff - var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; - function charType(code) { - if (code <= 0xf7) return lowTypes.charAt(code); - else if (0x590 <= code && code <= 0x5f4) return "R"; - else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); - else if (0x6ee <= code && code <= 0x8ac) return "r"; - else if (0x2000 <= code && code <= 0x200b) return "w"; - else if (code == 0x200c) return "b"; - else return "L"; - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - // Browsers seem to always treat the boundaries of block elements as being L. - var outerType = "L"; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str) { - if (!bidiRE.test(str)) return false; - var len = str.length, types = []; - for (var i = 0, type; i < len; ++i) - types.push(type = charType(str.charCodeAt(i))); - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i = 0, prev = outerType; i < len; ++i) { - var type = types[i]; - if (type == "m") types[i] = prev; - else prev = type; - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (type == "1" && cur == "r") types[i] = "n"; - else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i = 1, prev = types[0]; i < len - 1; ++i) { - var type = types[i]; - if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; - else if (type == "," && prev == types[i+1] && - (prev == "1" || prev == "n")) types[i] = prev; - prev = type; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i = 0; i < len; ++i) { - var type = types[i]; - if (type == ",") types[i] = "N"; - else if (type == "%") { - for (var end = i + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (cur == "L" && type == "1") types[i] = "L"; - else if (isStrong.test(type)) cur = type; - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i = 0; i < len; ++i) { - if (isNeutral.test(types[i])) { - for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} - var before = (i ? types[i-1] : outerType) == "L"; - var after = (end < len ? types[end] : outerType) == "L"; - var replace = before || after ? "L" : "R"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i = 0; i < len;) { - if (countsAsLeft.test(types[i])) { - var start = i; - for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} - order.push(new BidiSpan(0, start, i)); - } else { - var pos = i, at = order.length; - for (++i; i < len && types[i] != "L"; ++i) {} - for (var j = pos; j < i;) { - if (countsAsNum.test(types[j])) { - if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); - var nstart = j; - for (++j; j < i && countsAsNum.test(types[j]); ++j) {} - order.splice(at, 0, new BidiSpan(2, nstart, j)); - pos = j; - } else ++j; - } - if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); - } - } - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - if (order[0].level != lst(order).level) - order.push(new BidiSpan(order[0].level, len, len)); - - return order; - }; - })(); - - // THE END - - CodeMirror.version = "5.1.1"; - - return CodeMirror; -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/policy-edit.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/policy-edit.js deleted file mode 100644 index edea5b06d..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/policy-edit.js +++ /dev/null @@ -1,729 +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 validateStep = {}; -var skipStep = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; - -/** - * 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); - }); - } -}; - -skipStep["policy-platform"] = function (policyPayloadObj) { - policy["name"] = policyPayloadObj["policyName"]; - policy["platform"] = policyPayloadObj["profile"]["deviceType"]["name"]; - policy["platformId"] = policyPayloadObj["profile"]["deviceType"]["id"]; - var userRoleInput = $("#user-roles-input"); - var ownershipInput = $("#ownership-input"); - var userInput = $("#users-input"); - var actionInput = $("#action-input"); - var policyNameInput = $("#policy-name-input"); - var policyDescriptionInput = $("#policy-description-input"); - userRoleInput.val(policyPayloadObj.roles).trigger("change"); - userInput.val(policyPayloadObj.users).trigger("change"); - ownershipInput.val(policyPayloadObj.ownershipType); - actionInput.val(policyPayloadObj.compliance); - policyNameInput.val(policyPayloadObj["policyName"]); - policyDescriptionInput.val(policyPayloadObj["description"]); - // updating next-page wizard title with selected platform - $("#policy-profile-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); - - var profileFeaturesList = policyPayloadObj["profile"]["profileFeaturesList"]; - if (profileFeaturesList.length > 0){ - var content = profileFeaturesList[0]["content"]; - var policyDefinitionObj = JSON.parse(content); - window.queryEditor.setValue(policyDefinitionObj["policyDefinition"]); - } -}; - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - return true; -} - -stepForwardFrom["policy-profile"] = function () { - policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations); - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - // updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length. Please check."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length. Please check."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "publish"); -}; -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "save"); -}; - -var updatePolicy = function (policy, state) { - var profilePayloads = [{ - "featureCode": "CONFIG", - "deviceTypeId": policy["platformId"], - "content": {"policyDefinition": window.queryEditor.getValue()} - }]; - - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": "ANY", - "profile": { - "profileName": policy["policyName"], - "deviceType": { - "id": policy["platformId"], - "name": policy["platform"] - }, - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - } else if (policy["selectedUserRoles"]) { - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - - var serviceURL = "/api/device-mgt/v1.0/policies/" + getParameterByName("id"); - invokerUtil.put( - serviceURL, - payload, - // on success - function () { - if (state == "save"){ - var policyList = []; - policyList.push(getParameterByName("id")); - serviceURL = "/api/device-mgt/v1.0/policies/inactivate"; - invokerUtil.put( - serviceURL, - policyList, - // on success - function () { - $(".add-policy").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - }, - // on error - function () { - - } - ); - }else if(state == "publish"){ - var policyList = []; - policyList.push(getParameterByName("id")); - serviceURL = "/api/device-mgt/v1.0/policies/activate"; - invokerUtil.put( - serviceURL, - policyList, - // on success - function () { - $(".add-policy").addClass("hidden"); - $(".policy-naming").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - publishToDevice(); - }, - // on error - function () { - - } - ); - } - }, - // on error - function () { - - } - ); -}; - - -function publishToDevice() { - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": "ANY", - "profile": { - "profileName": policy["policyName"], - "deviceType": { - "id": policy["platformId"], - "name": policy["platform"] - }, - "policyDefinition": window.queryEditor.getValue(), - "policyDescription": policy["description"] - } - }; - - var successCallback = function (data, status) { - console.log("Data: " + data + "\nStatus: " + status); - }; - - var data = { - url: "/devicemgt/api/policies/add", - type: "POST", - contentType: "application/json", - accept: "application/json", - success: successCallback, - data: JSON.stringify(payload) - }; - - $.ajax(data).fail(function (jqXHR) { - console.log("Error: " + jqXHR); - }); - -} - -// 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(); -}; - -// 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(); - } -}; - -// End of functions related to grid-input-view - -/** - * This method will return query parameter value given its name. - * @param name Query parameter name - * @returns {string} Query parameter value - */ -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -function formatRepo (user) { - if (user.loading) { - return user.text - } - if (!user.username){ - return; - } - var markup = '
' + - '
' + - '
' + - '
' + user.username + '
'; - if (user.firstname) { - markup += '
' + user.firstname + '
'; - } - if (user.emailAddress) { - markup += '
' + user.emailAddress + '
'; - } - markup += '
'; - return markup; -} - -function formatRepoSelection (user) { - return user.username || user.text;; -} - -$(document).ready(function () { - - window.queryEditor = CodeMirror.fromTextArea(document.getElementById('policy-definition-input'), { - mode: MIME_TYPE_SIDDHI_QL, - indentWithTabs: true, - smartIndent: true, - lineNumbers: true, - matchBrackets: true, - autofocus: true, - extraKeys: { - "Shift-2": function (cm) { - insertStr(cm, cm.getCursor(), '@'); - CodeMirror.showHint(cm, getAnnotationHints); - }, - "Ctrl-Space": "autocomplete" - } - }); - - // Adding initial state of wizard-steps. - $("#policy-profile-wizard-steps").html($(".wr-steps").html()); - - $("select.select2[multiple=multiple]").select2({ - "tags": true - }); - - $("#users-input").select2({ - multiple:true, - tags: true, - ajax: { - url: window.location.origin + "/devicemgt/api/invoker/execute/", - method: "POST", - dataType: 'json', - delay: 250, - id: function (user) { - return user.username; - }, - data: function (params) { - var postData = {}; - postData.actionMethod = "GET"; - postData.actionUrl = "/api/device-mgt/v1.0/users?q=ad"; - postData.actionPayload = JSON.stringify({ - q: params.term, // search term - page: params.page - }); - - return JSON.stringify(postData); - }, - processResults: function (data, page) { - var newData = []; - $.each(data.responseContent, function (index, value) { - value.id = value.username; - newData.push(value); - }); - return { - results: newData - }; - }, - cache: true - }, - escapeMarkup: function (markup) { return markup; }, // let our custom formatter work - minimumInputLength: 1, - templateResult: formatRepo, // omitted for brevity, see the source of this page - templateSelection: formatRepoSelection // omitted for brevity, see the source of this page - }); - - var policyPayloadObj; - invokerUtil.get( - "/api/device-mgt/v1.0/policies/" + getParameterByName("id"), - // on success - function (data) { - data = JSON.parse(data); - policyPayloadObj = data["responseContent"]; - skipStep["policy-platform"](policyPayloadObj); - }, - // on error - function () { - // should be redirected to an error page - } - ); - - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - } - if ($("#user-roles-radio-btn").is(":checked")) { - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#user-roles-input").select2({ - "tags": true - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - // 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(); - } - } - ); - } - } - }); - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - $("." + nextStep).removeClass("hidden"); - } - }); -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/sql.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/sql.js deleted file mode 100644 index 9f92fbc93..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.edit/public/js/sql.js +++ /dev/null @@ -1,310 +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. - */ - -/*Annotations, Annotation Names and relevant tokens*/ -var ANNOTATION_IMPORT = "Import"; -var ANNOTATION_EXPORT = "Export"; - -var ANNOTATION_TOKEN_AT = "@"; -var ANNOTATION_TOKEN_OPENING_BRACKET = "("; -var ANNOTATION_TOKEN_CLOSING_BRACKET = ")"; - -var REGEX_LINE_STARTING_WITH_PLAN = /^@Plan.*/g; -var REGEX_LINE_STARTING_WITH_SINGLE_LINE_COMMENT = /^--.*/g; -var REGEX_LINE_STARTING_WITH_MULTI_LINE_COMMENT = /^\/\*.*\*\//g; -var REGEX_LINE_STARTING_WITH_IMPORT_STATEMENT = /^@Import.*/g; - -var SIDDHI_STATEMENT_DELIMETER = ";"; -var SIDDHI_LINE_BREAK = "\n"; -var SIDDHI_LINE_BREAK_CHARACTER = '\n'; -var SIDDHI_SINGLE_QUOTE = "'"; -var SIDDHI_SPACE_LITERAL = " "; - -var SIDDHI_LITERAL_DEFINE_STREAM = "define stream"; - -var MIME_TYPE_SIDDHI_QL = "text/siddhi-ql"; - - -CodeMirror.defineMode("sql", function (config, parserConfig) { - "use strict"; - - var client = parserConfig.client || {}, - atoms = parserConfig.atoms || {"false":true, "true":true, "null":true}, - builtin = parserConfig.builtin || {}, - keywords = parserConfig.keywords || {}, - operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, - support = parserConfig.support || {}, - hooks = parserConfig.hooks || {}, - dateSQL = parserConfig.dateSQL || {"date":true, "time":true, "timestamp":true}; - - function tokenBase(stream, state) { - var ch = stream.next(); - - // call hooks from the mime type - if (hooks[ch]) { - var result = hooks[ch](stream, state); - if (result !== false) return result; - } - - if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { - // numbers - // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html - stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); - support.decimallessFloat == true && stream.eat('.'); - return "number"; - } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { - // strings - // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html - state.tokenize = tokenLiteral(ch); - return state.tokenize(stream, state); - } else if (/^[\(\),\;\[\]]/.test(ch)) { - // no highlightning - return null; - } else if ((ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { - // 1-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - stream.skipToEnd(); - return "comment"; - } else if (ch == "/" && stream.eat("*")) { - // multi-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - state.tokenize = tokenComment; - return state.tokenize(stream, state); - } else if (ch == ".") { - // .1 for 0.1 - if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { - return "number"; - } - } else { - stream.eatWhile(/^[_\-\w\d]/); /* Character '-' will also be eaten, to prevent the highlight happening in keywords being embedded in non-keyword strings. For example, 'all' in 'all-nonkeyword' */ - var word = stream.current().toLowerCase(); // Added toLowerCase() to highlight keywords in a case insensitive manner. - // dates (standard SQL syntax) - // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html - if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) - return "number"; - if (atoms.hasOwnProperty(word)) return "atom"; - if (builtin.hasOwnProperty(word)) return "builtin"; - if (keywords.hasOwnProperty(word)) return "keyword"; - if (client.hasOwnProperty(word)) return "string-2"; - return null; - } - } - - // 'string', with char specified in quote escaped by '\' - function tokenLiteral(quote) { - return function (stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && ch == "\\"; - } - return "string"; - }; - } - - function tokenComment(stream, state) { - while (true) { - if (stream.skipTo("*")) { - stream.next(); - if (stream.eat("/")) { - state.tokenize = tokenBase; - break; - } - } else { - stream.skipToEnd(); - break; - } - } - return "comment"; - } - - function pushContext(stream, state, type) { - state.context = { - prev:state.context, - indent:stream.indentation(), - col:stream.column(), - type:type - }; - } - - function popContext(state) { - state.indent = state.context.indent; - state.context = state.context.prev; - } - - return { - startState:function () { - return {tokenize:tokenBase, context:null}; - }, - - token:function (stream, state) { - if (stream.sol()) { - if (state.context && state.context.align == null) - state.context.align = false; - } - if (stream.eatSpace()) return null; - - var style = state.tokenize(stream, state); - if (style == "comment") return style; - - if (state.context && state.context.align == null) - state.context.align = true; - - var tok = stream.current(); - if (tok == "(") - pushContext(stream, state, ")"); - else if (tok == "[") - pushContext(stream, state, "]"); - else if (state.context && state.context.type == tok) - popContext(state); - return style; - }, - - indent:function (state, textAfter) { - var cx = state.context; - if (!cx) return CodeMirror.Pass; - var closing = textAfter.charAt(0) == cx.type; - if (cx.align) return cx.col + (closing ? 0 : 1); - else return cx.indent + (closing ? 0 : config.indentUnit); - }, - - blockCommentStart: "/*", - blockCommentEnd: "*/", - lineComment: "--" - }; -}); - -(function () { - "use strict"; - - // `identifier` - function hookIdentifier(stream) { - // MySQL/MariaDB identifiers - // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html - var ch; - while ((ch = stream.next()) != null) { - if (ch == "`" && !stream.eat("`")) return "variable-2"; - } - stream.backUp(stream.current().length - 1); - return stream.eatWhile(/\w/) ? "variable-2" : null; - } - - // variable token - function hookVar(stream) { - // variables - // @@prefix.varName @varName - // varName can be quoted with ` or ' or " - // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html - if (stream.eat("@")) { - stream.match(/^session\./); - stream.match(/^local\./); - stream.match(/^global\./); - } - - if (stream.eat("'")) { - stream.match(/^.*'/); - return "variable-2"; - } else if (stream.eat('"')) { - stream.match(/^.*"/); - return "variable-2"; - } else if (stream.eat("`")) { - stream.match(/^.*`/); - return "variable-2"; - } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { - return "variable-2"; - } - return null; - } - - ; - - // short client keyword token - function hookClient(stream) { - // \N means NULL - // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html - if (stream.eat("N")) { - return "atom"; - } - // \g, etc - // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html - return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; - } - - // these keywords are used by all SQL dialects (however, a mode can still overwrite it) - var sqlKeywordsWithoutSymbols = "all and as begin by contains define delete end events " + - "every first for from full group having inner insert into join last " + - "left not of on or outer output partition raw return right select snapshot stream table "; - var sqlKeywords = ", : ? # ( ) " + sqlKeywordsWithoutSymbols; - var builtIn = "bool double float int long object string "; - var atoms = "false true null "; - var dateSQL = "days hours milliseconds minutes months seconds "; - var allSqlSuggestions = sqlKeywordsWithoutSymbols + builtIn + atoms + dateSQL; - - // turn a space-separated list into an array - function set(str) { - var obj = {}, words = str.split(" "); - for (var i = 0; i < words.length; ++i) obj[words[i]] = true; - return obj; - } - - // A generic SQL Mode. It's not a standard, it just try to support what is generally supported - CodeMirror.defineMIME(MIME_TYPE_SIDDHI_QL, { - name:"sql", - keywords:set(sqlKeywords), - builtin:set(builtIn), - atoms:set(atoms), - operatorChars:/^[*+%<>!=/]/, - dateSQL:set(dateSQL), - support:set("doubleQuote "), - allSqlSuggestions:set(allSqlSuggestions) - }); -}()); - -/* - How Properties of Mime Types are used by SQL Mode - ================================================= - - keywords: - A list of keywords you want to be highlighted. - functions: - A list of function names you want to be highlighted. - builtin: - A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). - operatorChars: - All characters that must be handled as operators. - client: - Commands parsed and executed by the client (not the server). - support: - A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. - * ODBCdotTable: .tableName - * zerolessFloat: .1 - * doubleQuote - * nCharCast: N'string' - * charsetCast: _utf8'string' - * commentHash: use # char for comments - * commentSlashSlash: use // for comments - * commentSpaceRequired: require a space after -- for comments - atoms: - Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: - UNKNOWN, INFINITY, UNDERFLOW, NaN... - dateSQL: - Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. - */ \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/css/codemirror.css b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/css/codemirror.css deleted file mode 100644 index e749a5211..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/css/codemirror.css +++ /dev/null @@ -1,342 +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. - */ - -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; - left: -30px; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -@-moz-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@-webkit-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - height: 100%; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; - left: -30px; -} -.CodeMirror-gutter-wrapper { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror ::selection { background: #d7d4f0; } -.CodeMirror ::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/codemirror.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/codemirror.js deleted file mode 100644 index 20f3f95ed..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/codemirror.js +++ /dev/null @@ -1,8720 +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 is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - module.exports = mod(); - else if (typeof define == "function" && define.amd) // AMD - return define([], mod); - else // Plain browser env - this.CodeMirror = mod(); -})(function() { - "use strict"; - - // BROWSER SNIFFING - - // Kludges for bugs and behavior differences that can't be feature - // detected are enabled based on userAgent etc sniffing. - - var gecko = /gecko\/\d/i.test(navigator.userAgent); - var ie_upto10 = /MSIE \d/.test(navigator.userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); - var ie = ie_upto10 || ie_11up; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); - var webkit = /WebKit\//.test(navigator.userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); - var chrome = /Chrome\//.test(navigator.userAgent); - var presto = /Opera\//.test(navigator.userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); - var phantom = /PhantomJS/.test(navigator.userAgent); - - var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); - // This is woefully incomplete. Suggestions for alternative methods welcome. - var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); - var mac = ios || /Mac/.test(navigator.platform); - var windows = /win/i.test(navigator.platform); - - var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) presto_version = Number(presto_version[1]); - if (presto_version && presto_version >= 15) { presto = false; webkit = true; } - // Some browsers use the wrong event properties to signal cmd/ctrl on OS X - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || (ie && ie_version >= 9); - - // Optimize some code when these features are not used. - var sawReadOnlySpans = false, sawCollapsedSpans = false; - - // EDITOR CONSTRUCTOR - - // A CodeMirror instance represents an editor. This is the object - // that user code is usually dealing with. - - function CodeMirror(place, options) { - if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - setGuttersForLineNumbers(options); - - var doc = options.value; - if (typeof doc == "string") doc = new Doc(doc, options.mode); - this.doc = doc; - - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input); - display.wrapper.CodeMirror = this; - updateGutters(this); - themeChanged(this); - if (options.lineWrapping) - this.display.wrapper.className += " CodeMirror-wrap"; - if (options.autofocus && !mobile) display.input.focus(); - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - }; - - var cm = this; - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || cm.hasFocus()) - setTimeout(bind(onFocus, this), 20); - else - onBlur(this); - - for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) - optionHandlers[opt](this, options[opt], Init); - maybeUpdateLineNumberWidth(this); - if (options.finishInit) options.finishInit(this); - for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - display.lineDiv.style.textRendering = "auto"; - } - - // DISPLAY CONSTRUCTOR - - // The display handles the DOM integration, both for input reading - // and content drawing. It holds references to DOM nodes and - // display-related state. - - function Display(place, doc, input) { - var d = this; - this.input = input; - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = elt("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; - - if (place) { - if (place.appendChild) place.appendChild(d.wrapper); - else place(d.wrapper); - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - - d.activeTouch = null; - - input.init(d); - } - - // STATE UPDATES - - // Used to get the editor into a consistent state again when options change. - - function loadMode(cm) { - cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - - function resetModeState(cm) { - cm.doc.iter(function(line) { - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - }); - cm.doc.frontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) regChange(cm); - } - - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function(){updateScrollbars(cm);}, 100); - } - - // Returns a function that estimates the height of a line, to use as - // first approximation until the line becomes visible (and is thus - // properly measurable). - function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function(line) { - if (lineIsHidden(cm.doc, line)) return 0; - - var widgetsHeight = 0; - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; - } - - if (wrapping) - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - else - return widgetsHeight + th; - }; - } - - function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function(line) { - var estHeight = est(line); - if (estHeight != line.height) updateLineHeight(line, estHeight); - }); - } - - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - - function guttersChanged(cm) { - updateGutters(cm); - regChange(cm); - setTimeout(function(){alignHorizontally(cm);}, 20); - } - - // Rebuild the gutter elements, ensure the margin to the left of the - // code matches their width. - function updateGutters(cm) { - var gutters = cm.display.gutters, specs = cm.options.gutters; - removeChildren(gutters); - for (var i = 0; i < specs.length; ++i) { - var gutterClass = specs[i]; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt; - gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = i ? "" : "none"; - updateGutterSpace(cm); - } - - function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth; - cm.display.sizer.style.marginLeft = width + "px"; - } - - // Compute the character length of a line, taking into account - // collapsed ranges (see markText) that might hide parts, and join - // other lines onto it. - function lineLength(line) { - if (line.height == 0) return 0; - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found = merged.find(0, true); - len -= cur.text.length - found.from.ch; - cur = found.to.line; - len += cur.text.length - found.to.ch; - } - return len; - } - - // Find the longest line in the document. - function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function(line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - - // Make sure the gutters options contains the element - // "CodeMirror-linenumbers" when the lineNumbers option is true. - function setGuttersForLineNumbers(options) { - var found = indexOf(options.gutters, "CodeMirror-linenumbers"); - if (found == -1 && options.lineNumbers) { - options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); - } else if (found > -1 && !options.lineNumbers) { - options.gutters = options.gutters.slice(0); - options.gutters.splice(found, 1); - } - } - - // SCROLLBARS - - // Prepare DOM reads needed to update the scrollbars. Done in one - // shot to minimize update/measure roundtrips. - function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - - function NativeScrollbars(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - place(vert); place(horiz); - - on(vert, "scroll", function() { - if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); - }); - on(horiz, "scroll", function() { - if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); - }); - - this.checkedOverlay = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - - NativeScrollbars.prototype = copyObj({ - update: function(measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedOverlay && measure.clientHeight > 0) { - if (sWidth == 0) this.overlayHack(); - this.checkedOverlay = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; - }, - setScrollLeft: function(pos) { - if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; - }, - setScrollTop: function(pos) { - if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; - }, - overlayHack: function() { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.minHeight = this.vert.style.minWidth = w; - var self = this; - var barMouseDown = function(e) { - if (e_target(e) != self.vert && e_target(e) != self.horiz) - operation(self.cm, onMouseDown)(e); - }; - on(this.vert, "mousedown", barMouseDown); - on(this.horiz, "mousedown", barMouseDown); - }, - clear: function() { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - } - }, NativeScrollbars.prototype); - - function NullScrollbars() {} - - NullScrollbars.prototype = copyObj({ - update: function() { return {bottom: 0, right: 0}; }, - setScrollLeft: function() {}, - setScrollTop: function() {}, - clear: function() {} - }, NullScrollbars.prototype); - - CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function() { - if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); - }); - node.setAttribute("cm-not-content", "true"); - }, function(pos, axis) { - if (axis == "horizontal") setScrollLeft(cm, pos); - else setScrollTop(cm, pos); - }, cm); - if (cm.display.scrollbars.addClass) - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - function updateScrollbars(cm, measure) { - if (!measure) measure = measureForScrollbars(cm); - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - updateHeightsInViewport(cm); - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } - } - - // Re-synchronize the fake scrollbars with the actual size of the - // content. - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else d.scrollbarFiller.style.display = ""; - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else d.gutterFiller.style.display = ""; - } - - // Compute the lines that are visible in a given viewport (defaults - // the the current scroll position). viewport may contain top, - // height, and ensure (see op.scrollToPos) properties. - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)}; - } - - // LINE NUMBERS - - // Re-align line numbers and gutter marks to compensate for - // horizontal scrolling. - function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) if (!view[i].hidden) { - if (cm.options.fixedGutter && view[i].gutter) - view[i].gutter.style.left = left; - var align = view[i].alignable; - if (align) for (var j = 0; j < align.length; j++) - align[j].style.left = left; - } - if (cm.options.fixedGutter) - display.gutters.style.left = (comp + gutterW) + "px"; - } - - // Used to ensure that the line number gutter is still the right - // size for the current document size. Returns true when an update - // is needed. - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) return false; - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm); - return true; - } - return false; - } - - function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)); - } - - // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, - // but using getBoundingClientRect to get a sub-pixel-accurate - // result. - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - - // DISPLAY DRAWING - - function DisplayUpdate(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - } - - DisplayUpdate.prototype.signal = function(emitter, type) { - if (hasHandler(emitter, type)) - this.events.push(arguments); - }; - DisplayUpdate.prototype.finish = function() { - for (var i = 0; i < this.events.length; i++) - signal.apply(null, this.events[i]); - }; - - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - - // Does the actual updating of the line display. Bails out - // (returning false) when there is nothing to be done and forced is - // false. - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false; - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - return false; - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); - if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - return false; - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var focused = activeElt(); - if (toUpdate > 4) display.lineDiv.style.display = "none"; - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) display.lineDiv.style.display = ""; - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true; - } - - function postUpdateDisplay(cm, update) { - var force = update.force, viewport = update.viewport; - for (var first = true;; first = false) { - if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { - force = true; - } else { - force = false; - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - break; - } - if (!updateDisplayIfNeeded(cm, update)) break; - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - } - - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } - } - - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - update.finish(); - } - } - - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - var total = measure.docHeight + cm.display.barHeight; - cm.display.heightForcer.style.top = total + "px"; - cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; - } - - // Read the actual heights of the rendered lines, and update their - // stored heights to match. - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], height; - if (cur.hidden) continue; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - } - var diff = cur.line.height - height; - if (height < 2) height = textHeight(display); - if (diff > .001 || diff < -.001) { - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) for (var j = 0; j < cur.rest.length; j++) - updateWidgetHeight(cur.rest[j]); - } - } - } - - // Read and store the height of line widgets associated with the - // given line. - function updateWidgetHeight(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) - line.widgets[i].height = line.widgets[i].node.offsetHeight; - } - - // Do a bulk-read of the DOM positions and sizes needed to draw the - // view, so that we don't interleave reading and writing to the DOM. - function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; - width[cm.options.gutters[i]] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth}; - } - - // Sync the actual display DOM structure with display.view, removing - // nodes for lines that are no longer in view, and creating the ones - // that are not there yet, and updating the ones that are out of - // date. - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - node.style.display = "none"; - else - node.parentNode.removeChild(node); - return next; - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) { - } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) cur = rm(cur); - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) cur = rm(cur); - } - - // When an aspect of a line changes, a string is added to - // lineView.changes. This updates the relevant part of the line's - // DOM structure. - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") updateLineText(cm, lineView); - else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); - else if (type == "class") updateLineClasses(lineView); - else if (type == "widget") updateLineWidgets(cm, lineView, dims); - } - lineView.changes = null; - } - - // Lines with gutter elements, widgets or a background class need to - // be wrapped, and have the extra elements added to the wrapper div - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) lineView.node.style.zIndex = 2; - } - return lineView.node; - } - - function updateLineBackground(lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) cls += " CodeMirror-linebackground"; - if (lineView.background) { - if (cls) lineView.background.className = cls; - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - } - } - - // Wrapper around buildLineContent which will reuse the structure - // in display.externalMeasured when possible. - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - - // Redraw the line's text. Interacts with the background and text - // classes because the mode may output tokens that influence these - // classes. - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) lineView.node = built.pre; - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - - function updateLineClasses(lineView) { - updateLineBackground(lineView); - if (lineView.line.wrapClass) - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - else if (lineView.node != lineView.text) - lineView.node.className = ""; - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + - (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + - "px; width: " + dims.gutterTotalWidth + "px"); - cm.display.input.setUneditable(gutterWrap); - wrap.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) - gutterWrap.className += " " + lineView.line.gutterClass; - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " - + cm.display.lineNumInnerWidth + "px")); - if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; - if (found) - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + - dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) lineView.alignable = null; - for (var node = lineView.node.firstChild, next; node; node = next) { - var next = node.nextSibling; - if (node.className == "CodeMirror-linewidget") - lineView.node.removeChild(node); - } - insertLineWidgets(cm, lineView, dims); - } - - // Build a line's DOM representation from scratch - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) lineView.bgClass = built.bgClass; - if (built.textClass) lineView.textClass = built.textClass; - - updateLineClasses(lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node; - } - - // A lineView may contain multiple logical lines (when merged by - // collapsed spans). The widgets for all of them need to be drawn. - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); - } - - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) return; - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); - if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) - wrap.insertBefore(node, lineView.gutter || lineView.text); - else - wrap.appendChild(node); - signalLater(widget, "redraw"); - } - } - - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - - // POSITION OBJECT - - // A Pos instance represents a position within the text. - var Pos = CodeMirror.Pos = function(line, ch) { - if (!(this instanceof Pos)) return new Pos(line, ch); - this.line = line; this.ch = ch; - }; - - // Compare two positions, return 0 if they are the same, a negative - // number when a is less, and a positive number otherwise. - var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; - - function copyPos(x) {return Pos(x.line, x.ch);} - function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } - function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } - - // INPUT HANDLING - - function ensureFocus(cm) { - if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } - } - - function isReadOnly(cm) { - return cm.options.readOnly || cm.doc.cantEdit; - } - - // This will be set to an array of strings when copying, so that, - // when pasting, we know what kind of selections the copied text - // was made out of. - var lastCopied = null; - - function applyTextInput(cm, inserted, deleted, sel) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) sel = doc.sel; - - var textLines = splitLines(inserted), multiPaste = null; - // When pasing N lines into N selections, insert one line per selection - if (cm.state.pasteIncoming && sel.ranges.length > 1) { - if (lastCopied && lastCopied.join("\n") == inserted) - multiPaste = sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); - else if (textLines.length == sel.ranges.length) - multiPaste = map(textLines, function(l) { return [l]; }); - } - - // Normal behavior is to insert the new text into every selection - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range = sel.ranges[i]; - var from = range.from(), to = range.to(); - if (range.empty()) { - if (deleted && deleted > 0) // Handle deletion - from = Pos(from.line, from.ch - deleted); - else if (cm.state.overwrite && !cm.state.pasteIncoming) // Handle overwrite - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - } - var updateInput = cm.curOp.updateInput; - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, - origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - // When an 'electric' character is inserted, immediately trigger a reindent - if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && - cm.options.smartIndent && range.head.ch < 100 && - (!i || sel.ranges[i - 1].head.line != range.head.line)) { - var mode = cm.getModeAt(range.head); - var end = changeEnd(changeEvent); - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indentLine(cm, end.line, "smart"); - break; - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) - indentLine(cm, end.line, "smart"); - } - } - } - ensureCursorVisible(cm); - cm.curOp.updateInput = updateInput; - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = false; - } - - function copyableRanges(cm) { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return {text: text, ranges: ranges}; - } - - function disableBrowserMagic(field) { - field.setAttribute("autocorrect", "off"); - field.setAttribute("autocapitalize", "off"); - field.setAttribute("spellcheck", "false"); - } - - // TEXTAREA INPUT STYLE - - function TextareaInput(cm) { - this.cm = cm; - // See input.poll and input.reset - this.prevInput = ""; - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false; - // Self-resetting timeout for the poller - this.polling = new Delayed(); - // Tracks when input.reset has punted to just putting a short - // string into the textarea instead of the full selection. - this.inaccurateSelection = false; - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false; - }; - - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) te.style.width = "1000px"; - else te.setAttribute("wrap", "off"); - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) te.style.border = "1px solid black"; - disableBrowserMagic(te); - return div; - } - - TextareaInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = this.cm; - - // Wraps and hides input textarea - var div = this.wrapper = hiddenTextarea(); - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - var te = this.textarea = div.firstChild; - display.wrapper.insertBefore(div, display.wrapper.firstChild); - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) te.style.width = "0px"; - - on(te, "input", function() { - if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; - input.poll(); - }); - - on(te, "paste", function() { - // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 - // Add a char to the end of textarea before paste occur so that - // selection doesn't span to the end of textarea. - if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { - var start = te.selectionStart, end = te.selectionEnd; - te.value += "$"; - // The selection end needs to be set before the start, otherwise there - // can be an intermediate non-empty selection between the two, which - // can override the middle-click paste buffer on linux and cause the - // wrong thing to get pasted. - te.selectionEnd = end; - te.selectionStart = start; - cm.state.fakedLastChar = true; - } - cm.state.pasteIncoming = true; - input.fastPoll(); - }); - - function prepareCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (input.inaccurateSelection) { - input.prevInput = ""; - input.inaccurateSelection = false; - te.value = lastCopied.join("\n"); - selectInput(te); - } - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") cm.state.cutIncoming = true; - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - - on(display.scroller, "paste", function(e) { - if (eventInWidget(display, e)) return; - cm.state.pasteIncoming = true; - input.focus(); - }); - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function(e) { - if (!eventInWidget(display, e)) e_preventDefault(e); - }); - }, - - prepareSelection: function() { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc; - var result = prepareSelection(cm); - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result; - }, - - showSelection: function(drawn) { - var cm = this.cm, display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }, - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - reset: function(typing) { - if (this.contextMenuPending) return; - var minimal, selected, cm = this.cm, doc = cm.doc; - if (cm.somethingSelected()) { - this.prevInput = ""; - var range = doc.sel.primary(); - minimal = hasCopyEvent && - (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); - var content = minimal ? "-" : selected || cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) selectInput(this.textarea); - if (ie && ie_version >= 9) this.hasSelection = content; - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) this.hasSelection = null; - } - this.inaccurateSelection = minimal; - }, - - getField: function() { return this.textarea; }, - - supportsTouch: function() { return false; }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus(); } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } - }, - - blur: function() { this.textarea.blur(); }, - - resetPosition: function() { - this.wrapper.style.top = this.wrapper.style.left = 0; - }, - - receivedFocus: function() { this.slowPoll(); }, - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - slowPoll: function() { - var input = this; - if (input.pollingFast) return; - input.polling.set(this.cm.options.pollInterval, function() { - input.poll(); - if (input.cm.state.focused) input.slowPoll(); - }); - }, - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - fastPoll: function() { - var missed = false, input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) {missed = true; input.polling.set(60, p);} - else {input.pollingFast = false; input.slowPoll();} - } - input.polling.set(20, p); - }, - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - poll: function() { - var cm = this.cm, input = this.textarea, prevInput = this.prevInput; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (!cm.state.focused || (hasSelection(input) && !prevInput) || - isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) - return false; - // See paste handler for more on the fakedLastChar kludge - if (cm.state.pasteIncoming && cm.state.fakedLastChar) { - input.value = input.value.substring(0, input.value.length - 1); - cm.state.fakedLastChar = false; - } - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) return false; - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false; - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 0x200b && !prevInput) prevInput = "\u200b"; - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; - - var self = this; - runInOp(cm, function() { - applyTextInput(cm, text.slice(same), prevInput.length - same); - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; - else self.prevInput = text; - }); - return true; - }, - - ensurePolled: function() { - if (this.pollingFast && this.poll()) this.pollingFast = false; - }, - - onKeyPress: function() { - if (ie && ie_version >= 9) this.hasSelection = null; - this.fastPoll(); - }, - - onContextMenu: function(e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea; - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) return; // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - - var oldCSS = te.style.cssText; - input.wrapper.style.position = "absolute"; - te.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + - "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + - (ie ? "rgba(255, 255, 255, .05)" : "transparent") + - "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) - display.input.focus(); - if (webkit) window.scrollTo(null, oldScrollY); - display.input.reset(); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) te.value = input.prevInput = " "; - input.contextMenuPending = true; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "\u200b" + (selected ? te.value : ""); - te.value = "\u21da"; // Used to catch context-menu undo - te.value = extval; - input.prevInput = selected ? "" : "\u200b"; - te.selectionStart = 1; te.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - input.contextMenuPending = false; - input.wrapper.style.position = "relative"; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); - var i = 0, poll = function() { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") - operation(cm, commands.selectAll)(cm); - else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); - else display.input.reset(); - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) prepareSelectAllHack(); - if (captureRightClick) { - e_stop(e); - var mouseup = function() { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }, - - setUneditable: nothing, - - needsContentAttribute: false - }, TextareaInput.prototype); - - // CONTENTEDITABLE INPUT STYLE - - function ContentEditableInput(cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.gracePeriod = false; - } - - ContentEditableInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = "true"; - disableBrowserMagic(div); - - on(div, "paste", function(e) { - var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); - if (pasted) { - e.preventDefault(); - cm.replaceSelection(pasted, null, "paste"); - } - }); - - on(div, "compositionstart", function(e) { - var data = e.data; - input.composing = {sel: cm.doc.sel, data: data, startData: data}; - if (!data) return; - var prim = cm.doc.sel.primary(); - var line = cm.getLine(prim.head.line); - var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); - if (found > -1 && found <= prim.head.ch) - input.composing.sel = simpleSelection(Pos(prim.head.line, found), - Pos(prim.head.line, found + data.length)); - }); - on(div, "compositionupdate", function(e) { - input.composing.data = e.data; - }); - on(div, "compositionend", function(e) { - var ours = input.composing; - if (!ours) return; - if (e.data != ours.startData && !/\u200b/.test(e.data)) - ours.data = e.data; - // Need a small delay to prevent other code (input event, - // selection polling) from doing damage when fired right after - // compositionend. - setTimeout(function() { - if (!ours.handled) - input.applyComposition(ours); - if (input.composing == ours) - input.composing = null; - }, 50); - }); - - on(div, "touchstart", function() { - input.forceCompositionEnd(); - }); - - on(div, "input", function() { - if (input.composing) return; - if (!input.pollContent()) - runInOp(input.cm, function() {regChange(cm);}); - }); - - function onCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (e.type == "cut") cm.replaceSelection("", null, "cut"); - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.operation(function() { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - // iOS exposes the clipboard API, but seems to discard content inserted into it - if (e.clipboardData && !ios) { - e.preventDefault(); - e.clipboardData.clearData(); - e.clipboardData.setData("text/plain", lastCopied.join("\n")); - } else { - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.join("\n"); - var hadFocus = document.activeElement; - selectInput(te); - setTimeout(function() { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - }, 50); - } - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }, - - prepareSelection: function() { - var result = prepareSelection(this.cm, false); - result.focus = this.cm.state.focused; - return result; - }, - - showSelection: function(info) { - if (!info || !this.cm.display.view.length) return; - if (info.focus) this.showPrimarySelection(); - this.showMultipleSelections(info); - }, - - showPrimarySelection: function() { - var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); - var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && - cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) - return; - - var start = posToDOM(this.cm, prim.from()); - var end = posToDOM(this.cm, prim.to()); - if (!start && !end) return; - - var view = this.cm.display.view; - var old = sel.rangeCount && sel.getRangeAt(0); - if (!start) { - start = {node: view[0].measure.map[2], offset: 0}; - } else if (!end) { // FIXME dangerously hacky - var measure = view[view.length - 1].measure; - var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; - } - - try { var rng = range(start.node, start.offset, end.offset, end.node); } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - sel.removeAllRanges(); - sel.addRange(rng); - if (old && sel.anchorNode == null) sel.addRange(old); - else if (gecko) this.startGracePeriod(); - } - this.rememberSelection(); - }, - - startGracePeriod: function() { - var input = this; - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function() { - input.gracePeriod = false; - if (input.selectionChanged()) - input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); - }, 20); - }, - - showMultipleSelections: function(info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }, - - rememberSelection: function() { - var sel = window.getSelection(); - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; - }, - - selectionInEditor: function() { - var sel = window.getSelection(); - if (!sel.rangeCount) return false; - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node); - }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor") this.div.focus(); - }, - blur: function() { this.div.blur(); }, - getField: function() { return this.div; }, - - supportsTouch: function() { return true; }, - - receivedFocus: function() { - var input = this; - if (this.selectionInEditor()) - this.pollSelection(); - else - runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); - - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }, - - selectionChanged: function() { - var sel = window.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; - }, - - pollSelection: function() { - if (!this.composing && !this.gracePeriod && this.selectionChanged()) { - var sel = window.getSelection(), cm = this.cm; - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) runInOp(cm, function() { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; - }); - } - }, - - pollContent: function() { - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); - var from = sel.from(), to = sel.to(); - if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; - - var fromIndex; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - var fromLine = lineNo(display.view[0].line); - var fromNode = display.view[0].node; - } else { - var fromLine = lineNo(display.view[fromIndex].line); - var fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - if (toIndex == display.view.length - 1) { - var toLine = display.viewTo - 1; - var toNode = display.view[toIndex].node; - } else { - var toLine = lineNo(display.view[toIndex + 1].line) - 1; - var toNode = display.view[toIndex + 1].node.previousSibling; - } - - var newText = splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } - else break; - } - - var cutFront = 0, cutEnd = 0; - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - ++cutFront; - var newBot = lst(newText), oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - ++cutEnd; - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); - newText[0] = newText[0].slice(cutFront); - - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true; - } - }, - - ensurePolled: function() { - this.forceCompositionEnd(); - }, - reset: function() { - this.forceCompositionEnd(); - }, - forceCompositionEnd: function() { - if (!this.composing || this.composing.handled) return; - this.applyComposition(this.composing); - this.composing.handled = true; - this.div.blur(); - this.div.focus(); - }, - applyComposition: function(composing) { - if (composing.data && composing.data != composing.startData) - operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); - }, - - setUneditable: function(node) { - node.setAttribute("contenteditable", "false"); - }, - - onKeyPress: function(e) { - e.preventDefault(); - operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); - }, - - onContextMenu: nothing, - resetPosition: nothing, - - needsContentAttribute: true - }, ContentEditableInput.prototype); - - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) return null; - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - - var order = getOrder(line), side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, "left"); - result.offset = result.collapse == "right" ? result.end : result.start; - return result; - } - - function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } - - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); - node = null; offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) return null; - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i]; - if (lineView.node == lineNode) - return locateNodeInLineView(lineView, node, offset); - } - } - - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false; - if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad); - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) offset = textNode.nodeValue.length; - } - while (topNode.parentNode != wrapper) topNode = topNode.parentNode; - var measure = lineView.measure, maps = measure.maps; - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map = i < 0 ? measure.map : maps[i]; - for (var j = 0; j < map.length; j += 3) { - var curNode = map[j + 2]; - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); - var ch = map[j] + offset; - if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; - return Pos(line, ch); - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) return badPos(found, bad); - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) - return badPos(Pos(found.line, found.ch - dist), bad); - else - dist += after.textContent.length; - } - for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) - return badPos(Pos(found.line, found.ch + dist), bad); - else - dist += after.textContent.length; - } - } - - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false; - function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText != null) { - if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); - text += cmText; - return; - } - var markerID = node.getAttribute("cm-marker"), range; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range = found[0].find())) - text += getBetween(cm.doc, range.from, range.to).join("\n"); - return; - } - if (node.getAttribute("contenteditable") == "false") return; - for (var i = 0; i < node.childNodes.length; i++) - walk(node.childNodes[i]); - if (/^(pre|div|p)$/i.test(node.nodeName)) - closing = true; - } else if (node.nodeType == 3) { - var val = node.nodeValue; - if (!val) return; - if (closing) { - text += "\n"; - closing = false; - } - text += val; - } - } - for (;;) { - walk(from); - if (from == to) break; - from = from.nextSibling; - } - return text; - } - - CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; - - // SELECTION / CURSOR - - // Selection objects are immutable. A new one is created every time - // the selection changes. A selection is one or more non-overlapping - // (and non-touching) ranges, sorted, and an integer that indicates - // which one is the primary selection (the one that's scrolled into - // view, that getCursor returns, etc). - function Selection(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - } - - Selection.prototype = { - primary: function() { return this.ranges[this.primIndex]; }, - equals: function(other) { - if (other == this) return true; - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; - for (var i = 0; i < this.ranges.length; i++) { - var here = this.ranges[i], there = other.ranges[i]; - if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; - } - return true; - }, - deepCopy: function() { - for (var out = [], i = 0; i < this.ranges.length; i++) - out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); - return new Selection(out, this.primIndex); - }, - somethingSelected: function() { - for (var i = 0; i < this.ranges.length; i++) - if (!this.ranges[i].empty()) return true; - return false; - }, - contains: function(pos, end) { - if (!end) end = pos; - for (var i = 0; i < this.ranges.length; i++) { - var range = this.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - return i; - } - return -1; - } - }; - - function Range(anchor, head) { - this.anchor = anchor; this.head = head; - } - - Range.prototype = { - from: function() { return minPos(this.anchor, this.head); }, - to: function() { return maxPos(this.anchor, this.head); }, - empty: function() { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - } - }; - - // Take an unsorted, potentially overlapping set of ranges, and - // build a selection out of it. 'Consumes' ranges array (modifying - // it). - function normalizeSelection(ranges, primIndex) { - var prim = ranges[primIndex]; - ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - if (cmp(prev.to(), cur.from()) >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) --primIndex; - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - - // Most of the external API clips given positions to make sure they - // actually exist within the document. - function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} - function clipPos(doc, pos) { - if (pos.line < doc.first) return Pos(doc.first, 0); - var last = doc.first + doc.size - 1; - if (pos.line > last) return Pos(last, getLine(doc, last).text.length); - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) return Pos(pos.line, linelen); - else if (ch < 0) return Pos(pos.line, 0); - else return pos; - } - function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} - function clipPosArray(doc, array) { - for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); - return out; - } - - // SELECTION UPDATES - - // The 'scroll' parameter given to many of these indicated whether - // the new cursor position should be scrolled into view after - // modifying the selection. - - // If shift is held or the extend flag is set, extends a range to - // include a given position (and optionally a second position). - // Otherwise, simply returns the range between the given positions. - // Used for cursor motion and such. - function extendRange(doc, range, head, other) { - if (doc.cm && doc.cm.display.shift || doc.extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - - // Extend the primary selection range, discard the rest. - function extendSelection(doc, head, other, options) { - setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); - } - - // Extend all selections (pos is an array of selections with length - // equal the number of selections) - function extendSelections(doc, heads, options) { - for (var out = [], i = 0; i < doc.sel.ranges.length; i++) - out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); - var newSel = normalizeSelection(out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - - // Updates a single range in the selection. - function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); - } - - // Reset the selection to a single range. - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - - // Give beforeSelectionChange handlers a change to influence a - // selection update. - function filterSelectionChange(doc, sel) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); - } - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); - else return sel; - } - - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - - // Set a new selection. - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - sel = filterSelectionChange(doc, sel); - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm) - ensureCursorVisible(doc.cm); - } - - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) return; - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - - // Verify that the selection does not partially select any atomic - // marked ranges. - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); - } - - // Return a selection that does not partially select any atomic - // ranges. - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) out = sel.ranges.slice(0, i); - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel; - } - - // Ensure a given position is not inside an atomic range. - function skipAtomic(doc, pos, bias, mayClear) { - var flipped = false, curPos = pos; - var dir = bias || 1; - doc.cantEdit = false; - search: for (;;) { - var line = getLine(doc, curPos.line); - if (line.markedSpans) { - for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) break; - else {--i; continue;} - } - } - if (!m.atomic) continue; - var newPos = m.find(dir < 0 ? -1 : 1); - if (cmp(newPos, curPos) == 0) { - newPos.ch += dir; - if (newPos.ch < 0) { - if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); - else newPos = null; - } else if (newPos.ch > line.text.length) { - if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); - else newPos = null; - } - if (!newPos) { - if (flipped) { - // Driven in a corner -- no valid cursor position found at all - // -- try again *with* clearing, if we didn't already - if (!mayClear) return skipAtomic(doc, pos, bias, true); - // Otherwise, turn off editing until further notice, and return the start of the doc - doc.cantEdit = true; - return Pos(doc.first, 0); - } - flipped = true; newPos = pos; dir = -dir; - } - } - curPos = newPos; - continue search; - } - } - } - return curPos; - } - } - - // SELECTION DRAWING - - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - - function prepareSelection(cm, primary) { - var doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (primary === false && i == doc.sel.primIndex) continue; - var range = doc.sel.ranges[i]; - var collapsed = range.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - drawSelectionCursor(cm, range, curFragment); - if (!collapsed) - drawSelectionRange(cm, range, selFragment); - } - return result; - } - - // Draws a cursor for the given range - function drawSelectionCursor(cm, range, output) { - var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } - } - - // Draws the given range as a highlighted selection - function drawSelectionRange(cm, range, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - - function add(left, top, width, bottom) { - if (top < 0) top = 0; - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + - "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + - "px; height: " + (bottom - top) + "px")); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - - iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { - var leftPos = coords(from, "left"), rightPos, left, right; - if (from == to) { - rightPos = leftPos; - left = right = leftPos.left; - } else { - rightPos = coords(to - 1, "right"); - if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } - left = leftPos.left; - right = rightPos.right; - } - if (fromArg == null && from == 0) left = leftSide; - if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part - add(left, leftPos.top, null, leftPos.bottom); - left = leftSide; - if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); - } - if (toArg == null && to == lineLen) right = rightSide; - if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) - start = leftPos; - if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) - end = rightPos; - if (left < leftSide + 1) left = leftSide; - add(left, rightPos.top, right - left, rightPos.bottom); - }); - return {start: start, end: end}; - } - - var sFrom = range.from(), sTo = range.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - - output.appendChild(fragment); - } - - // Cursor-blinking - function restartBlink(cm) { - if (!cm.state.focused) return; - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - display.blinker = setInterval(function() { - display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - else if (cm.options.cursorBlinkRate < 0) - display.cursorDiv.style.visibility = "hidden"; - } - - // HIGHLIGHT WORKER - - function startWorker(cm, time) { - if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.frontier < doc.first) doc.frontier = doc.first; - if (doc.frontier >= cm.display.viewTo) return; - var end = +new Date + cm.options.workTime; - var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); - var changedLines = []; - - doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { - if (doc.frontier >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var highlighted = highlightLine(cm, line, state, true); - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) line.styleClasses = newCls; - else if (oldCls) line.styleClasses = null; - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; - if (ischange) changedLines.push(doc.frontier); - line.stateAfter = copyState(doc.mode, state); - } else { - processLine(cm, line.text, state); - line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; - } - ++doc.frontier; - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - if (changedLines.length) runInOp(cm, function() { - for (var i = 0; i < changedLines.length; i++) - regLineChange(cm, changedLines[i], "text"); - }); - } - - // Finds the line to start with when starting a parse. Tries to - // find a line with a stateAfter, so that it can start with a - // valid state. If that fails, it returns the line with the - // smallest indentation, which tends to need the least context to - // parse correctly. - function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) return doc.first; - var line = getLine(doc, search - 1); - if (line.stateAfter && (!precise || search <= doc.frontier)) return search; - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - - function getStateBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) return true; - var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; - if (!state) state = startState(doc.mode); - else state = copyState(doc.mode, state); - doc.iter(pos, n, function(line) { - processLine(cm, line.text, state); - var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; - line.stateAfter = save ? copyState(doc.mode, state) : null; - ++pos; - }); - if (precise) doc.frontier = pos; - return state; - } - - // POSITION MEASUREMENT - - function paddingTop(display) {return display.lineSpace.offsetTop;} - function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} - function paddingH(display) { - if (display.cachedPaddingH) return display.cachedPaddingH; - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; - return data; - } - - function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - - // Ensure the lineView.wrapping.heights array is populated. This is - // an array of bottom offsets for the lines that make up a drawn - // line. When lineWrapping is on, there might be more than one - // height. - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - heights.push(rect.bottom - rect.top); - } - } - - // Find a line map (mapping character offsets to text nodes) and a - // measurement cache for the given line number. (A line view might - // contain multiple lines when collapsed ranges are present.) - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - return {map: lineView.measure.map, cache: lineView.measure.cache}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineView.rest[i] == line) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineNo(lineView.rest[i]) > lineN) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; - } - - // Render a line into the hidden node display.externalMeasured. Used - // when measurement is needed for a line that's not in the viewport. - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - - // Get a {top, bottom, left, right} box (in line-local coordinates) - // for a given character. - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - - // Find a line view that corresponds to the given line number. - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - return cm.display.view[findViewIndex(cm, lineN)]; - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - return ext; - } - - // Measurement can be split in two steps, the set-up work that - // applies to the whole line, and the measurement of the actual - // character. Functions like coordsChar, that need to do a lot of - // measurements in a row, can thus ensure that the set-up work is - // only done once. - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) - view = null; - else if (view && view.changes) - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - if (!view) - view = updateExternalMeasurement(cm, line); - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - }; - } - - // Given a prepared measurement object, measures the position of an - // actual character (or fetches it from the cache). - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) ch = -1; - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - prepared.rect = prepared.view.text.getBoundingClientRect(); - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) prepared.cache[key] = found; - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom}; - } - - var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - - function nodeAndOffsetInLineMap(map, ch, bias) { - var node, start, end, collapse; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map.length; i += 3) { - var mStart = map[i], mEnd = map[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) collapse = "right"; - } - if (start != null) { - node = map[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - collapse = bias; - if (bias == "left" && start == 0) - while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { - node = map[(i -= 3) + 2]; - collapse = "left"; - } - if (bias == "right" && start == mEnd - mStart) - while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { - node = map[(i += 3) + 2]; - collapse = "right"; - } - break; - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; - } - - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, start = place.start, end = place.end, collapse = place.collapse; - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { - rect = node.parentNode.getBoundingClientRect(); - } else if (ie && cm.options.lineWrapping) { - var rects = range(node, start, end).getClientRects(); - if (rects.length) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = nullRect; - } else { - rect = range(node, start, end).getBoundingClientRect() || nullRect; - } - if (rect.left || rect.right || start == 0) break; - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) collapse = bias = "right"; - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = node.getBoundingClientRect(); - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; - else - rect = nullRect; - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - for (var i = 0; i < heights.length - 1; i++) - if (mid < heights[i]) break; - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) result.bogus = true; - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result; - } - - // Work around problem with bounding client rects on ranges being - // returned incorrectly when zoomed on IE10 and below. - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - return rect; - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY}; - } - - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - lineView.measure.caches[i] = {}; - } - } - - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - clearLineMeasurementCacheFor(cm.display.view[i]); - } - - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; - cm.display.lineNumChars = null; - } - - function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } - function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } - - // Converts a {top, bottom, left, right} box from line-local - // coordinates into another coordinate system. Context may be one of - // "line", "div" (display.lineDiv), "local"/null (editor), "window", - // or "page". - function intoCoordSystem(cm, lineObj, rect, context) { - if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { - var size = widgetHeight(lineObj.widgets[i]); - rect.top += size; rect.bottom += size; - } - if (context == "line") return rect; - if (!context) context = "local"; - var yOff = heightAtLine(lineObj); - if (context == "local") yOff += paddingTop(cm.display); - else yOff -= cm.display.viewOffset; - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect; - } - - // Coverts a box from "div" coords to another coordinate system. - // Context may be "window", "page", "div", or "local"/null. - function fromCoordSystem(cm, coords, context) { - if (context == "div") return coords; - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; - } - - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) lineObj = getLine(cm.doc, pos.line); - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - - // Returns a box for a given cursor position, which may have an - // 'other' property containing the position of the secondary cursor - // on a bidi boundary. - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) m.left = m.right; else m.right = m.left; - return intoCoordSystem(cm, lineObj, m, context); - } - function getBidi(ch, partPos) { - var part = order[partPos], right = part.level % 2; - if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { - part = order[--partPos]; - ch = bidiRight(part) - (part.level % 2 ? 0 : 1); - right = true; - } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { - part = order[++partPos]; - ch = bidiLeft(part) - part.level % 2; - right = false; - } - if (right && ch == part.to && ch > part.from) return get(ch - 1); - return get(ch, right); - } - var order = getOrder(lineObj), ch = pos.ch; - if (!order) return get(ch); - var partPos = getBidiPartAt(order, ch); - var val = getBidi(ch, partPos); - if (bidiOther != null) val.other = getBidi(ch, bidiOther); - return val; - } - - // Used to cheaply estimate the coordinates for a position. Used for - // intermediate scroll updates. - function estimateCoords(cm, pos) { - var left = 0, pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height}; - } - - // Positions returned by coordsChar contain some extra information. - // xRel is the relative x position of the input coordinates compared - // to the found position (so xRel > 0 means the coordinates are to - // the right of the character position, for example). When outside - // is true, that means the coordinates lie outside the line's - // vertical range. - function PosWithInfo(line, ch, outside, xRel) { - var pos = Pos(line, ch); - pos.xRel = xRel; - if (outside) pos.outside = true; - return pos; - } - - // Compute the character position closest to the given coordinates. - // Input must be lineSpace-local ("div" coordinate system). - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) return PosWithInfo(doc.first, 0, true, -1); - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); - if (x < 0) x = 0; - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var merged = collapsedSpanAtEnd(lineObj); - var mergedPos = merged && merged.find(0, true); - if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) - lineN = lineNo(lineObj = mergedPos.to.line); - else - return found; - } - } - - function coordsCharInner(cm, lineObj, lineNo, x, y) { - var innerOff = y - heightAtLine(lineObj); - var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - - function getX(ch) { - var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); - wrongLine = true; - if (innerOff > sp.bottom) return sp.left - adjust; - else if (innerOff < sp.top) return sp.left + adjust; - else wrongLine = false; - return sp.left; - } - - var bidi = getOrder(lineObj), dist = lineObj.text.length; - var from = lineLeft(lineObj), to = lineRight(lineObj); - var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; - - if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); - // Do a binary search between these bounds. - for (;;) { - if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { - var ch = x < fromX || x - fromX <= toX - x ? from : to; - var xDiff = x - (ch == from ? fromX : toX); - while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; - var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, - xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); - return pos; - } - var step = Math.ceil(dist / 2), middle = from + step; - if (bidi) { - middle = from; - for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); - } - var middleX = getX(middle); - if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} - else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} - } - } - - var measureText; - // Compute the default text height. - function textHeight(display) { - if (display.cachedTextHeight != null) return display.cachedTextHeight; - if (measureText == null) { - measureText = elt("pre"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) display.cachedTextHeight = height; - removeChildren(display.measure); - return height || 1; - } - - // Compute the default character width. - function charWidth(display) { - if (display.cachedCharWidth != null) return display.cachedCharWidth; - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor]); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) display.cachedCharWidth = width; - return width || 10; - } - - // OPERATIONS - - // Operations are used to wrap a series of changes to the editor - // state in such a way that each change won't have to update the - // cursor and display (which would be awkward, slow, and - // error-prone). Instead, display updates are batched and then all - // combined and executed at once. - - var operationGroup = null; - - var nextOpId = 0; - // Start a new operation. - function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId // Unique ID - }; - if (operationGroup) { - operationGroup.ops.push(cm.curOp); - } else { - cm.curOp.ownsGroup = operationGroup = { - ops: [cm.curOp], - delayedCallbacks: [] - }; - } - } - - function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - callbacks[i](); - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); - } - } while (i < callbacks.length); - } - - // Finish an operation, updating the display and signalling delayed events - function endOperation(cm) { - var op = cm.curOp, group = op.ownsGroup; - if (!group) return; - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - for (var i = 0; i < group.ops.length; i++) - group.ops[i].cm.curOp = null; - endOperations(group); - } - } - - // The DOM updates done when an operation finishes are batched so - // that the minimum number of relayouts are required. - function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R1(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W1(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R2(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W2(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_finish(ops[i]); - } - - function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) findMaxLine(cm); - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); - } - - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - - function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) updateHeightsInViewport(cm); - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - op.preparedSelection = display.input.prepareSelection(); - } - - function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - cm.display.maxLineChanged = false; - } - - if (op.preparedSelection) - cm.display.input.showSelection(op.preparedSelection); - if (op.updatedDisplay) - setDocumentHeight(cm, op.barMeasure); - if (op.updatedDisplay || op.startHeight != cm.doc.height) - updateScrollbars(cm, op.barMeasure); - - if (op.selectionChanged) restartBlink(cm); - - if (cm.state.focused && op.updateInput) - cm.display.input.reset(op.typing); - if (op.focus && op.focus == activeElt()) ensureFocus(op.cm); - } - - function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) postUpdateDisplay(cm, op.update); - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - display.wheelStartX = display.wheelStartY = null; - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { - doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); - display.scrollbars.setScrollTop(doc.scrollTop); - display.scroller.scrollTop = doc.scrollTop; - } - if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { - doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); - display.scrollbars.setScrollLeft(doc.scrollLeft); - display.scroller.scrollLeft = doc.scrollLeft; - alignHorizontally(cm); - } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) for (var i = 0; i < hidden.length; ++i) - if (!hidden[i].lines.length) signal(hidden[i], "hide"); - if (unhidden) for (var i = 0; i < unhidden.length; ++i) - if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); - - if (display.wrapper.offsetHeight) - doc.scrollTop = cm.display.scroller.scrollTop; - - // Fire change events, and delayed event handlers - if (op.changeObjs) - signal(cm, "changes", cm, op.changeObjs); - if (op.update) - op.update.finish(); - } - - // Run the given function in an operation - function runInOp(cm, f) { - if (cm.curOp) return f(); - startOperation(cm); - try { return f(); } - finally { endOperation(cm); } - } - // Wraps a function in an operation. Returns the wrapped function. - function operation(cm, f) { - return function() { - if (cm.curOp) return f.apply(cm, arguments); - startOperation(cm); - try { return f.apply(cm, arguments); } - finally { endOperation(cm); } - }; - } - // Used to add methods to editor and doc instances, wrapping them in - // operations. - function methodOp(f) { - return function() { - if (this.curOp) return f.apply(this, arguments); - startOperation(this); - try { return f.apply(this, arguments); } - finally { endOperation(this); } - }; - } - function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) return f.apply(this, arguments); - startOperation(cm); - try { return f.apply(this, arguments); } - finally { endOperation(cm); } - }; - } - - // VIEW TRACKING - - // These objects are used to represent the visible (currently drawn) - // part of the document. A LineView may correspond to multiple - // logical lines, if those are connected by collapsed ranges. - function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - - // Create a range of LineView objects for the given lines. - function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - - // Updates the display.view data structure for a given change to the - // document. From and to are in pre-change coordinates. Lendiff is - // the amount of lines added or subtracted by the change. This is - // used for changes that span multiple lines, or change the way - // lines are divided into visual lines. regLineChange (below) - // registers single-line changes. - function regChange(cm, from, to, lendiff) { - if (from == null) from = cm.doc.first; - if (to == null) to = cm.doc.first + cm.doc.size; - if (!lendiff) lendiff = 0; - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - display.updateLineNumbers = from; - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - resetView(cm); - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut = viewCuttingPoint(cm, from, from, -1); - if (cut) { - display.view = display.view.slice(0, cut.index); - display.viewTo = cut.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - ext.lineN += lendiff; - else if (from < ext.lineN + ext.size) - display.externalMeasured = null; - } - } - - // Register a change to a single line. Type must be one of "text", - // "gutter", "class", "widget" - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - display.externalMeasured = null; - - if (line < display.viewFrom || line >= display.viewTo) return; - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) return; - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) arr.push(type); - } - - // Clear the view. - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - - // Find the view element corresponding to a given line. Return null - // when the line isn't visible. - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) return null; - n -= cm.display.viewFrom; - if (n < 0) return null; - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) return i; - } - } - - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - return {index: index, lineN: newN}; - for (var i = 0, n = cm.display.viewFrom; i < index; i++) - n += view[i].size; - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) return null; - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) return null; - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN}; - } - - // Force the view to cover a given range, adding empty view element - // or clipping off existing ones as needed. - function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - else if (display.viewFrom < from) - display.view = display.view.slice(findViewIndex(cm, from)); - display.viewFrom = from; - if (display.viewTo < to) - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - else if (display.viewTo > to) - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - display.viewTo = to; - } - - // Count the number of lines in the view whose DOM representation is - // out of date (or nonexistent). - function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; - } - return dirty; - } - - // EVENT HANDLERS - - // Attach the necessary event handlers when initializing the editor - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - on(d.scroller, "dblclick", operation(cm, function(e) { - if (signalDOMEvent(cm, e)) return; - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - else - on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0}; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); - prevTouch = d.activeTouch; - prevTouch.end = +new Date; - } - }; - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) return false; - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1; - } - function farAway(touch, other) { - if (other.left == null) return true; - var dx = other.left - touch.left, dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20; - } - on(d.scroller, "touchstart", function(e) { - if (!isMouseLikeTouchEvent(e)) { - clearTimeout(touchFinished); - var now = +new Date; - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null}; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function() { - if (d.activeTouch) d.activeTouch.moved = true; - }); - on(d.scroller, "touchend", function(e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range; - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - range = new Range(pos, pos); - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - range = cm.findWordAt(pos); - else // Triple tap - range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - cm.setSelection(range.anchor, range.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function() { - if (d.scroller.clientHeight) { - setScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); - on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - d.dragFunctions = { - simple: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, - start: function(e){onDragStart(cm, e);}, - drop: operation(cm, onDrop) - }; - - var inp = d.input.getField(); - on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", bind(onFocus, cm)); - on(inp, "blur", bind(onBlur, cm)); - } - - function dragDropChanged(cm, value, old) { - var wasOn = old && old != CodeMirror.Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.simple); - toggle(cm.display.scroller, "dragover", funcs.simple); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - - // Called when the window resizes - function onResize(cm) { - var d = cm.display; - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - return; - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - - // MOUSE EVENTS - - // Return true when the given mouse event happened in a widget - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - return true; - } - } - - // Given a mouse event, find the corresponding position. If liberal - // is false, it checks whether a gutter or scrollbar was clicked, - // and returns null if it was. forRect is used by rectangular - // selections, and tries to estimate a character position even for - // coordinates beyond the right of the text. - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e) { return null; } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - - // A mouse down can be a single click, double click, triple click, - // start of selection drag, start of text drag, new cursor - // (ctrl-click), rectangle drag (alt-drag), or xwin - // middle-click-paste. Or it might be a click on something we should - // not interfere with, such as a scrollbar or widget. - function onMouseDown(e) { - var cm = this, display = cm.display; - if (display.activeTouch && display.input.supportsTouch() || signalDOMEvent(cm, e)) return; - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function(){display.scroller.draggable = true;}, 100); - } - return; - } - if (clickInGutter(cm, e)) return; - var start = posFromMouse(cm, e); - window.focus(); - - switch (e_button(e)) { - case 1: - if (start) - leftButtonDown(cm, e, start); - else if (e_target(e) == display.scroller) - e_preventDefault(e); - break; - case 2: - if (webkit) cm.state.lastMiddleDown = +new Date; - if (start) extendSelection(cm.doc, start); - setTimeout(function() {display.input.focus();}, 20); - e_preventDefault(e); - break; - case 3: - if (captureRightClick) onContextMenu(cm, e); - else delayBlurEvent(cm); - break; - } - } - - var lastClick, lastDoubleClick; - function leftButtonDown(cm, e, start) { - if (ie) setTimeout(bind(ensureFocus, cm), 0); - else cm.curOp.focus = activeElt(); - - var now = +new Date, type; - if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { - type = "triple"; - } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { - type = "double"; - lastDoubleClick = {time: now, pos: start}; - } else { - type = "single"; - lastClick = {time: now, pos: start}; - } - - var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; - if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && - type == "single" && (contained = sel.contains(start)) > -1 && - !sel.ranges[contained].empty()) - leftButtonStartDrag(cm, e, start, modifier); - else - leftButtonSelect(cm, e, start, type, modifier); - } - - // Start a text drag. When it ends, see if any dragging actually - // happen, and treat as a click if it didn't. - function leftButtonStartDrag(cm, e, start, modifier) { - var display = cm.display; - var dragEnd = operation(cm, function(e2) { - if (webkit) display.scroller.draggable = false; - cm.state.draggingText = false; - off(document, "mouseup", dragEnd); - off(display.scroller, "drop", dragEnd); - if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { - e_preventDefault(e2); - if (!modifier) - extendSelection(cm.doc, start); - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if (webkit || ie && ie_version == 9) - setTimeout(function() {document.body.focus(); display.input.focus();}, 20); - else - display.input.focus(); - } - }); - // Let the drag handler handle this. - if (webkit) display.scroller.draggable = true; - cm.state.draggingText = dragEnd; - // IE's approach to draggable - if (display.scroller.dragDrop) display.scroller.dragDrop(); - on(document, "mouseup", dragEnd); - on(display.scroller, "drop", dragEnd); - } - - // Normal selection, as opposed to text dragging. - function leftButtonSelect(cm, e, start, type, addNew) { - var display = cm.display, doc = cm.doc; - e_preventDefault(e); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (addNew && !e.shiftKey) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - ourRange = ranges[ourIndex]; - else - ourRange = new Range(start, start); - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - - if (e.altKey) { - type = "rect"; - if (!addNew) ourRange = new Range(start, start); - start = posFromMouse(cm, e, true, true); - ourIndex = -1; - } else if (type == "double") { - var word = cm.findWordAt(start); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, word.anchor, word.head); - else - ourRange = word; - } else if (type == "triple") { - var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, line.anchor, line.head); - else - ourRange = line; - } else { - ourRange = extendRange(doc, ourRange, start); - } - - if (!addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) return; - lastPos = pos; - - if (type == "rect") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - else if (text.length > leftPos) - ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - if (!ranges.length) ranges.push(new Range(start, start)); - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var anchor = oldRange.anchor, head = pos; - if (type != "single") { - if (type == "double") - var range = cm.findWordAt(pos); - else - var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); - if (cmp(range.anchor, anchor) > 0) { - head = range.head; - anchor = minPos(oldRange.from(), range.anchor); - } else { - head = range.anchor; - anchor = maxPos(oldRange.to(), range.head); - } - } - var ranges = startSel.ranges.slice(0); - ranges[ourIndex] = new Range(clipPos(doc, anchor), head); - setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, type == "rect"); - if (!cur) return; - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) setTimeout(operation(cm, function() { - if (counter != curCount) return; - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - - function done(e) { - counter = Infinity; - e_preventDefault(e); - display.input.focus(); - off(document, "mousemove", move); - off(document, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function(e) { - if (!e_button(e)) done(e); - else extend(e); - }); - var up = operation(cm, done); - on(document, "mousemove", move); - on(document, "mouseup", up); - } - - // Determines whether an event happened in the gutter, and fires the - // handlers for the corresponding event. - function gutterEvent(cm, e, type, prevent, signalfn) { - try { var mX = e.clientX, mY = e.clientY; } - catch(e) { return false; } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; - if (prevent) e_preventDefault(e); - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.options.gutters[i]; - signalfn(cm, type, cm, line, gutter, e); - return e_defaultPrevented(e); - } - } - } - - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true, signalLater); - } - - // Kludge to work around strange IE behavior where it'll sometimes - // re-fire a series of drag-related events right after the drop (#1551) - var lastDrop = 0; - - function onDrop(e) { - var cm = this; - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - return; - e_preventDefault(e); - if (ie) lastDrop = +new Date; - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || isReadOnly(cm)) return; - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var loadFile = function(file, i) { - var reader = new FileReader; - reader.onload = operation(cm, function() { - text[i] = reader.result; - if (++read == n) { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); - } - }); - reader.readAsText(file); - }; - for (var i = 0; i < n; ++i) loadFile(files[i], i); - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(function() {cm.display.input.focus();}, 20); - return; - } - try { - var text = e.dataTransfer.getData("Text"); - if (text) { - if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) - var selected = cm.listSelections(); - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) for (var i = 0; i < selected.length; ++i) - replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); - cm.replaceSelection(text, "around", "paste"); - cm.display.input.focus(); - } - } - catch(e){} - } - } - - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; - - e.dataTransfer.setData("Text", cm.getSelection()); - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) img.parentNode.removeChild(img); - } - } - - // SCROLL EVENTS - - // Sync the scrollable area and scrollbars, ensure the viewport - // covers the visible area. - function setScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) return; - cm.doc.scrollTop = val; - if (!gecko) updateDisplaySimple(cm, {top: val}); - if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (gecko) updateDisplaySimple(cm); - startWorker(cm, 100); - } - // Sync scroller and scrollbar, ensure the gutter elements are - // aligned. - function setScrollLeft(cm, val, isScroller) { - if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; - cm.display.scrollbars.setScrollLeft(val); - } - - // Since the delta values reported on mouse wheel events are - // unstandardized between browsers and even browser versions, and - // generally horribly unpredictable, this code starts by measuring - // the scroll effect that the first few mouse wheel events have, - // and, from that, detects the way it can convert deltas to pixel - // offsets afterwards. - // - // The reason we want to know the amount a wheel event will scroll - // is that it gives us a chance to update the display before the - // actual scrolling happens, reducing flickering. - - var wheelSamples = 0, wheelPixelsPerUnit = null; - // Fill in a browser-detected starting value on browsers where we - // know one. These don't have to be accurate -- the result of them - // being wrong would just be a slight flicker on the first wheel - // scroll (if it is large enough). - if (ie) wheelPixelsPerUnit = -.53; - else if (gecko) wheelPixelsPerUnit = 15; - else if (chrome) wheelPixelsPerUnit = -.7; - else if (safari) wheelPixelsPerUnit = -1/3; - - var wheelEventDelta = function(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; - else if (dy == null) dy = e.wheelDelta; - return {x: dx, y: dy}; - }; - CodeMirror.wheelEventPixels = function(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - }; - - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - if (!(dx && scroll.scrollWidth > scroll.clientWidth || - dy && scroll.scrollHeight > scroll.clientHeight)) return; - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy) - setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); - setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); - e_preventDefault(e); - display.wheelStartX = null; // Abort measurement, if in progress - return; - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) top = Math.max(0, top + pixels - 50); - else bot = Math.min(cm.doc.height, bot + pixels + 50); - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function() { - if (display.wheelStartX == null) return; - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) return; - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } - } - - // KEY EVENTS - - // Run a handler that was bound to a key. - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) return false; - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, done = false; - try { - if (isReadOnly(cm)) cm.state.suppressEdits = true; - if (dropShift) cm.display.shift = false; - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - - function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) return result; - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm); - } - - var stopSeq = new Delayed; - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) return "handled"; - stopSeq.set(50, function() { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); - name = seq + " " + name; - } - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - cm.state.keySeq = name; - if (result == "handled") - signalLater(cm, "keyHandled", cm, name, e); - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - if (seq && !result && /\'$/.test(name)) { - e_preventDefault(e); - return true; - } - return !!result; - } - - // Handle a key from the keydown event. - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) return false; - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) - || dispatchKey(cm, name, e, function(b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - return doHandleBinding(cm, b); - }); - } else { - return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); - } - } - - // Handle a key from the keypress event - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, - function(b) { return doHandleBinding(cm, b, true); }); - } - - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) return; - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - cm.replaceSelection("", null, "cut"); - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - showCrossHair(cm); - } - - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - - function onKeyUp(e) { - if (e.keyCode == 16) this.doc.sel.shift = false; - signalDOMEvent(this, e); - } - - function onKeyPress(e) { - var cm = this; - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (handleCharBinding(cm, e, ch)) return; - cm.display.input.onKeyPress(e); - } - - // FOCUS/BLUR EVENTS - - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function() { - if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - onBlur(cm); - } - }, 100); - } - - function onFocus(cm) { - if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; - - if (cm.options.readOnly == "nocursor") return; - if (!cm.state.focused) { - signal(cm, "focus", cm); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm) { - if (cm.state.delayingBlurEvent) return; - - if (cm.state.focused) { - signal(cm, "blur", cm); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); - } - - // CONTEXT MENU HANDLING - - // To make the context menu work, we need to briefly unhide the - // textarea (making it as unobtrusive as possible) to let the - // right-click take effect on it. - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; - cm.display.input.onContextMenu(e); - } - - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) return false; - return gutterEvent(cm, e, "gutterContextMenu", false, signal); - } - - // UPDATING - - // Compute the position of the end of a change (its 'to' property - // refers to the pre-change end). - var changeEnd = CodeMirror.changeEnd = function(change) { - if (!change.text) return change.to; - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - }; - - // Adjust a position to refer to the post-change position of the - // same text, or the end of the change if the change covers it. - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) return pos; - if (cmp(pos, change.to) <= 0) return changeEnd(change); - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; - return Pos(line, ch); - } - - function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(out, doc.sel.primIndex); - } - - function offsetPos(pos, old, nw) { - if (pos.line == old.line) - return Pos(nw.line, pos.ch - old.ch + nw.ch); - else - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - - // Used by replaceSelections to allow moving the selection to the - // start or around the replaced test. Hint may be "start" or "around". - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - - // Allow "beforeChange" event handlers to influence a change - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function() { this.canceled = true; } - }; - if (update) obj.update = function(from, to, text, origin) { - if (from) this.from = clipPos(doc, from); - if (to) this.to = clipPos(doc, to); - if (text) this.text = text; - if (origin !== undefined) this.origin = origin; - }; - signal(doc, "beforeChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); - - if (obj.canceled) return null; - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; - } - - // Apply a change to a document, and add it to the document's - // history, and propagating it to all linked documents. - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - if (doc.cm.state.suppressEdits) return; - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) return; - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); - } else { - makeChangeInner(doc, change); - } - } - - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); - } - - // Revert a change stored in a document's history. - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - if (doc.cm && doc.cm.state.suppressEdits) return; - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - for (var i = 0; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - break; - } - if (i == source.length) return; - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return; - } - selAfter = event; - } - else break; - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - for (var i = event.changes.length - 1; i >= 0; --i) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return; - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - } - } - - // Sub-views need their line numbers shifted when text is added - // above or below them in the parent document. - function shiftDoc(doc, distance) { - if (distance == 0) return; - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function(range) { - return new Range(Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - regLineChange(doc.cm, l, "gutter"); - } - } - - // More lower-level change function, handling only a single document - // (not linked ones). - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) return; - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) selAfter = computeSelAfterChange(doc, change); - if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); - else updateDoc(doc, change, spans); - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - } - - // Handle the interaction of a change to a document with the editor - // that this document is part of. - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function(line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - signalCursorActivity(cm); - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function(line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) cm.curOp.updateMaxLine = true; - } - - // Adjust frontier, schedule worker - doc.frontier = Math.min(doc.frontier, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - regChange(cm); - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - regLineChange(cm, from.line, "text"); - else - regChange(cm, from.line, to.line + 1, lendiff); - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) signalLater(cm, "change", cm, obj); - if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - cm.display.selForContextMenu = null; - } - - function replaceRange(doc, code, from, to, origin) { - if (!to) to = from; - if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } - if (typeof code == "string") code = splitLines(code); - makeChange(doc, {from: from, to: to, text: code, origin: origin}); - } - - // SCROLLING THINGS INTO VIEW - - // If an editor sits on the top or bottom of the window, partially - // scrolled out of view, this ensures that the cursor is visible. - function maybeScrollWindow(cm, coords) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) return; - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (coords.top + box.top < 0) doScroll = true; - else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + - (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + - (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + - coords.left + "px; width: 2px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - - // Scroll a given position into view (immediately), verifying that - // it actually became visible (as line heights are accurately - // measured, the position of something may 'drift' during drawing). - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) margin = 0; - for (var limit = 0; limit < 5; limit++) { - var changed = false, coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), - Math.min(coords.top, endCoords.top) - margin, - Math.max(coords.left, endCoords.left), - Math.max(coords.bottom, endCoords.bottom) + margin); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - setScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; - } - if (!changed) break; - } - return coords; - } - - // Scroll a given set of coordinates into view (immediately). - function scrollIntoView(cm, x1, y1, x2, y2) { - var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); - if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); - if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); - } - - // Calculate a new scroll position needed to scroll the given - // rectangle into view. Returns an object with scrollTop and - // scrollLeft properties. When these are undefined, the - // vertical/horizontal position does not need to be adjusted. - function calculateScrollPos(cm, x1, y1, x2, y2) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (y1 < 0) y1 = 0; - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (y2 - y1 > screen) y2 = y1 + screen; - var docBottom = cm.doc.height + paddingVert(display); - var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; - if (y1 < screentop) { - result.scrollTop = atTop ? 0 : y1; - } else if (y2 > screentop + screen) { - var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); - if (newTop != screentop) result.scrollTop = newTop; - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); - var tooWide = x2 - x1 > screenw; - if (tooWide) x2 = x1 + screenw; - if (x1 < 10) - result.scrollLeft = 0; - else if (x1 < screenleft) - result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); - else if (x2 > screenw + screenleft - 3) - result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; - return result; - } - - // Store a relative adjustment to the scroll position in the current - // operation (to be applied when the operation finishes). - function addToScrollPos(cm, left, top) { - if (left != null || top != null) resolveScrollToPos(cm); - if (left != null) - cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; - if (top != null) - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - - // Make sure that at the end of the operation the current cursor is - // shown. - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(), from = cur, to = cur; - if (!cm.options.lineWrapping) { - from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; - to = Pos(cur.line, cur.ch + 1); - } - cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; - } - - // When an operation has its scrollToPos property set, and another - // scroll action is applied before the end of the operation, this - // 'simulates' scrolling that position into view in a cheap way, so - // that the effect of intermediate scroll commands is not ignored. - function resolveScrollToPos(cm) { - var range = cm.curOp.scrollToPos; - if (range) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); - var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), - Math.min(from.top, to.top) - range.margin, - Math.max(from.right, to.right), - Math.max(from.bottom, to.bottom) + range.margin); - cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - } - - // API UTILITIES - - // Indent the given line. The how parameter can be "smart", - // "add"/null, "subtract", or "prev". When aggressive is false - // (typically set to true for forced single-line indents), empty - // lines are not indented, and places where the mode returns Pass - // are left alone. - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) how = "add"; - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) how = "prev"; - else state = getStateBefore(cm, n); - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) line.stateAfter = null; - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) return; - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); - else indentation = 0; - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} - if (pos < indentation) indentString += spaceStr(indentation - pos); - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i, new Range(pos, pos)); - break; - } - } - } - line.stateAfter = null; - } - - // Utility for applying a change to a line by handle or number, - // returning the number and optionally registering the line as - // changed. - function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); - else no = lineNo(handle); - if (no == null) return null; - if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); - return line; - } - - // Helper for deleting text near the selection(s), used to implement - // backspace, delete, and similar functionality. - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function() { - for (var i = kill.length - 1; i >= 0; i--) - replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); - ensureCursorVisible(cm); - }); - } - - // Used for horizontal relative motion. Dir is -1 or 1 (left or - // right), unit can be "char", "column" (like char, but doesn't - // cross line boundaries), "word" (across next word), or "group" (to - // the start of next group of word or non-word-non-whitespace - // chars). The visually param controls whether, in right-to-left - // text, direction 1 means to move towards the next index in the - // string, or towards the character to the right of the current - // position. The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosH(doc, pos, dir, unit, visually) { - var line = pos.line, ch = pos.ch, origDir = dir; - var lineObj = getLine(doc, line); - var possible = true; - function findNextLine() { - var l = line + dir; - if (l < doc.first || l >= doc.first + doc.size) return (possible = false); - line = l; - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); - if (next == null) { - if (!boundToLine && findNextLine()) { - if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); - else ch = dir < 0 ? lineObj.text.length : 0; - } else return (possible = false); - } else ch = next; - return true; - } - - if (unit == "char") moveOnce(); - else if (unit == "column") moveOnce(true); - else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) break; - var cur = lineObj.text.charAt(ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) type = "s"; - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce();} - break; - } - - if (type) sawType = type; - if (dir > 0 && !moveOnce(!first)) break; - } - } - var result = skipAtomic(doc, Pos(line, ch), origDir, true); - if (!possible) result.hitSide = true; - return result; - } - - // For relative vertical movement. Dir may be -1 or 1. Unit can be - // "page" or "line". The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - for (;;) { - var target = coordsChar(cm, x, y); - if (!target.outside) break; - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } - y += dir * 5; - } - return target; - } - - // EDITOR METHODS - - // The publicly visible API. Note that methodOp(f) means - // 'wrap f in an operation, performed on its `this` parameter'. - - // This is not the complete set of editor methods. Most of the - // methods defined on the Doc type are also injected into - // CodeMirror.prototype, for backwards compatibility and - // convenience. - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") return; - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - operation(this, optionHandlers[option])(this, value, old); - }, - - getOption: function(option) {return this.options[option];}, - getDoc: function() {return this.doc;}, - - addKeyMap: function(map, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); - }, - removeKeyMap: function(map) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - if (maps[i] == map || maps[i].name == map) { - maps.splice(i, 1); - return true; - } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) throw new Error("Overlays may not be stateful."); - this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; - else dir = dir ? "add" : "subtract"; - } - if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); - }), - indentSelection: methodOp(function(how) { - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) { - var from = range.from(), to = range.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - indentLine(this, j, how); - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); - } else if (range.head.line > end) { - indentLine(this, range.head.line, how, true); - end = range.head.line; - if (i == this.doc.sel.primIndex) ensureCursorVisible(this); - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise); - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) type = styles[2]; - else for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; - else if (styles[mid * 2 + 1] < ch) before = mid + 1; - else { type = styles[mid * 2 + 2]; break; } - } - var cut = type ? type.indexOf("cm-overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) return mode; - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0]; - }, - - getHelpers: function(pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) return found; - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) found.push(help[mode[type]]); - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) found.push(val); - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i = 0; i < help._global.length; i++) { - var cur = help._global[i]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) - found.push(cur.val); - } - return found; - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getStateBefore(this, line + 1, precise); - }, - - cursorCoords: function(start, mode) { - var pos, range = this.doc.sel.primary(); - if (start == null) pos = range.head; - else if (typeof start == "object") pos = clipPos(this.doc, start); - else pos = start ? range.from() : range.to(); - return cursorCoords(this, pos, mode || "page"); - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function(line, mode) { - var end = false, lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) line = this.doc.first; - else if (line > last) { line = last; end = true; } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + - (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - - defaultTextHeight: function() { return textHeight(this.display); }, - defaultCharWidth: function() { return charWidth(this.display); }, - - setGutterMarker: methodOp(function(line, gutterID, value) { - return changeLine(this.doc, line, "gutter", function(line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) line.gutterMarkers = null; - return true; - }); - }), - - clearGutter: methodOp(function(gutterID) { - var cm = this, doc = cm.doc, i = doc.first; - doc.iter(function(line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - line.gutterMarkers[gutterID] = null; - regLineChange(cm, i, "gutter"); - if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; - } - ++i; - }); - }), - - lineInfo: function(line) { - if (typeof line == "number") { - if (!isLine(this.doc, line)) return null; - var n = line; - line = getLine(this.doc, line); - if (!line) return null; - } else { - var n = lineNo(line); - if (n == null) return null; - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets}; - }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - top = pos.top - node.offsetHeight; - else if (pos.bottom + node.offsetHeight <= vspace) - top = pos.bottom; - if (left + node.offsetWidth > hspace) - left = hspace - node.offsetWidth; - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") left = 0; - else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; - node.style.left = left + "px"; - } - if (scroll) - scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - return commands[cmd](this); - }, - - findPosH: function(from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) break; - } - return cur; - }, - - moveH: methodOp(function(dir, unit) { - var cm = this; - cm.extendSelectionsBy(function(range) { - if (cm.display.shift || cm.doc.extend || range.empty()) - return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); - else - return dir < 0 ? range.from() : range.to(); - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - doc.replaceSelection("", null, "+delete"); - else - deleteNearSelection(this, function(range) { - var other = findPosH(doc, range.head, dir, unit, false); - return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; - }); - }), - - findPosV: function(from, amount, unit, goalColumn) { - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) x = coords.left; - else coords.left = x; - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) break; - } - return cur; - }, - - moveV: methodOp(function(dir, unit) { - var cm = this, doc = this.doc, goals = []; - var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function(range) { - if (collapse) - return dir < 0 ? range.from() : range.to(); - var headPos = cursorCoords(cm, range.head, "div"); - if (range.goalColumn != null) headPos.left = range.goalColumn; - goals.push(headPos.left); - var pos = findPosV(cm, headPos, dir, unit); - if (unit == "page" && range == doc.sel.primary()) - addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); - return pos; - }, sel_move); - if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) - doc.sel.ranges[i].goalColumn = goals[i]; - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function(ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} - : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; - while (start > 0 && check(line.charAt(start - 1))) --start; - while (end < line.length && check(line.charAt(end))) ++end; - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) return; - if (this.state.overwrite = !this.state.overwrite) - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - else - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return this.display.input.getField() == activeElt(); }, - - scrollTo: methodOp(function(x, y) { - if (x != null || y != null) resolveScrollToPos(this); - if (x != null) this.curOp.scrollLeft = x; - if (y != null) this.curOp.scrollTop = y; - }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; - }, - - scrollIntoView: methodOp(function(range, margin) { - if (range == null) { - range = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) margin = this.options.cursorScrollMargin; - } else if (typeof range == "number") { - range = {from: Pos(range, 0), to: null}; - } else if (range.from == null) { - range = {from: range, to: null}; - } - if (!range.to) range.to = range.from; - range.margin = margin || 0; - - if (range.from.line != null) { - resolveScrollToPos(this); - this.curOp.scrollToPos = range; - } else { - var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), - Math.min(range.from.top, range.to.top) - range.margin, - Math.max(range.from.right, range.to.right), - Math.max(range.from.bottom, range.to.bottom) + range.margin); - this.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - }), - - setSize: methodOp(function(width, height) { - var cm = this; - function interpret(val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - } - if (width != null) cm.display.wrapper.style.width = interpret(width); - if (height != null) cm.display.wrapper.style.height = interpret(height); - if (cm.options.lineWrapping) clearLineMeasurementCache(this); - var lineNo = cm.display.viewFrom; - cm.doc.iter(lineNo, cm.display.viewTo, function(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) - if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } - ++lineNo; - }); - cm.curOp.forceUpdate = true; - signal(cm, "refresh", this); - }), - - operation: function(f){return runInOp(this, f);}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - estimateLineHeights(this); - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - this.scrollTo(doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - - getInputField: function(){return this.display.input.getField();}, - getWrapperElement: function(){return this.display.wrapper;}, - getScrollerElement: function(){return this.display.scroller;}, - getGutterElement: function(){return this.display.gutters;} - }; - eventMixin(CodeMirror); - - // OPTION DEFAULTS - - // The default configuration options. - var defaults = CodeMirror.defaults = {}; - // Functions to run when options are changed. - var optionHandlers = CodeMirror.optionHandlers = {}; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) optionHandlers[name] = - notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; - } - - // Passed to option handlers when there is no old value. - var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function(cm, val) { - cm.setValue(val); - }, true); - option("mode", null, function(cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function(cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - if (old != CodeMirror.Init) cm.refresh(); - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function() { - throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME - }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function(cm) { - themeChanged(cm); - guttersChanged(cm); - }, true); - option("keyMap", "default", function(cm, val, old) { - var next = getKeyMap(val); - var prev = old != CodeMirror.Init && getKeyMap(old); - if (prev && prev.detach) prev.detach(cm, next); - if (next.attach) next.attach(cm, prev || null); - }); - option("extraKeys", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("fixedGutter", true, function(cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); - option("scrollbarStyle", "native", function(cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("firstLineNumber", 1, guttersChanged, true); - option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - - option("readOnly", false, function(cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - cm.display.disabled = true; - } else { - cm.display.disabled = false; - if (!val) cm.display.input.reset(); - } - }); - option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); - option("dragDrop", true, dragDropChanged); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function(cm){cm.refresh();}, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function(cm, val) { - if (!val) cm.display.input.resetPosition(); - }); - - option("tabindex", null, function(cm, val) { - cm.display.input.getField().tabIndex = val || ""; - }); - option("autofocus", null); - - // MODE DEFINITION AND QUERYING - - // Known modes, by name and by MIME - var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - CodeMirror.defineMode = function(name, mode) { - if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; - }; - - CodeMirror.defineMIME = function(mime, spec) { - mimeModes[mime] = spec; - }; - - // Given a MIME type, a {name, ...options} config object, or a name - // string, return a mode config object. - CodeMirror.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") found = {name: found}; - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return CodeMirror.resolveMode("application/xml"); - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; - }; - - // Given a mode spec (anything that resolveMode accepts), find and - // initialize an actual mode object. - CodeMirror.getMode = function(options, spec) { - var spec = CodeMirror.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) return CodeMirror.getMode(options, "text/plain"); - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) continue; - if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) modeObj.helperType = spec.helperType; - if (spec.modeProps) for (var prop in spec.modeProps) - modeObj[prop] = spec.modeProps[prop]; - - return modeObj; - }; - - // Minimal default mode. - CodeMirror.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; - }); - CodeMirror.defineMIME("text/plain", "null"); - - // This can be used to attach properties to mode objects from - // outside the actual mode definition. - var modeExtensions = CodeMirror.modeExtensions = {}; - CodeMirror.extendMode = function(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); - }; - - // EXTENSIONS - - CodeMirror.defineExtension = function(name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function(name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.defineOption = option; - - var initHooks = []; - CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; - - var helpers = CodeMirror.helpers = {}; - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; - - // MODE STATE HANDLING - - // Utility functions for working with state. Exported because nested - // modes need to do this for their inner modes. - - var copyState = CodeMirror.copyState = function(mode, state) { - if (state === true) return state; - if (mode.copyState) return mode.copyState(state); - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) val = val.concat([]); - nstate[n] = val; - } - return nstate; - }; - - var startState = CodeMirror.startState = function(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - }; - - // Given a mode and a state (for that mode), find the inner mode and - // state at the position that the state refers to. - CodeMirror.innerMode = function(mode, state) { - while (mode.innerMode) { - var info = mode.innerMode(state); - if (!info || info.mode == mode) break; - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state}; - }; - - // STANDARD COMMANDS - - // Commands are parameter-less actions that can be performed on an - // editor, mostly used for keybindings. - var commands = CodeMirror.commands = { - selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, - singleSelection: function(cm) { - cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function(cm) { - deleteNearSelection(cm, function(range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - return {from: range.head, to: Pos(range.head.line + 1, 0)}; - else - return {from: range.head, to: Pos(range.head.line, len)}; - } else { - return {from: range.from(), to: range.to()}; - } - }); - }, - deleteLine: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; - }); - }, - delLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), to: range.from()}; - }); - }, - delWrappedLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()}; - }); - }, - delWrappedLineRight: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos }; - }); - }, - undo: function(cm) {cm.undo();}, - redo: function(cm) {cm.redo();}, - undoSelection: function(cm) {cm.undoSelection();}, - redoSelection: function(cm) {cm.redoSelection();}, - goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, - goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, - goLineStart: function(cm) { - cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1}); - }, - goLineStartSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - return lineStartSmart(cm, range.head); - }, {origin: "+move", bias: 1}); - }, - goLineEnd: function(cm) { - cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1}); - }, - goLineRight: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - }, sel_move); - }, - goLineLeft: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div"); - }, sel_move); - }, - goLineLeftSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); - return pos; - }, sel_move); - }, - goLineUp: function(cm) {cm.moveV(-1, "line");}, - goLineDown: function(cm) {cm.moveV(1, "line");}, - goPageUp: function(cm) {cm.moveV(-1, "page");}, - goPageDown: function(cm) {cm.moveV(1, "page");}, - goCharLeft: function(cm) {cm.moveH(-1, "char");}, - goCharRight: function(cm) {cm.moveH(1, "char");}, - goColumnLeft: function(cm) {cm.moveH(-1, "column");}, - goColumnRight: function(cm) {cm.moveH(1, "column");}, - goWordLeft: function(cm) {cm.moveH(-1, "word");}, - goGroupRight: function(cm) {cm.moveH(1, "group");}, - goGroupLeft: function(cm) {cm.moveH(-1, "group");}, - goWordRight: function(cm) {cm.moveH(1, "word");}, - delCharBefore: function(cm) {cm.deleteH(-1, "char");}, - delCharAfter: function(cm) {cm.deleteH(1, "char");}, - delWordBefore: function(cm) {cm.deleteH(-1, "word");}, - delWordAfter: function(cm) {cm.deleteH(1, "word");}, - delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, - delGroupAfter: function(cm) {cm.deleteH(1, "group");}, - indentAuto: function(cm) {cm.indentSelection("smart");}, - indentMore: function(cm) {cm.indentSelection("add");}, - indentLess: function(cm) {cm.indentSelection("subtract");}, - insertTab: function(cm) {cm.replaceSelection("\t");}, - insertSoftTab: function(cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); - } - cm.replaceSelections(spaces); - }, - defaultTab: function(cm) { - if (cm.somethingSelected()) cm.indentSelection("add"); - else cm.execCommand("insertTab"); - }, - transposeChars: function(cm) { - runInOp(cm, function() { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) - cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function(cm) { - runInOp(cm, function() { - var len = cm.listSelections().length; - for (var i = 0; i < len; i++) { - var range = cm.listSelections()[i]; - cm.replaceRange("\n", range.anchor, range.head, "+input"); - cm.indentLine(range.from().line + 1, null, true); - ensureCursorVisible(cm); - } - }); - }, - toggleOverwrite: function(cm) {cm.toggleOverwrite();} - }; - - - // STANDARD KEYMAPS - - var keyMap = CodeMirror.keyMap = {}; - - keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - // Note that the save and find-related commands aren't defined by - // default. User code or addons can define them. Unknown commands - // are simply ignored. - keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" - }; - // Very basic readline/emacs-style bindings, which are standard on Mac. - keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - - // KEYMAP DISPATCH - - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; - else if (/^a(lt)?$/i.test(mod)) alt = true; - else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; - else if (/^s(hift)$/i.test(mod)) shift = true; - else throw new Error("Unrecognized modifier name: " + mod); - } - if (alt) name = "Alt-" + name; - if (ctrl) name = "Ctrl-" + name; - if (cmd) name = "Cmd-" + name; - if (shift) name = "Shift-" + name; - return name; - } - - // This is a kludge to keep keymaps mostly working as raw objects - // (backwards compatibility) while at the same time support features - // like normalization and multi-stroke key bindings. It compiles a - // new normalized keymap, and then updates the old object to reflect - // this. - CodeMirror.normalizeKeyMap = function(keymap) { - var copy = {}; - for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; - if (value == "...") { delete keymap[keyname]; continue; } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val, name; - if (i == keys.length - 1) { - name = keyname; - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) copy[name] = val; - else if (prev != val) throw new Error("Inconsistent bindings for " + name); - } - delete keymap[keyname]; - } - for (var prop in copy) keymap[prop] = copy[prop]; - return keymap; - }; - - var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { - map = getKeyMap(map); - var found = map.call ? map.call(key, context) : map[key]; - if (found === false) return "nothing"; - if (found === "...") return "multi"; - if (found != null && handle(found)) return "handled"; - - if (map.fallthrough) { - if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") - return lookupKey(key, map.fallthrough, handle, context); - for (var i = 0; i < map.fallthrough.length; i++) { - var result = lookupKey(key, map.fallthrough[i], handle, context); - if (result) return result; - } - } - }; - - // Modifier key presses don't count as 'real' key presses for the - // purpose of keymap fallthrough. - var isModifierKey = CodeMirror.isModifierKey = function(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - }; - - // Look up the name of a key as indicated by an event object. - var keyName = CodeMirror.keyName = function(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) return false; - var base = keyNames[event.keyCode], name = base; - if (name == null || event.altGraphKey) return false; - if (event.altKey && base != "Alt") name = "Alt-" + name; - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; - if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; - return name; - }; - - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - - // FROMTEXTAREA - - CodeMirror.fromTextArea = function(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) - options.tabindex = textarea.tabIndex; - if (!options.placeholder && textarea.placeholder) - options.placeholder = textarea.placeholder; - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form, realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function() { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - options.finishInit = function(cm) { - cm.save = save; - cm.getTextArea = function() { return textarea; }; - cm.toTextArea = function() { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (typeof textarea.form.submit == "function") - textarea.form.submit = realSubmit; - } - }; - }; - - textarea.style.display = "none"; - var cm = CodeMirror(function(node) { - textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - return cm; - }; - - // STRING STREAM - - // Fed to the mode parsers, provides helper functions to make - // parsers more succinct. - - var StringStream = CodeMirror.StringStream = function(string, tabSize) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - }; - - StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == this.lineStart;}, - peek: function() {return this.string.charAt(this.pos) || undefined;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - indentation: function() { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } - }; - - // TEXTMARKERS - - // Created with markText and setBookmark methods. A TextMarker is a - // handle that can be used to clear or find a marked position in the - // document. Line objects hold arrays (markedSpans) containing - // {from, to, marker} object pointing to such marker objects, and - // indicating that such a marker is present on that line. Multiple - // lines may point to the same marker when it spans across lines. - // The spans will have null for their from/to properties when the - // marker continues beyond the start/end of the line. Markers have - // links back to the lines they currently touch. - - var nextMarkerId = 0; - - var TextMarker = CodeMirror.TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - eventMixin(TextMarker); - - // Clear the marker. - TextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) startOperation(cm); - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) signalLater(this, "clear", found.from, found.to); - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); - else if (cm) { - if (span.to != null) max = lineNo(line); - if (span.from != null) min = lineNo(line); - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) - updateLineHeight(line, textHeight(cm.display)); - } - if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { - var visual = visualLine(this.lines[i]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - - if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) reCheckSelection(cm.doc); - } - if (cm) signalLater(cm, "markerCleared", cm, this); - if (withOp) endOperation(cm); - if (this.parent) this.parent.clear(); - }; - - // Find the position of the marker in the document. Returns a {from, - // to} object by default. Side can be passed to get a specific side - // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the - // Pos objects returned contain a line object, rather than a line - // number (used to prevent looking up the same line twice). - TextMarker.prototype.find = function(side, lineObj) { - if (side == null && this.type == "bookmark") side = 1; - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) return from; - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) return to; - } - } - return from && {from: from, to: to}; - }; - - // Signals that the marker's widget changed, and surrounding layout - // should be recomputed. - TextMarker.prototype.changed = function() { - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) return; - runInOp(cm, function() { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - updateLineHeight(line, line.height + dHeight); - } - }); - }; - - TextMarker.prototype.attachLine = function(line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function(line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - - // Collapsed markers have unique ids, in order to be able to order - // them, which is needed for uniquely determining an outer marker - // when they overlap (they may nest, but not partially overlap). - var nextMarkerId = 0; - - // Create a marker, wire it up to the right lines, and - function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) return markTextShared(doc, from, to, options, type); - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) copyObj(options, marker, false); - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - return marker; - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); - if (options.insertLeft) marker.widgetNode.insertLeft = true; - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - sawCollapsedSpans = true; - } - - if (marker.addToHistory) - addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function(line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - updateMaxLine = true; - if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null)); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { - if (lineIsHidden(doc, line)) updateLineHeight(line, 0); - }); - - if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); - - if (marker.readOnly) { - sawReadOnlySpans = true; - if (doc.history.done.length || doc.history.undone.length) - doc.clearHistory(); - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) cm.curOp.updateMaxLine = true; - if (marker.collapsed) - regChange(cm, from.line, to.line + 1); - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); - if (marker.atomic) reCheckSelection(cm.doc); - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - - // SHARED TEXTMARKERS - - // A shared marker spans multiple linked documents. It is - // implemented as a meta-marker-object controlling multiple normal - // markers. - var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - markers[i].parent = this; - }; - eventMixin(SharedTextMarker); - - SharedTextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - this.markers[i].clear(); - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function(side, lineObj) { - return this.primary.find(side, lineObj); - }; - - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function(doc) { - if (widget) options.widgetNode = widget.cloneNode(true); - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - if (doc.linked[i].isParent) return; - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), - function(m) { return m.parent; }); - } - - function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - - function detachSharedMarkers(markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], linked = [marker.primary.doc];; - linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - } - } - - // TEXTMARKER SPANS - - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; - } - - // Search an array of spans for a span matching the given marker. - function getMarkedSpanFor(spans, marker) { - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) return span; - } - } - // Remove a span from an array, returning undefined if no spans are - // left (we don't store arrays for lines without spans). - function removeMarkedSpan(spans, span) { - for (var r, i = 0; i < spans.length; ++i) - if (spans[i] != span) (r || (r = [])).push(spans[i]); - return r; - } - // Add a span to a line. - function addMarkedSpan(line, span) { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - span.marker.attachLine(line); - } - - // Used for the algorithm that adjusts markers for a change in the - // document. These functions cut an array of spans at a given - // character position, returning an array of remaining chunks (or - // undefined if nothing remains). - function markedSpansBefore(old, startCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } - return nw; - } - - // Given a change object, compute the new set of marker spans that - // cover the line in which the change took place. Removes spans - // entirely within the change, reconnects spans belonging to the - // same marker that appear on both sides of the change, and cuts off - // spans partially within the change. Returns an array of span - // arrays with one element for each line in (after) the change. - function stretchSpansOverChange(doc, change) { - if (change.full) return null; - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) return null; - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) span.to = startCh; - else if (sameLine) span.to = found.to == null ? null : found.to + offset; - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i = 0; i < last.length; ++i) { - var span = last[i]; - if (span.to != null) span.to += offset; - if (span.from == null) { - var found = getMarkedSpanFor(first, span.marker); - if (!found) { - span.from = offset; - if (sameLine) (first || (first = [])).push(span); - } - } else { - span.from += offset; - if (sameLine) (first || (first = [])).push(span); - } - } - } - // Make sure we didn't create any zero-length spans - if (first) first = clearEmptySpans(first); - if (last && last != first) last = clearEmptySpans(last); - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - for (var i = 0; i < first.length; ++i) - if (first[i].to == null) - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); - for (var i = 0; i < gap; ++i) - newMarkers.push(gapMarkers); - newMarkers.push(last); - } - return newMarkers; - } - - // Remove spans that are empty and don't have a clearWhenEmpty - // option of false. - function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - spans.splice(i--, 1); - } - if (!spans.length) return null; - return spans; - } - - // Used for un/re-doing changes from the history. Combines the - // result of computing the existing spans with the set of spans that - // existed in the history (so that deleting around a span and then - // undoing brings back the span). - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) return stretched; - if (!stretched) return old; - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - if (oldCur[k].marker == span.marker) continue spans; - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old; - } - - // Used to 'clip' out readOnly ranges when making a change. - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function(line) { - if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - (markers || (markers = [])).push(mark); - } - }); - if (!markers) return null; - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - newParts.push({from: p.from, to: m.from}); - if (dto > 0 || !mk.inclusiveRight && !dto) - newParts.push({from: m.to, to: p.to}); - parts.splice.apply(parts, newParts); - j += newParts.length - 1; - } - } - return parts; - } - - // Connect or disconnect spans from a line. - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.detachLine(line); - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.attachLine(line); - line.markedSpans = spans; - } - - // Helpers used when computing which overlapping collapsed span - // counts as the larger one. - function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } - function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } - - // Returns a number indicating which of two overlapping collapsed - // spans is larger (and thus includes the other). Falls back to - // comparing ids when the spans cover exactly the same range. - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) return lenDiff; - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) return -fromCmp; - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) return toCmp; - return b.id - a.id; - } - - // Find out whether a line ends or starts in a collapsed span. If - // so, return the marker for that span. - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - found = sp.marker; - } - return found; - } - function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } - function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } - - // Test whether there exists a collapsed span that partially - // overlaps (covers the start or end, but not both) of a new span. - // Such overlap is not allowed. - function conflictingCollapsedRange(doc, lineNo, from, to, marker) { - var line = getLine(doc, lineNo); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) continue; - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; - if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || - fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) - return true; - } - } - - // A visual line is a line as drawn on the screen. Folding, for - // example, can cause multiple logical lines to appear on the same - // visual line. This finds the start of the visual line that the - // given line is part of (usually that is the line itself). - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - line = merged.find(-1, true).line; - return line; - } - - // Returns an array of logical lines that continue the visual line - // started by the argument, or undefined if there are no such lines. - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - - // Get the line number of the start of the visual line that the - // given line number is part of. - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) return lineN; - return lineNo(vis); - } - // Get the line number of the start of the next visual line after - // the given line. - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) return lineN; - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) return lineN; - while (merged = collapsedSpanAtEnd(line)) - line = merged.find(1, true).line; - return lineNo(line) + 1; - } - - // Compute whether a line is hidden. Lines count as hidden when they - // are part of a visual line that starts with another line, or when - // they are entirely covered by collapsed, non-widget span. - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) continue; - if (sp.from == null) return true; - if (sp.marker.widgetNode) continue; - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - return true; - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) - return true; - for (var sp, i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) return true; - } - } - - // LINE WIDGETS - - // Line widgets are block elements displayed above or below a line. - - var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { - if (options) for (var opt in options) if (options.hasOwnProperty(opt)) - this[opt] = options[opt]; - this.doc = doc; - this.node = node; - }; - eventMixin(LineWidget); - - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - addToScrollPos(cm, null, diff); - } - - LineWidget.prototype.clear = function() { - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) return; - for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); - if (!ws.length) line.widgets = null; - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) runInOp(cm, function() { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - }; - LineWidget.prototype.changed = function() { - var oldH = this.height, cm = this.doc.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) return; - updateLineHeight(line, line.height + diff); - if (cm) runInOp(cm, function() { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - }); - }; - - function widgetHeight(widget) { - if (widget.height != null) return widget.height; - var cm = widget.doc.cm; - if (!cm) return 0; - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; - if (widget.noHScroll) - parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.offsetHeight; - } - - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) cm.display.alignWidgets = true; - changeLine(doc, handle, "widget", function(line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) widgets.push(widget); - else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) addToScrollPos(cm, null, widget.height); - cm.curOp.forceUpdate = true; - } - return true; - }); - return widget; - } - - // LINE DATA STRUCTURE - - // Line objects. These hold state related to a line, including - // highlighting info (the styles array). - var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; - }; - eventMixin(Line); - Line.prototype.lineNo = function() { return lineNo(this); }; - - // Change the content (text, markers) of a line. Automatically - // invalidates cached information and tries to re-estimate the - // line's height. - function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - if (line.order != null) line.order = null; - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) updateLineHeight(line, estHeight); - } - - // Detach a line from the document tree and its markers. - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - - function extractLineClasses(type, output) { - if (type) for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) break; - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - output[prop] = lineClass[2]; - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - output[prop] += " " + lineClass[2]; - } - return type; - } - - function callBlankLine(mode, state) { - if (mode.blankLine) return mode.blankLine(state); - if (!mode.innerMode) return; - var inner = CodeMirror.innerMode(mode, state); - if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); - } - - function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; - var style = mode.token(stream, state); - if (stream.pos > stream.start) return style; - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - - // Utility for getTokenAt and getLineTokens - function takeToken(cm, pos, precise, asArray) { - function getObj(copy) { - return {start: stream.start, end: stream.pos, - string: stream.current(), - type: style || null, - state: copy ? copyState(doc.mode, state) : state}; - } - - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize), tokens; - if (asArray) tokens = []; - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, state); - if (asArray) tokens.push(getObj(true)); - } - return asArray ? tokens : getObj(); - } - - // Run the given mode's parser over a line, calling f for each token. - function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) processLine(cm, text, state, stream.pos); - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) style = "m-" + (style ? mName + " " + style : mName); - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 50000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 characters - var pos = Math.min(stream.pos, curStart + 50000); - f(pos, curStyle); - curStart = pos; - } - } - - // Compute a style array (an array starting with a mode generation - // -- for invalidation -- followed by pairs of end positions and - // style strings), which is used to highlight the tokens on the - // line. - function highlightLine(cm, line, state, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, state, function(end, style) { - st.push(end, style); - }, lineClasses, forceToEnd); - - // Run overlays, adjust style array. - for (var o = 0; o < cm.state.overlays.length; ++o) { - var overlay = cm.state.overlays[o], i = 1, at = 0; - runMode(cm, line.text, overlay.mode, true, function(end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - st.splice(i, 1, end, st[i+1], i_end); - i += 2; - at = Math.min(end, i_end); - } - if (!style) return; - if (overlay.opaque) { - st.splice(start, i - start, end, "cm-overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; - } - } - }, lineClasses); - } - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; - } - - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); - line.styles = result.styles; - if (result.classes) line.styleClasses = result.classes; - else if (line.styleClasses) line.styleClasses = null; - if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; - } - return line.styles; - } - - // Lightweight form of highlight -- proceed over this line and - // update state, but don't save a style array. Used for lines that - // aren't currently visible. - function processLine(cm, text, state, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize); - stream.start = stream.pos = startAt || 0; - if (text == "") callBlankLine(mode, state); - while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { - readToken(mode, stream, state); - stream.start = stream.pos; - } - } - - // Convert a style as returned by a mode (either null, or a string - // containing one or more styles) to a CSS style. This is cached, - // and also looks for line-wide styles. - var styleToClassCache = {}, styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) return null; - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - - // Render the DOM representation of the text of a line. Also builds - // up a 'line map', which points at the DOM nodes that represent - // specific stretches of text, and is used by the measuring code. - // The returned object contains the DOM node, this map, and - // information about line-wide styles that were set by the mode. - function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: elt("pre", [content]), content: content, - col: 0, pos: 0, cm: cm, - splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order; - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) - builder.addToken = buildTokenBadBidi(builder.addToken, order); - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - if (line.styleClasses.textClass) - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) - builder.content.className = "cm-tab-wrap-hack"; - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - - return builder; - } - - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token; - } - - // Build up the DOM representation for a single token, and add it to - // the line map. Takes care to render special characters separately. - function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) return; - var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; - var special = builder.cm.state.specialChars, mustWrap = false; - if (!special.test(text)) { - builder.col += text.length; - var content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) mustWrap = true; - builder.pos += text.length; - } else { - var content = document.createDocumentFragment(), pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) break; - pos += skipped + 1; - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt.setAttribute("role", "presentation"); - txt.setAttribute("cm-text", "\t"); - builder.col += tabWidth; - } else { - var txt = builder.cm.options.specialCharPlaceholder(m[0]); - txt.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt); - builder.pos++; - } - } - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || ""; - if (startStyle) fullStyle += startStyle; - if (endStyle) fullStyle += endStyle; - var token = elt("span", [content], fullStyle, css); - if (title) token.title = title; - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - - function splitSpaces(old) { - var out = " "; - for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; - out += " "; - return out; - } - - // Work around nonsense dimensions being reported for stretches of - // right-to-left text. - function buildTokenBadBidi(inner, order) { - return function(builder, text, style, startStyle, endStyle, title, css) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - for (var i = 0; i < order.length; i++) { - var part = order[i]; - if (part.to > start && part.from <= start) break; - } - if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) builder.map.push(builder.pos, builder.pos + size, widget); - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - widget = builder.content.appendChild(document.createElement("span")); - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - } - - // Outputs a number of spans to make up a line, taking highlighting - // and marked text into account. - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i = 1; i < styles.length; i+=2) - builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); - return; - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = ""; - collapsed = null; nextChange = Infinity; - var foundBookmarks = []; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (sp.from <= pos && (sp.to == null || sp.to > pos)) { - if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } - if (m.className) spanStyle += " " + m.className; - if (m.css) css = m.css; - if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; - if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; - if (m.title && !title) title = m.title; - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - collapsed = sp; - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) return; - } - if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) - buildCollapsedSpan(builder, 0, foundBookmarks[j]); - } - if (pos >= len) break; - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } - } - - // DOCUMENT DATA STRUCTURE - - // By default, updates that start and end at the beginning of a line - // are treated specially, in order to make the association of line - // widgets and marker elements with the text behave more intuitive. - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - - // Perform a change on the document data structure. - function updateDoc(doc, change, markedSpans, estimateHeight) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null;} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - for (var i = start, result = []; i < end; ++i) - result.push(new Line(text[i], spansFor(i), estimateHeight)); - return result; - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) doc.remove(from.line, nlines); - if (added.length) doc.insert(from.line, added); - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added = linesFor(1, text.length - 1); - added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added = linesFor(1, text.length - 1); - if (nlines > 1) doc.remove(from.line + 1, nlines - 1); - doc.insert(from.line + 1, added); - } - - signalLater(doc, "change", doc, change); - } - - // The document is represented as a BTree consisting of leaves, with - // chunk of lines in them, and branches, with up to ten leaves or - // other branch nodes below them. The top node is always a branch - // node, and is the document object itself (meaning it has - // additional methods and properties). - // - // All nodes have parent links. The tree is used both to go from - // line numbers to line objects, and to go from objects to numbers. - // It also indexes by height, and is used to convert between height - // and line object, and to find the total height of the document. - // - // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - for (var i = 0, height = 0; i < lines.length; ++i) { - lines[i].parent = this; - height += lines[i].height; - } - this.height = height; - } - - LeafChunk.prototype = { - chunkSize: function() { return this.lines.length; }, - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - for (var i = at, e = at + n; i < e; ++i) { - var line = this.lines[i]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) lines[i].parent = this; - }, - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - for (var e = at + n; at < e; ++at) - if (op(this.lines[at])) return true; - } - }; - - function BranchChunk(children) { - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - - BranchChunk.prototype = { - chunkSize: function() { return this.size; }, - removeInner: function(at, n) { - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) break; - at = 0; - } else at -= sz; - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function(lines) { - for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); - }, - insertInner: function(at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - while (child.lines.length > 50) { - var spilled = child.lines.splice(child.lines.length - 25, 25); - var newleaf = new LeafChunk(spilled); - child.height -= newleaf.height; - this.children.splice(i + 1, 0, newleaf); - newleaf.parent = this; - } - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) return; - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function(at, n, op) { - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) return true; - if ((n -= used) == 0) break; - at = 0; - } else at -= sz; - } - } - }; - - var nextDocId = 0; - var Doc = CodeMirror.Doc = function(text, mode, firstLine) { - if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); - if (firstLine == null) firstLine = 0; - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.frontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - - if (typeof text == "string") text = splitLines(text); - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) this.iterN(from - this.first, to - from, op); - else this.iterN(this.first, this.first + this.size, from); - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) height += lines[i].height; - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: splitLines(code), origin: "setValue", full: true}, true); - setSelection(this, simpleSelection(top)); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, - - getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, - getLineNumber: function(line) {return lineNo(line);}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") line = getLine(this, line); - return visualLine(line); - }, - - lineCount: function() {return this.size;}, - firstLine: function() {return this.first;}, - lastLine: function() {return this.first + this.size - 1;}, - - clipPos: function(pos) {return clipPos(this, pos);}, - - getCursor: function(start) { - var range = this.sel.primary(), pos; - if (start == null || start == "head") pos = range.head; - else if (start == "anchor") pos = range.anchor; - else if (start == "end" || start == "to" || start === false) pos = range.to(); - else pos = range.from(); - return pos; - }, - listSelections: function() { return this.sel.ranges; }, - somethingSelected: function() {return this.sel.somethingSelected();}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads, options)); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - extendSelections(this, map(this.sel.ranges, f), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - if (!ranges.length) return; - for (var i = 0, out = []; i < ranges.length; i++) - out[i] = new Range(clipPos(this, ranges[i].anchor), - clipPos(this, ranges[i].head)); - if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); - setSelection(this, normalizeSelection(out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) return lines; - else return lines.join(lineSep || "\n"); - }, - getSelections: function(lineSep) { - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) sel = sel.join(lineSep || "\n"); - parts[i] = sel; - } - return parts; - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - dup[i] = code; - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i = changes.length - 1; i >= 0; i--) - makeChange(this, changes[i]); - if (newSel) setSelectionReplaceHistory(this, newSel); - else if (this.cm) ensureCursorVisible(this.cm); - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend;}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; - for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; - return {undo: done, redo: undone}; - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration);}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)}; - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) line[prop] = cls; - else if (classTest(cls).test(line[prop])) return false; - else line[prop] += " " + cls; - return true; - }); - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) return false; - else if (cls == null) line[prop] = null; - else { - var found = cur.match(classTest(cls)); - if (!found) return false; - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - removeLineWidget: function(widget) { widget.clear(); }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - markers.push(span.marker.parent || span.marker); - } - return markers; - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo = from.line; - this.iter(from.line, to.line + 1, function(line) { - var spans = line.markedSpans; - if (spans) for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(lineNo == from.line && from.ch > span.to || - span.from == null && lineNo != from.line|| - lineNo == to.line && span.from > to.ch) && - (!filter || filter(span.marker))) - found.push(span.marker.parent || span.marker); - } - ++lineNo; - }); - return found; - }, - getAllMarks: function() { - var markers = []; - this.iter(function(line) { - var sps = line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) - if (sps[i].from != null) markers.push(sps[i].marker); - }); - return markers; - }, - - posFromIndex: function(off) { - var ch, lineNo = this.first; - this.iter(function(line) { - var sz = line.text.length + 1; - if (sz > off) { ch = off; return true; } - off -= sz; - ++lineNo; - }); - return clipPos(this, Pos(lineNo, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) return 0; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + 1; - }); - return index; - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - - linkedDoc: function(options) { - if (!options) options = {}; - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) from = options.from; - if (options.to != null && options.to < to) to = options.to; - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); - if (options.sharedHist) copy.history = this.history; - (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function(other) { - if (other instanceof CodeMirror) other = other.doc; - if (this.linked) for (var i = 0; i < this.linked.length; ++i) { - var link = this.linked[i]; - if (link.doc != other) continue; - this.linked.splice(i, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode;}, - getEditor: function() {return this.cm;} - }); - - // Public alias. - Doc.prototype.eachLine = Doc.prototype.iter; - - // Set up methods on CodeMirror's prototype to redirect to the editor's document. - var dontDelegate = "iter insert remove copy getEditor".split(" "); - for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - CodeMirror.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments);}; - })(Doc.prototype[prop]); - - eventMixin(Doc); - - // Call f for all linked documents. - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) continue; - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) continue; - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } - } - propagate(doc, null, true); - } - - // Attach a document to an editor. - function attachDoc(cm, doc) { - if (doc.cm) throw new Error("This document is already in use."); - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - if (!cm.options.lineWrapping) findMaxLine(cm); - cm.options.mode = doc.modeOption; - regChange(cm); - } - - // LINE UTILITIES - - // Find the line object corresponding to the given line number. - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); - for (var chunk = doc; !chunk.lines;) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break; } - n -= sz; - } - } - return chunk.lines[n]; - } - - // Get the part of a document between two positions, as an array of - // strings. - function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function(line) { - var text = line.text; - if (n == end.line) text = text.slice(0, end.ch); - if (n == start.line) text = text.slice(start.ch); - out.push(text); - ++n; - }); - return out; - } - // Get the lines between from and to, as array of strings. - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function(line) { out.push(line.text); }); - return out; - } - - // Update the height of a line, propagating the height change - // upwards to parent nodes. - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) for (var n = line; n; n = n.parent) n.height += diff; - } - - // Given a line object, find its line number by walking up through - // its parent links. - function lineNo(line) { - if (line.parent == null) return null; - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) break; - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first; - } - - // Find the line at the given vertical position, using the height - // information in the document tree. - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i = 0; i < chunk.children.length; ++i) { - var child = chunk.children[i], ch = child.height; - if (h < ch) { chunk = child; continue outer; } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) break; - h -= lh; - } - return n + i; - } - - - // Find the height above the given line. - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) break; - else h += line.height; - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i = 0; i < p.children.length; ++i) { - var cur = p.children[i]; - if (cur == chunk) break; - else h += cur.height; - } - } - return h; - } - - // Get the bidi ordering for the given line (and cache it). Returns - // false for lines that are fully left-to-right, and an array of - // BidiSpan objects otherwise. - function getOrder(line) { - var order = line.order; - if (order == null) order = line.order = bidiOrdering(line.text); - return order; - } - - // HISTORY - - function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1; - } - - // Create a history change event from an updateDoc-style change - // object. - function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); - return histChange; - } - - // Pop all selection events off the end of a history array. Stop at - // a change event. - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) array.pop(); - else break; - } - } - - // Find the top change event in the history. Pop off selection - // events that are in the way. - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - - // Register a change in the history. Merges changes that are within - // a single operation, ore are close together with an origin that - // allows merging (starting with "+") into a single event. - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - var last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - pushSelectionToHistory(doc.sel, hist.done); - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) hist.done.shift(); - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) signal(doc, "historyAdded"); - } - - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - - // Called whenever the selection changes, sets the new selection as - // the pending selection in the history, and pushes the old pending - // selection into the 'done' array when it was significantly - // different (in number of selected ranges, emptiness, or time). - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - hist.done[hist.done.length - 1] = sel; - else - pushSelectionToHistory(sel, hist.done); - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - clearSelectionEvents(hist.undone); - } - - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - dest.push(sel); - } - - // Used to store marked span information in the history. - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { - if (line.markedSpans) - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - ++n; - }); - } - - // When un/re-doing restores text containing marked spans, those - // that have been explicitly cleared should not be restored. - function removeClearedSpans(spans) { - if (!spans) return null; - for (var i = 0, out; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } - else if (out) out.push(spans[i]); - } - return !out ? spans : out.length ? out : null; - } - - // Retrieve and filter the old marked spans stored in a change event. - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) return null; - for (var i = 0, nw = []; i < change.text.length; ++i) - nw.push(removeClearedSpans(found[i])); - return nw; - } - - // Used both to provide a JSON-safe object in .getHistory, and, when - // detaching a document, to split the history in two - function copyHistoryArray(events, newGroup, instantiateSel) { - for (var i = 0, copy = []; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m; - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } - } - } - return copy; - } - - // Rebasing/resetting history to deal with externally-sourced changes - - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - - // Tries to rebase an array of history events given a change in the - // document. If the change touches the same lines as the event, the - // event, and everything 'behind' it, is discarded. If the change is - // before the event, the event's positions are updated. Uses a - // copy-on-write scheme for the positions, to avoid having to - // reallocate them all on every rebase, but also avoid problems with - // shared position objects being unsafely updated. - function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j = 0; j < sub.changes.length; ++j) { - var cur = sub.changes[j]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } - } - - function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - - // EVENT UTILITIES - - // Due to the fact that we still support jurassic IE versions, some - // compatibility wrappers are needed. - - var e_preventDefault = CodeMirror.e_preventDefault = function(e) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - }; - var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { - if (e.stopPropagation) e.stopPropagation(); - else e.cancelBubble = true; - }; - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; - - function e_target(e) {return e.target || e.srcElement;} - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) b = 1; - else if (e.button & 2) b = 3; - else if (e.button & 4) b = 2; - } - if (mac && e.ctrlKey && b == 1) b = 3; - return b; - } - - // EVENT HANDLING - - // Lightweight event framework. on/off also work on DOM nodes, - // registering native DOM handlers. - - var on = CodeMirror.on = function(emitter, type, f) { - if (emitter.addEventListener) - emitter.addEventListener(type, f, false); - else if (emitter.attachEvent) - emitter.attachEvent("on" + type, f); - else { - var map = emitter._handlers || (emitter._handlers = {}); - var arr = map[type] || (map[type] = []); - arr.push(f); - } - }; - - var off = CodeMirror.off = function(emitter, type, f) { - if (emitter.removeEventListener) - emitter.removeEventListener(type, f, false); - else if (emitter.detachEvent) - emitter.detachEvent("on" + type, f); - else { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - for (var i = 0; i < arr.length; ++i) - if (arr[i] == f) { arr.splice(i, 1); break; } - } - }; - - var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); - }; - - var orphanDelayedCallbacks = null; - - // Often, we want to signal events at a point where we are in the - // middle of some work, but don't want the handler to start calling - // other methods on the editor, which might be in an inconsistent - // state or simply not expect any other events to happen. - // signalLater looks whether there are any handlers, and schedules - // them to be executed when the last operation ends, or, if no - // operation is active, when a timeout fires. - function signalLater(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - function bnd(f) {return function(){f.apply(null, args);};}; - for (var i = 0; i < arr.length; ++i) - list.push(bnd(arr[i])); - } - - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) delayed[i](); - } - - // The DOM events that CodeMirror handles can be overridden by - // registering a (non-DOM) handler on the editor for the event name, - // and preventDefault-ing the event in that handler. - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) return; - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) - set.push(arr[i]); - } - - function hasHandler(emitter, type) { - var arr = emitter._handlers && emitter._handlers[type]; - return arr && arr.length > 0; - } - - // Add on and off methods to a constructor's prototype, to make - // registering events on such objects more convenient. - function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; - } - - // MISC UTILITIES - - // Number of pixels added to scroller and sizer to hide scrollbar - var scrollerGap = 30; - - // Returned or thrown by various protocols to signal 'I'm not - // handling this'. - var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; - - // Reused option objects for setSelection & friends - var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; - - function Delayed() {this.id = null;} - Delayed.prototype.set = function(ms, f) { - clearTimeout(this.id); - this.id = setTimeout(f, ms); - }; - - // Counts the column offset in a string, taking tabs into account. - // Used mostly to find indentation. - var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) end = string.length; - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - return n + (end - i); - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } - }; - - // The inverse of countColumn -- find the offset that corresponds to - // a particular column. - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) nextTab = string.length; - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - return pos + Math.min(skipped, goal - col); - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) return pos; - } - } - - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) - spaceStrs.push(lst(spaceStrs) + " "); - return spaceStrs[n]; - } - - function lst(arr) { return arr[arr.length-1]; } - - var selectInput = function(node) { node.select(); }; - if (ios) // Mobile Safari apparently has a bug where select() is broken. - selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; - else if (ie) // Suppress mysterious IE10 errors - selectInput = function(node) { try { node.select(); } catch(_e) {} }; - - function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - if (array[i] == elt) return i; - return -1; - } - function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); - return out; - } - - function nothing() {} - - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) copyObj(props, inst); - return inst; - }; - - function copyObj(obj, target, overwrite) { - if (!target) target = {}; - for (var prop in obj) - if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - target[prop] = obj[prop]; - return target; - } - - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args);}; - } - - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - var isWordCharBasic = CodeMirror.isWordChar = function(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - }; - function isWordChar(ch, helper) { - if (!helper) return isWordCharBasic(ch); - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; - return helper.test(ch); - } - - function isEmpty(obj) { - for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; - return true; - } - - // Extending unicode characters. A series of a non-extending char + - // any number of extending chars is treated as a single unit as far - // as editing and measuring is concerned. This is not fully correct, - // since some scripts/fonts/browsers also treat other configurations - // of code points as a group. - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } - - // DOM UTILITIES - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) e.className = className; - if (style) e.style.cssText = style; - if (typeof content == "string") e.appendChild(document.createTextNode(content)); - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); - return e; - } - - var range; - if (document.createRange) range = function(node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r; - }; - else range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r; } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - e.removeChild(e.firstChild); - return e; - } - - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - - var contains = CodeMirror.contains = function(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - child = child.parentNode; - if (parent.contains) - return parent.contains(child); - do { - if (child.nodeType == 11) child = child.host; - if (child == parent) return true; - } while (child = child.parentNode); - }; - - function activeElt() { return document.activeElement; } - // Older versions of IE throws unspecified error when touching - // document.activeElement in some cases (during loading, in iframe) - if (ie && ie_version < 11) activeElt = function() { - try { return document.activeElement; } - catch(e) { return document.body; } - }; - - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } - var rmClass = CodeMirror.rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - var addClass = CodeMirror.addClass = function(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; - }; - function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; - return b; - } - - // WINDOW-WIDE EVENTS - - // These must be handled carefully, because naively registering a - // handler for each editor will cause the editors to never be - // garbage collected. - - function forEachCodeMirror(f) { - if (!document.body.getElementsByClassName) return; - var byClass = document.body.getElementsByClassName("CodeMirror"); - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) f(cm); - } - } - - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) return; - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function() { - if (resizeTimer == null) resizeTimer = setTimeout(function() { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function() { - forEachCodeMirror(onBlur); - }); - } - - // FEATURE DETECTION - - // Detect drag-and-drop - var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) return false; - var div = elt('div'); - return "draggable" in div || "dragDrop" in div; - }(); - - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node; - } - - // Feature-detect IE's crummy client rect reporting for bidi text - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) return badBidiRects; - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) - var r1 = range(txt, 1, 2).getBoundingClientRect(); - return badBidiRects = (r1.right - r0.right < 3); - } - - // See if "".split is the broken IE version, if so, provide an - // alternative way to split lines. - var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) nl = string.length; - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function(string){return string.split(/\r\n?|\n/);}; - - var hasSelection = window.getSelection ? function(te) { - try { return te.selectionStart != te.selectionEnd; } - catch(e) { return false; } - } : function(te) { - try {var range = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range || range.parentElement() != te) return false; - return range.compareEndPoints("StartToEnd", range) != 0; - }; - - var hasCopyEvent = (function() { - var e = elt("div"); - if ("oncopy" in e) return true; - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - })(); - - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) return badZoomedRects; - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - - // KEY NAMES - - var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; - CodeMirror.keyNames = keyNames; - (function() { - // Number keys - for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); - // Alphabetic keys - for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); - // Function keys - for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; - })(); - - // BIDI HELPERS - - function iterateBidiSections(order, from, to, f) { - if (!order) return f(from, to, "ltr"); - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); - found = true; - } - } - if (!found) f(from, to, "ltr"); - } - - function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } - function bidiRight(part) { return part.level % 2 ? part.from : part.to; } - - function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } - function lineRight(line) { - var order = getOrder(line); - if (!order) return line.text.length; - return bidiRight(lst(order)); - } - - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) lineN = lineNo(visual); - var order = getOrder(visual); - var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); - return Pos(lineN, ch); - } - function lineEnd(cm, lineN) { - var merged, line = getLine(cm.doc, lineN); - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - lineN = null; - } - var order = getOrder(line); - var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); - return Pos(lineN == null ? lineNo(line) : lineN, ch); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS); - } - return start; - } - - function compareBidiLevel(order, a, b) { - var linedir = order[0].level; - if (a == linedir) return true; - if (b == linedir) return false; - return a < b; - } - var bidiOther; - function getBidiPartAt(order, pos) { - bidiOther = null; - for (var i = 0, found; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < pos && cur.to > pos) return i; - if ((cur.from == pos || cur.to == pos)) { - if (found == null) { - found = i; - } else if (compareBidiLevel(order, cur.level, order[found].level)) { - if (cur.from != cur.to) bidiOther = found; - return i; - } else { - if (cur.from != cur.to) bidiOther = i; - return found; - } - } - } - return found; - } - - function moveInLine(line, pos, dir, byUnit) { - if (!byUnit) return pos + dir; - do pos += dir; - while (pos > 0 && isExtendingChar(line.text.charAt(pos))); - return pos; - } - - // This is needed in order to move 'visually' through bi-directional - // text -- i.e., pressing left should make the cursor go left, even - // when in RTL text. The tricky part is the 'jumps', where RTL and - // LTR text touch each other. This often requires the cursor offset - // to move more than one unit, in order to visually move one unit. - function moveVisually(line, start, dir, byUnit) { - var bidi = getOrder(line); - if (!bidi) return moveLogically(line, start, dir, byUnit); - var pos = getBidiPartAt(bidi, start), part = bidi[pos]; - var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); - - for (;;) { - if (target > part.from && target < part.to) return target; - if (target == part.from || target == part.to) { - if (getBidiPartAt(bidi, target) == pos) return target; - part = bidi[pos += dir]; - return (dir > 0) == part.level % 2 ? part.to : part.from; - } else { - part = bidi[pos += dir]; - if (!part) return null; - if ((dir > 0) == part.level % 2) - target = moveInLine(line, part.to, -1, byUnit); - else - target = moveInLine(line, part.from, 1, byUnit); - } - } - } - - function moveLogically(line, start, dir, byUnit) { - var target = start + dir; - if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; - return target < 0 || target > line.text.length ? null : target; - } - - // Bidirectional ordering algorithm - // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm - // that this (partially) implements. - - // One-char codes used for character types: - // L (L): Left-to-Right - // R (R): Right-to-Left - // r (AL): Right-to-Left Arabic - // 1 (EN): European Number - // + (ES): European Number Separator - // % (ET): European Number Terminator - // n (AN): Arabic Number - // , (CS): Common Number Separator - // m (NSM): Non-Spacing Mark - // b (BN): Boundary Neutral - // s (B): Paragraph Separator - // t (S): Segment Separator - // w (WS): Whitespace - // N (ON): Other Neutrals - - // Returns null if characters are ordered as they appear - // (left-to-right), or an array of sections ({from, to, level} - // objects) in the order in which they occur visually. - var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6ff - var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; - function charType(code) { - if (code <= 0xf7) return lowTypes.charAt(code); - else if (0x590 <= code && code <= 0x5f4) return "R"; - else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); - else if (0x6ee <= code && code <= 0x8ac) return "r"; - else if (0x2000 <= code && code <= 0x200b) return "w"; - else if (code == 0x200c) return "b"; - else return "L"; - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - // Browsers seem to always treat the boundaries of block elements as being L. - var outerType = "L"; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str) { - if (!bidiRE.test(str)) return false; - var len = str.length, types = []; - for (var i = 0, type; i < len; ++i) - types.push(type = charType(str.charCodeAt(i))); - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i = 0, prev = outerType; i < len; ++i) { - var type = types[i]; - if (type == "m") types[i] = prev; - else prev = type; - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (type == "1" && cur == "r") types[i] = "n"; - else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i = 1, prev = types[0]; i < len - 1; ++i) { - var type = types[i]; - if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; - else if (type == "," && prev == types[i+1] && - (prev == "1" || prev == "n")) types[i] = prev; - prev = type; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i = 0; i < len; ++i) { - var type = types[i]; - if (type == ",") types[i] = "N"; - else if (type == "%") { - for (var end = i + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (cur == "L" && type == "1") types[i] = "L"; - else if (isStrong.test(type)) cur = type; - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i = 0; i < len; ++i) { - if (isNeutral.test(types[i])) { - for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} - var before = (i ? types[i-1] : outerType) == "L"; - var after = (end < len ? types[end] : outerType) == "L"; - var replace = before || after ? "L" : "R"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i = 0; i < len;) { - if (countsAsLeft.test(types[i])) { - var start = i; - for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} - order.push(new BidiSpan(0, start, i)); - } else { - var pos = i, at = order.length; - for (++i; i < len && types[i] != "L"; ++i) {} - for (var j = pos; j < i;) { - if (countsAsNum.test(types[j])) { - if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); - var nstart = j; - for (++j; j < i && countsAsNum.test(types[j]); ++j) {} - order.splice(at, 0, new BidiSpan(2, nstart, j)); - pos = j; - } else ++j; - } - if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); - } - } - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - if (order[0].level != lst(order).level) - order.push(new BidiSpan(order[0].level, len, len)); - - return order; - }; - })(); - - // THE END - - CodeMirror.version = "5.1.1"; - - return CodeMirror; -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/policy-view.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/policy-view.js deleted file mode 100644 index ad5b87a5e..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/policy-view.js +++ /dev/null @@ -1,128 +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 skipStep = {}; -var policy = {}; - - -skipStep["policy-platform"] = function (policyPayloadObj) { - console.log(policyPayloadObj); - policy["name"] = policyPayloadObj["policyName"]; - policy["platform"] = policyPayloadObj["profile"]["deviceType"]["name"]; - policy["platformId"] = policyPayloadObj["profile"]["deviceType"]["id"]; - var userRoleInput = $("#user-roles-input"); - var ownershipInput = $("#ownership-input"); - var userInput = $("#users-select-field"); - var actionInput = $("#action-input"); - var policyNameInput = $("#policy-name-input"); - var policyDescriptionInput = $("#policy-description-input"); - userRoleInput.val(policyPayloadObj.roles); - userInput.val(policyPayloadObj.users); - ownershipInput.val(policyPayloadObj.ownershipType); - actionInput.val(policyPayloadObj.compliance); - policyNameInput.val(policyPayloadObj["policyName"]); - policyDescriptionInput.val(policyPayloadObj["description"]); - // updating next-page wizard title with selected platform - $("#policy-heading").text(policy["platform"].toUpperCase() + " POLICY - " + policy["name"].toUpperCase()); - $("#policy-platform").text(policy["platform"].toUpperCase()); - $("#policy-assignment").text(policyPayloadObj.ownershipType); - $("#policy-action").text(policyPayloadObj.compliance.toUpperCase()); - $("#policy-description").text(policyPayloadObj["description"]); - var policyStatus = "Active"; - if(policyPayloadObj["active"] == true && policyPayloadObj["updated"] == true) { - policyStatus = ' Active/Updated'; - } else if(policyPayloadObj["active"] == true && policyPayloadObj["updated"] == false) { - policyStatus = ' Active'; - } else if(policyPayloadObj["active"] == false && policyPayloadObj["updated"] == true) { - policyStatus = ' Inactive/Updated'; - } else if(policyPayloadObj["active"] == false && policyPayloadObj["updated"] == false) { - policyStatus = ' Inactive'; - } - - $("#policy-status").html(policyStatus); - - if(policyPayloadObj.users.length > 0) { - $("#policy-users").text(policyPayloadObj.users.toString().split(",").join(", ")); - } else { - $("#users-row").addClass("hidden"); - } - - if(policyPayloadObj.roles.length > 0) { - $("#policy-roles").text(policyPayloadObj.roles.toString().split(",").join(", ")); - } else { - $("#roles-row").addClass("hidden"); - } - var profileFeaturesList = policyPayloadObj["profile"]["profileFeaturesList"]; - if (profileFeaturesList.length > 0){ - var content = profileFeaturesList[0]["content"]; - var policyDefinitionObj = JSON.parse(content); - window.queryEditor.setValue(policyDefinitionObj["policyDefinition"]); - } -}; - - -// End of functions related to grid-input-view - -/** - * This method will return query parameter value given its name. - * @param name Query parameter name - * @returns {string} Query parameter value - */ -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -$(document).ready(function () { - - window.queryEditor = CodeMirror.fromTextArea(document.getElementById('policy-definition-input'), { - mode: MIME_TYPE_SIDDHI_QL, - indentWithTabs: true, - smartIndent: true, - lineNumbers: true, - matchBrackets: true, - autofocus: true, - readOnly: true, - extraKeys: { - "Shift-2": function (cm) { - insertStr(cm, cm.getCursor(), '@'); - CodeMirror.showHint(cm, getAnnotationHints); - }, - "Ctrl-Space": "autocomplete" - } - }); - - var policyPayloadObj; - invokerUtil.get( - "/api/device-mgt/v1.0/policies/" + getParameterByName("id"), - // on success - function (data) { - // console.log("success: " + JSON.stringify(data)); - data = JSON.parse(data); - policyPayloadObj = data["responseContent"]; - skipStep["policy-platform"](policyPayloadObj); - }, - // on error - function () { - // should be redirected to an error page - } - ); - -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/sql.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/sql.js deleted file mode 100644 index 9f92fbc93..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/public/js/sql.js +++ /dev/null @@ -1,310 +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. - */ - -/*Annotations, Annotation Names and relevant tokens*/ -var ANNOTATION_IMPORT = "Import"; -var ANNOTATION_EXPORT = "Export"; - -var ANNOTATION_TOKEN_AT = "@"; -var ANNOTATION_TOKEN_OPENING_BRACKET = "("; -var ANNOTATION_TOKEN_CLOSING_BRACKET = ")"; - -var REGEX_LINE_STARTING_WITH_PLAN = /^@Plan.*/g; -var REGEX_LINE_STARTING_WITH_SINGLE_LINE_COMMENT = /^--.*/g; -var REGEX_LINE_STARTING_WITH_MULTI_LINE_COMMENT = /^\/\*.*\*\//g; -var REGEX_LINE_STARTING_WITH_IMPORT_STATEMENT = /^@Import.*/g; - -var SIDDHI_STATEMENT_DELIMETER = ";"; -var SIDDHI_LINE_BREAK = "\n"; -var SIDDHI_LINE_BREAK_CHARACTER = '\n'; -var SIDDHI_SINGLE_QUOTE = "'"; -var SIDDHI_SPACE_LITERAL = " "; - -var SIDDHI_LITERAL_DEFINE_STREAM = "define stream"; - -var MIME_TYPE_SIDDHI_QL = "text/siddhi-ql"; - - -CodeMirror.defineMode("sql", function (config, parserConfig) { - "use strict"; - - var client = parserConfig.client || {}, - atoms = parserConfig.atoms || {"false":true, "true":true, "null":true}, - builtin = parserConfig.builtin || {}, - keywords = parserConfig.keywords || {}, - operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, - support = parserConfig.support || {}, - hooks = parserConfig.hooks || {}, - dateSQL = parserConfig.dateSQL || {"date":true, "time":true, "timestamp":true}; - - function tokenBase(stream, state) { - var ch = stream.next(); - - // call hooks from the mime type - if (hooks[ch]) { - var result = hooks[ch](stream, state); - if (result !== false) return result; - } - - if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { - // numbers - // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html - stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); - support.decimallessFloat == true && stream.eat('.'); - return "number"; - } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { - // strings - // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html - state.tokenize = tokenLiteral(ch); - return state.tokenize(stream, state); - } else if (/^[\(\),\;\[\]]/.test(ch)) { - // no highlightning - return null; - } else if ((ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { - // 1-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - stream.skipToEnd(); - return "comment"; - } else if (ch == "/" && stream.eat("*")) { - // multi-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - state.tokenize = tokenComment; - return state.tokenize(stream, state); - } else if (ch == ".") { - // .1 for 0.1 - if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { - return "number"; - } - } else { - stream.eatWhile(/^[_\-\w\d]/); /* Character '-' will also be eaten, to prevent the highlight happening in keywords being embedded in non-keyword strings. For example, 'all' in 'all-nonkeyword' */ - var word = stream.current().toLowerCase(); // Added toLowerCase() to highlight keywords in a case insensitive manner. - // dates (standard SQL syntax) - // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html - if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) - return "number"; - if (atoms.hasOwnProperty(word)) return "atom"; - if (builtin.hasOwnProperty(word)) return "builtin"; - if (keywords.hasOwnProperty(word)) return "keyword"; - if (client.hasOwnProperty(word)) return "string-2"; - return null; - } - } - - // 'string', with char specified in quote escaped by '\' - function tokenLiteral(quote) { - return function (stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && ch == "\\"; - } - return "string"; - }; - } - - function tokenComment(stream, state) { - while (true) { - if (stream.skipTo("*")) { - stream.next(); - if (stream.eat("/")) { - state.tokenize = tokenBase; - break; - } - } else { - stream.skipToEnd(); - break; - } - } - return "comment"; - } - - function pushContext(stream, state, type) { - state.context = { - prev:state.context, - indent:stream.indentation(), - col:stream.column(), - type:type - }; - } - - function popContext(state) { - state.indent = state.context.indent; - state.context = state.context.prev; - } - - return { - startState:function () { - return {tokenize:tokenBase, context:null}; - }, - - token:function (stream, state) { - if (stream.sol()) { - if (state.context && state.context.align == null) - state.context.align = false; - } - if (stream.eatSpace()) return null; - - var style = state.tokenize(stream, state); - if (style == "comment") return style; - - if (state.context && state.context.align == null) - state.context.align = true; - - var tok = stream.current(); - if (tok == "(") - pushContext(stream, state, ")"); - else if (tok == "[") - pushContext(stream, state, "]"); - else if (state.context && state.context.type == tok) - popContext(state); - return style; - }, - - indent:function (state, textAfter) { - var cx = state.context; - if (!cx) return CodeMirror.Pass; - var closing = textAfter.charAt(0) == cx.type; - if (cx.align) return cx.col + (closing ? 0 : 1); - else return cx.indent + (closing ? 0 : config.indentUnit); - }, - - blockCommentStart: "/*", - blockCommentEnd: "*/", - lineComment: "--" - }; -}); - -(function () { - "use strict"; - - // `identifier` - function hookIdentifier(stream) { - // MySQL/MariaDB identifiers - // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html - var ch; - while ((ch = stream.next()) != null) { - if (ch == "`" && !stream.eat("`")) return "variable-2"; - } - stream.backUp(stream.current().length - 1); - return stream.eatWhile(/\w/) ? "variable-2" : null; - } - - // variable token - function hookVar(stream) { - // variables - // @@prefix.varName @varName - // varName can be quoted with ` or ' or " - // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html - if (stream.eat("@")) { - stream.match(/^session\./); - stream.match(/^local\./); - stream.match(/^global\./); - } - - if (stream.eat("'")) { - stream.match(/^.*'/); - return "variable-2"; - } else if (stream.eat('"')) { - stream.match(/^.*"/); - return "variable-2"; - } else if (stream.eat("`")) { - stream.match(/^.*`/); - return "variable-2"; - } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { - return "variable-2"; - } - return null; - } - - ; - - // short client keyword token - function hookClient(stream) { - // \N means NULL - // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html - if (stream.eat("N")) { - return "atom"; - } - // \g, etc - // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html - return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; - } - - // these keywords are used by all SQL dialects (however, a mode can still overwrite it) - var sqlKeywordsWithoutSymbols = "all and as begin by contains define delete end events " + - "every first for from full group having inner insert into join last " + - "left not of on or outer output partition raw return right select snapshot stream table "; - var sqlKeywords = ", : ? # ( ) " + sqlKeywordsWithoutSymbols; - var builtIn = "bool double float int long object string "; - var atoms = "false true null "; - var dateSQL = "days hours milliseconds minutes months seconds "; - var allSqlSuggestions = sqlKeywordsWithoutSymbols + builtIn + atoms + dateSQL; - - // turn a space-separated list into an array - function set(str) { - var obj = {}, words = str.split(" "); - for (var i = 0; i < words.length; ++i) obj[words[i]] = true; - return obj; - } - - // A generic SQL Mode. It's not a standard, it just try to support what is generally supported - CodeMirror.defineMIME(MIME_TYPE_SIDDHI_QL, { - name:"sql", - keywords:set(sqlKeywords), - builtin:set(builtIn), - atoms:set(atoms), - operatorChars:/^[*+%<>!=/]/, - dateSQL:set(dateSQL), - support:set("doubleQuote "), - allSqlSuggestions:set(allSqlSuggestions) - }); -}()); - -/* - How Properties of Mime Types are used by SQL Mode - ================================================= - - keywords: - A list of keywords you want to be highlighted. - functions: - A list of function names you want to be highlighted. - builtin: - A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). - operatorChars: - All characters that must be handled as operators. - client: - Commands parsed and executed by the client (not the server). - support: - A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. - * ODBCdotTable: .tableName - * zerolessFloat: .1 - * doubleQuote - * nCharCast: N'string' - * charsetCast: _utf8'string' - * commentHash: use # char for comments - * commentSlashSlash: use // for comments - * commentSpaceRequired: require a space after -- for comments - atoms: - Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: - UNKNOWN, INFINITY, UNDERFLOW, NaN... - dateSQL: - Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. - */ \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.hbs deleted file mode 100644 index 97e4c9394..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.hbs +++ /dev/null @@ -1,112 +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/codemirror.css"}} -{{/zone}} -{{#zone "contentTitle"}} -
-
- -
-
-{{/zone}} - - -
- -
-
-
-
-
- Policy Overview -
- {{#defineZone "policy-detail-properties"}} - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Platform -
Assignment Group -
Action upon - non-compliance -
Status
Assigned Users
Assigned Roles
- {{/defineZone}} -
- Description -
-
-
-
-
- -
- Profile Information -
-
- -
-
-
- -
-
-
-
-
-
-
- -
-
- -
-{{#zone "bottomJs"}} - {{js "js/codemirror.js"}} - {{js "js/sql.js"}} - {{js "js/policy-view.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.js deleted file mode 100644 index 3f4446f30..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/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 log = new Log("policy-view-edit-unit backend js"); - log.debug("calling policy-view-edit-unit"); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - context.roles = userModule.getRoles().content; - return context; -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.json deleted file mode 100644 index fd2590129..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.view/view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/css/codemirror.css b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/css/codemirror.css deleted file mode 100644 index e749a5211..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/css/codemirror.css +++ /dev/null @@ -1,342 +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. - */ - -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; - left: -30px; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror div.CodeMirror-cursor { - border-left: 1px solid black; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursor { - width: auto; - border: 0; - background: #7e7; -} -.CodeMirror.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -@-moz-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@-webkit-keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} -@keyframes blink { - 0% { background: #7e7; } - 50% { background: none; } - 100% { background: #7e7; } -} - -/* Can style cursor different in overwrite (non-insert) mode */ -div.CodeMirror-overwrite div.CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-ruler { - border-left: 1px solid #ccc; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3 {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 30px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; margin-right: -30px; - padding-bottom: 30px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actuall scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - /* Hack to make IE7 behave */ - *zoom:1; - *display:inline; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - height: 100%; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; - left: -30px; -} -.CodeMirror-gutter-wrapper { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; -} -.CodeMirror-wrap pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - overflow: auto; -} - -.CodeMirror-widget {} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} -.CodeMirror-measure pre { position: static; } - -.CodeMirror div.CodeMirror-cursor { - position: absolute; - border-right: none; - width: 0; -} - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror ::selection { background: #d7d4f0; } -.CodeMirror ::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background: #ffa; - background: rgba(255, 255, 0, .4); -} - -/* IE7 hack to prevent it from returning funny offsetTops on the spans */ -.CodeMirror span { *vertical-align: text-bottom; } - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/codemirror.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/codemirror.js deleted file mode 100644 index 20f3f95ed..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/codemirror.js +++ /dev/null @@ -1,8720 +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 is CodeMirror (http://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - module.exports = mod(); - else if (typeof define == "function" && define.amd) // AMD - return define([], mod); - else // Plain browser env - this.CodeMirror = mod(); -})(function() { - "use strict"; - - // BROWSER SNIFFING - - // Kludges for bugs and behavior differences that can't be feature - // detected are enabled based on userAgent etc sniffing. - - var gecko = /gecko\/\d/i.test(navigator.userAgent); - var ie_upto10 = /MSIE \d/.test(navigator.userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); - var ie = ie_upto10 || ie_11up; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); - var webkit = /WebKit\//.test(navigator.userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); - var chrome = /Chrome\//.test(navigator.userAgent); - var presto = /Opera\//.test(navigator.userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); - var phantom = /PhantomJS/.test(navigator.userAgent); - - var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); - // This is woefully incomplete. Suggestions for alternative methods welcome. - var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); - var mac = ios || /Mac/.test(navigator.platform); - var windows = /win/i.test(navigator.platform); - - var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) presto_version = Number(presto_version[1]); - if (presto_version && presto_version >= 15) { presto = false; webkit = true; } - // Some browsers use the wrong event properties to signal cmd/ctrl on OS X - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || (ie && ie_version >= 9); - - // Optimize some code when these features are not used. - var sawReadOnlySpans = false, sawCollapsedSpans = false; - - // EDITOR CONSTRUCTOR - - // A CodeMirror instance represents an editor. This is the object - // that user code is usually dealing with. - - function CodeMirror(place, options) { - if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - setGuttersForLineNumbers(options); - - var doc = options.value; - if (typeof doc == "string") doc = new Doc(doc, options.mode); - this.doc = doc; - - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input); - display.wrapper.CodeMirror = this; - updateGutters(this); - themeChanged(this); - if (options.lineWrapping) - this.display.wrapper.className += " CodeMirror-wrap"; - if (options.autofocus && !mobile) display.input.focus(); - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - }; - - var cm = this; - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || cm.hasFocus()) - setTimeout(bind(onFocus, this), 20); - else - onBlur(this); - - for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) - optionHandlers[opt](this, options[opt], Init); - maybeUpdateLineNumberWidth(this); - if (options.finishInit) options.finishInit(this); - for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - display.lineDiv.style.textRendering = "auto"; - } - - // DISPLAY CONSTRUCTOR - - // The display handles the DOM integration, both for input reading - // and content drawing. It holds references to DOM nodes and - // display-related state. - - function Display(place, doc, input) { - var d = this; - this.input = input; - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = elt("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; - - if (place) { - if (place.appendChild) place.appendChild(d.wrapper); - else place(d.wrapper); - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - - d.activeTouch = null; - - input.init(d); - } - - // STATE UPDATES - - // Used to get the editor into a consistent state again when options change. - - function loadMode(cm) { - cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - - function resetModeState(cm) { - cm.doc.iter(function(line) { - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - }); - cm.doc.frontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) regChange(cm); - } - - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function(){updateScrollbars(cm);}, 100); - } - - // Returns a function that estimates the height of a line, to use as - // first approximation until the line becomes visible (and is thus - // properly measurable). - function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function(line) { - if (lineIsHidden(cm.doc, line)) return 0; - - var widgetsHeight = 0; - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; - } - - if (wrapping) - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - else - return widgetsHeight + th; - }; - } - - function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function(line) { - var estHeight = est(line); - if (estHeight != line.height) updateLineHeight(line, estHeight); - }); - } - - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - - function guttersChanged(cm) { - updateGutters(cm); - regChange(cm); - setTimeout(function(){alignHorizontally(cm);}, 20); - } - - // Rebuild the gutter elements, ensure the margin to the left of the - // code matches their width. - function updateGutters(cm) { - var gutters = cm.display.gutters, specs = cm.options.gutters; - removeChildren(gutters); - for (var i = 0; i < specs.length; ++i) { - var gutterClass = specs[i]; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); - if (gutterClass == "CodeMirror-linenumbers") { - cm.display.lineGutter = gElt; - gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = i ? "" : "none"; - updateGutterSpace(cm); - } - - function updateGutterSpace(cm) { - var width = cm.display.gutters.offsetWidth; - cm.display.sizer.style.marginLeft = width + "px"; - } - - // Compute the character length of a line, taking into account - // collapsed ranges (see markText) that might hide parts, and join - // other lines onto it. - function lineLength(line) { - if (line.height == 0) return 0; - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found = merged.find(0, true); - len -= cur.text.length - found.from.ch; - cur = found.to.line; - len += cur.text.length - found.to.ch; - } - return len; - } - - // Find the longest line in the document. - function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function(line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - - // Make sure the gutters options contains the element - // "CodeMirror-linenumbers" when the lineNumbers option is true. - function setGuttersForLineNumbers(options) { - var found = indexOf(options.gutters, "CodeMirror-linenumbers"); - if (found == -1 && options.lineNumbers) { - options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); - } else if (found > -1 && !options.lineNumbers) { - options.gutters = options.gutters.slice(0); - options.gutters.splice(found, 1); - } - } - - // SCROLLBARS - - // Prepare DOM reads needed to update the scrollbars. Done in one - // shot to minimize update/measure roundtrips. - function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - - function NativeScrollbars(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - place(vert); place(horiz); - - on(vert, "scroll", function() { - if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); - }); - on(horiz, "scroll", function() { - if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); - }); - - this.checkedOverlay = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - - NativeScrollbars.prototype = copyObj({ - update: function(measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedOverlay && measure.clientHeight > 0) { - if (sWidth == 0) this.overlayHack(); - this.checkedOverlay = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; - }, - setScrollLeft: function(pos) { - if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; - }, - setScrollTop: function(pos) { - if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; - }, - overlayHack: function() { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.minHeight = this.vert.style.minWidth = w; - var self = this; - var barMouseDown = function(e) { - if (e_target(e) != self.vert && e_target(e) != self.horiz) - operation(self.cm, onMouseDown)(e); - }; - on(this.vert, "mousedown", barMouseDown); - on(this.horiz, "mousedown", barMouseDown); - }, - clear: function() { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - } - }, NativeScrollbars.prototype); - - function NullScrollbars() {} - - NullScrollbars.prototype = copyObj({ - update: function() { return {bottom: 0, right: 0}; }, - setScrollLeft: function() {}, - setScrollTop: function() {}, - clear: function() {} - }, NullScrollbars.prototype); - - CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function() { - if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); - }); - node.setAttribute("cm-not-content", "true"); - }, function(pos, axis) { - if (axis == "horizontal") setScrollLeft(cm, pos); - else setScrollTop(cm, pos); - }, cm); - if (cm.display.scrollbars.addClass) - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - - function updateScrollbars(cm, measure) { - if (!measure) measure = measureForScrollbars(cm); - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - updateHeightsInViewport(cm); - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } - } - - // Re-synchronize the fake scrollbars with the actual size of the - // content. - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else d.scrollbarFiller.style.display = ""; - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else d.gutterFiller.style.display = ""; - } - - // Compute the lines that are visible in a given viewport (defaults - // the the current scroll position). viewport may contain top, - // height, and ensure (see op.scrollToPos) properties. - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)}; - } - - // LINE NUMBERS - - // Re-align line numbers and gutter marks to compensate for - // horizontal scrolling. - function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) if (!view[i].hidden) { - if (cm.options.fixedGutter && view[i].gutter) - view[i].gutter.style.left = left; - var align = view[i].alignable; - if (align) for (var j = 0; j < align.length; j++) - align[j].style.left = left; - } - if (cm.options.fixedGutter) - display.gutters.style.left = (comp + gutterW) + "px"; - } - - // Used to ensure that the line number gutter is still the right - // size for the current document size. Returns true when an update - // is needed. - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) return false; - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm); - return true; - } - return false; - } - - function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)); - } - - // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, - // but using getBoundingClientRect to get a sub-pixel-accurate - // result. - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - - // DISPLAY DRAWING - - function DisplayUpdate(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - } - - DisplayUpdate.prototype.signal = function(emitter, type) { - if (hasHandler(emitter, type)) - this.events.push(arguments); - }; - DisplayUpdate.prototype.finish = function() { - for (var i = 0; i < this.events.length; i++) - signal.apply(null, this.events[i]); - }; - - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - - // Does the actual updating of the line display. Bails out - // (returning false) when there is nothing to be done and forced is - // false. - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false; - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - return false; - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); - if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - return false; - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var focused = activeElt(); - if (toUpdate > 4) display.lineDiv.style.display = "none"; - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) display.lineDiv.style.display = ""; - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true; - } - - function postUpdateDisplay(cm, update) { - var force = update.force, viewport = update.viewport; - for (var first = true;; first = false) { - if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { - force = true; - } else { - force = false; - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - break; - } - if (!updateDisplayIfNeeded(cm, update)) break; - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - } - - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } - } - - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - setDocumentHeight(cm, barMeasure); - updateScrollbars(cm, barMeasure); - update.finish(); - } - } - - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - var total = measure.docHeight + cm.display.barHeight; - cm.display.heightForcer.style.top = total + "px"; - cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; - } - - // Read the actual heights of the rendered lines, and update their - // stored heights to match. - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], height; - if (cur.hidden) continue; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - } - var diff = cur.line.height - height; - if (height < 2) height = textHeight(display); - if (diff > .001 || diff < -.001) { - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) for (var j = 0; j < cur.rest.length; j++) - updateWidgetHeight(cur.rest[j]); - } - } - } - - // Read and store the height of line widgets associated with the - // given line. - function updateWidgetHeight(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) - line.widgets[i].height = line.widgets[i].node.offsetHeight; - } - - // Do a bulk-read of the DOM positions and sizes needed to draw the - // view, so that we don't interleave reading and writing to the DOM. - function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; - width[cm.options.gutters[i]] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth}; - } - - // Sync the actual display DOM structure with display.view, removing - // nodes for lines that are no longer in view, and creating the ones - // that are not there yet, and updating the ones that are out of - // date. - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - node.style.display = "none"; - else - node.parentNode.removeChild(node); - return next; - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) { - } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) cur = rm(cur); - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) cur = rm(cur); - } - - // When an aspect of a line changes, a string is added to - // lineView.changes. This updates the relevant part of the line's - // DOM structure. - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") updateLineText(cm, lineView); - else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); - else if (type == "class") updateLineClasses(lineView); - else if (type == "widget") updateLineWidgets(cm, lineView, dims); - } - lineView.changes = null; - } - - // Lines with gutter elements, widgets or a background class need to - // be wrapped, and have the extra elements added to the wrapper div - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) lineView.node.style.zIndex = 2; - } - return lineView.node; - } - - function updateLineBackground(lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) cls += " CodeMirror-linebackground"; - if (lineView.background) { - if (cls) lineView.background.className = cls; - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - } - } - - // Wrapper around buildLineContent which will reuse the structure - // in display.externalMeasured when possible. - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - - // Redraw the line's text. Interacts with the background and text - // classes because the mode may output tokens that influence these - // classes. - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) lineView.node = built.pre; - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - - function updateLineClasses(lineView) { - updateLineBackground(lineView); - if (lineView.line.wrapClass) - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - else if (lineView.node != lineView.text) - lineView.node.className = ""; - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + - (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + - "px; width: " + dims.gutterTotalWidth + "px"); - cm.display.input.setUneditable(gutterWrap); - wrap.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) - gutterWrap.className += " " + lineView.line.gutterClass; - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " - + cm.display.lineNumInnerWidth + "px")); - if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { - var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; - if (found) - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + - dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) lineView.alignable = null; - for (var node = lineView.node.firstChild, next; node; node = next) { - var next = node.nextSibling; - if (node.className == "CodeMirror-linewidget") - lineView.node.removeChild(node); - } - insertLineWidgets(cm, lineView, dims); - } - - // Build a line's DOM representation from scratch - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) lineView.bgClass = built.bgClass; - if (built.textClass) lineView.textClass = built.textClass; - - updateLineClasses(lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node; - } - - // A lineView may contain multiple logical lines (when merged by - // collapsed spans). The widgets for all of them need to be drawn. - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); - } - - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) return; - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); - if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) - wrap.insertBefore(node, lineView.gutter || lineView.text); - else - wrap.appendChild(node); - signalLater(widget, "redraw"); - } - } - - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - - // POSITION OBJECT - - // A Pos instance represents a position within the text. - var Pos = CodeMirror.Pos = function(line, ch) { - if (!(this instanceof Pos)) return new Pos(line, ch); - this.line = line; this.ch = ch; - }; - - // Compare two positions, return 0 if they are the same, a negative - // number when a is less, and a positive number otherwise. - var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; - - function copyPos(x) {return Pos(x.line, x.ch);} - function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } - function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } - - // INPUT HANDLING - - function ensureFocus(cm) { - if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } - } - - function isReadOnly(cm) { - return cm.options.readOnly || cm.doc.cantEdit; - } - - // This will be set to an array of strings when copying, so that, - // when pasting, we know what kind of selections the copied text - // was made out of. - var lastCopied = null; - - function applyTextInput(cm, inserted, deleted, sel) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) sel = doc.sel; - - var textLines = splitLines(inserted), multiPaste = null; - // When pasing N lines into N selections, insert one line per selection - if (cm.state.pasteIncoming && sel.ranges.length > 1) { - if (lastCopied && lastCopied.join("\n") == inserted) - multiPaste = sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); - else if (textLines.length == sel.ranges.length) - multiPaste = map(textLines, function(l) { return [l]; }); - } - - // Normal behavior is to insert the new text into every selection - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range = sel.ranges[i]; - var from = range.from(), to = range.to(); - if (range.empty()) { - if (deleted && deleted > 0) // Handle deletion - from = Pos(from.line, from.ch - deleted); - else if (cm.state.overwrite && !cm.state.pasteIncoming) // Handle overwrite - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - } - var updateInput = cm.curOp.updateInput; - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, - origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - // When an 'electric' character is inserted, immediately trigger a reindent - if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && - cm.options.smartIndent && range.head.ch < 100 && - (!i || sel.ranges[i - 1].head.line != range.head.line)) { - var mode = cm.getModeAt(range.head); - var end = changeEnd(changeEvent); - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indentLine(cm, end.line, "smart"); - break; - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) - indentLine(cm, end.line, "smart"); - } - } - } - ensureCursorVisible(cm); - cm.curOp.updateInput = updateInput; - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = false; - } - - function copyableRanges(cm) { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return {text: text, ranges: ranges}; - } - - function disableBrowserMagic(field) { - field.setAttribute("autocorrect", "off"); - field.setAttribute("autocapitalize", "off"); - field.setAttribute("spellcheck", "false"); - } - - // TEXTAREA INPUT STYLE - - function TextareaInput(cm) { - this.cm = cm; - // See input.poll and input.reset - this.prevInput = ""; - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false; - // Self-resetting timeout for the poller - this.polling = new Delayed(); - // Tracks when input.reset has punted to just putting a short - // string into the textarea instead of the full selection. - this.inaccurateSelection = false; - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false; - }; - - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) te.style.width = "1000px"; - else te.setAttribute("wrap", "off"); - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) te.style.border = "1px solid black"; - disableBrowserMagic(te); - return div; - } - - TextareaInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = this.cm; - - // Wraps and hides input textarea - var div = this.wrapper = hiddenTextarea(); - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - var te = this.textarea = div.firstChild; - display.wrapper.insertBefore(div, display.wrapper.firstChild); - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) te.style.width = "0px"; - - on(te, "input", function() { - if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; - input.poll(); - }); - - on(te, "paste", function() { - // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 - // Add a char to the end of textarea before paste occur so that - // selection doesn't span to the end of textarea. - if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { - var start = te.selectionStart, end = te.selectionEnd; - te.value += "$"; - // The selection end needs to be set before the start, otherwise there - // can be an intermediate non-empty selection between the two, which - // can override the middle-click paste buffer on linux and cause the - // wrong thing to get pasted. - te.selectionEnd = end; - te.selectionStart = start; - cm.state.fakedLastChar = true; - } - cm.state.pasteIncoming = true; - input.fastPoll(); - }); - - function prepareCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (input.inaccurateSelection) { - input.prevInput = ""; - input.inaccurateSelection = false; - te.value = lastCopied.join("\n"); - selectInput(te); - } - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") cm.state.cutIncoming = true; - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - - on(display.scroller, "paste", function(e) { - if (eventInWidget(display, e)) return; - cm.state.pasteIncoming = true; - input.focus(); - }); - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function(e) { - if (!eventInWidget(display, e)) e_preventDefault(e); - }); - }, - - prepareSelection: function() { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc; - var result = prepareSelection(cm); - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result; - }, - - showSelection: function(drawn) { - var cm = this.cm, display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }, - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - reset: function(typing) { - if (this.contextMenuPending) return; - var minimal, selected, cm = this.cm, doc = cm.doc; - if (cm.somethingSelected()) { - this.prevInput = ""; - var range = doc.sel.primary(); - minimal = hasCopyEvent && - (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); - var content = minimal ? "-" : selected || cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) selectInput(this.textarea); - if (ie && ie_version >= 9) this.hasSelection = content; - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) this.hasSelection = null; - } - this.inaccurateSelection = minimal; - }, - - getField: function() { return this.textarea; }, - - supportsTouch: function() { return false; }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus(); } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } - }, - - blur: function() { this.textarea.blur(); }, - - resetPosition: function() { - this.wrapper.style.top = this.wrapper.style.left = 0; - }, - - receivedFocus: function() { this.slowPoll(); }, - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - slowPoll: function() { - var input = this; - if (input.pollingFast) return; - input.polling.set(this.cm.options.pollInterval, function() { - input.poll(); - if (input.cm.state.focused) input.slowPoll(); - }); - }, - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - fastPoll: function() { - var missed = false, input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) {missed = true; input.polling.set(60, p);} - else {input.pollingFast = false; input.slowPoll();} - } - input.polling.set(20, p); - }, - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - poll: function() { - var cm = this.cm, input = this.textarea, prevInput = this.prevInput; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (!cm.state.focused || (hasSelection(input) && !prevInput) || - isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) - return false; - // See paste handler for more on the fakedLastChar kludge - if (cm.state.pasteIncoming && cm.state.fakedLastChar) { - input.value = input.value.substring(0, input.value.length - 1); - cm.state.fakedLastChar = false; - } - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) return false; - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false; - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 0x200b && !prevInput) prevInput = "\u200b"; - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo"); } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; - - var self = this; - runInOp(cm, function() { - applyTextInput(cm, text.slice(same), prevInput.length - same); - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; - else self.prevInput = text; - }); - return true; - }, - - ensurePolled: function() { - if (this.pollingFast && this.poll()) this.pollingFast = false; - }, - - onKeyPress: function() { - if (ie && ie_version >= 9) this.hasSelection = null; - this.fastPoll(); - }, - - onContextMenu: function(e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea; - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) return; // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - - var oldCSS = te.style.cssText; - input.wrapper.style.position = "absolute"; - te.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + - "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + - (ie ? "rgba(255, 255, 255, .05)" : "transparent") + - "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) - display.input.focus(); - if (webkit) window.scrollTo(null, oldScrollY); - display.input.reset(); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) te.value = input.prevInput = " "; - input.contextMenuPending = true; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "\u200b" + (selected ? te.value : ""); - te.value = "\u21da"; // Used to catch context-menu undo - te.value = extval; - input.prevInput = selected ? "" : "\u200b"; - te.selectionStart = 1; te.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - input.contextMenuPending = false; - input.wrapper.style.position = "relative"; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); - var i = 0, poll = function() { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") - operation(cm, commands.selectAll)(cm); - else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); - else display.input.reset(); - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) prepareSelectAllHack(); - if (captureRightClick) { - e_stop(e); - var mouseup = function() { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }, - - setUneditable: nothing, - - needsContentAttribute: false - }, TextareaInput.prototype); - - // CONTENTEDITABLE INPUT STYLE - - function ContentEditableInput(cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.gracePeriod = false; - } - - ContentEditableInput.prototype = copyObj({ - init: function(display) { - var input = this, cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = "true"; - disableBrowserMagic(div); - - on(div, "paste", function(e) { - var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); - if (pasted) { - e.preventDefault(); - cm.replaceSelection(pasted, null, "paste"); - } - }); - - on(div, "compositionstart", function(e) { - var data = e.data; - input.composing = {sel: cm.doc.sel, data: data, startData: data}; - if (!data) return; - var prim = cm.doc.sel.primary(); - var line = cm.getLine(prim.head.line); - var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); - if (found > -1 && found <= prim.head.ch) - input.composing.sel = simpleSelection(Pos(prim.head.line, found), - Pos(prim.head.line, found + data.length)); - }); - on(div, "compositionupdate", function(e) { - input.composing.data = e.data; - }); - on(div, "compositionend", function(e) { - var ours = input.composing; - if (!ours) return; - if (e.data != ours.startData && !/\u200b/.test(e.data)) - ours.data = e.data; - // Need a small delay to prevent other code (input event, - // selection polling) from doing damage when fired right after - // compositionend. - setTimeout(function() { - if (!ours.handled) - input.applyComposition(ours); - if (input.composing == ours) - input.composing = null; - }, 50); - }); - - on(div, "touchstart", function() { - input.forceCompositionEnd(); - }); - - on(div, "input", function() { - if (input.composing) return; - if (!input.pollContent()) - runInOp(input.cm, function() {regChange(cm);}); - }); - - function onCopyCut(e) { - if (cm.somethingSelected()) { - lastCopied = cm.getSelections(); - if (e.type == "cut") cm.replaceSelection("", null, "cut"); - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - lastCopied = ranges.text; - if (e.type == "cut") { - cm.operation(function() { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - // iOS exposes the clipboard API, but seems to discard content inserted into it - if (e.clipboardData && !ios) { - e.preventDefault(); - e.clipboardData.clearData(); - e.clipboardData.setData("text/plain", lastCopied.join("\n")); - } else { - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.join("\n"); - var hadFocus = document.activeElement; - selectInput(te); - setTimeout(function() { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - }, 50); - } - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }, - - prepareSelection: function() { - var result = prepareSelection(this.cm, false); - result.focus = this.cm.state.focused; - return result; - }, - - showSelection: function(info) { - if (!info || !this.cm.display.view.length) return; - if (info.focus) this.showPrimarySelection(); - this.showMultipleSelections(info); - }, - - showPrimarySelection: function() { - var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); - var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && - cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) - return; - - var start = posToDOM(this.cm, prim.from()); - var end = posToDOM(this.cm, prim.to()); - if (!start && !end) return; - - var view = this.cm.display.view; - var old = sel.rangeCount && sel.getRangeAt(0); - if (!start) { - start = {node: view[0].measure.map[2], offset: 0}; - } else if (!end) { // FIXME dangerously hacky - var measure = view[view.length - 1].measure; - var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; - } - - try { var rng = range(start.node, start.offset, end.offset, end.node); } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - sel.removeAllRanges(); - sel.addRange(rng); - if (old && sel.anchorNode == null) sel.addRange(old); - else if (gecko) this.startGracePeriod(); - } - this.rememberSelection(); - }, - - startGracePeriod: function() { - var input = this; - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function() { - input.gracePeriod = false; - if (input.selectionChanged()) - input.cm.operation(function() { input.cm.curOp.selectionChanged = true; }); - }, 20); - }, - - showMultipleSelections: function(info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }, - - rememberSelection: function() { - var sel = window.getSelection(); - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; - }, - - selectionInEditor: function() { - var sel = window.getSelection(); - if (!sel.rangeCount) return false; - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node); - }, - - focus: function() { - if (this.cm.options.readOnly != "nocursor") this.div.focus(); - }, - blur: function() { this.div.blur(); }, - getField: function() { return this.div; }, - - supportsTouch: function() { return true; }, - - receivedFocus: function() { - var input = this; - if (this.selectionInEditor()) - this.pollSelection(); - else - runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); - - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }, - - selectionChanged: function() { - var sel = window.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; - }, - - pollSelection: function() { - if (!this.composing && !this.gracePeriod && this.selectionChanged()) { - var sel = window.getSelection(), cm = this.cm; - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) runInOp(cm, function() { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; - }); - } - }, - - pollContent: function() { - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); - var from = sel.from(), to = sel.to(); - if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; - - var fromIndex; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - var fromLine = lineNo(display.view[0].line); - var fromNode = display.view[0].node; - } else { - var fromLine = lineNo(display.view[fromIndex].line); - var fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - if (toIndex == display.view.length - 1) { - var toLine = display.viewTo - 1; - var toNode = display.view[toIndex].node; - } else { - var toLine = lineNo(display.view[toIndex + 1].line) - 1; - var toNode = display.view[toIndex + 1].node.previousSibling; - } - - var newText = splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } - else break; - } - - var cutFront = 0, cutEnd = 0; - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - ++cutFront; - var newBot = lst(newText), oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - ++cutEnd; - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); - newText[0] = newText[0].slice(cutFront); - - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true; - } - }, - - ensurePolled: function() { - this.forceCompositionEnd(); - }, - reset: function() { - this.forceCompositionEnd(); - }, - forceCompositionEnd: function() { - if (!this.composing || this.composing.handled) return; - this.applyComposition(this.composing); - this.composing.handled = true; - this.div.blur(); - this.div.focus(); - }, - applyComposition: function(composing) { - if (composing.data && composing.data != composing.startData) - operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); - }, - - setUneditable: function(node) { - node.setAttribute("contenteditable", "false"); - }, - - onKeyPress: function(e) { - e.preventDefault(); - operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); - }, - - onContextMenu: nothing, - resetPosition: nothing, - - needsContentAttribute: true - }, ContentEditableInput.prototype); - - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) return null; - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - - var order = getOrder(line), side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, "left"); - result.offset = result.collapse == "right" ? result.end : result.start; - return result; - } - - function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } - - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); - node = null; offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) return null; - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i]; - if (lineView.node == lineNode) - return locateNodeInLineView(lineView, node, offset); - } - } - - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false; - if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad); - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) offset = textNode.nodeValue.length; - } - while (topNode.parentNode != wrapper) topNode = topNode.parentNode; - var measure = lineView.measure, maps = measure.maps; - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map = i < 0 ? measure.map : maps[i]; - for (var j = 0; j < map.length; j += 3) { - var curNode = map[j + 2]; - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); - var ch = map[j] + offset; - if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; - return Pos(line, ch); - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) return badPos(found, bad); - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) - return badPos(Pos(found.line, found.ch - dist), bad); - else - dist += after.textContent.length; - } - for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) - return badPos(Pos(found.line, found.ch + dist), bad); - else - dist += after.textContent.length; - } - } - - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false; - function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText != null) { - if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); - text += cmText; - return; - } - var markerID = node.getAttribute("cm-marker"), range; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range = found[0].find())) - text += getBetween(cm.doc, range.from, range.to).join("\n"); - return; - } - if (node.getAttribute("contenteditable") == "false") return; - for (var i = 0; i < node.childNodes.length; i++) - walk(node.childNodes[i]); - if (/^(pre|div|p)$/i.test(node.nodeName)) - closing = true; - } else if (node.nodeType == 3) { - var val = node.nodeValue; - if (!val) return; - if (closing) { - text += "\n"; - closing = false; - } - text += val; - } - } - for (;;) { - walk(from); - if (from == to) break; - from = from.nextSibling; - } - return text; - } - - CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; - - // SELECTION / CURSOR - - // Selection objects are immutable. A new one is created every time - // the selection changes. A selection is one or more non-overlapping - // (and non-touching) ranges, sorted, and an integer that indicates - // which one is the primary selection (the one that's scrolled into - // view, that getCursor returns, etc). - function Selection(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - } - - Selection.prototype = { - primary: function() { return this.ranges[this.primIndex]; }, - equals: function(other) { - if (other == this) return true; - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; - for (var i = 0; i < this.ranges.length; i++) { - var here = this.ranges[i], there = other.ranges[i]; - if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; - } - return true; - }, - deepCopy: function() { - for (var out = [], i = 0; i < this.ranges.length; i++) - out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); - return new Selection(out, this.primIndex); - }, - somethingSelected: function() { - for (var i = 0; i < this.ranges.length; i++) - if (!this.ranges[i].empty()) return true; - return false; - }, - contains: function(pos, end) { - if (!end) end = pos; - for (var i = 0; i < this.ranges.length; i++) { - var range = this.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - return i; - } - return -1; - } - }; - - function Range(anchor, head) { - this.anchor = anchor; this.head = head; - } - - Range.prototype = { - from: function() { return minPos(this.anchor, this.head); }, - to: function() { return maxPos(this.anchor, this.head); }, - empty: function() { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - } - }; - - // Take an unsorted, potentially overlapping set of ranges, and - // build a selection out of it. 'Consumes' ranges array (modifying - // it). - function normalizeSelection(ranges, primIndex) { - var prim = ranges[primIndex]; - ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - if (cmp(prev.to(), cur.from()) >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) --primIndex; - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - - // Most of the external API clips given positions to make sure they - // actually exist within the document. - function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} - function clipPos(doc, pos) { - if (pos.line < doc.first) return Pos(doc.first, 0); - var last = doc.first + doc.size - 1; - if (pos.line > last) return Pos(last, getLine(doc, last).text.length); - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) return Pos(pos.line, linelen); - else if (ch < 0) return Pos(pos.line, 0); - else return pos; - } - function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} - function clipPosArray(doc, array) { - for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); - return out; - } - - // SELECTION UPDATES - - // The 'scroll' parameter given to many of these indicated whether - // the new cursor position should be scrolled into view after - // modifying the selection. - - // If shift is held or the extend flag is set, extends a range to - // include a given position (and optionally a second position). - // Otherwise, simply returns the range between the given positions. - // Used for cursor motion and such. - function extendRange(doc, range, head, other) { - if (doc.cm && doc.cm.display.shift || doc.extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - - // Extend the primary selection range, discard the rest. - function extendSelection(doc, head, other, options) { - setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); - } - - // Extend all selections (pos is an array of selections with length - // equal the number of selections) - function extendSelections(doc, heads, options) { - for (var out = [], i = 0; i < doc.sel.ranges.length; i++) - out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); - var newSel = normalizeSelection(out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - - // Updates a single range in the selection. - function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); - } - - // Reset the selection to a single range. - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - - // Give beforeSelectionChange handlers a change to influence a - // selection update. - function filterSelectionChange(doc, sel) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); - } - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); - else return sel; - } - - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - - // Set a new selection. - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - sel = filterSelectionChange(doc, sel); - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm) - ensureCursorVisible(doc.cm); - } - - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) return; - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - - // Verify that the selection does not partially select any atomic - // marked ranges. - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); - } - - // Return a selection that does not partially select any atomic - // ranges. - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) out = sel.ranges.slice(0, i); - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(out, sel.primIndex) : sel; - } - - // Ensure a given position is not inside an atomic range. - function skipAtomic(doc, pos, bias, mayClear) { - var flipped = false, curPos = pos; - var dir = bias || 1; - doc.cantEdit = false; - search: for (;;) { - var line = getLine(doc, curPos.line); - if (line.markedSpans) { - for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && - (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) break; - else {--i; continue;} - } - } - if (!m.atomic) continue; - var newPos = m.find(dir < 0 ? -1 : 1); - if (cmp(newPos, curPos) == 0) { - newPos.ch += dir; - if (newPos.ch < 0) { - if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); - else newPos = null; - } else if (newPos.ch > line.text.length) { - if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); - else newPos = null; - } - if (!newPos) { - if (flipped) { - // Driven in a corner -- no valid cursor position found at all - // -- try again *with* clearing, if we didn't already - if (!mayClear) return skipAtomic(doc, pos, bias, true); - // Otherwise, turn off editing until further notice, and return the start of the doc - doc.cantEdit = true; - return Pos(doc.first, 0); - } - flipped = true; newPos = pos; dir = -dir; - } - } - curPos = newPos; - continue search; - } - } - } - return curPos; - } - } - - // SELECTION DRAWING - - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - - function prepareSelection(cm, primary) { - var doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (primary === false && i == doc.sel.primIndex) continue; - var range = doc.sel.ranges[i]; - var collapsed = range.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - drawSelectionCursor(cm, range, curFragment); - if (!collapsed) - drawSelectionRange(cm, range, selFragment); - } - return result; - } - - // Draws a cursor for the given range - function drawSelectionCursor(cm, range, output) { - var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } - } - - // Draws the given range as a highlighted selection - function drawSelectionRange(cm, range, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - - function add(left, top, width, bottom) { - if (top < 0) top = 0; - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + - "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + - "px; height: " + (bottom - top) + "px")); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - - iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { - var leftPos = coords(from, "left"), rightPos, left, right; - if (from == to) { - rightPos = leftPos; - left = right = leftPos.left; - } else { - rightPos = coords(to - 1, "right"); - if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } - left = leftPos.left; - right = rightPos.right; - } - if (fromArg == null && from == 0) left = leftSide; - if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part - add(left, leftPos.top, null, leftPos.bottom); - left = leftSide; - if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); - } - if (toArg == null && to == lineLen) right = rightSide; - if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) - start = leftPos; - if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) - end = rightPos; - if (left < leftSide + 1) left = leftSide; - add(left, rightPos.top, right - left, rightPos.bottom); - }); - return {start: start, end: end}; - } - - var sFrom = range.from(), sTo = range.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - - output.appendChild(fragment); - } - - // Cursor-blinking - function restartBlink(cm) { - if (!cm.state.focused) return; - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - display.blinker = setInterval(function() { - display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - else if (cm.options.cursorBlinkRate < 0) - display.cursorDiv.style.visibility = "hidden"; - } - - // HIGHLIGHT WORKER - - function startWorker(cm, time) { - if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.frontier < doc.first) doc.frontier = doc.first; - if (doc.frontier >= cm.display.viewTo) return; - var end = +new Date + cm.options.workTime; - var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); - var changedLines = []; - - doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { - if (doc.frontier >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var highlighted = highlightLine(cm, line, state, true); - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) line.styleClasses = newCls; - else if (oldCls) line.styleClasses = null; - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; - if (ischange) changedLines.push(doc.frontier); - line.stateAfter = copyState(doc.mode, state); - } else { - processLine(cm, line.text, state); - line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; - } - ++doc.frontier; - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - if (changedLines.length) runInOp(cm, function() { - for (var i = 0; i < changedLines.length; i++) - regLineChange(cm, changedLines[i], "text"); - }); - } - - // Finds the line to start with when starting a parse. Tries to - // find a line with a stateAfter, so that it can start with a - // valid state. If that fails, it returns the line with the - // smallest indentation, which tends to need the least context to - // parse correctly. - function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) return doc.first; - var line = getLine(doc, search - 1); - if (line.stateAfter && (!precise || search <= doc.frontier)) return search; - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - - function getStateBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) return true; - var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; - if (!state) state = startState(doc.mode); - else state = copyState(doc.mode, state); - doc.iter(pos, n, function(line) { - processLine(cm, line.text, state); - var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; - line.stateAfter = save ? copyState(doc.mode, state) : null; - ++pos; - }); - if (precise) doc.frontier = pos; - return state; - } - - // POSITION MEASUREMENT - - function paddingTop(display) {return display.lineSpace.offsetTop;} - function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} - function paddingH(display) { - if (display.cachedPaddingH) return display.cachedPaddingH; - var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; - return data; - } - - function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - - // Ensure the lineView.wrapping.heights array is populated. This is - // an array of bottom offsets for the lines that make up a drawn - // line. When lineWrapping is on, there might be more than one - // height. - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - heights.push(rect.bottom - rect.top); - } - } - - // Find a line map (mapping character offsets to text nodes) and a - // measurement cache for the given line number. (A line view might - // contain multiple lines when collapsed ranges are present.) - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - return {map: lineView.measure.map, cache: lineView.measure.cache}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineView.rest[i] == line) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; - for (var i = 0; i < lineView.rest.length; i++) - if (lineNo(lineView.rest[i]) > lineN) - return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; - } - - // Render a line into the hidden node display.externalMeasured. Used - // when measurement is needed for a line that's not in the viewport. - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - - // Get a {top, bottom, left, right} box (in line-local coordinates) - // for a given character. - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - - // Find a line view that corresponds to the given line number. - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - return cm.display.view[findViewIndex(cm, lineN)]; - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - return ext; - } - - // Measurement can be split in two steps, the set-up work that - // applies to the whole line, and the measurement of the actual - // character. Functions like coordsChar, that need to do a lot of - // measurements in a row, can thus ensure that the set-up work is - // only done once. - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) - view = null; - else if (view && view.changes) - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - if (!view) - view = updateExternalMeasurement(cm, line); - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - }; - } - - // Given a prepared measurement object, measures the position of an - // actual character (or fetches it from the cache). - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) ch = -1; - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - prepared.rect = prepared.view.text.getBoundingClientRect(); - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) prepared.cache[key] = found; - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom}; - } - - var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - - function nodeAndOffsetInLineMap(map, ch, bias) { - var node, start, end, collapse; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map.length; i += 3) { - var mStart = map[i], mEnd = map[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) collapse = "right"; - } - if (start != null) { - node = map[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - collapse = bias; - if (bias == "left" && start == 0) - while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { - node = map[(i -= 3) + 2]; - collapse = "left"; - } - if (bias == "right" && start == mEnd - mStart) - while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { - node = map[(i += 3) + 2]; - collapse = "right"; - } - break; - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; - } - - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, start = place.start, end = place.end, collapse = place.collapse; - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { - rect = node.parentNode.getBoundingClientRect(); - } else if (ie && cm.options.lineWrapping) { - var rects = range(node, start, end).getClientRects(); - if (rects.length) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = nullRect; - } else { - rect = range(node, start, end).getBoundingClientRect() || nullRect; - } - if (rect.left || rect.right || start == 0) break; - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) collapse = bias = "right"; - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - rect = rects[bias == "right" ? rects.length - 1 : 0]; - else - rect = node.getBoundingClientRect(); - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; - else - rect = nullRect; - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - for (var i = 0; i < heights.length - 1; i++) - if (mid < heights[i]) break; - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) result.bogus = true; - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result; - } - - // Work around problem with bounding client rects on ranges being - // returned incorrectly when zoomed on IE10 and below. - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - return rect; - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY}; - } - - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) - lineView.measure.caches[i] = {}; - } - } - - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - clearLineMeasurementCacheFor(cm.display.view[i]); - } - - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; - cm.display.lineNumChars = null; - } - - function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } - function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } - - // Converts a {top, bottom, left, right} box from line-local - // coordinates into another coordinate system. Context may be one of - // "line", "div" (display.lineDiv), "local"/null (editor), "window", - // or "page". - function intoCoordSystem(cm, lineObj, rect, context) { - if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { - var size = widgetHeight(lineObj.widgets[i]); - rect.top += size; rect.bottom += size; - } - if (context == "line") return rect; - if (!context) context = "local"; - var yOff = heightAtLine(lineObj); - if (context == "local") yOff += paddingTop(cm.display); - else yOff -= cm.display.viewOffset; - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect; - } - - // Coverts a box from "div" coords to another coordinate system. - // Context may be "window", "page", "div", or "local"/null. - function fromCoordSystem(cm, coords, context) { - if (context == "div") return coords; - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; - } - - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) lineObj = getLine(cm.doc, pos.line); - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - - // Returns a box for a given cursor position, which may have an - // 'other' property containing the position of the secondary cursor - // on a bidi boundary. - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) m.left = m.right; else m.right = m.left; - return intoCoordSystem(cm, lineObj, m, context); - } - function getBidi(ch, partPos) { - var part = order[partPos], right = part.level % 2; - if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { - part = order[--partPos]; - ch = bidiRight(part) - (part.level % 2 ? 0 : 1); - right = true; - } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { - part = order[++partPos]; - ch = bidiLeft(part) - part.level % 2; - right = false; - } - if (right && ch == part.to && ch > part.from) return get(ch - 1); - return get(ch, right); - } - var order = getOrder(lineObj), ch = pos.ch; - if (!order) return get(ch); - var partPos = getBidiPartAt(order, ch); - var val = getBidi(ch, partPos); - if (bidiOther != null) val.other = getBidi(ch, bidiOther); - return val; - } - - // Used to cheaply estimate the coordinates for a position. Used for - // intermediate scroll updates. - function estimateCoords(cm, pos) { - var left = 0, pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height}; - } - - // Positions returned by coordsChar contain some extra information. - // xRel is the relative x position of the input coordinates compared - // to the found position (so xRel > 0 means the coordinates are to - // the right of the character position, for example). When outside - // is true, that means the coordinates lie outside the line's - // vertical range. - function PosWithInfo(line, ch, outside, xRel) { - var pos = Pos(line, ch); - pos.xRel = xRel; - if (outside) pos.outside = true; - return pos; - } - - // Compute the character position closest to the given coordinates. - // Input must be lineSpace-local ("div" coordinate system). - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) return PosWithInfo(doc.first, 0, true, -1); - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); - if (x < 0) x = 0; - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var merged = collapsedSpanAtEnd(lineObj); - var mergedPos = merged && merged.find(0, true); - if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) - lineN = lineNo(lineObj = mergedPos.to.line); - else - return found; - } - } - - function coordsCharInner(cm, lineObj, lineNo, x, y) { - var innerOff = y - heightAtLine(lineObj); - var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - - function getX(ch) { - var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); - wrongLine = true; - if (innerOff > sp.bottom) return sp.left - adjust; - else if (innerOff < sp.top) return sp.left + adjust; - else wrongLine = false; - return sp.left; - } - - var bidi = getOrder(lineObj), dist = lineObj.text.length; - var from = lineLeft(lineObj), to = lineRight(lineObj); - var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; - - if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); - // Do a binary search between these bounds. - for (;;) { - if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { - var ch = x < fromX || x - fromX <= toX - x ? from : to; - var xDiff = x - (ch == from ? fromX : toX); - while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; - var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, - xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); - return pos; - } - var step = Math.ceil(dist / 2), middle = from + step; - if (bidi) { - middle = from; - for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); - } - var middleX = getX(middle); - if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} - else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} - } - } - - var measureText; - // Compute the default text height. - function textHeight(display) { - if (display.cachedTextHeight != null) return display.cachedTextHeight; - if (measureText == null) { - measureText = elt("pre"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) display.cachedTextHeight = height; - removeChildren(display.measure); - return height || 1; - } - - // Compute the default character width. - function charWidth(display) { - if (display.cachedCharWidth != null) return display.cachedCharWidth; - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor]); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) display.cachedCharWidth = width; - return width || 10; - } - - // OPERATIONS - - // Operations are used to wrap a series of changes to the editor - // state in such a way that each change won't have to update the - // cursor and display (which would be awkward, slow, and - // error-prone). Instead, display updates are batched and then all - // combined and executed at once. - - var operationGroup = null; - - var nextOpId = 0; - // Start a new operation. - function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: null, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId // Unique ID - }; - if (operationGroup) { - operationGroup.ops.push(cm.curOp); - } else { - cm.curOp.ownsGroup = operationGroup = { - ops: [cm.curOp], - delayedCallbacks: [] - }; - } - } - - function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - callbacks[i](); - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); - } - } while (i < callbacks.length); - } - - // Finish an operation, updating the display and signalling delayed events - function endOperation(cm) { - var op = cm.curOp, group = op.ownsGroup; - if (!group) return; - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - for (var i = 0; i < group.ops.length; i++) - group.ops[i].cm.curOp = null; - endOperations(group); - } - } - - // The DOM updates done when an operation finishes are batched so - // that the minimum number of relayouts are required. - function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R1(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W1(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_R2(ops[i]); - for (var i = 0; i < ops.length; i++) // Write DOM (maybe) - endOperation_W2(ops[i]); - for (var i = 0; i < ops.length; i++) // Read DOM - endOperation_finish(ops[i]); - } - - function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) findMaxLine(cm); - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); - } - - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - - function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) updateHeightsInViewport(cm); - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - op.preparedSelection = display.input.prepareSelection(); - } - - function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - cm.display.maxLineChanged = false; - } - - if (op.preparedSelection) - cm.display.input.showSelection(op.preparedSelection); - if (op.updatedDisplay) - setDocumentHeight(cm, op.barMeasure); - if (op.updatedDisplay || op.startHeight != cm.doc.height) - updateScrollbars(cm, op.barMeasure); - - if (op.selectionChanged) restartBlink(cm); - - if (cm.state.focused && op.updateInput) - cm.display.input.reset(op.typing); - if (op.focus && op.focus == activeElt()) ensureFocus(op.cm); - } - - function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) postUpdateDisplay(cm, op.update); - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - display.wheelStartX = display.wheelStartY = null; - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { - doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); - display.scrollbars.setScrollTop(doc.scrollTop); - display.scroller.scrollTop = doc.scrollTop; - } - if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { - doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); - display.scrollbars.setScrollLeft(doc.scrollLeft); - display.scroller.scrollLeft = doc.scrollLeft; - alignHorizontally(cm); - } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) for (var i = 0; i < hidden.length; ++i) - if (!hidden[i].lines.length) signal(hidden[i], "hide"); - if (unhidden) for (var i = 0; i < unhidden.length; ++i) - if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); - - if (display.wrapper.offsetHeight) - doc.scrollTop = cm.display.scroller.scrollTop; - - // Fire change events, and delayed event handlers - if (op.changeObjs) - signal(cm, "changes", cm, op.changeObjs); - if (op.update) - op.update.finish(); - } - - // Run the given function in an operation - function runInOp(cm, f) { - if (cm.curOp) return f(); - startOperation(cm); - try { return f(); } - finally { endOperation(cm); } - } - // Wraps a function in an operation. Returns the wrapped function. - function operation(cm, f) { - return function() { - if (cm.curOp) return f.apply(cm, arguments); - startOperation(cm); - try { return f.apply(cm, arguments); } - finally { endOperation(cm); } - }; - } - // Used to add methods to editor and doc instances, wrapping them in - // operations. - function methodOp(f) { - return function() { - if (this.curOp) return f.apply(this, arguments); - startOperation(this); - try { return f.apply(this, arguments); } - finally { endOperation(this); } - }; - } - function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) return f.apply(this, arguments); - startOperation(cm); - try { return f.apply(this, arguments); } - finally { endOperation(cm); } - }; - } - - // VIEW TRACKING - - // These objects are used to represent the visible (currently drawn) - // part of the document. A LineView may correspond to multiple - // logical lines, if those are connected by collapsed ranges. - function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - - // Create a range of LineView objects for the given lines. - function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - - // Updates the display.view data structure for a given change to the - // document. From and to are in pre-change coordinates. Lendiff is - // the amount of lines added or subtracted by the change. This is - // used for changes that span multiple lines, or change the way - // lines are divided into visual lines. regLineChange (below) - // registers single-line changes. - function regChange(cm, from, to, lendiff) { - if (from == null) from = cm.doc.first; - if (to == null) to = cm.doc.first + cm.doc.size; - if (!lendiff) lendiff = 0; - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - display.updateLineNumbers = from; - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - resetView(cm); - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut = viewCuttingPoint(cm, from, from, -1); - if (cut) { - display.view = display.view.slice(0, cut.index); - display.viewTo = cut.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - ext.lineN += lendiff; - else if (from < ext.lineN + ext.size) - display.externalMeasured = null; - } - } - - // Register a change to a single line. Type must be one of "text", - // "gutter", "class", "widget" - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - display.externalMeasured = null; - - if (line < display.viewFrom || line >= display.viewTo) return; - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) return; - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) arr.push(type); - } - - // Clear the view. - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - - // Find the view element corresponding to a given line. Return null - // when the line isn't visible. - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) return null; - n -= cm.display.viewFrom; - if (n < 0) return null; - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) return i; - } - } - - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - return {index: index, lineN: newN}; - for (var i = 0, n = cm.display.viewFrom; i < index; i++) - n += view[i].size; - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) return null; - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) return null; - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN}; - } - - // Force the view to cover a given range, adding empty view element - // or clipping off existing ones as needed. - function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - else if (display.viewFrom < from) - display.view = display.view.slice(findViewIndex(cm, from)); - display.viewFrom = from; - if (display.viewTo < to) - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - else if (display.viewTo > to) - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - display.viewTo = to; - } - - // Count the number of lines in the view whose DOM representation is - // out of date (or nonexistent). - function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; - } - return dirty; - } - - // EVENT HANDLERS - - // Attach the necessary event handlers when initializing the editor - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - on(d.scroller, "dblclick", operation(cm, function(e) { - if (signalDOMEvent(cm, e)) return; - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - else - on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0}; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); - prevTouch = d.activeTouch; - prevTouch.end = +new Date; - } - }; - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) return false; - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1; - } - function farAway(touch, other) { - if (other.left == null) return true; - var dx = other.left - touch.left, dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20; - } - on(d.scroller, "touchstart", function(e) { - if (!isMouseLikeTouchEvent(e)) { - clearTimeout(touchFinished); - var now = +new Date; - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null}; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function() { - if (d.activeTouch) d.activeTouch.moved = true; - }); - on(d.scroller, "touchend", function(e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range; - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - range = new Range(pos, pos); - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - range = cm.findWordAt(pos); - else // Triple tap - range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - cm.setSelection(range.anchor, range.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function() { - if (d.scroller.clientHeight) { - setScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); - on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - d.dragFunctions = { - simple: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);}, - start: function(e){onDragStart(cm, e);}, - drop: operation(cm, onDrop) - }; - - var inp = d.input.getField(); - on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", bind(onFocus, cm)); - on(inp, "blur", bind(onBlur, cm)); - } - - function dragDropChanged(cm, value, old) { - var wasOn = old && old != CodeMirror.Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.simple); - toggle(cm.display.scroller, "dragover", funcs.simple); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - - // Called when the window resizes - function onResize(cm) { - var d = cm.display; - if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) - return; - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - - // MOUSE EVENTS - - // Return true when the given mouse event happened in a widget - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - return true; - } - } - - // Given a mouse event, find the corresponding position. If liberal - // is false, it checks whether a gutter or scrollbar was clicked, - // and returns null if it was. forRect is used by rectangular - // selections, and tries to estimate a character position even for - // coordinates beyond the right of the text. - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e) { return null; } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - - // A mouse down can be a single click, double click, triple click, - // start of selection drag, start of text drag, new cursor - // (ctrl-click), rectangle drag (alt-drag), or xwin - // middle-click-paste. Or it might be a click on something we should - // not interfere with, such as a scrollbar or widget. - function onMouseDown(e) { - var cm = this, display = cm.display; - if (display.activeTouch && display.input.supportsTouch() || signalDOMEvent(cm, e)) return; - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function(){display.scroller.draggable = true;}, 100); - } - return; - } - if (clickInGutter(cm, e)) return; - var start = posFromMouse(cm, e); - window.focus(); - - switch (e_button(e)) { - case 1: - if (start) - leftButtonDown(cm, e, start); - else if (e_target(e) == display.scroller) - e_preventDefault(e); - break; - case 2: - if (webkit) cm.state.lastMiddleDown = +new Date; - if (start) extendSelection(cm.doc, start); - setTimeout(function() {display.input.focus();}, 20); - e_preventDefault(e); - break; - case 3: - if (captureRightClick) onContextMenu(cm, e); - else delayBlurEvent(cm); - break; - } - } - - var lastClick, lastDoubleClick; - function leftButtonDown(cm, e, start) { - if (ie) setTimeout(bind(ensureFocus, cm), 0); - else cm.curOp.focus = activeElt(); - - var now = +new Date, type; - if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { - type = "triple"; - } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { - type = "double"; - lastDoubleClick = {time: now, pos: start}; - } else { - type = "single"; - lastClick = {time: now, pos: start}; - } - - var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; - if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && - type == "single" && (contained = sel.contains(start)) > -1 && - !sel.ranges[contained].empty()) - leftButtonStartDrag(cm, e, start, modifier); - else - leftButtonSelect(cm, e, start, type, modifier); - } - - // Start a text drag. When it ends, see if any dragging actually - // happen, and treat as a click if it didn't. - function leftButtonStartDrag(cm, e, start, modifier) { - var display = cm.display; - var dragEnd = operation(cm, function(e2) { - if (webkit) display.scroller.draggable = false; - cm.state.draggingText = false; - off(document, "mouseup", dragEnd); - off(display.scroller, "drop", dragEnd); - if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { - e_preventDefault(e2); - if (!modifier) - extendSelection(cm.doc, start); - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if (webkit || ie && ie_version == 9) - setTimeout(function() {document.body.focus(); display.input.focus();}, 20); - else - display.input.focus(); - } - }); - // Let the drag handler handle this. - if (webkit) display.scroller.draggable = true; - cm.state.draggingText = dragEnd; - // IE's approach to draggable - if (display.scroller.dragDrop) display.scroller.dragDrop(); - on(document, "mouseup", dragEnd); - on(display.scroller, "drop", dragEnd); - } - - // Normal selection, as opposed to text dragging. - function leftButtonSelect(cm, e, start, type, addNew) { - var display = cm.display, doc = cm.doc; - e_preventDefault(e); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (addNew && !e.shiftKey) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - ourRange = ranges[ourIndex]; - else - ourRange = new Range(start, start); - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - - if (e.altKey) { - type = "rect"; - if (!addNew) ourRange = new Range(start, start); - start = posFromMouse(cm, e, true, true); - ourIndex = -1; - } else if (type == "double") { - var word = cm.findWordAt(start); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, word.anchor, word.head); - else - ourRange = word; - } else if (type == "triple") { - var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); - if (cm.display.shift || doc.extend) - ourRange = extendRange(doc, ourRange, line.anchor, line.head); - else - ourRange = line; - } else { - ourRange = extendRange(doc, ourRange, start); - } - - if (!addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { - setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) return; - lastPos = pos; - - if (type == "rect") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - else if (text.length > leftPos) - ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - if (!ranges.length) ranges.push(new Range(start, start)); - setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var anchor = oldRange.anchor, head = pos; - if (type != "single") { - if (type == "double") - var range = cm.findWordAt(pos); - else - var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); - if (cmp(range.anchor, anchor) > 0) { - head = range.head; - anchor = minPos(oldRange.from(), range.anchor); - } else { - head = range.anchor; - anchor = maxPos(oldRange.to(), range.head); - } - } - var ranges = startSel.ranges.slice(0); - ranges[ourIndex] = new Range(clipPos(doc, anchor), head); - setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, type == "rect"); - if (!cur) return; - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) setTimeout(operation(cm, function() { - if (counter != curCount) return; - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - - function done(e) { - counter = Infinity; - e_preventDefault(e); - display.input.focus(); - off(document, "mousemove", move); - off(document, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function(e) { - if (!e_button(e)) done(e); - else extend(e); - }); - var up = operation(cm, done); - on(document, "mousemove", move); - on(document, "mouseup", up); - } - - // Determines whether an event happened in the gutter, and fires the - // handlers for the corresponding event. - function gutterEvent(cm, e, type, prevent, signalfn) { - try { var mX = e.clientX, mY = e.clientY; } - catch(e) { return false; } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; - if (prevent) e_preventDefault(e); - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.options.gutters.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.options.gutters[i]; - signalfn(cm, type, cm, line, gutter, e); - return e_defaultPrevented(e); - } - } - } - - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true, signalLater); - } - - // Kludge to work around strange IE behavior where it'll sometimes - // re-fire a series of drag-related events right after the drop (#1551) - var lastDrop = 0; - - function onDrop(e) { - var cm = this; - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - return; - e_preventDefault(e); - if (ie) lastDrop = +new Date; - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || isReadOnly(cm)) return; - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var loadFile = function(file, i) { - var reader = new FileReader; - reader.onload = operation(cm, function() { - text[i] = reader.result; - if (++read == n) { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); - } - }); - reader.readAsText(file); - }; - for (var i = 0; i < n; ++i) loadFile(files[i], i); - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(function() {cm.display.input.focus();}, 20); - return; - } - try { - var text = e.dataTransfer.getData("Text"); - if (text) { - if (cm.state.draggingText && !(mac ? e.altKey : e.ctrlKey)) - var selected = cm.listSelections(); - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) for (var i = 0; i < selected.length; ++i) - replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); - cm.replaceSelection(text, "around", "paste"); - cm.display.input.focus(); - } - } - catch(e){} - } - } - - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; - - e.dataTransfer.setData("Text", cm.getSelection()); - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) img.parentNode.removeChild(img); - } - } - - // SCROLL EVENTS - - // Sync the scrollable area and scrollbars, ensure the viewport - // covers the visible area. - function setScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) return; - cm.doc.scrollTop = val; - if (!gecko) updateDisplaySimple(cm, {top: val}); - if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (gecko) updateDisplaySimple(cm); - startWorker(cm, 100); - } - // Sync scroller and scrollbar, ensure the gutter elements are - // aligned. - function setScrollLeft(cm, val, isScroller) { - if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; - val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; - cm.display.scrollbars.setScrollLeft(val); - } - - // Since the delta values reported on mouse wheel events are - // unstandardized between browsers and even browser versions, and - // generally horribly unpredictable, this code starts by measuring - // the scroll effect that the first few mouse wheel events have, - // and, from that, detects the way it can convert deltas to pixel - // offsets afterwards. - // - // The reason we want to know the amount a wheel event will scroll - // is that it gives us a chance to update the display before the - // actual scrolling happens, reducing flickering. - - var wheelSamples = 0, wheelPixelsPerUnit = null; - // Fill in a browser-detected starting value on browsers where we - // know one. These don't have to be accurate -- the result of them - // being wrong would just be a slight flicker on the first wheel - // scroll (if it is large enough). - if (ie) wheelPixelsPerUnit = -.53; - else if (gecko) wheelPixelsPerUnit = 15; - else if (chrome) wheelPixelsPerUnit = -.7; - else if (safari) wheelPixelsPerUnit = -1/3; - - var wheelEventDelta = function(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; - else if (dy == null) dy = e.wheelDelta; - return {x: dx, y: dy}; - }; - CodeMirror.wheelEventPixels = function(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - }; - - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - if (!(dx && scroll.scrollWidth > scroll.clientWidth || - dy && scroll.scrollHeight > scroll.clientHeight)) return; - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { - if (dy) - setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); - setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); - e_preventDefault(e); - display.wheelStartX = null; // Abort measurement, if in progress - return; - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && wheelPixelsPerUnit != null) { - var pixels = dy * wheelPixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) top = Math.max(0, top + pixels - 50); - else bot = Math.min(cm.doc.height, bot + pixels + 50); - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function() { - if (display.wheelStartX == null) return; - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) return; - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } - } - - // KEY EVENTS - - // Run a handler that was bound to a key. - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) return false; - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, done = false; - try { - if (isReadOnly(cm)) cm.state.suppressEdits = true; - if (dropShift) cm.display.shift = false; - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - - function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) return result; - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm); - } - - var stopSeq = new Delayed; - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) return "handled"; - stopSeq.set(50, function() { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); - name = seq + " " + name; - } - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - cm.state.keySeq = name; - if (result == "handled") - signalLater(cm, "keyHandled", cm, name, e); - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - if (seq && !result && /\'$/.test(name)) { - e_preventDefault(e); - return true; - } - return !!result; - } - - // Handle a key from the keydown event. - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) return false; - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) - || dispatchKey(cm, name, e, function(b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - return doHandleBinding(cm, b); - }); - } else { - return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); - } - } - - // Handle a key from the keypress event - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, - function(b) { return doHandleBinding(cm, b, true); }); - } - - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) return; - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - cm.replaceSelection("", null, "cut"); - } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - showCrossHair(cm); - } - - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - - function onKeyUp(e) { - if (e.keyCode == 16) this.doc.sel.shift = false; - signalDOMEvent(this, e); - } - - function onKeyPress(e) { - var cm = this; - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (handleCharBinding(cm, e, ch)) return; - cm.display.input.onKeyPress(e); - } - - // FOCUS/BLUR EVENTS - - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function() { - if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - onBlur(cm); - } - }, 100); - } - - function onFocus(cm) { - if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false; - - if (cm.options.readOnly == "nocursor") return; - if (!cm.state.focused) { - signal(cm, "focus", cm); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm) { - if (cm.state.delayingBlurEvent) return; - - if (cm.state.focused) { - signal(cm, "blur", cm); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); - } - - // CONTEXT MENU HANDLING - - // To make the context menu work, we need to briefly unhide the - // textarea (making it as unobtrusive as possible) to let the - // right-click take effect on it. - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; - cm.display.input.onContextMenu(e); - } - - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) return false; - return gutterEvent(cm, e, "gutterContextMenu", false, signal); - } - - // UPDATING - - // Compute the position of the end of a change (its 'to' property - // refers to the pre-change end). - var changeEnd = CodeMirror.changeEnd = function(change) { - if (!change.text) return change.to; - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - }; - - // Adjust a position to refer to the post-change position of the - // same text, or the end of the change if the change covers it. - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) return pos; - if (cmp(pos, change.to) <= 0) return changeEnd(change); - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; - return Pos(line, ch); - } - - function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(out, doc.sel.primIndex); - } - - function offsetPos(pos, old, nw) { - if (pos.line == old.line) - return Pos(nw.line, pos.ch - old.ch + nw.ch); - else - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - - // Used by replaceSelections to allow moving the selection to the - // start or around the replaced test. Hint may be "start" or "around". - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - - // Allow "beforeChange" event handlers to influence a change - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function() { this.canceled = true; } - }; - if (update) obj.update = function(from, to, text, origin) { - if (from) this.from = clipPos(doc, from); - if (to) this.to = clipPos(doc, to); - if (text) this.text = text; - if (origin !== undefined) this.origin = origin; - }; - signal(doc, "beforeChange", doc, obj); - if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); - - if (obj.canceled) return null; - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; - } - - // Apply a change to a document, and add it to the document's - // history, and propagating it to all linked documents. - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - if (doc.cm.state.suppressEdits) return; - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) return; - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); - } else { - makeChangeInner(doc, change); - } - } - - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); - } - - // Revert a change stored in a document's history. - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - if (doc.cm && doc.cm.state.suppressEdits) return; - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - for (var i = 0; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - break; - } - if (i == source.length) return; - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return; - } - selAfter = event; - } - else break; - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - for (var i = event.changes.length - 1; i >= 0; --i) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return; - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function(doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - } - } - - // Sub-views need their line numbers shifted when text is added - // above or below them in the parent document. - function shiftDoc(doc, distance) { - if (distance == 0) return; - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function(range) { - return new Range(Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - regLineChange(doc.cm, l, "gutter"); - } - } - - // More lower-level change function, handling only a single document - // (not linked ones). - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) return; - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) selAfter = computeSelAfterChange(doc, change); - if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); - else updateDoc(doc, change, spans); - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - } - - // Handle the interaction of a change to a document with the editor - // that this document is part of. - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function(line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - signalCursorActivity(cm); - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function(line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) cm.curOp.updateMaxLine = true; - } - - // Adjust frontier, schedule worker - doc.frontier = Math.min(doc.frontier, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - regChange(cm); - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - regLineChange(cm, from.line, "text"); - else - regChange(cm, from.line, to.line + 1, lendiff); - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) signalLater(cm, "change", cm, obj); - if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - cm.display.selForContextMenu = null; - } - - function replaceRange(doc, code, from, to, origin) { - if (!to) to = from; - if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } - if (typeof code == "string") code = splitLines(code); - makeChange(doc, {from: from, to: to, text: code, origin: origin}); - } - - // SCROLLING THINGS INTO VIEW - - // If an editor sits on the top or bottom of the window, partially - // scrolled out of view, this ensures that the cursor is visible. - function maybeScrollWindow(cm, coords) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) return; - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (coords.top + box.top < 0) doScroll = true; - else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + - (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + - (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + - coords.left + "px; width: 2px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - - // Scroll a given position into view (immediately), verifying that - // it actually became visible (as line heights are accurately - // measured, the position of something may 'drift' during drawing). - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) margin = 0; - for (var limit = 0; limit < 5; limit++) { - var changed = false, coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), - Math.min(coords.top, endCoords.top) - margin, - Math.max(coords.left, endCoords.left), - Math.max(coords.bottom, endCoords.bottom) + margin); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - setScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; - } - if (!changed) break; - } - return coords; - } - - // Scroll a given set of coordinates into view (immediately). - function scrollIntoView(cm, x1, y1, x2, y2) { - var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); - if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); - if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); - } - - // Calculate a new scroll position needed to scroll the given - // rectangle into view. Returns an object with scrollTop and - // scrollLeft properties. When these are undefined, the - // vertical/horizontal position does not need to be adjusted. - function calculateScrollPos(cm, x1, y1, x2, y2) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (y1 < 0) y1 = 0; - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (y2 - y1 > screen) y2 = y1 + screen; - var docBottom = cm.doc.height + paddingVert(display); - var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; - if (y1 < screentop) { - result.scrollTop = atTop ? 0 : y1; - } else if (y2 > screentop + screen) { - var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); - if (newTop != screentop) result.scrollTop = newTop; - } - - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; - var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); - var tooWide = x2 - x1 > screenw; - if (tooWide) x2 = x1 + screenw; - if (x1 < 10) - result.scrollLeft = 0; - else if (x1 < screenleft) - result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); - else if (x2 > screenw + screenleft - 3) - result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; - return result; - } - - // Store a relative adjustment to the scroll position in the current - // operation (to be applied when the operation finishes). - function addToScrollPos(cm, left, top) { - if (left != null || top != null) resolveScrollToPos(cm); - if (left != null) - cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; - if (top != null) - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - - // Make sure that at the end of the operation the current cursor is - // shown. - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(), from = cur, to = cur; - if (!cm.options.lineWrapping) { - from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; - to = Pos(cur.line, cur.ch + 1); - } - cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; - } - - // When an operation has its scrollToPos property set, and another - // scroll action is applied before the end of the operation, this - // 'simulates' scrolling that position into view in a cheap way, so - // that the effect of intermediate scroll commands is not ignored. - function resolveScrollToPos(cm) { - var range = cm.curOp.scrollToPos; - if (range) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); - var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), - Math.min(from.top, to.top) - range.margin, - Math.max(from.right, to.right), - Math.max(from.bottom, to.bottom) + range.margin); - cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - } - - // API UTILITIES - - // Indent the given line. The how parameter can be "smart", - // "add"/null, "subtract", or "prev". When aggressive is false - // (typically set to true for forced single-line indents), empty - // lines are not indented, and places where the mode returns Pass - // are left alone. - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) how = "add"; - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) how = "prev"; - else state = getStateBefore(cm, n); - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) line.stateAfter = null; - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) return; - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); - else indentation = 0; - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} - if (pos < indentation) indentString += spaceStr(indentation - pos); - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i, new Range(pos, pos)); - break; - } - } - } - line.stateAfter = null; - } - - // Utility for applying a change to a line by handle or number, - // returning the number and optionally registering the line as - // changed. - function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); - else no = lineNo(handle); - if (no == null) return null; - if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); - return line; - } - - // Helper for deleting text near the selection(s), used to implement - // backspace, delete, and similar functionality. - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function() { - for (var i = kill.length - 1; i >= 0; i--) - replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); - ensureCursorVisible(cm); - }); - } - - // Used for horizontal relative motion. Dir is -1 or 1 (left or - // right), unit can be "char", "column" (like char, but doesn't - // cross line boundaries), "word" (across next word), or "group" (to - // the start of next group of word or non-word-non-whitespace - // chars). The visually param controls whether, in right-to-left - // text, direction 1 means to move towards the next index in the - // string, or towards the character to the right of the current - // position. The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosH(doc, pos, dir, unit, visually) { - var line = pos.line, ch = pos.ch, origDir = dir; - var lineObj = getLine(doc, line); - var possible = true; - function findNextLine() { - var l = line + dir; - if (l < doc.first || l >= doc.first + doc.size) return (possible = false); - line = l; - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); - if (next == null) { - if (!boundToLine && findNextLine()) { - if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); - else ch = dir < 0 ? lineObj.text.length : 0; - } else return (possible = false); - } else ch = next; - return true; - } - - if (unit == "char") moveOnce(); - else if (unit == "column") moveOnce(true); - else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) break; - var cur = lineObj.text.charAt(ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) type = "s"; - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce();} - break; - } - - if (type) sawType = type; - if (dir > 0 && !moveOnce(!first)) break; - } - } - var result = skipAtomic(doc, Pos(line, ch), origDir, true); - if (!possible) result.hitSide = true; - return result; - } - - // For relative vertical movement. Dir may be -1 or 1. Unit can be - // "page" or "line". The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - for (;;) { - var target = coordsChar(cm, x, y); - if (!target.outside) break; - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } - y += dir * 5; - } - return target; - } - - // EDITOR METHODS - - // The publicly visible API. Note that methodOp(f) means - // 'wrap f in an operation, performed on its `this` parameter'. - - // This is not the complete set of editor methods. Most of the - // methods defined on the Doc type are also injected into - // CodeMirror.prototype, for backwards compatibility and - // convenience. - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") return; - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - operation(this, optionHandlers[option])(this, value, old); - }, - - getOption: function(option) {return this.options[option];}, - getDoc: function() {return this.doc;}, - - addKeyMap: function(map, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); - }, - removeKeyMap: function(map) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - if (maps[i] == map || maps[i].name == map) { - maps.splice(i, 1); - return true; - } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) throw new Error("Overlays may not be stateful."); - this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; - else dir = dir ? "add" : "subtract"; - } - if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); - }), - indentSelection: methodOp(function(how) { - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) { - var from = range.from(), to = range.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - indentLine(this, j, how); - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); - } else if (range.head.line > end) { - indentLine(this, range.head.line, how, true); - end = range.head.line; - if (i == this.doc.sel.primIndex) ensureCursorVisible(this); - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise); - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) type = styles[2]; - else for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; - else if (styles[mid * 2 + 1] < ch) before = mid + 1; - else { type = styles[mid * 2 + 2]; break; } - } - var cut = type ? type.indexOf("cm-overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) return mode; - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0]; - }, - - getHelpers: function(pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) return found; - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) found.push(help[mode[type]]); - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) found.push(val); - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i = 0; i < help._global.length; i++) { - var cur = help._global[i]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) - found.push(cur.val); - } - return found; - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getStateBefore(this, line + 1, precise); - }, - - cursorCoords: function(start, mode) { - var pos, range = this.doc.sel.primary(); - if (start == null) pos = range.head; - else if (typeof start == "object") pos = clipPos(this.doc, start); - else pos = start ? range.from() : range.to(); - return cursorCoords(this, pos, mode || "page"); - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function(line, mode) { - var end = false, lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) line = this.doc.first; - else if (line > last) { line = last; end = true; } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + - (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - - defaultTextHeight: function() { return textHeight(this.display); }, - defaultCharWidth: function() { return charWidth(this.display); }, - - setGutterMarker: methodOp(function(line, gutterID, value) { - return changeLine(this.doc, line, "gutter", function(line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) line.gutterMarkers = null; - return true; - }); - }), - - clearGutter: methodOp(function(gutterID) { - var cm = this, doc = cm.doc, i = doc.first; - doc.iter(function(line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - line.gutterMarkers[gutterID] = null; - regLineChange(cm, i, "gutter"); - if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; - } - ++i; - }); - }), - - lineInfo: function(line) { - if (typeof line == "number") { - if (!isLine(this.doc, line)) return null; - var n = line; - line = getLine(this.doc, line); - if (!line) return null; - } else { - var n = lineNo(line); - if (n == null) return null; - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets}; - }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - top = pos.top - node.offsetHeight; - else if (pos.bottom + node.offsetHeight <= vspace) - top = pos.bottom; - if (left + node.offsetWidth > hspace) - left = hspace - node.offsetWidth; - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") left = 0; - else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; - node.style.left = left + "px"; - } - if (scroll) - scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - return commands[cmd](this); - }, - - findPosH: function(from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) break; - } - return cur; - }, - - moveH: methodOp(function(dir, unit) { - var cm = this; - cm.extendSelectionsBy(function(range) { - if (cm.display.shift || cm.doc.extend || range.empty()) - return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); - else - return dir < 0 ? range.from() : range.to(); - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - doc.replaceSelection("", null, "+delete"); - else - deleteNearSelection(this, function(range) { - var other = findPosH(doc, range.head, dir, unit, false); - return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; - }); - }), - - findPosV: function(from, amount, unit, goalColumn) { - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) x = coords.left; - else coords.left = x; - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) break; - } - return cur; - }, - - moveV: methodOp(function(dir, unit) { - var cm = this, doc = this.doc, goals = []; - var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function(range) { - if (collapse) - return dir < 0 ? range.from() : range.to(); - var headPos = cursorCoords(cm, range.head, "div"); - if (range.goalColumn != null) headPos.left = range.goalColumn; - goals.push(headPos.left); - var pos = findPosV(cm, headPos, dir, unit); - if (unit == "page" && range == doc.sel.primary()) - addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); - return pos; - }, sel_move); - if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) - doc.sel.ranges[i].goalColumn = goals[i]; - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function(ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} - : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; - while (start > 0 && check(line.charAt(start - 1))) --start; - while (end < line.length && check(line.charAt(end))) ++end; - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) return; - if (this.state.overwrite = !this.state.overwrite) - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - else - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return this.display.input.getField() == activeElt(); }, - - scrollTo: methodOp(function(x, y) { - if (x != null || y != null) resolveScrollToPos(this); - if (x != null) this.curOp.scrollLeft = x; - if (y != null) this.curOp.scrollTop = y; - }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; - }, - - scrollIntoView: methodOp(function(range, margin) { - if (range == null) { - range = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) margin = this.options.cursorScrollMargin; - } else if (typeof range == "number") { - range = {from: Pos(range, 0), to: null}; - } else if (range.from == null) { - range = {from: range, to: null}; - } - if (!range.to) range.to = range.from; - range.margin = margin || 0; - - if (range.from.line != null) { - resolveScrollToPos(this); - this.curOp.scrollToPos = range; - } else { - var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), - Math.min(range.from.top, range.to.top) - range.margin, - Math.max(range.from.right, range.to.right), - Math.max(range.from.bottom, range.to.bottom) + range.margin); - this.scrollTo(sPos.scrollLeft, sPos.scrollTop); - } - }), - - setSize: methodOp(function(width, height) { - var cm = this; - function interpret(val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - } - if (width != null) cm.display.wrapper.style.width = interpret(width); - if (height != null) cm.display.wrapper.style.height = interpret(height); - if (cm.options.lineWrapping) clearLineMeasurementCache(this); - var lineNo = cm.display.viewFrom; - cm.doc.iter(lineNo, cm.display.viewTo, function(line) { - if (line.widgets) for (var i = 0; i < line.widgets.length; i++) - if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } - ++lineNo; - }); - cm.curOp.forceUpdate = true; - signal(cm, "refresh", this); - }), - - operation: function(f){return runInOp(this, f);}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) - estimateLineHeights(this); - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - this.scrollTo(doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - - getInputField: function(){return this.display.input.getField();}, - getWrapperElement: function(){return this.display.wrapper;}, - getScrollerElement: function(){return this.display.scroller;}, - getGutterElement: function(){return this.display.gutters;} - }; - eventMixin(CodeMirror); - - // OPTION DEFAULTS - - // The default configuration options. - var defaults = CodeMirror.defaults = {}; - // Functions to run when options are changed. - var optionHandlers = CodeMirror.optionHandlers = {}; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) optionHandlers[name] = - notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; - } - - // Passed to option handlers when there is no old value. - var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function(cm, val) { - cm.setValue(val); - }, true); - option("mode", null, function(cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function(cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - if (old != CodeMirror.Init) cm.refresh(); - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function() { - throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME - }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function(cm) { - themeChanged(cm); - guttersChanged(cm); - }, true); - option("keyMap", "default", function(cm, val, old) { - var next = getKeyMap(val); - var prev = old != CodeMirror.Init && getKeyMap(old); - if (prev && prev.detach) prev.detach(cm, next); - if (next.attach) next.attach(cm, prev || null); - }); - option("extraKeys", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("fixedGutter", true, function(cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); - option("scrollbarStyle", "native", function(cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function(cm) { - setGuttersForLineNumbers(cm.options); - guttersChanged(cm); - }, true); - option("firstLineNumber", 1, guttersChanged, true); - option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - - option("readOnly", false, function(cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - cm.display.disabled = true; - } else { - cm.display.disabled = false; - if (!val) cm.display.input.reset(); - } - }); - option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); - option("dragDrop", true, dragDropChanged); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function(cm){cm.refresh();}, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function(cm, val) { - if (!val) cm.display.input.resetPosition(); - }); - - option("tabindex", null, function(cm, val) { - cm.display.input.getField().tabIndex = val || ""; - }); - option("autofocus", null); - - // MODE DEFINITION AND QUERYING - - // Known modes, by name and by MIME - var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - CodeMirror.defineMode = function(name, mode) { - if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; - }; - - CodeMirror.defineMIME = function(mime, spec) { - mimeModes[mime] = spec; - }; - - // Given a MIME type, a {name, ...options} config object, or a name - // string, return a mode config object. - CodeMirror.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") found = {name: found}; - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return CodeMirror.resolveMode("application/xml"); - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; - }; - - // Given a mode spec (anything that resolveMode accepts), find and - // initialize an actual mode object. - CodeMirror.getMode = function(options, spec) { - var spec = CodeMirror.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) return CodeMirror.getMode(options, "text/plain"); - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) continue; - if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) modeObj.helperType = spec.helperType; - if (spec.modeProps) for (var prop in spec.modeProps) - modeObj[prop] = spec.modeProps[prop]; - - return modeObj; - }; - - // Minimal default mode. - CodeMirror.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; - }); - CodeMirror.defineMIME("text/plain", "null"); - - // This can be used to attach properties to mode objects from - // outside the actual mode definition. - var modeExtensions = CodeMirror.modeExtensions = {}; - CodeMirror.extendMode = function(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); - }; - - // EXTENSIONS - - CodeMirror.defineExtension = function(name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function(name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.defineOption = option; - - var initHooks = []; - CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; - - var helpers = CodeMirror.helpers = {}; - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; - - // MODE STATE HANDLING - - // Utility functions for working with state. Exported because nested - // modes need to do this for their inner modes. - - var copyState = CodeMirror.copyState = function(mode, state) { - if (state === true) return state; - if (mode.copyState) return mode.copyState(state); - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) val = val.concat([]); - nstate[n] = val; - } - return nstate; - }; - - var startState = CodeMirror.startState = function(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - }; - - // Given a mode and a state (for that mode), find the inner mode and - // state at the position that the state refers to. - CodeMirror.innerMode = function(mode, state) { - while (mode.innerMode) { - var info = mode.innerMode(state); - if (!info || info.mode == mode) break; - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state}; - }; - - // STANDARD COMMANDS - - // Commands are parameter-less actions that can be performed on an - // editor, mostly used for keybindings. - var commands = CodeMirror.commands = { - selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, - singleSelection: function(cm) { - cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function(cm) { - deleteNearSelection(cm, function(range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - return {from: range.head, to: Pos(range.head.line + 1, 0)}; - else - return {from: range.head, to: Pos(range.head.line, len)}; - } else { - return {from: range.from(), to: range.to()}; - } - }); - }, - deleteLine: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; - }); - }, - delLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - return {from: Pos(range.from().line, 0), to: range.from()}; - }); - }, - delWrappedLineLeft: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()}; - }); - }, - delWrappedLineRight: function(cm) { - deleteNearSelection(cm, function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos }; - }); - }, - undo: function(cm) {cm.undo();}, - redo: function(cm) {cm.redo();}, - undoSelection: function(cm) {cm.undoSelection();}, - redoSelection: function(cm) {cm.redoSelection();}, - goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, - goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, - goLineStart: function(cm) { - cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1}); - }, - goLineStartSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - return lineStartSmart(cm, range.head); - }, {origin: "+move", bias: 1}); - }, - goLineEnd: function(cm) { - cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1}); - }, - goLineRight: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - }, sel_move); - }, - goLineLeft: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div"); - }, sel_move); - }, - goLineLeftSmart: function(cm) { - cm.extendSelectionsBy(function(range) { - var top = cm.charCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); - return pos; - }, sel_move); - }, - goLineUp: function(cm) {cm.moveV(-1, "line");}, - goLineDown: function(cm) {cm.moveV(1, "line");}, - goPageUp: function(cm) {cm.moveV(-1, "page");}, - goPageDown: function(cm) {cm.moveV(1, "page");}, - goCharLeft: function(cm) {cm.moveH(-1, "char");}, - goCharRight: function(cm) {cm.moveH(1, "char");}, - goColumnLeft: function(cm) {cm.moveH(-1, "column");}, - goColumnRight: function(cm) {cm.moveH(1, "column");}, - goWordLeft: function(cm) {cm.moveH(-1, "word");}, - goGroupRight: function(cm) {cm.moveH(1, "group");}, - goGroupLeft: function(cm) {cm.moveH(-1, "group");}, - goWordRight: function(cm) {cm.moveH(1, "word");}, - delCharBefore: function(cm) {cm.deleteH(-1, "char");}, - delCharAfter: function(cm) {cm.deleteH(1, "char");}, - delWordBefore: function(cm) {cm.deleteH(-1, "word");}, - delWordAfter: function(cm) {cm.deleteH(1, "word");}, - delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, - delGroupAfter: function(cm) {cm.deleteH(1, "group");}, - indentAuto: function(cm) {cm.indentSelection("smart");}, - indentMore: function(cm) {cm.indentSelection("add");}, - indentLess: function(cm) {cm.indentSelection("subtract");}, - insertTab: function(cm) {cm.replaceSelection("\t");}, - insertSoftTab: function(cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); - } - cm.replaceSelections(spaces); - }, - defaultTab: function(cm) { - if (cm.somethingSelected()) cm.indentSelection("add"); - else cm.execCommand("insertTab"); - }, - transposeChars: function(cm) { - runInOp(cm, function() { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) - cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function(cm) { - runInOp(cm, function() { - var len = cm.listSelections().length; - for (var i = 0; i < len; i++) { - var range = cm.listSelections()[i]; - cm.replaceRange("\n", range.anchor, range.head, "+input"); - cm.indentLine(range.from().line + 1, null, true); - ensureCursorVisible(cm); - } - }); - }, - toggleOverwrite: function(cm) {cm.toggleOverwrite();} - }; - - - // STANDARD KEYMAPS - - var keyMap = CodeMirror.keyMap = {}; - - keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - // Note that the save and find-related commands aren't defined by - // default. User code or addons can define them. Unknown commands - // are simply ignored. - keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - fallthrough: "basic" - }; - // Very basic readline/emacs-style bindings, which are standard on Mac. - keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", - "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - fallthrough: ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - - // KEYMAP DISPATCH - - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; - else if (/^a(lt)?$/i.test(mod)) alt = true; - else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; - else if (/^s(hift)$/i.test(mod)) shift = true; - else throw new Error("Unrecognized modifier name: " + mod); - } - if (alt) name = "Alt-" + name; - if (ctrl) name = "Ctrl-" + name; - if (cmd) name = "Cmd-" + name; - if (shift) name = "Shift-" + name; - return name; - } - - // This is a kludge to keep keymaps mostly working as raw objects - // (backwards compatibility) while at the same time support features - // like normalization and multi-stroke key bindings. It compiles a - // new normalized keymap, and then updates the old object to reflect - // this. - CodeMirror.normalizeKeyMap = function(keymap) { - var copy = {}; - for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; - if (value == "...") { delete keymap[keyname]; continue; } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val, name; - if (i == keys.length - 1) { - name = keyname; - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) copy[name] = val; - else if (prev != val) throw new Error("Inconsistent bindings for " + name); - } - delete keymap[keyname]; - } - for (var prop in copy) keymap[prop] = copy[prop]; - return keymap; - }; - - var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { - map = getKeyMap(map); - var found = map.call ? map.call(key, context) : map[key]; - if (found === false) return "nothing"; - if (found === "...") return "multi"; - if (found != null && handle(found)) return "handled"; - - if (map.fallthrough) { - if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") - return lookupKey(key, map.fallthrough, handle, context); - for (var i = 0; i < map.fallthrough.length; i++) { - var result = lookupKey(key, map.fallthrough[i], handle, context); - if (result) return result; - } - } - }; - - // Modifier key presses don't count as 'real' key presses for the - // purpose of keymap fallthrough. - var isModifierKey = CodeMirror.isModifierKey = function(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - }; - - // Look up the name of a key as indicated by an event object. - var keyName = CodeMirror.keyName = function(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) return false; - var base = keyNames[event.keyCode], name = base; - if (name == null || event.altGraphKey) return false; - if (event.altKey && base != "Alt") name = "Alt-" + name; - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; - if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; - return name; - }; - - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - - // FROMTEXTAREA - - CodeMirror.fromTextArea = function(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) - options.tabindex = textarea.tabIndex; - if (!options.placeholder && textarea.placeholder) - options.placeholder = textarea.placeholder; - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form, realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function() { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - options.finishInit = function(cm) { - cm.save = save; - cm.getTextArea = function() { return textarea; }; - cm.toTextArea = function() { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (typeof textarea.form.submit == "function") - textarea.form.submit = realSubmit; - } - }; - }; - - textarea.style.display = "none"; - var cm = CodeMirror(function(node) { - textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - return cm; - }; - - // STRING STREAM - - // Fed to the mode parsers, provides helper functions to make - // parsers more succinct. - - var StringStream = CodeMirror.StringStream = function(string, tabSize) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - }; - - StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == this.lineStart;}, - peek: function() {return this.string.charAt(this.pos) || undefined;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - indentation: function() { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } - }; - - // TEXTMARKERS - - // Created with markText and setBookmark methods. A TextMarker is a - // handle that can be used to clear or find a marked position in the - // document. Line objects hold arrays (markedSpans) containing - // {from, to, marker} object pointing to such marker objects, and - // indicating that such a marker is present on that line. Multiple - // lines may point to the same marker when it spans across lines. - // The spans will have null for their from/to properties when the - // marker continues beyond the start/end of the line. Markers have - // links back to the lines they currently touch. - - var nextMarkerId = 0; - - var TextMarker = CodeMirror.TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - eventMixin(TextMarker); - - // Clear the marker. - TextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) startOperation(cm); - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) signalLater(this, "clear", found.from, found.to); - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); - else if (cm) { - if (span.to != null) max = lineNo(line); - if (span.from != null) min = lineNo(line); - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) - updateLineHeight(line, textHeight(cm.display)); - } - if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { - var visual = visualLine(this.lines[i]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - - if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) reCheckSelection(cm.doc); - } - if (cm) signalLater(cm, "markerCleared", cm, this); - if (withOp) endOperation(cm); - if (this.parent) this.parent.clear(); - }; - - // Find the position of the marker in the document. Returns a {from, - // to} object by default. Side can be passed to get a specific side - // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the - // Pos objects returned contain a line object, rather than a line - // number (used to prevent looking up the same line twice). - TextMarker.prototype.find = function(side, lineObj) { - if (side == null && this.type == "bookmark") side = 1; - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) return from; - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) return to; - } - } - return from && {from: from, to: to}; - }; - - // Signals that the marker's widget changed, and surrounding layout - // should be recomputed. - TextMarker.prototype.changed = function() { - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) return; - runInOp(cm, function() { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - updateLineHeight(line, line.height + dHeight); - } - }); - }; - - TextMarker.prototype.attachLine = function(line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function(line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - - // Collapsed markers have unique ids, in order to be able to order - // them, which is needed for uniquely determining an outer marker - // when they overlap (they may nest, but not partially overlap). - var nextMarkerId = 0; - - // Create a marker, wire it up to the right lines, and - function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) return markTextShared(doc, from, to, options, type); - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) copyObj(options, marker, false); - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - return marker; - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); - if (options.insertLeft) marker.widgetNode.insertLeft = true; - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - sawCollapsedSpans = true; - } - - if (marker.addToHistory) - addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function(line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - updateMaxLine = true; - if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null)); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { - if (lineIsHidden(doc, line)) updateLineHeight(line, 0); - }); - - if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); - - if (marker.readOnly) { - sawReadOnlySpans = true; - if (doc.history.done.length || doc.history.undone.length) - doc.clearHistory(); - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) cm.curOp.updateMaxLine = true; - if (marker.collapsed) - regChange(cm, from.line, to.line + 1); - else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) - for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); - if (marker.atomic) reCheckSelection(cm.doc); - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - - // SHARED TEXTMARKERS - - // A shared marker spans multiple linked documents. It is - // implemented as a meta-marker-object controlling multiple normal - // markers. - var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - markers[i].parent = this; - }; - eventMixin(SharedTextMarker); - - SharedTextMarker.prototype.clear = function() { - if (this.explicitlyCleared) return; - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - this.markers[i].clear(); - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function(side, lineObj) { - return this.primary.find(side, lineObj); - }; - - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function(doc) { - if (widget) options.widgetNode = widget.cloneNode(true); - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - if (doc.linked[i].isParent) return; - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), - function(m) { return m.parent; }); - } - - function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - - function detachSharedMarkers(markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], linked = [marker.primary.doc];; - linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - } - } - - // TEXTMARKER SPANS - - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; - } - - // Search an array of spans for a span matching the given marker. - function getMarkedSpanFor(spans, marker) { - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) return span; - } - } - // Remove a span from an array, returning undefined if no spans are - // left (we don't store arrays for lines without spans). - function removeMarkedSpan(spans, span) { - for (var r, i = 0; i < spans.length; ++i) - if (spans[i] != span) (r || (r = [])).push(spans[i]); - return r; - } - // Add a span to a line. - function addMarkedSpan(line, span) { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - span.marker.attachLine(line); - } - - // Used for the algorithm that adjusts markers for a change in the - // document. These functions cut an array of spans at a given - // character position, returning an array of remaining chunks (or - // undefined if nothing remains). - function markedSpansBefore(old, startCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - if (old) for (var i = 0, nw; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } - return nw; - } - - // Given a change object, compute the new set of marker spans that - // cover the line in which the change took place. Removes spans - // entirely within the change, reconnects spans belonging to the - // same marker that appear on both sides of the change, and cuts off - // spans partially within the change. Returns an array of span - // arrays with one element for each line in (after) the change. - function stretchSpansOverChange(doc, change) { - if (change.full) return null; - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) return null; - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) span.to = startCh; - else if (sameLine) span.to = found.to == null ? null : found.to + offset; - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i = 0; i < last.length; ++i) { - var span = last[i]; - if (span.to != null) span.to += offset; - if (span.from == null) { - var found = getMarkedSpanFor(first, span.marker); - if (!found) { - span.from = offset; - if (sameLine) (first || (first = [])).push(span); - } - } else { - span.from += offset; - if (sameLine) (first || (first = [])).push(span); - } - } - } - // Make sure we didn't create any zero-length spans - if (first) first = clearEmptySpans(first); - if (last && last != first) last = clearEmptySpans(last); - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - for (var i = 0; i < first.length; ++i) - if (first[i].to == null) - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); - for (var i = 0; i < gap; ++i) - newMarkers.push(gapMarkers); - newMarkers.push(last); - } - return newMarkers; - } - - // Remove spans that are empty and don't have a clearWhenEmpty - // option of false. - function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - spans.splice(i--, 1); - } - if (!spans.length) return null; - return spans; - } - - // Used for un/re-doing changes from the history. Combines the - // result of computing the existing spans with the set of spans that - // existed in the history (so that deleting around a span and then - // undoing brings back the span). - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) return stretched; - if (!stretched) return old; - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - if (oldCur[k].marker == span.marker) continue spans; - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old; - } - - // Used to 'clip' out readOnly ranges when making a change. - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function(line) { - if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - (markers || (markers = [])).push(mark); - } - }); - if (!markers) return null; - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - newParts.push({from: p.from, to: m.from}); - if (dto > 0 || !mk.inclusiveRight && !dto) - newParts.push({from: m.to, to: p.to}); - parts.splice.apply(parts, newParts); - j += newParts.length - 1; - } - } - return parts; - } - - // Connect or disconnect spans from a line. - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.detachLine(line); - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) return; - for (var i = 0; i < spans.length; ++i) - spans[i].marker.attachLine(line); - line.markedSpans = spans; - } - - // Helpers used when computing which overlapping collapsed span - // counts as the larger one. - function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } - function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } - - // Returns a number indicating which of two overlapping collapsed - // spans is larger (and thus includes the other). Falls back to - // comparing ids when the spans cover exactly the same range. - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) return lenDiff; - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) return -fromCmp; - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) return toCmp; - return b.id - a.id; - } - - // Find out whether a line ends or starts in a collapsed span. If - // so, return the marker for that span. - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - found = sp.marker; - } - return found; - } - function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } - function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } - - // Test whether there exists a collapsed span that partially - // overlaps (covers the start or end, but not both) of a new span. - // Such overlap is not allowed. - function conflictingCollapsedRange(doc, lineNo, from, to, marker) { - var line = getLine(doc, lineNo); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) continue; - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; - if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || - fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) - return true; - } - } - - // A visual line is a line as drawn on the screen. Folding, for - // example, can cause multiple logical lines to appear on the same - // visual line. This finds the start of the visual line that the - // given line is part of (usually that is the line itself). - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - line = merged.find(-1, true).line; - return line; - } - - // Returns an array of logical lines that continue the visual line - // started by the argument, or undefined if there are no such lines. - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - - // Get the line number of the start of the visual line that the - // given line number is part of. - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) return lineN; - return lineNo(vis); - } - // Get the line number of the start of the next visual line after - // the given line. - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) return lineN; - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) return lineN; - while (merged = collapsedSpanAtEnd(line)) - line = merged.find(1, true).line; - return lineNo(line) + 1; - } - - // Compute whether a line is hidden. Lines count as hidden when they - // are part of a visual line that starts with another line, or when - // they are entirely covered by collapsed, non-widget span. - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) for (var sp, i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) continue; - if (sp.from == null) return true; - if (sp.marker.widgetNode) continue; - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - return true; - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) - return true; - for (var sp, i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) return true; - } - } - - // LINE WIDGETS - - // Line widgets are block elements displayed above or below a line. - - var LineWidget = CodeMirror.LineWidget = function(doc, node, options) { - if (options) for (var opt in options) if (options.hasOwnProperty(opt)) - this[opt] = options[opt]; - this.doc = doc; - this.node = node; - }; - eventMixin(LineWidget); - - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - addToScrollPos(cm, null, diff); - } - - LineWidget.prototype.clear = function() { - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) return; - for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); - if (!ws.length) line.widgets = null; - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) runInOp(cm, function() { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - }; - LineWidget.prototype.changed = function() { - var oldH = this.height, cm = this.doc.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) return; - updateLineHeight(line, line.height + diff); - if (cm) runInOp(cm, function() { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - }); - }; - - function widgetHeight(widget) { - if (widget.height != null) return widget.height; - var cm = widget.doc.cm; - if (!cm) return 0; - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; - if (widget.noHScroll) - parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.offsetHeight; - } - - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) cm.display.alignWidgets = true; - changeLine(doc, handle, "widget", function(line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) widgets.push(widget); - else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) addToScrollPos(cm, null, widget.height); - cm.curOp.forceUpdate = true; - } - return true; - }); - return widget; - } - - // LINE DATA STRUCTURE - - // Line objects. These hold state related to a line, including - // highlighting info (the styles array). - var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; - }; - eventMixin(Line); - Line.prototype.lineNo = function() { return lineNo(this); }; - - // Change the content (text, markers) of a line. Automatically - // invalidates cached information and tries to re-estimate the - // line's height. - function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) line.stateAfter = null; - if (line.styles) line.styles = null; - if (line.order != null) line.order = null; - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) updateLineHeight(line, estHeight); - } - - // Detach a line from the document tree and its markers. - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - - function extractLineClasses(type, output) { - if (type) for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) break; - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - output[prop] = lineClass[2]; - else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) - output[prop] += " " + lineClass[2]; - } - return type; - } - - function callBlankLine(mode, state) { - if (mode.blankLine) return mode.blankLine(state); - if (!mode.innerMode) return; - var inner = CodeMirror.innerMode(mode, state); - if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); - } - - function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; - var style = mode.token(stream, state); - if (stream.pos > stream.start) return style; - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - - // Utility for getTokenAt and getLineTokens - function takeToken(cm, pos, precise, asArray) { - function getObj(copy) { - return {start: stream.start, end: stream.pos, - string: stream.current(), - type: style || null, - state: copy ? copyState(doc.mode, state) : state}; - } - - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize), tokens; - if (asArray) tokens = []; - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, state); - if (asArray) tokens.push(getObj(true)); - } - return asArray ? tokens : getObj(); - } - - // Run the given mode's parser over a line, calling f for each token. - function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) processLine(cm, text, state, stream.pos); - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) style = "m-" + (style ? mName + " " + style : mName); - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 50000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 characters - var pos = Math.min(stream.pos, curStart + 50000); - f(pos, curStyle); - curStart = pos; - } - } - - // Compute a style array (an array starting with a mode generation - // -- for invalidation -- followed by pairs of end positions and - // style strings), which is used to highlight the tokens on the - // line. - function highlightLine(cm, line, state, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, state, function(end, style) { - st.push(end, style); - }, lineClasses, forceToEnd); - - // Run overlays, adjust style array. - for (var o = 0; o < cm.state.overlays.length; ++o) { - var overlay = cm.state.overlays[o], i = 1, at = 0; - runMode(cm, line.text, overlay.mode, true, function(end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - st.splice(i, 1, end, st[i+1], i_end); - i += 2; - at = Math.min(end, i_end); - } - if (!style) return; - if (overlay.opaque) { - st.splice(start, i - start, end, "cm-overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; - } - } - }, lineClasses); - } - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; - } - - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); - line.styles = result.styles; - if (result.classes) line.styleClasses = result.classes; - else if (line.styleClasses) line.styleClasses = null; - if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; - } - return line.styles; - } - - // Lightweight form of highlight -- proceed over this line and - // update state, but don't save a style array. Used for lines that - // aren't currently visible. - function processLine(cm, text, state, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize); - stream.start = stream.pos = startAt || 0; - if (text == "") callBlankLine(mode, state); - while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { - readToken(mode, stream, state); - stream.start = stream.pos; - } - } - - // Convert a style as returned by a mode (either null, or a string - // containing one or more styles) to a CSS style. This is cached, - // and also looks for line-wide styles. - var styleToClassCache = {}, styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) return null; - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - - // Render the DOM representation of the text of a line. Also builds - // up a 'line map', which points at the DOM nodes that represent - // specific stretches of text, and is used by the measuring code. - // The returned object contains the DOM node, this map, and - // information about line-wide styles that were set by the mode. - function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: elt("pre", [content]), content: content, - col: 0, pos: 0, cm: cm, - splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order; - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) - builder.addToken = buildTokenBadBidi(builder.addToken, order); - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - if (line.styleClasses.textClass) - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) - builder.content.className = "cm-tab-wrap-hack"; - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - - return builder; - } - - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token; - } - - // Build up the DOM representation for a single token, and add it to - // the line map. Takes care to render special characters separately. - function buildToken(builder, text, style, startStyle, endStyle, title, css) { - if (!text) return; - var displayText = builder.splitSpaces ? text.replace(/ {3,}/g, splitSpaces) : text; - var special = builder.cm.state.specialChars, mustWrap = false; - if (!special.test(text)) { - builder.col += text.length; - var content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) mustWrap = true; - builder.pos += text.length; - } else { - var content = document.createDocumentFragment(), pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) break; - pos += skipped + 1; - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt.setAttribute("role", "presentation"); - txt.setAttribute("cm-text", "\t"); - builder.col += tabWidth; - } else { - var txt = builder.cm.options.specialCharPlaceholder(m[0]); - txt.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); - else content.appendChild(txt); - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt); - builder.pos++; - } - } - if (style || startStyle || endStyle || mustWrap || css) { - var fullStyle = style || ""; - if (startStyle) fullStyle += startStyle; - if (endStyle) fullStyle += endStyle; - var token = elt("span", [content], fullStyle, css); - if (title) token.title = title; - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - - function splitSpaces(old) { - var out = " "; - for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; - out += " "; - return out; - } - - // Work around nonsense dimensions being reported for stretches of - // right-to-left text. - function buildTokenBadBidi(inner, order) { - return function(builder, text, style, startStyle, endStyle, title, css) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - for (var i = 0; i < order.length; i++) { - var part = order[i]; - if (part.to > start && part.from <= start) break; - } - if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css); - inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) builder.map.push(builder.pos, builder.pos + size, widget); - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - widget = builder.content.appendChild(document.createElement("span")); - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - } - - // Outputs a number of spans to make up a line, taking highlighting - // and marked text into account. - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i = 1; i < styles.length; i+=2) - builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); - return; - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = title = css = ""; - collapsed = null; nextChange = Infinity; - var foundBookmarks = []; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (sp.from <= pos && (sp.to == null || sp.to > pos)) { - if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } - if (m.className) spanStyle += " " + m.className; - if (m.css) css = m.css; - if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; - if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; - if (m.title && !title) title = m.title; - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - collapsed = sp; - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) return; - } - if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) - buildCollapsedSpan(builder, 0, foundBookmarks[j]); - } - if (pos >= len) break; - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } - } - - // DOCUMENT DATA STRUCTURE - - // By default, updates that start and end at the beginning of a line - // are treated specially, in order to make the association of line - // widgets and marker elements with the text behave more intuitive. - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - - // Perform a change on the document data structure. - function updateDoc(doc, change, markedSpans, estimateHeight) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null;} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - for (var i = start, result = []; i < end; ++i) - result.push(new Line(text[i], spansFor(i), estimateHeight)); - return result; - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) doc.remove(from.line, nlines); - if (added.length) doc.insert(from.line, added); - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added = linesFor(1, text.length - 1); - added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added = linesFor(1, text.length - 1); - if (nlines > 1) doc.remove(from.line + 1, nlines - 1); - doc.insert(from.line + 1, added); - } - - signalLater(doc, "change", doc, change); - } - - // The document is represented as a BTree consisting of leaves, with - // chunk of lines in them, and branches, with up to ten leaves or - // other branch nodes below them. The top node is always a branch - // node, and is the document object itself (meaning it has - // additional methods and properties). - // - // All nodes have parent links. The tree is used both to go from - // line numbers to line objects, and to go from objects to numbers. - // It also indexes by height, and is used to convert between height - // and line object, and to find the total height of the document. - // - // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - for (var i = 0, height = 0; i < lines.length; ++i) { - lines[i].parent = this; - height += lines[i].height; - } - this.height = height; - } - - LeafChunk.prototype = { - chunkSize: function() { return this.lines.length; }, - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - for (var i = at, e = at + n; i < e; ++i) { - var line = this.lines[i]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) lines[i].parent = this; - }, - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - for (var e = at + n; at < e; ++at) - if (op(this.lines[at])) return true; - } - }; - - function BranchChunk(children) { - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - - BranchChunk.prototype = { - chunkSize: function() { return this.size; }, - removeInner: function(at, n) { - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) break; - at = 0; - } else at -= sz; - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function(lines) { - for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); - }, - insertInner: function(at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - while (child.lines.length > 50) { - var spilled = child.lines.splice(child.lines.length - 25, 25); - var newleaf = new LeafChunk(spilled); - child.height -= newleaf.height; - this.children.splice(i + 1, 0, newleaf); - newleaf.parent = this; - } - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) return; - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function(at, n, op) { - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) return true; - if ((n -= used) == 0) break; - at = 0; - } else at -= sz; - } - } - }; - - var nextDocId = 0; - var Doc = CodeMirror.Doc = function(text, mode, firstLine) { - if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); - if (firstLine == null) firstLine = 0; - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.frontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - - if (typeof text == "string") text = splitLines(text); - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) this.iterN(from - this.first, to - from, op); - else this.iterN(this.first, this.first + this.size, from); - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) height += lines[i].height; - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: splitLines(code), origin: "setValue", full: true}, true); - setSelection(this, simpleSelection(top)); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) return lines; - return lines.join(lineSep || "\n"); - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, - - getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, - getLineNumber: function(line) {return lineNo(line);}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") line = getLine(this, line); - return visualLine(line); - }, - - lineCount: function() {return this.size;}, - firstLine: function() {return this.first;}, - lastLine: function() {return this.first + this.size - 1;}, - - clipPos: function(pos) {return clipPos(this, pos);}, - - getCursor: function(start) { - var range = this.sel.primary(), pos; - if (start == null || start == "head") pos = range.head; - else if (start == "anchor") pos = range.anchor; - else if (start == "end" || start == "to" || start === false) pos = range.to(); - else pos = range.from(); - return pos; - }, - listSelections: function() { return this.sel.ranges; }, - somethingSelected: function() {return this.sel.somethingSelected();}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads, options)); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - extendSelections(this, map(this.sel.ranges, f), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - if (!ranges.length) return; - for (var i = 0, out = []; i < ranges.length; i++) - out[i] = new Range(clipPos(this, ranges[i].anchor), - clipPos(this, ranges[i].head)); - if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); - setSelection(this, normalizeSelection(out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) return lines; - else return lines.join(lineSep || "\n"); - }, - getSelections: function(lineSep) { - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) sel = sel.join(lineSep || "\n"); - parts[i] = sel; - } - return parts; - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - dup[i] = code; - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i = changes.length - 1; i >= 0; i--) - makeChange(this, changes[i]); - if (newSel) setSelectionReplaceHistory(this, newSel); - else if (this.cm) ensureCursorVisible(this.cm); - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend;}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; - for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; - return {undo: done, redo: undone}; - }, - clearHistory: function() {this.history = new History(this.history.maxGeneration);}, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)}; - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history.maxGeneration); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) line[prop] = cls; - else if (classTest(cls).test(line[prop])) return false; - else line[prop] += " " + cls; - return true; - }); - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) return false; - else if (cls == null) line[prop] = null; - else { - var found = cur.match(classTest(cls)); - if (!found) return false; - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - removeLineWidget: function(widget) { widget.clear(); }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - markers.push(span.marker.parent || span.marker); - } - return markers; - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo = from.line; - this.iter(from.line, to.line + 1, function(line) { - var spans = line.markedSpans; - if (spans) for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(lineNo == from.line && from.ch > span.to || - span.from == null && lineNo != from.line|| - lineNo == to.line && span.from > to.ch) && - (!filter || filter(span.marker))) - found.push(span.marker.parent || span.marker); - } - ++lineNo; - }); - return found; - }, - getAllMarks: function() { - var markers = []; - this.iter(function(line) { - var sps = line.markedSpans; - if (sps) for (var i = 0; i < sps.length; ++i) - if (sps[i].from != null) markers.push(sps[i].marker); - }); - return markers; - }, - - posFromIndex: function(off) { - var ch, lineNo = this.first; - this.iter(function(line) { - var sz = line.text.length + 1; - if (sz > off) { ch = off; return true; } - off -= sz; - ++lineNo; - }); - return clipPos(this, Pos(lineNo, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) return 0; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + 1; - }); - return index; - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - - linkedDoc: function(options) { - if (!options) options = {}; - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) from = options.from; - if (options.to != null && options.to < to) to = options.to; - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); - if (options.sharedHist) copy.history = this.history; - (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function(other) { - if (other instanceof CodeMirror) other = other.doc; - if (this.linked) for (var i = 0; i < this.linked.length; ++i) { - var link = this.linked[i]; - if (link.doc != other) continue; - this.linked.splice(i, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode;}, - getEditor: function() {return this.cm;} - }); - - // Public alias. - Doc.prototype.eachLine = Doc.prototype.iter; - - // Set up methods on CodeMirror's prototype to redirect to the editor's document. - var dontDelegate = "iter insert remove copy getEditor".split(" "); - for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - CodeMirror.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments);}; - })(Doc.prototype[prop]); - - eventMixin(Doc); - - // Call f for all linked documents. - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) continue; - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) continue; - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } - } - propagate(doc, null, true); - } - - // Attach a document to an editor. - function attachDoc(cm, doc) { - if (doc.cm) throw new Error("This document is already in use."); - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - if (!cm.options.lineWrapping) findMaxLine(cm); - cm.options.mode = doc.modeOption; - regChange(cm); - } - - // LINE UTILITIES - - // Find the line object corresponding to the given line number. - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); - for (var chunk = doc; !chunk.lines;) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break; } - n -= sz; - } - } - return chunk.lines[n]; - } - - // Get the part of a document between two positions, as an array of - // strings. - function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function(line) { - var text = line.text; - if (n == end.line) text = text.slice(0, end.ch); - if (n == start.line) text = text.slice(start.ch); - out.push(text); - ++n; - }); - return out; - } - // Get the lines between from and to, as array of strings. - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function(line) { out.push(line.text); }); - return out; - } - - // Update the height of a line, propagating the height change - // upwards to parent nodes. - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) for (var n = line; n; n = n.parent) n.height += diff; - } - - // Given a line object, find its line number by walking up through - // its parent links. - function lineNo(line) { - if (line.parent == null) return null; - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) break; - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first; - } - - // Find the line at the given vertical position, using the height - // information in the document tree. - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i = 0; i < chunk.children.length; ++i) { - var child = chunk.children[i], ch = child.height; - if (h < ch) { chunk = child; continue outer; } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) break; - h -= lh; - } - return n + i; - } - - - // Find the height above the given line. - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) break; - else h += line.height; - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i = 0; i < p.children.length; ++i) { - var cur = p.children[i]; - if (cur == chunk) break; - else h += cur.height; - } - } - return h; - } - - // Get the bidi ordering for the given line (and cache it). Returns - // false for lines that are fully left-to-right, and an array of - // BidiSpan objects otherwise. - function getOrder(line) { - var order = line.order; - if (order == null) order = line.order = bidiOrdering(line.text); - return order; - } - - // HISTORY - - function History(startGen) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = startGen || 1; - } - - // Create a history change event from an updateDoc-style change - // object. - function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); - return histChange; - } - - // Pop all selection events off the end of a history array. Stop at - // a change event. - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) array.pop(); - else break; - } - } - - // Find the top change event in the history. Pop off selection - // events that are in the way. - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - - // Register a change in the history. Merges changes that are within - // a single operation, ore are close together with an origin that - // allows merging (starting with "+") into a single event. - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - var last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - pushSelectionToHistory(doc.sel, hist.done); - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) hist.done.shift(); - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) signal(doc, "historyAdded"); - } - - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - - // Called whenever the selection changes, sets the new selection as - // the pending selection in the history, and pushes the old pending - // selection into the 'done' array when it was significantly - // different (in number of selected ranges, emptiness, or time). - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - hist.done[hist.done.length - 1] = sel; - else - pushSelectionToHistory(sel, hist.done); - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - clearSelectionEvents(hist.undone); - } - - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - dest.push(sel); - } - - // Used to store marked span information in the history. - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { - if (line.markedSpans) - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - ++n; - }); - } - - // When un/re-doing restores text containing marked spans, those - // that have been explicitly cleared should not be restored. - function removeClearedSpans(spans) { - if (!spans) return null; - for (var i = 0, out; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } - else if (out) out.push(spans[i]); - } - return !out ? spans : out.length ? out : null; - } - - // Retrieve and filter the old marked spans stored in a change event. - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) return null; - for (var i = 0, nw = []; i < change.text.length; ++i) - nw.push(removeClearedSpans(found[i])); - return nw; - } - - // Used both to provide a JSON-safe object in .getHistory, and, when - // detaching a document, to split the history in two - function copyHistoryArray(events, newGroup, instantiateSel) { - for (var i = 0, copy = []; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m; - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } - } - } - return copy; - } - - // Rebasing/resetting history to deal with externally-sourced changes - - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - - // Tries to rebase an array of history events given a change in the - // document. If the change touches the same lines as the event, the - // event, and everything 'behind' it, is discarded. If the change is - // before the event, the event's positions are updated. Uses a - // copy-on-write scheme for the positions, to avoid having to - // reallocate them all on every rebase, but also avoid problems with - // shared position objects being unsafely updated. - function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j = 0; j < sub.changes.length; ++j) { - var cur = sub.changes[j]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } - } - - function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - - // EVENT UTILITIES - - // Due to the fact that we still support jurassic IE versions, some - // compatibility wrappers are needed. - - var e_preventDefault = CodeMirror.e_preventDefault = function(e) { - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - }; - var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { - if (e.stopPropagation) e.stopPropagation(); - else e.cancelBubble = true; - }; - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; - - function e_target(e) {return e.target || e.srcElement;} - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) b = 1; - else if (e.button & 2) b = 3; - else if (e.button & 4) b = 2; - } - if (mac && e.ctrlKey && b == 1) b = 3; - return b; - } - - // EVENT HANDLING - - // Lightweight event framework. on/off also work on DOM nodes, - // registering native DOM handlers. - - var on = CodeMirror.on = function(emitter, type, f) { - if (emitter.addEventListener) - emitter.addEventListener(type, f, false); - else if (emitter.attachEvent) - emitter.attachEvent("on" + type, f); - else { - var map = emitter._handlers || (emitter._handlers = {}); - var arr = map[type] || (map[type] = []); - arr.push(f); - } - }; - - var off = CodeMirror.off = function(emitter, type, f) { - if (emitter.removeEventListener) - emitter.removeEventListener(type, f, false); - else if (emitter.detachEvent) - emitter.detachEvent("on" + type, f); - else { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - for (var i = 0; i < arr.length; ++i) - if (arr[i] == f) { arr.splice(i, 1); break; } - } - }; - - var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); - }; - - var orphanDelayedCallbacks = null; - - // Often, we want to signal events at a point where we are in the - // middle of some work, but don't want the handler to start calling - // other methods on the editor, which might be in an inconsistent - // state or simply not expect any other events to happen. - // signalLater looks whether there are any handlers, and schedules - // them to be executed when the last operation ends, or, if no - // operation is active, when a timeout fires. - function signalLater(emitter, type /*, values...*/) { - var arr = emitter._handlers && emitter._handlers[type]; - if (!arr) return; - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - function bnd(f) {return function(){f.apply(null, args);};}; - for (var i = 0; i < arr.length; ++i) - list.push(bnd(arr[i])); - } - - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) delayed[i](); - } - - // The DOM events that CodeMirror handles can be overridden by - // registering a (non-DOM) handler on the editor for the event name, - // and preventDefault-ing the event in that handler. - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) return; - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) - set.push(arr[i]); - } - - function hasHandler(emitter, type) { - var arr = emitter._handlers && emitter._handlers[type]; - return arr && arr.length > 0; - } - - // Add on and off methods to a constructor's prototype, to make - // registering events on such objects more convenient. - function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; - } - - // MISC UTILITIES - - // Number of pixels added to scroller and sizer to hide scrollbar - var scrollerGap = 30; - - // Returned or thrown by various protocols to signal 'I'm not - // handling this'. - var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; - - // Reused option objects for setSelection & friends - var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; - - function Delayed() {this.id = null;} - Delayed.prototype.set = function(ms, f) { - clearTimeout(this.id); - this.id = setTimeout(f, ms); - }; - - // Counts the column offset in a string, taking tabs into account. - // Used mostly to find indentation. - var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) end = string.length; - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - return n + (end - i); - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } - }; - - // The inverse of countColumn -- find the offset that corresponds to - // a particular column. - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) nextTab = string.length; - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - return pos + Math.min(skipped, goal - col); - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) return pos; - } - } - - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) - spaceStrs.push(lst(spaceStrs) + " "); - return spaceStrs[n]; - } - - function lst(arr) { return arr[arr.length-1]; } - - var selectInput = function(node) { node.select(); }; - if (ios) // Mobile Safari apparently has a bug where select() is broken. - selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; - else if (ie) // Suppress mysterious IE10 errors - selectInput = function(node) { try { node.select(); } catch(_e) {} }; - - function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - if (array[i] == elt) return i; - return -1; - } - function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); - return out; - } - - function nothing() {} - - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) copyObj(props, inst); - return inst; - }; - - function copyObj(obj, target, overwrite) { - if (!target) target = {}; - for (var prop in obj) - if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - target[prop] = obj[prop]; - return target; - } - - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args);}; - } - - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - var isWordCharBasic = CodeMirror.isWordChar = function(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - }; - function isWordChar(ch, helper) { - if (!helper) return isWordCharBasic(ch); - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; - return helper.test(ch); - } - - function isEmpty(obj) { - for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; - return true; - } - - // Extending unicode characters. A series of a non-extending char + - // any number of extending chars is treated as a single unit as far - // as editing and measuring is concerned. This is not fully correct, - // since some scripts/fonts/browsers also treat other configurations - // of code points as a group. - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } - - // DOM UTILITIES - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) e.className = className; - if (style) e.style.cssText = style; - if (typeof content == "string") e.appendChild(document.createTextNode(content)); - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); - return e; - } - - var range; - if (document.createRange) range = function(node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r; - }; - else range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r; } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - e.removeChild(e.firstChild); - return e; - } - - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - - var contains = CodeMirror.contains = function(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - child = child.parentNode; - if (parent.contains) - return parent.contains(child); - do { - if (child.nodeType == 11) child = child.host; - if (child == parent) return true; - } while (child = child.parentNode); - }; - - function activeElt() { return document.activeElement; } - // Older versions of IE throws unspecified error when touching - // document.activeElement in some cases (during loading, in iframe) - if (ie && ie_version < 11) activeElt = function() { - try { return document.activeElement; } - catch(e) { return document.body; } - }; - - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } - var rmClass = CodeMirror.rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - var addClass = CodeMirror.addClass = function(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; - }; - function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; - return b; - } - - // WINDOW-WIDE EVENTS - - // These must be handled carefully, because naively registering a - // handler for each editor will cause the editors to never be - // garbage collected. - - function forEachCodeMirror(f) { - if (!document.body.getElementsByClassName) return; - var byClass = document.body.getElementsByClassName("CodeMirror"); - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) f(cm); - } - } - - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) return; - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function() { - if (resizeTimer == null) resizeTimer = setTimeout(function() { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function() { - forEachCodeMirror(onBlur); - }); - } - - // FEATURE DETECTION - - // Detect drag-and-drop - var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) return false; - var div = elt('div'); - return "draggable" in div || "dragDrop" in div; - }(); - - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node; - } - - // Feature-detect IE's crummy client rect reporting for bidi text - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) return badBidiRects; - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) - var r1 = range(txt, 1, 2).getBoundingClientRect(); - return badBidiRects = (r1.right - r0.right < 3); - } - - // See if "".split is the broken IE version, if so, provide an - // alternative way to split lines. - var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) nl = string.length; - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function(string){return string.split(/\r\n?|\n/);}; - - var hasSelection = window.getSelection ? function(te) { - try { return te.selectionStart != te.selectionEnd; } - catch(e) { return false; } - } : function(te) { - try {var range = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range || range.parentElement() != te) return false; - return range.compareEndPoints("StartToEnd", range) != 0; - }; - - var hasCopyEvent = (function() { - var e = elt("div"); - if ("oncopy" in e) return true; - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - })(); - - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) return badZoomedRects; - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - - // KEY NAMES - - var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; - CodeMirror.keyNames = keyNames; - (function() { - // Number keys - for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); - // Alphabetic keys - for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); - // Function keys - for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; - })(); - - // BIDI HELPERS - - function iterateBidiSections(order, from, to, f) { - if (!order) return f(from, to, "ltr"); - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); - found = true; - } - } - if (!found) f(from, to, "ltr"); - } - - function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } - function bidiRight(part) { return part.level % 2 ? part.from : part.to; } - - function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } - function lineRight(line) { - var order = getOrder(line); - if (!order) return line.text.length; - return bidiRight(lst(order)); - } - - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) lineN = lineNo(visual); - var order = getOrder(visual); - var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); - return Pos(lineN, ch); - } - function lineEnd(cm, lineN) { - var merged, line = getLine(cm.doc, lineN); - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - lineN = null; - } - var order = getOrder(line); - var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); - return Pos(lineN == null ? lineNo(line) : lineN, ch); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(0, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS); - } - return start; - } - - function compareBidiLevel(order, a, b) { - var linedir = order[0].level; - if (a == linedir) return true; - if (b == linedir) return false; - return a < b; - } - var bidiOther; - function getBidiPartAt(order, pos) { - bidiOther = null; - for (var i = 0, found; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < pos && cur.to > pos) return i; - if ((cur.from == pos || cur.to == pos)) { - if (found == null) { - found = i; - } else if (compareBidiLevel(order, cur.level, order[found].level)) { - if (cur.from != cur.to) bidiOther = found; - return i; - } else { - if (cur.from != cur.to) bidiOther = i; - return found; - } - } - } - return found; - } - - function moveInLine(line, pos, dir, byUnit) { - if (!byUnit) return pos + dir; - do pos += dir; - while (pos > 0 && isExtendingChar(line.text.charAt(pos))); - return pos; - } - - // This is needed in order to move 'visually' through bi-directional - // text -- i.e., pressing left should make the cursor go left, even - // when in RTL text. The tricky part is the 'jumps', where RTL and - // LTR text touch each other. This often requires the cursor offset - // to move more than one unit, in order to visually move one unit. - function moveVisually(line, start, dir, byUnit) { - var bidi = getOrder(line); - if (!bidi) return moveLogically(line, start, dir, byUnit); - var pos = getBidiPartAt(bidi, start), part = bidi[pos]; - var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); - - for (;;) { - if (target > part.from && target < part.to) return target; - if (target == part.from || target == part.to) { - if (getBidiPartAt(bidi, target) == pos) return target; - part = bidi[pos += dir]; - return (dir > 0) == part.level % 2 ? part.to : part.from; - } else { - part = bidi[pos += dir]; - if (!part) return null; - if ((dir > 0) == part.level % 2) - target = moveInLine(line, part.to, -1, byUnit); - else - target = moveInLine(line, part.from, 1, byUnit); - } - } - } - - function moveLogically(line, start, dir, byUnit) { - var target = start + dir; - if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; - return target < 0 || target > line.text.length ? null : target; - } - - // Bidirectional ordering algorithm - // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm - // that this (partially) implements. - - // One-char codes used for character types: - // L (L): Left-to-Right - // R (R): Right-to-Left - // r (AL): Right-to-Left Arabic - // 1 (EN): European Number - // + (ES): European Number Separator - // % (ET): European Number Terminator - // n (AN): Arabic Number - // , (CS): Common Number Separator - // m (NSM): Non-Spacing Mark - // b (BN): Boundary Neutral - // s (B): Paragraph Separator - // t (S): Segment Separator - // w (WS): Whitespace - // N (ON): Other Neutrals - - // Returns null if characters are ordered as they appear - // (left-to-right), or an array of sections ({from, to, level} - // objects) in the order in which they occur visually. - var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6ff - var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; - function charType(code) { - if (code <= 0xf7) return lowTypes.charAt(code); - else if (0x590 <= code && code <= 0x5f4) return "R"; - else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); - else if (0x6ee <= code && code <= 0x8ac) return "r"; - else if (0x2000 <= code && code <= 0x200b) return "w"; - else if (code == 0x200c) return "b"; - else return "L"; - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - // Browsers seem to always treat the boundaries of block elements as being L. - var outerType = "L"; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str) { - if (!bidiRE.test(str)) return false; - var len = str.length, types = []; - for (var i = 0, type; i < len; ++i) - types.push(type = charType(str.charCodeAt(i))); - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i = 0, prev = outerType; i < len; ++i) { - var type = types[i]; - if (type == "m") types[i] = prev; - else prev = type; - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (type == "1" && cur == "r") types[i] = "n"; - else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i = 1, prev = types[0]; i < len - 1; ++i) { - var type = types[i]; - if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; - else if (type == "," && prev == types[i+1] && - (prev == "1" || prev == "n")) types[i] = prev; - prev = type; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i = 0; i < len; ++i) { - var type = types[i]; - if (type == ",") types[i] = "N"; - else if (type == "%") { - for (var end = i + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i = 0, cur = outerType; i < len; ++i) { - var type = types[i]; - if (cur == "L" && type == "1") types[i] = "L"; - else if (isStrong.test(type)) cur = type; - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i = 0; i < len; ++i) { - if (isNeutral.test(types[i])) { - for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} - var before = (i ? types[i-1] : outerType) == "L"; - var after = (end < len ? types[end] : outerType) == "L"; - var replace = before || after ? "L" : "R"; - for (var j = i; j < end; ++j) types[j] = replace; - i = end - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i = 0; i < len;) { - if (countsAsLeft.test(types[i])) { - var start = i; - for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} - order.push(new BidiSpan(0, start, i)); - } else { - var pos = i, at = order.length; - for (++i; i < len && types[i] != "L"; ++i) {} - for (var j = pos; j < i;) { - if (countsAsNum.test(types[j])) { - if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); - var nstart = j; - for (++j; j < i && countsAsNum.test(types[j]); ++j) {} - order.splice(at, 0, new BidiSpan(2, nstart, j)); - pos = j; - } else ++j; - } - if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); - } - } - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - if (order[0].level != lst(order).level) - order.push(new BidiSpan(order[0].level, len, len)); - - return order; - }; - })(); - - // THE END - - CodeMirror.version = "5.1.1"; - - return CodeMirror; -}); \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/policy-create.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/policy-create.js deleted file mode 100644 index 45e73a71e..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/policy-create.js +++ /dev/null @@ -1,748 +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 validateStep = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; -var deviceTypeLabel; - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - return true; -}; - -stepForwardFrom["policy-profile"] = function () { - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text("ADD " + deviceTypeLabel + " POLICY"); -}; - -stepBackFrom["policy-profile"] = function () { - // reinitialize configuredOperations - configuredOperations = []; - // clearing already-loaded platform specific hidden-operations html content from the relevant div - // so that, the wrong content would not be shown at the first glance, in case - // the user selects a different platform - $(".wr-advance-operations").html( - "
" + - "
" + - "     " + - "" + - "    " + - "Loading Platform Features . . ." + - "
" + - "
" + - "
" - ); -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } else if ($(this).attr("id") == "groups-radio-btn") { - policy["selectedUserGroups"] = $("#groups-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - // updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text("ADD " + deviceTypeLabel + " POLICY"); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length. Please check."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length. Please check."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, "publish"); -}; -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, "save"); -}; - -var savePolicy = function (policy, state) { - var profilePayloads = [{ - "featureCode": "CONFIG", - "deviceTypeId": policy["platformId"], - "content": {"policyDefinition": window.queryEditor.getValue()} - }]; - - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": "ANY", - "profile": { - "profileName": policy["policyName"], - "deviceType": { - "id": policy["platformId"], - "name": policy["platform"] - }, - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - } else if (policy["selectedUserRoles"]) { - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - - var serviceURL; - if (state == "save") { - serviceURL = "/api/device-mgt/v1.0/policies/inactive-policy" - } else if (state == "publish") { - serviceURL = "/api/device-mgt/v1.0/policies/active-policy" - } - invokerUtil.post( - serviceURL, - payload, - function (response) { - response = JSON.parse(response); - if (response["statusCode"] == 201) { - $(".add-policy").addClass("hidden"); - $(".policy-naming").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - if (state == "publish") { - publishToDevice(); - } - } - }, - function (err) { - console.log(err); - } - ); -}; - -function publishToDevice() { - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": "ANY", - "deviceId": getParameterByName('deviceId'), - "profile": { - "profileName": policy["policyName"], - "deviceType": { - "id": policy["platformId"], - "name": policy["platform"] - }, - "policyDefinition": window.queryEditor.getValue(), - "policyDescription": policy["description"] - } - }; - - var successCallback = function (data, status) { - console.log("Data: " + data + "\nStatus: " + status); - }; - - var data = { - url: "/devicemgt/api/policies/add", - type: "POST", - contentType: "application/json", - accept: "application/json", - success: successCallback, - data: JSON.stringify(payload) - }; - - $.ajax(data).fail(function (jqXHR) { - console.log("Error: " + jqXHR); - }); - -} - -// 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(); - } -}; - -function formatRepo(user) { - if (user.loading) { - return user.text - } - if (!user.username) { - return; - } - var markup = '
' + - '
' + - '
' + - '
' + user.username + '
'; - if (user.firstname) { - markup += '
' + user.firstname + '
'; - } - if (user.emailAddress) { - markup += '
' + user.emailAddress + '
'; - } - markup += '
'; - return markup; -} - -function formatRepoSelection(user) { - return user.username || user.text; -} - -function formatGroupRepo(group) { - if (group.loading) { - return group.text - } - if (!group.name) { - return; - } - var markup = '
' + - '
' + - '
' + - '
' + group.name + '
'; - if (group.name) { - markup += '
' + group.name + '
'; - } - if (group.owner) { - markup += '
' + group.owner + '
'; - } - markup += '
'; - return markup; -} - -function formatGroupRepoSelection(group) { - return group.name || group.text; -} - -// End of functions related to grid-input-view - - -$(document).ready(function () { - window.queryEditor = CodeMirror.fromTextArea(document.getElementById('policy-definition-input'), { - mode: MIME_TYPE_SIDDHI_QL, - indentWithTabs: true, - smartIndent: true, - lineNumbers: true, - matchBrackets: true, - autofocus: true, - extraKeys: { - "Shift-2": function (cm) { - insertStr(cm, cm.getCursor(), '@'); - CodeMirror.showHint(cm, getAnnotationHints); - }, - "Ctrl-Space": "autocomplete" - } - }); - - $("#users-input").select2({ - multiple: true, - tags: true, - ajax: { - url: window.location.origin + "/devicemgt/api/invoker/execute/", - method: "POST", - dataType: 'json', - delay: 250, - id: function (user) { - return user.username; - }, - data: function (params) { - var postData = {}; - postData.actionMethod = "GET"; - postData.actionUrl = "/api/device-mgt/v1.0/users"; - postData.actionPayload = JSON.stringify({ - q: params.term, // search term - page: params.page - }); - - return JSON.stringify(postData); - }, - processResults: function (data, page) { - var newData = []; - $.each(data.responseContent, function (index, value) { - value.id = value.username; - newData.push(value); - }); - return { - results: newData - }; - }, - cache: true - }, - escapeMarkup: function (markup) { - return markup; - }, // let our custom formatter work - minimumInputLength: 1, - templateResult: formatRepo, // omitted for brevity, see the source of this page - templateSelection: formatRepoSelection // omitted for brevity, see the source of this page - }); - - $("#groups-input").select2({ - multiple: true, - tags: true, - ajax: { - url: window.location.origin + "/devicemgt/api/invoker/execute/", - method: "POST", - dataType: 'json', - delay: 250, - id: function (group) { - return group.name; - }, - data: function (params) { - var postData = {}; - postData.actionMethod = "GET"; - var username = $("#platform").data("username"); - postData.actionUrl = "/api/device-mgt/v1.0/groups/user/" + username + - "/search?groupName=" + params.term; - return JSON.stringify(postData); - }, - processResults: function (data, page) { - var newData = []; - $.each(data, function (index, value) { - value.id = value.name; - newData.push(value); - }); - return { - results: newData - }; - }, - cache: true - }, - escapeMarkup: function (markup) { - return markup; - }, // let our custom formatter work - minimumInputLength: 1, - templateResult: formatGroupRepo, // omitted for brevity, see the source of this page - templateSelection: formatGroupRepoSelection // omitted for brevity, see the source of this page - }); - - // Adding initial state of wizard-steps. - $("#policy-profile-wizard-steps").html($(".wr-steps").html()); - - policy["platform"] = $("#platform").data("platform"); - policy["platformId"] = $("#platform").data("platform-id"); - deviceTypeLabel = $("#platform").data("platform-label"); - // updating next-page wizard title with selected platform - $("#policy-profile-page-wizard-title").text("ADD " + deviceTypeLabel + " POLICY"); - - $("select.select2[multiple=multiple]").select2({ - "tags": true - }); - - $("#users-select-field").hide(); - $("#groups-select-field").hide(); - $("#user-roles-select-field").show(); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#user-roles-radio-btn").is(":checked")) { - $("#user-roles-select-field").show(); - $("#users-select-field").hide(); - $("#groups-select-field").hide(); - } - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - $("#groups-select-field").hide(); - } - if ($("#groups-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").hide(); - $("#groups-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#user-roles-input").select2({ - "tags": true - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - // 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(); - } - } - ); - } - } - }); - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - if (nextStep !== "policy-message") { - $("." + nextStep).removeClass("hidden"); - } - } - }); -}); - -function getParameterByName(name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/sql.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/sql.js deleted file mode 100644 index 9f92fbc93..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/public/js/sql.js +++ /dev/null @@ -1,310 +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. - */ - -/*Annotations, Annotation Names and relevant tokens*/ -var ANNOTATION_IMPORT = "Import"; -var ANNOTATION_EXPORT = "Export"; - -var ANNOTATION_TOKEN_AT = "@"; -var ANNOTATION_TOKEN_OPENING_BRACKET = "("; -var ANNOTATION_TOKEN_CLOSING_BRACKET = ")"; - -var REGEX_LINE_STARTING_WITH_PLAN = /^@Plan.*/g; -var REGEX_LINE_STARTING_WITH_SINGLE_LINE_COMMENT = /^--.*/g; -var REGEX_LINE_STARTING_WITH_MULTI_LINE_COMMENT = /^\/\*.*\*\//g; -var REGEX_LINE_STARTING_WITH_IMPORT_STATEMENT = /^@Import.*/g; - -var SIDDHI_STATEMENT_DELIMETER = ";"; -var SIDDHI_LINE_BREAK = "\n"; -var SIDDHI_LINE_BREAK_CHARACTER = '\n'; -var SIDDHI_SINGLE_QUOTE = "'"; -var SIDDHI_SPACE_LITERAL = " "; - -var SIDDHI_LITERAL_DEFINE_STREAM = "define stream"; - -var MIME_TYPE_SIDDHI_QL = "text/siddhi-ql"; - - -CodeMirror.defineMode("sql", function (config, parserConfig) { - "use strict"; - - var client = parserConfig.client || {}, - atoms = parserConfig.atoms || {"false":true, "true":true, "null":true}, - builtin = parserConfig.builtin || {}, - keywords = parserConfig.keywords || {}, - operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, - support = parserConfig.support || {}, - hooks = parserConfig.hooks || {}, - dateSQL = parserConfig.dateSQL || {"date":true, "time":true, "timestamp":true}; - - function tokenBase(stream, state) { - var ch = stream.next(); - - // call hooks from the mime type - if (hooks[ch]) { - var result = hooks[ch](stream, state); - if (result !== false) return result; - } - - if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { - // numbers - // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html - stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); - support.decimallessFloat == true && stream.eat('.'); - return "number"; - } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { - // strings - // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html - state.tokenize = tokenLiteral(ch); - return state.tokenize(stream, state); - } else if (/^[\(\),\;\[\]]/.test(ch)) { - // no highlightning - return null; - } else if ((ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { - // 1-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - stream.skipToEnd(); - return "comment"; - } else if (ch == "/" && stream.eat("*")) { - // multi-line comments - // ref: https://kb.askmonty.org/en/comment-syntax/ - state.tokenize = tokenComment; - return state.tokenize(stream, state); - } else if (ch == ".") { - // .1 for 0.1 - if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { - return "number"; - } - } else { - stream.eatWhile(/^[_\-\w\d]/); /* Character '-' will also be eaten, to prevent the highlight happening in keywords being embedded in non-keyword strings. For example, 'all' in 'all-nonkeyword' */ - var word = stream.current().toLowerCase(); // Added toLowerCase() to highlight keywords in a case insensitive manner. - // dates (standard SQL syntax) - // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html - if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) - return "number"; - if (atoms.hasOwnProperty(word)) return "atom"; - if (builtin.hasOwnProperty(word)) return "builtin"; - if (keywords.hasOwnProperty(word)) return "keyword"; - if (client.hasOwnProperty(word)) return "string-2"; - return null; - } - } - - // 'string', with char specified in quote escaped by '\' - function tokenLiteral(quote) { - return function (stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && ch == "\\"; - } - return "string"; - }; - } - - function tokenComment(stream, state) { - while (true) { - if (stream.skipTo("*")) { - stream.next(); - if (stream.eat("/")) { - state.tokenize = tokenBase; - break; - } - } else { - stream.skipToEnd(); - break; - } - } - return "comment"; - } - - function pushContext(stream, state, type) { - state.context = { - prev:state.context, - indent:stream.indentation(), - col:stream.column(), - type:type - }; - } - - function popContext(state) { - state.indent = state.context.indent; - state.context = state.context.prev; - } - - return { - startState:function () { - return {tokenize:tokenBase, context:null}; - }, - - token:function (stream, state) { - if (stream.sol()) { - if (state.context && state.context.align == null) - state.context.align = false; - } - if (stream.eatSpace()) return null; - - var style = state.tokenize(stream, state); - if (style == "comment") return style; - - if (state.context && state.context.align == null) - state.context.align = true; - - var tok = stream.current(); - if (tok == "(") - pushContext(stream, state, ")"); - else if (tok == "[") - pushContext(stream, state, "]"); - else if (state.context && state.context.type == tok) - popContext(state); - return style; - }, - - indent:function (state, textAfter) { - var cx = state.context; - if (!cx) return CodeMirror.Pass; - var closing = textAfter.charAt(0) == cx.type; - if (cx.align) return cx.col + (closing ? 0 : 1); - else return cx.indent + (closing ? 0 : config.indentUnit); - }, - - blockCommentStart: "/*", - blockCommentEnd: "*/", - lineComment: "--" - }; -}); - -(function () { - "use strict"; - - // `identifier` - function hookIdentifier(stream) { - // MySQL/MariaDB identifiers - // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html - var ch; - while ((ch = stream.next()) != null) { - if (ch == "`" && !stream.eat("`")) return "variable-2"; - } - stream.backUp(stream.current().length - 1); - return stream.eatWhile(/\w/) ? "variable-2" : null; - } - - // variable token - function hookVar(stream) { - // variables - // @@prefix.varName @varName - // varName can be quoted with ` or ' or " - // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html - if (stream.eat("@")) { - stream.match(/^session\./); - stream.match(/^local\./); - stream.match(/^global\./); - } - - if (stream.eat("'")) { - stream.match(/^.*'/); - return "variable-2"; - } else if (stream.eat('"')) { - stream.match(/^.*"/); - return "variable-2"; - } else if (stream.eat("`")) { - stream.match(/^.*`/); - return "variable-2"; - } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { - return "variable-2"; - } - return null; - } - - ; - - // short client keyword token - function hookClient(stream) { - // \N means NULL - // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html - if (stream.eat("N")) { - return "atom"; - } - // \g, etc - // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html - return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; - } - - // these keywords are used by all SQL dialects (however, a mode can still overwrite it) - var sqlKeywordsWithoutSymbols = "all and as begin by contains define delete end events " + - "every first for from full group having inner insert into join last " + - "left not of on or outer output partition raw return right select snapshot stream table "; - var sqlKeywords = ", : ? # ( ) " + sqlKeywordsWithoutSymbols; - var builtIn = "bool double float int long object string "; - var atoms = "false true null "; - var dateSQL = "days hours milliseconds minutes months seconds "; - var allSqlSuggestions = sqlKeywordsWithoutSymbols + builtIn + atoms + dateSQL; - - // turn a space-separated list into an array - function set(str) { - var obj = {}, words = str.split(" "); - for (var i = 0; i < words.length; ++i) obj[words[i]] = true; - return obj; - } - - // A generic SQL Mode. It's not a standard, it just try to support what is generally supported - CodeMirror.defineMIME(MIME_TYPE_SIDDHI_QL, { - name:"sql", - keywords:set(sqlKeywords), - builtin:set(builtIn), - atoms:set(atoms), - operatorChars:/^[*+%<>!=/]/, - dateSQL:set(dateSQL), - support:set("doubleQuote "), - allSqlSuggestions:set(allSqlSuggestions) - }); -}()); - -/* - How Properties of Mime Types are used by SQL Mode - ================================================= - - keywords: - A list of keywords you want to be highlighted. - functions: - A list of function names you want to be highlighted. - builtin: - A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). - operatorChars: - All characters that must be handled as operators. - client: - Commands parsed and executed by the client (not the server). - support: - A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. - * ODBCdotTable: .tableName - * zerolessFloat: .1 - * doubleQuote - * nCharCast: N'string' - * charsetCast: _utf8'string' - * commentHash: use # char for comments - * commentSlashSlash: use // for comments - * commentSpaceRequired: require a space after -- for comments - atoms: - Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: - UNKNOWN, INFINITY, UNDERFLOW, NaN... - dateSQL: - Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. - */ \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.hbs deleted file mode 100644 index 41d832331..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.hbs +++ /dev/null @@ -1,304 +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/codemirror.css"}} -{{/zone}} - -
-
- - - - - - - - -
-
-

ADD POLICY

-
-
-
-
-
-

Step 2: Configure profile

-
- - -
-
-
- -
-
-
-
- -
-
-
-
- - -
-
-{{#zone "bottomJs"}} - {{js "js/codemirror.js"}} - {{js "js/sql.js"}} - {{js "js/policy-create.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.js b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.js deleted file mode 100644 index a08faad08..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.js +++ /dev/null @@ -1,52 +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("wizard.js"); - var constants = require("/app/modules/constants.js"); - var DTYPE_CONF_DEVICE_TYPE_KEY = "deviceType"; - var DTYPE_CONF_DEVICE_TYPE_LABEL_KEY = "label"; - - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var deviceModule = require("/app/modules/business-controllers/device.js").deviceModule; - var utility = require('/app/modules/utility.js').utility; - var response = userModule.getRoles(); - var wizardPage = {}; - if (response["status"] == "success") { - wizardPage["roles"] = response["content"]; - } - var deviceType = context.uriParams.deviceType; - var typesListResponse = deviceModule.getDeviceTypes(); - if (typesListResponse["status"] == "success") { - for (var type in typesListResponse["content"]) { - if (deviceType == typesListResponse["content"][type]["name"]) { - wizardPage["type"] = typesListResponse["content"][type]; - var deviceTypeLabel = deviceType; - var configs = utility.getDeviceTypeConfig(deviceType); - if (configs && configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY]) { - deviceTypeLabel = configs[DTYPE_CONF_DEVICE_TYPE_KEY][DTYPE_CONF_DEVICE_TYPE_LABEL_KEY]; - } - wizardPage["type"]["label"] = deviceTypeLabel; - } - } - } - var user = session.get(constants.USER_SESSION_KEY); - wizardPage.username = user.username; - wizardPage.permissions = userModule.getUIPermissions(); - return wizardPage; -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.json deleted file mode 100644 index fd2590129..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.policy.wizard/wizard.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs deleted file mode 100644 index d09e2eae0..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.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. -}} -{{#zone "productName"}}{{@app.conf.appName}}{{/zone}} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.json b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.json deleted file mode 100644 index 98b47e9b8..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.ui/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "index": 29, - "extends": "cdmf.unit.ui.header.logo" -} \ No newline at end of file diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/pom.xml b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/pom.xml deleted file mode 100644 index 8aba9cf0f..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - iot-base-plugin - org.wso2.carbon.devicemgt-plugins - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.iot.url.printer - bundle - WSO2 Carbon - IoT url printer - WSO2 Carbon - IoT url printer - http://wso2.org - - - - - org.apache.felix - maven-scr-plugin - - - maven-compiler-plugin - - 1.7 - 1.7 - - 2.3.2 - - - org.apache.felix - maven-bundle-plugin - 1.4.0 - true - - - ${project.artifactId} - ${project.artifactId} - ${carbon.devicemgt.plugins.version} - IoT Server Impl Bundle - org.wso2.carbon.device.mgt.iot.url.printer.internal - - org.osgi.framework, - org.osgi.service.component, - org.apache.commons.logging, - org.apache.axis2.*;version="${axis2.osgi.version.range}", - org.wso2.carbon.core, - org.wso2.carbon.utils.*, - - - !org.wso2.carbon.device.mgt.iot.url.printer.internal, - org.wso2.carbon.device.mgt.iot.url.printer.*;version="${project.version}" - - - - - - - - - - - org.eclipse.osgi - org.eclipse.osgi - - - org.eclipse.osgi - org.eclipse.osgi.services - - - org.wso2.carbon - org.wso2.carbon.core - - - org.wso2.carbon - org.wso2.carbon.logging - - - org.wso2.carbon - org.wso2.carbon.utils - - - org.apache.axis2.wso2 - axis2 - - - diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/URLPrinterStartupHandler.java b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/URLPrinterStartupHandler.java deleted file mode 100644 index 28d1943cf..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/URLPrinterStartupHandler.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.iot.url.printer; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.iot.url.printer.internal.UrlPrinterDataHolder; -import org.wso2.carbon.utils.CarbonUtils; -import org.wso2.carbon.utils.ConfigurationContextService; -import org.wso2.carbon.utils.NetworkUtils; - -public class URLPrinterStartupHandler implements ServerStartupObserver { - private static final Log log = LogFactory.getLog(URLPrinterStartupHandler.class); - - @Override - public void completingServerStartup() { - } - - @Override - public void completedServerStartup() { - log.info("IoT Console URL : " + this.getServerUrl()); - } - - private String getServerUrl() { - // Hostname - String hostName = "localhost"; - try { - hostName = NetworkUtils.getMgtHostName(); - } catch (Exception ignored) { - } - // HTTPS port - String mgtConsoleTransport = CarbonUtils.getManagementTransport(); - ConfigurationContextService configContextService = - UrlPrinterDataHolder.getInstance().getConfigurationContextService(); - int port = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport); - int httpsProxyPort = - CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(), mgtConsoleTransport); - if (httpsProxyPort > 0) { - port = httpsProxyPort; - } - return "https://" + hostName + ":" + port + "/devicemgt"; - } -} diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterDataHolder.java b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterDataHolder.java deleted file mode 100644 index cd74cbe24..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterDataHolder.java +++ /dev/null @@ -1,42 +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. - * - */ -package org.wso2.carbon.device.mgt.iot.url.printer.internal; - -import org.wso2.carbon.utils.ConfigurationContextService; - -public class UrlPrinterDataHolder { - - private ConfigurationContextService configurationContextService; - private static UrlPrinterDataHolder thisInstance = new UrlPrinterDataHolder(); - - private UrlPrinterDataHolder() {} - - public static UrlPrinterDataHolder getInstance() { - return thisInstance; - } - - public ConfigurationContextService getConfigurationContextService() { - return configurationContextService; - } - - public void setConfigurationContextService(ConfigurationContextService configurationContextService) { - this.configurationContextService = configurationContextService; - } - -} diff --git a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterServiceComponent.java b/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterServiceComponent.java deleted file mode 100644 index 38fb00168..000000000 --- a/components/iot-plugins/iot-base-plugin/org.wso2.carbon.device.mgt.iot.url.printer/src/main/java/org/wso2/carbon/device/mgt/iot/url/printer/internal/UrlPrinterServiceComponent.java +++ /dev/null @@ -1,79 +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.iot.url.printer.internal; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.osgi.framework.BundleContext; -import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.iot.url.printer.URLPrinterStartupHandler; -import org.wso2.carbon.utils.ConfigurationContextService; - -/** - * @scr.component name="org.wso2.carbon.device.mgt.iot.url.printer.internal.UrlPrinterServiceComponent" - * immediate="true" - * @scr.reference name="config.context.service" - * interface="org.wso2.carbon.utils.ConfigurationContextService" - * cardinality="0..1" - * policy="dynamic" - * bind="setConfigurationContextService" - * unbind="unsetConfigurationContextService" - */ -public class UrlPrinterServiceComponent { - - private static final Log log = LogFactory.getLog(UrlPrinterServiceComponent.class); - - protected void activate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("Activating Url printer Service Component"); - } - try { - BundleContext bundleContext = ctx.getBundleContext(); - bundleContext.registerService(ServerStartupObserver.class.getName(), new URLPrinterStartupHandler(), null); - if (log.isDebugEnabled()) { - log.debug("Url printer Service Component has been successfully activated"); - } - } catch (Throwable e) { - log.error("Error occurred while activating Url printer Service Component", e); - } - } - - protected void deactivate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("De-activating Url printer Service Component"); - } - } - - protected void setConfigurationContextService(ConfigurationContextService configurationContextService) { - if (log.isDebugEnabled()) { - log.debug("Setting ConfigurationContextService"); - } - - UrlPrinterDataHolder.getInstance().setConfigurationContextService(configurationContextService); - - } - - protected void unsetConfigurationContextService(ConfigurationContextService configurationContextService) { - if (log.isDebugEnabled()) { - log.debug("Un-setting ConfigurationContextService"); - } - UrlPrinterDataHolder.getInstance().setConfigurationContextService(null); - } -} diff --git a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml b/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml deleted file mode 100644 index 2797034e0..000000000 --- a/components/iot-plugins/virtual-fire-alarm-plugin/org.wso2.carbon.device.mgt.iot.virtualfirealarm.ui/src/assembly/src.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - src - - zip - - false - ${basedir}/src - - - ${basedir}/src/main/resources/jaggeryapps/devicemgt - / - true - - - \ No newline at end of file diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java index 30dcb4704..f9cf08831 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementAdminService.java @@ -34,7 +34,7 @@ import javax.ws.rs.core.Response; import java.util.List; @API(name = "Android Device Management Administrative Service", version = "1.0.0", - context = "api/device-mgt/android/v1.0/admin/devices", + context = "/api/device-mgt/android/v1.0/admin/devices", tags = {"devicemgt_android"}) @Path("/admin/devices") diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java index 66b84a875..c4061c490 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceManagementService.java @@ -35,7 +35,7 @@ import javax.ws.rs.core.Response; import java.util.List; @API(name = "Android Device Management", version = "1.0.0", - context = "api/device-mgt/android/v1.0/devices", + context = "/api/device-mgt/android/v1.0/devices", tags = {"devicemgt_android"}) @Api(value = "Android Device Management", diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java index e5e42f31f..bf04bc941 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/DeviceTypeConfigurationService.java @@ -31,7 +31,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @API(name = "Android Configuration Management", version = "1.0.0", - context = "api/device-mgt/android/v1.0/configuration", + context = "/api/device-mgt/android/v1.0/configuration", tags = {"devicemgt_android"}) @Api(value = "Android Configuration Management", description = "This API carries all resource associated with " + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java index 2b2dd0d1e..2577c0ba1 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.api/src/main/java/org/wso2/carbon/mdm/services/android/services/EventReceiverService.java @@ -32,7 +32,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @API(name = "Android Event Receiver", version = "1.0.0", - context = "api/device-mgt/android/v1.0/events", + context = "/api/device-mgt/android/v1.0/events", tags = {"devicemgt_android"}) @Api(value = "Event Receiver", description = "Event publishing/retrieving related APIs.To enable Eventing need to" + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml index 9f85c6424..02e2bdbe4 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/pom.xml @@ -61,12 +61,16 @@ org.apache.commons.logging, javax.xml.bind.*, javax.sql, + javax.xml.parsers; version=0.0.0, + org.w3c.dom, + javax.naming, org.wso2.carbon.context, + org.wso2.carbon.utils.*, org.wso2.carbon.device.mgt.common.*, - org.wso2.carbon.device.mgt.mobile.*, org.wso2.carbon.ndatasource.core, org.wso2.carbon.policy.mgt.common.*, org.wso2.carbon.registry.core, + org.wso2.carbon.registry.core.session, org.wso2.carbon.registry.core.service, org.wso2.carbon.registry.api, org.wso2.carbon.device.mgt.extensions.license.mgt.registry, @@ -97,10 +101,6 @@
- - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile - org.eclipse.osgi org.eclipse.osgi diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManager.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManager.java index 951dd27e1..8184a2a5f 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManager.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidDeviceManager.java @@ -32,14 +32,14 @@ import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AbstractMobileDeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AndroidDAOFactory; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl.AndroidDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.android.impl.util.AndroidPluginConstants; import org.wso2.carbon.device.mgt.mobile.android.impl.util.AndroidPluginUtils; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.common.MobilePluginConstants; -import org.wso2.carbon.device.mgt.mobile.dao.AbstractMobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dto.MobileDevice; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; +import org.wso2.carbon.device.mgt.mobile.android.impl.util.MobileDeviceManagementUtil; import org.wso2.carbon.registry.api.RegistryException; import org.wso2.carbon.registry.api.Resource; @@ -67,7 +67,8 @@ public class AndroidDeviceManager implements DeviceManager { try { if (licenseManager.getLicense(AndroidDeviceManagementService.DEVICE_TYPE_ANDROID, - MobilePluginConstants.LANGUAGE_CODE_ENGLISH_US) == null) { + AndroidPluginConstants.MobilePluginConstants.LANGUAGE_CODE_ENGLISH_US) == + null) { defaultLicense = AndroidPluginUtils.getDefaultLicense(); licenseManager.addLicense(AndroidDeviceManagementService.DEVICE_TYPE_ANDROID, defaultLicense); } @@ -102,10 +103,10 @@ public class AndroidDeviceManager implements DeviceManager { Resource resource = MobileDeviceManagementUtil.getConfigurationRegistry().newResource(); resource.setContent(writer.toString()); - resource.setMediaType(MobilePluginConstants.MEDIA_TYPE_XML); + resource.setMediaType(AndroidPluginConstants.MobilePluginConstants.MEDIA_TYPE_XML); MobileDeviceManagementUtil.putRegistryResource(resourcePath, resource); status = true; - } catch (MobileDeviceMgtPluginException e) { + } catch (AndroidDeviceMgtPluginException e) { throw new DeviceManagementException( "Error occurred while retrieving the Registry instance : " + e.getMessage(), e); } catch (RegistryException e) { @@ -131,10 +132,10 @@ public class AndroidDeviceManager implements DeviceManager { Unmarshaller unmarshaller = context.createUnmarshaller(); return (PlatformConfiguration) unmarshaller.unmarshal( new StringReader(new String((byte[]) resource.getContent(), Charset. - forName(MobilePluginConstants.CHARSET_UTF8)))); + forName(AndroidPluginConstants.MobilePluginConstants.CHARSET_UTF8)))); } return null; - } catch (MobileDeviceMgtPluginException e) { + } catch (AndroidDeviceMgtPluginException e) { throw new DeviceManagementException( "Error occurred while retrieving the Registry instance : " + e.getMessage(), e); } catch (JAXBException e) { diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidFeatureManager.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidFeatureManager.java index 7b3a6054e..a9f28bf92 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidFeatureManager.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/AndroidFeatureManager.java @@ -24,11 +24,11 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.Feature; import org.wso2.carbon.device.mgt.common.FeatureManager; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AndroidDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOFactory; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileFeatureDAO; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.android.impl.util.MobileDeviceManagementUtil; import java.util.ArrayList; import java.util.List; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceConfigurationManager.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceConfigurationManager.java similarity index 93% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceConfigurationManager.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceConfigurationManager.java index 07123434d..e57ff1359 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceConfigurationManager.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceConfigurationManager.java @@ -16,12 +16,11 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config; +package org.wso2.carbon.device.mgt.mobile.android.impl.config; import org.w3c.dom.Document; import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; -import org.wso2.carbon.device.mgt.mobile.config.datasource.MobileDataSourceConfig; +import org.wso2.carbon.device.mgt.mobile.android.impl.util.MobileDeviceManagementUtil; import org.wso2.carbon.utils.CarbonUtils; import javax.xml.bind.JAXBContext; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementConfig.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementConfig.java similarity index 95% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementConfig.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementConfig.java index ced99f955..2c65375c7 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementConfig.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementConfig.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config; +package org.wso2.carbon.device.mgt.mobile.android.impl.config; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementRepository.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementRepository.java similarity index 88% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementRepository.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementRepository.java index 88369dd84..e40202acf 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/MobileDeviceManagementRepository.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/MobileDeviceManagementRepository.java @@ -16,10 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config; +package org.wso2.carbon.device.mgt.mobile.android.impl.config; -import org.wso2.carbon.device.mgt.mobile.config.datasource.DataSourceConfigAdapter; -import org.wso2.carbon.device.mgt.mobile.config.datasource.MobileDataSourceConfig; +import org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource.DataSourceConfigAdapter; +import org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource.MobileDataSourceConfig; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/DataSourceConfigAdapter.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/DataSourceConfigAdapter.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/DataSourceConfigAdapter.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/DataSourceConfigAdapter.java index 71675785c..75a95c7c7 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/DataSourceConfigAdapter.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/DataSourceConfigAdapter.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config.datasource; +package org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource; import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.HashMap; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/JNDILookupDefinition.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/JNDILookupDefinition.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/JNDILookupDefinition.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/JNDILookupDefinition.java index 603adcedd..d98022058 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/JNDILookupDefinition.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/JNDILookupDefinition.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config.datasource; +package org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource; import javax.xml.bind.annotation.*; import java.util.List; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfig.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfig.java similarity index 95% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfig.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfig.java index 869aaf12e..cb0e78fb2 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfig.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfig.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config.datasource; +package org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfigurations.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfigurations.java similarity index 95% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfigurations.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfigurations.java index 17e80f5bf..c698e7800 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/config/datasource/MobileDataSourceConfigurations.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/config/datasource/MobileDataSourceConfigurations.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.mobile.config.datasource; +package org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AbstractMobileDeviceManagementDAOFactory.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AbstractMobileDeviceManagementDAOFactory.java new file mode 100644 index 000000000..c96b603a8 --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AbstractMobileDeviceManagementDAOFactory.java @@ -0,0 +1,102 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.android.impl.dao; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource.JNDILookupDefinition; +import org.wso2.carbon.device.mgt.mobile.android.impl.config.datasource.MobileDataSourceConfig; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl.AndroidDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.util.MobileDeviceManagementDAOUtil; + +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; + +/** + * Factory class used to create MobileDeviceManagement related DAO objects. + */ +public abstract class AbstractMobileDeviceManagementDAOFactory implements MobileDeviceManagementDAOFactory { + + private static final Log log = LogFactory.getLog(AbstractMobileDeviceManagementDAOFactory.class); + private static Map dataSourceMap = new HashMap<>(); + private static boolean isInitialized; + + public static void init(Map mobileDataSourceConfigMap) + throws AndroidDeviceMgtPluginException { + DataSource dataSource; + for (String pluginType : mobileDataSourceConfigMap.keySet()) { + if (dataSourceMap.get(pluginType) == null) { + dataSource = AbstractMobileDeviceManagementDAOFactory.resolveDataSource(mobileDataSourceConfigMap.get + (pluginType)); + dataSourceMap.put(pluginType, dataSource); + } + } + isInitialized = true; + } + + public static void init(String key, MobileDataSourceConfig mobileDataSourceConfig) throws + AndroidDeviceMgtPluginException { + DataSource dataSource = AbstractMobileDeviceManagementDAOFactory.resolveDataSource(mobileDataSourceConfig); + dataSourceMap.put(key, dataSource); + } + + /** + * Resolve data source from the data source definition. + * + * @param config Mobile data source configuration + * @return data source resolved from the data source definition + */ + public static DataSource resolveDataSource(MobileDataSourceConfig config) { + DataSource dataSource = null; + if (config == null) { + throw new RuntimeException("Device Management Repository data source configuration " + + "is null and thus, is not initialized"); + } + JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition(); + if (jndiConfig != null) { + if (log.isDebugEnabled()) { + log.debug("Initializing Device Management Repository data source using the JNDI " + + "Lookup Definition"); + } + List jndiPropertyList = + jndiConfig.getJndiProperties(); + if (jndiPropertyList != null) { + Hashtable jndiProperties = new Hashtable(); + for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) { + jndiProperties.put(prop.getName(), prop.getValue()); + } + dataSource = + MobileDeviceManagementDAOUtil + .lookupDataSource(jndiConfig.getJndiName(), jndiProperties); + } else { + dataSource = MobileDeviceManagementDAOUtil + .lookupDataSource(jndiConfig.getJndiName(), null); + } + } + return dataSource; + } + + public static Map getDataSourceMap() { + return dataSourceMap; + } + +} \ No newline at end of file diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidDAOFactory.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidDAOFactory.java index a2e676acc..e3949b16a 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidDAOFactory.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidDAOFactory.java @@ -23,10 +23,6 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl.AndroidDeviceDAOImpl; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl.AndroidFeatureDAOImpl; -import org.wso2.carbon.device.mgt.mobile.dao.AbstractMobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceDAO; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; import javax.sql.DataSource; import java.sql.Connection; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidFeatureManagementDAOException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidFeatureManagementDAOException.java index db218d6df..61db0cc04 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidFeatureManagementDAOException.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/AndroidFeatureManagementDAOException.java @@ -18,8 +18,6 @@ */ package org.wso2.carbon.device.mgt.mobile.android.impl.dao; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; - public class AndroidFeatureManagementDAOException extends MobileDeviceManagementDAOException { private String message; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceDAO.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceDAO.java similarity index 94% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceDAO.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceDAO.java index 161594273..d9209a1cb 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceDAO.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceDAO.java @@ -16,9 +16,9 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao; +package org.wso2.carbon.device.mgt.mobile.android.impl.dao; -import org.wso2.carbon.device.mgt.mobile.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileDevice; import java.util.List; /** diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOException.java similarity index 97% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOException.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOException.java index 0b04818d9..f87ddbfec 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOException.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOException.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao; +package org.wso2.carbon.device.mgt.mobile.android.impl.dao; /** * Custom exception class for mobile device specific data access related exceptions. diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOFactory.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOFactory.java similarity index 93% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOFactory.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOFactory.java index 37a5c311c..1b28ac285 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileDeviceManagementDAOFactory.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileDeviceManagementDAOFactory.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao; +package org.wso2.carbon.device.mgt.mobile.android.impl.dao; public interface MobileDeviceManagementDAOFactory { diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileFeatureDAO.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileFeatureDAO.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileFeatureDAO.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileFeatureDAO.java index 55c77424b..b9a4d72af 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/MobileFeatureDAO.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/MobileFeatureDAO.java @@ -16,9 +16,9 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao; +package org.wso2.carbon.device.mgt.mobile.android.impl.dao; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature; import java.util.List; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceDAOImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceDAOImpl.java index 2fa63e5bc..db7307b2b 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceDAOImpl.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceDAOImpl.java @@ -21,11 +21,11 @@ package org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AndroidDAOFactory; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceDAO; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileDevice; import org.wso2.carbon.device.mgt.mobile.android.impl.util.AndroidPluginConstants; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceDAO; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.mobile.dto.MobileDevice; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceMgtPluginException.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceMgtPluginException.java new file mode 100644 index 000000000..4a0b6a1c7 --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidDeviceMgtPluginException.java @@ -0,0 +1,57 @@ +/* + * 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. +*/ +package org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl; + + +public class AndroidDeviceMgtPluginException 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 AndroidDeviceMgtPluginException(String msg, Exception nestedEx) { + super(msg, nestedEx); + setErrorMessage(msg); + } + + public AndroidDeviceMgtPluginException(String message, Throwable cause) { + super(message, cause); + setErrorMessage(message); + } + + public AndroidDeviceMgtPluginException(String msg) { + super(msg); + setErrorMessage(msg); + } + + public AndroidDeviceMgtPluginException() { + super(); + } + + public AndroidDeviceMgtPluginException(Throwable cause) { + super(cause); + } + +} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidFeatureDAOImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidFeatureDAOImpl.java index 072a54c9e..7a6de77b5 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidFeatureDAOImpl.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/AndroidFeatureDAOImpl.java @@ -23,11 +23,11 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AndroidDAOFactory; import org.wso2.carbon.device.mgt.mobile.android.impl.dao.AndroidFeatureManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileFeatureDAO; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature; import org.wso2.carbon.device.mgt.mobile.android.impl.util.AndroidPluginConstants; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/impl/MobileFeatureDAOImpl.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/MobileFeatureDAOImpl.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/impl/MobileFeatureDAOImpl.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/MobileFeatureDAOImpl.java index 86a940fd6..eeade1e6a 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/impl/MobileFeatureDAOImpl.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/impl/MobileFeatureDAOImpl.java @@ -16,14 +16,14 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao.impl; +package org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileFeatureDAO; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature; import javax.sql.DataSource; import java.sql.Connection; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/util/MobileDeviceManagementDAOUtil.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/util/MobileDeviceManagementDAOUtil.java new file mode 100644 index 000000000..0251c13aa --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dao/util/MobileDeviceManagementDAOUtil.java @@ -0,0 +1,148 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.android.impl.dao.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.naming.InitialContext; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Hashtable; +import java.util.List; + +/** + * Utility method required by MobileDeviceManagement DAO classes. + */ +public class MobileDeviceManagementDAOUtil { + + private static final Log log = LogFactory.getLog(MobileDeviceManagementDAOUtil.class); + + public static DataSource lookupDataSource(String dataSourceName, + final Hashtable jndiProperties){ + + try { + if (jndiProperties == null || jndiProperties.isEmpty()) { + return (DataSource) InitialContext.doLookup(dataSourceName); + } + final InitialContext context = new InitialContext(jndiProperties); + return (DataSource) context.lookup(dataSourceName); + } catch (Exception e) { + String msg = "Error in looking up data source: " + e.getMessage(); + log.error(msg, e); + throw new RuntimeException(msg + e.getMessage(), e); + } + } + + public static void cleanupResources(Connection conn, PreparedStatement stmt, ResultSet rs) { + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing result set", e); + } + } + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing prepared statement", e); + } + } + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + log.warn("Error occurred while closing database connection", e); + } + } + } + + public static void cleanupResources(PreparedStatement stmt, ResultSet rs) { + cleanupResources(null, stmt, rs); + } + +// /** +// * Creates the mobile device management schema. +// * +// * @param dataSource Mobile data source +// */ +// public static void setupMobileDeviceManagementSchema(DataSource dataSource, String pluginType) throws MobileDeviceMgtPluginException { +// MobileDeviceManagementSchemaInitializer initializer = +// new MobileDeviceManagementSchemaInitializer(dataSource, pluginType); +// String checkSql = "select * from "; +// if (pluginType.equalsIgnoreCase("android")) { +// checkSql += "AD_DEVICE"; +// } else if (pluginType.equalsIgnoreCase("windows")) { +// checkSql += "WIN_DEVICE"; +// } else { +// checkSql += "IOS_DEVICE"; +// } +// try { +// if (!initializer.isDatabaseStructureCreated(checkSql)) { +// log.info("Initializing mobile device management repository database schema for : " + pluginType); +// initializer.createRegistryDatabase(); +// } else { +// log.info("Mobile device management repository database for " + pluginType +// + " already exists. Not creating a new database."); +// } +// } catch (Exception e) { +// throw new MobileDeviceMgtPluginException("Error occurred while initializing Mobile Device " + +// "Management database schema", e); +// } +// } +// +// +// /** +// * Resolve data source from the data source definition +// * +// * @param config data source configuration +// * @return data source resolved from the data source definition +// */ +// private static DataSource resolveDataSource(MobileDataSourceConfig config) { +// DataSource dataSource = null; +// if (config == null) { +// throw new RuntimeException( +// "data source configuration " + "is null and " + +// "thus, is not initialized"); +// } +// JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition(); +// if (jndiConfig != null) { +// if (log.isDebugEnabled()) { +// log.debug("Initializing data source using the JNDI " + +// "Lookup Definition"); +// } +// List jndiPropertyList = +// jndiConfig.getJndiProperties(); +// if (jndiPropertyList != null) { +// Hashtable jndiProperties = new Hashtable(); +// for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) { +// jndiProperties.put(prop.getName(), prop.getValue()); +// } +// dataSource = MobileDeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), jndiProperties); +// } else { +// dataSource = MobileDeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), null); +// } +// } +// return dataSource; +// } +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDevice.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDevice.java similarity index 98% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDevice.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDevice.java index 6de016dfb..daadfa824 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDevice.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDevice.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; import java.io.Serializable; import java.util.Date; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDeviceOperationMapping.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDeviceOperationMapping.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDeviceOperationMapping.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDeviceOperationMapping.java index 0ae7e68fa..ae855e2ab 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileDeviceOperationMapping.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileDeviceOperationMapping.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; /** * DTO of Mobile Device Operation Mappings. diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeature.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeature.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeature.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeature.java index 9ec5d30b3..6568c9d5c 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeature.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeature.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; import java.io.Serializable; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeatureProperty.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeatureProperty.java similarity index 94% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeatureProperty.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeatureProperty.java index cc99849de..fb226d107 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileFeatureProperty.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileFeatureProperty.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; /** * DTO of Mobile feature property. Represents a property of a mobile feature. diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperation.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperation.java similarity index 96% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperation.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperation.java index 7c0b9040c..fa9723484 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperation.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperation.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; import java.util.List; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperationProperty.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperationProperty.java similarity index 95% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperationProperty.java rename to components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperationProperty.java index d18126aff..5147bb004 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dto/MobileOperationProperty.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/dto/MobileOperationProperty.java @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dto; +package org.wso2.carbon.device.mgt.mobile.android.impl.dto; /** * DTO of Mobile Operation property. diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/AndroidPluginConstants.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/AndroidPluginConstants.java index 376932449..48c30ff09 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/AndroidPluginConstants.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/AndroidPluginConstants.java @@ -53,4 +53,15 @@ public final class AndroidPluginConstants { public static final String GCM = "GCM"; public static final String LOCAL = "LOCAL"; } + + public class MobilePluginConstants { + public static final String MOBILE_DB_SCRIPTS_FOLDER = "cdm"; + public static final String MOBILE_CONFIG_REGISTRY_ROOT = "/_system/config"; + + public static final String MEDIA_TYPE_XML = "application/xml"; + public static final String CHARSET_UTF8 = "UTF8"; + public static final String LANGUAGE_CODE_ENGLISH_US = "en_US"; + public static final String LANGUAGE_CODE_ENGLISH_UK = "en_UK"; + + } } \ No newline at end of file diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/MobileDeviceManagementUtil.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/MobileDeviceManagementUtil.java new file mode 100644 index 000000000..3e409653e --- /dev/null +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/impl/util/MobileDeviceManagementUtil.java @@ -0,0 +1,333 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.android.impl.util; + +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.DeviceManagementConstants; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.Feature; +import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; +import org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl.AndroidDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileDeviceOperationMapping; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileOperation; +import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileOperationProperty; +import org.wso2.carbon.device.mgt.mobile.android.internal.AndroidDeviceManagementDataHolder; +import org.wso2.carbon.registry.api.RegistryException; +import org.wso2.carbon.registry.api.Resource; +import org.wso2.carbon.registry.core.Registry; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.File; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Provides utility methods required by the mobile device management bundle. + */ +public class MobileDeviceManagementUtil { + + private static final Log log = LogFactory.getLog(MobileDeviceManagementUtil.class); + private static final String MOBILE_DEVICE_IMEI = "IMEI"; + private static final String MOBILE_DEVICE_IMSI = "IMSI"; + private static final String MOBILE_DEVICE_VENDOR = "VENDOR"; + private static final String MOBILE_DEVICE_OS_VERSION = "OS_VERSION"; + private static final String MOBILE_DEVICE_MODEL = "DEVICE_MODEL"; + private static final String MOBILE_DEVICE_LATITUDE = "LATITUDE"; + private static final String MOBILE_DEVICE_LONGITUDE = "LONGITUDE"; + private static final String MOBILE_DEVICE_SERIAL = "SERIAL"; + private static final String MOBILE_DEVICE_OS_BUILD_DATE = "OS_BUILD_DATE"; + + public static Document convertToDocument(File file) throws DeviceManagementException { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + try { + DocumentBuilder docBuilder = factory.newDocumentBuilder(); + return docBuilder.parse(file); + } catch (Exception e) { + throw new DeviceManagementException( + "Error occurred while parsing file, while converting " + + "to a org.w3c.dom.Document : " + e.getMessage(), e); + } + } + + private static String getPropertyValue(Device device, String property) { + if (device != null && device.getProperties() != null) { + for (Device.Property prop : device.getProperties()) { + if (property.equals(prop.getName())) { + return prop.getValue(); + } + } + } + return null; + } + + private static Device.Property getProperty(String property, String value) { + if (property != null) { + Device.Property prop = new Device.Property(); + prop.setName(property); + prop.setValue(value); + return prop; + } + return null; + } + + public static MobileDevice convertToMobileDevice(Device device) { + MobileDevice mobileDevice = null; + if (device != null) { + mobileDevice = new MobileDevice(); + mobileDevice.setMobileDeviceId(device.getDeviceIdentifier()); + mobileDevice.setImei(getPropertyValue(device, MOBILE_DEVICE_IMEI)); + mobileDevice.setImsi(getPropertyValue(device, MOBILE_DEVICE_IMSI)); + mobileDevice.setModel(getPropertyValue(device, MOBILE_DEVICE_MODEL)); + mobileDevice.setOsVersion(getPropertyValue(device, MOBILE_DEVICE_OS_VERSION)); + mobileDevice.setVendor(getPropertyValue(device, MOBILE_DEVICE_VENDOR)); + mobileDevice.setLatitude(getPropertyValue(device, MOBILE_DEVICE_LATITUDE)); + mobileDevice.setLongitude(getPropertyValue(device, MOBILE_DEVICE_LONGITUDE)); + mobileDevice.setSerial(getPropertyValue(device, MOBILE_DEVICE_SERIAL)); + mobileDevice.setOsBuildDate(getPropertyValue(device, MOBILE_DEVICE_OS_BUILD_DATE)); + + if (device.getProperties() != null) { + Map deviceProperties = new HashMap(); + for (Device.Property deviceProperty : device.getProperties()) { + deviceProperties.put(deviceProperty.getName(), deviceProperty.getValue()); + } + + mobileDevice.setDeviceProperties(deviceProperties); + } else { + mobileDevice.setDeviceProperties(new HashMap()); + } + } + return mobileDevice; + } + + public static Device convertToDevice(MobileDevice mobileDevice) { + Device device = null; + if (mobileDevice != null) { + device = new Device(); + List propertyList = new ArrayList(); + propertyList.add(getProperty(MOBILE_DEVICE_IMEI, mobileDevice.getImei())); + propertyList.add(getProperty(MOBILE_DEVICE_IMSI, mobileDevice.getImsi())); + propertyList.add(getProperty(MOBILE_DEVICE_MODEL, mobileDevice.getModel())); + propertyList.add(getProperty(MOBILE_DEVICE_OS_VERSION, mobileDevice.getOsVersion())); + propertyList.add(getProperty(MOBILE_DEVICE_OS_BUILD_DATE, mobileDevice.getOsBuildDate())); + propertyList.add(getProperty(MOBILE_DEVICE_VENDOR, mobileDevice.getVendor())); + if(mobileDevice.getLatitude() != null) { + propertyList.add(getProperty(MOBILE_DEVICE_LATITUDE, mobileDevice.getLatitude())); + } + if(mobileDevice.getLongitude() != null) { + propertyList.add(getProperty(MOBILE_DEVICE_LONGITUDE, mobileDevice.getLongitude())); + } + propertyList.add(getProperty(MOBILE_DEVICE_SERIAL, mobileDevice.getSerial())); + + if (mobileDevice.getDeviceProperties() != null) { + for (Map.Entry deviceProperty : mobileDevice.getDeviceProperties() + .entrySet()) { + propertyList + .add(getProperty(deviceProperty.getKey(), deviceProperty.getValue())); + } + } + + device.setProperties(propertyList); + device.setDeviceIdentifier(mobileDevice.getMobileDeviceId()); + } + return device; + } + + public static MobileOperation convertToMobileOperation(Operation operation) { + MobileOperation mobileOperation = new MobileOperation(); + MobileOperationProperty operationProperty; + List properties = new LinkedList(); + mobileOperation.setFeatureCode(operation.getCode()); + mobileOperation.setCreatedDate(new Date().getTime()); + Properties operationProperties = operation.getProperties(); + for (String key : operationProperties.stringPropertyNames()) { + operationProperty = new MobileOperationProperty(); + operationProperty.setProperty(key); + operationProperty.setValue(operationProperties.getProperty(key)); + properties.add(operationProperty); + } + mobileOperation.setProperties(properties); + return mobileOperation; + } + + public static List getMobileOperationIdsFromMobileDeviceOperations( + List mobileDeviceOperationMappings) { + List mobileOperationIds = new ArrayList(mobileDeviceOperationMappings.size()); + for (MobileDeviceOperationMapping mobileDeviceOperationMapping : mobileDeviceOperationMappings) { + mobileOperationIds.add(mobileDeviceOperationMapping.getOperationId()); + } + return mobileOperationIds; + } + + public static Operation convertMobileOperationToOperation(MobileOperation mobileOperation) { + Operation operation = new Operation(); + Properties properties = new Properties(); + operation.setCode(mobileOperation.getFeatureCode()); + for (MobileOperationProperty mobileOperationProperty : mobileOperation.getProperties()) { + properties + .put(mobileOperationProperty.getProperty(), mobileOperationProperty.getValue()); + } + operation.setProperties(properties); + return operation; + } + + public static MobileFeature convertToMobileFeature(Feature feature) { + MobileFeature mobileFeature = new MobileFeature(); + mobileFeature.setName(feature.getName()); + mobileFeature.setCode(feature.getCode()); + mobileFeature.setDescription(feature.getDescription()); + mobileFeature.setDeviceType(feature.getDeviceType()); + return mobileFeature; + } + + public static Feature convertToFeature(MobileFeature mobileFeature) { + Feature feature = new Feature(); + feature.setDescription(mobileFeature.getDescription()); + feature.setDeviceType(mobileFeature.getDeviceType()); + feature.setCode(mobileFeature.getCode()); + feature.setName(mobileFeature.getName()); + return feature; + } + + public static Registry getConfigurationRegistry() throws AndroidDeviceMgtPluginException { + try { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + return AndroidDeviceManagementDataHolder.getInstance().getRegistryService() + .getConfigSystemRegistry( + tenantId); + } catch (RegistryException e) { + throw new AndroidDeviceMgtPluginException( + "Error in retrieving conf registry instance: " + + e.getMessage(), e); + } + } + + public static Resource getRegistryResource(String path) throws AndroidDeviceMgtPluginException { + try { + if(MobileDeviceManagementUtil.getConfigurationRegistry().resourceExists(path)){ + return MobileDeviceManagementUtil.getConfigurationRegistry().get(path); + } + return null; + } catch (RegistryException e) { + throw new AndroidDeviceMgtPluginException("Error in retrieving registry resource : " + + e.getMessage(), e); + } + } + + public static boolean putRegistryResource(String path, + Resource resource) + throws AndroidDeviceMgtPluginException { + boolean status; + try { + MobileDeviceManagementUtil.getConfigurationRegistry().beginTransaction(); + MobileDeviceManagementUtil.getConfigurationRegistry().put(path, resource); + MobileDeviceManagementUtil.getConfigurationRegistry().commitTransaction(); + status = true; + } catch (RegistryException e) { + throw new AndroidDeviceMgtPluginException( + "Error occurred while persisting registry resource : " + + e.getMessage(), e); + } + return status; + } + + public static String getResourcePath(String resourceName, String platform) { + String regPath = ""; + switch (platform) { + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID: + regPath = AndroidPluginConstants.MobilePluginConstants + .MOBILE_CONFIG_REGISTRY_ROOT + "/" + + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID + + "/" + resourceName; + break; + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS: + regPath = AndroidPluginConstants.MobilePluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS + + "/" + resourceName; + break; + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS: + regPath = AndroidPluginConstants.MobilePluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS + + "/" + resourceName; + break; + } + return regPath; + } + + public static String getPlatformConfigPath(String platform) { + String regPath = ""; + switch (platform) { + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID: + regPath = DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID; + break; + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS: + regPath = DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS; + break; + case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS: + regPath = DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS; + break; + } + return regPath; + } + + public static boolean createRegistryCollection(String path) + throws AndroidDeviceMgtPluginException { + try { + if (! MobileDeviceManagementUtil.getConfigurationRegistry().resourceExists(path)) { + Resource resource = MobileDeviceManagementUtil.getConfigurationRegistry().newCollection(); + MobileDeviceManagementUtil.getConfigurationRegistry().beginTransaction(); + MobileDeviceManagementUtil.getConfigurationRegistry().put(path, resource); + MobileDeviceManagementUtil.getConfigurationRegistry().commitTransaction(); + } + return true; + } catch (AndroidDeviceMgtPluginException e) { + throw new AndroidDeviceMgtPluginException( + "Error occurred while creating a registry collection : " + + e.getMessage(), e); + } catch (RegistryException e) { + throw new AndroidDeviceMgtPluginException( + "Error occurred while creating a registry collection : " + + e.getMessage(), e); + } + } + + public static List getMissingFeatures(List supportedFeatures, List existingFeatures) { + HashMap featureHashMap = new HashMap(); + for (Feature feature: existingFeatures) { + featureHashMap.put(feature.getCode(),feature); + } + List missingFeatures = new ArrayList(); + for (Feature supportedFeature : supportedFeatures) { + if (featureHashMap.get(supportedFeature.getCode()) != null) { + continue; + } + missingFeatures.add(supportedFeature); + } + return missingFeatures; + } +} diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/internal/AndroidDeviceManagementServiceComponent.java b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/internal/AndroidDeviceManagementServiceComponent.java index 7eea7f814..409e15025 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/internal/AndroidDeviceManagementServiceComponent.java +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android/src/main/java/org/wso2/carbon/device/mgt/mobile/android/internal/AndroidDeviceManagementServiceComponent.java @@ -27,7 +27,6 @@ import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; import org.wso2.carbon.device.mgt.mobile.android.impl.AndroidDeviceManagementService; import org.wso2.carbon.device.mgt.mobile.android.impl.AndroidPolicyMonitoringService; import org.wso2.carbon.device.mgt.mobile.android.impl.gcm.GCMService; -import org.wso2.carbon.device.mgt.mobile.internal.MobileDeviceManagementDataHolder; import org.wso2.carbon.ndatasource.core.DataSourceService; import org.wso2.carbon.policy.mgt.common.spi.PolicyMonitoringService; import org.wso2.carbon.registry.core.service.RegistryService; @@ -66,9 +65,9 @@ public class AndroidDeviceManagementServiceComponent { DeviceManagementService androidDeviceManagementService = new AndroidDeviceManagementService(); GCMService gcmService = new GCMService(); - androidServiceRegRef = - bundleContext.registerService(DeviceManagementService.class.getName(), - androidDeviceManagementService, null); +// androidServiceRegRef = +// bundleContext.registerService(DeviceManagementService.class.getName(), +// androidDeviceManagementService, null); gcmServiceRegRef = bundleContext.registerService(GCMService.class.getName(), gcmService, null); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/pom.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/pom.xml deleted file mode 100644 index f8bd11fff..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - mobile-base-plugin - org.wso2.carbon.devicemgt-plugins - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile.ui - WSO2 Carbon - EMM Server UI - pom - - - - - maven-assembly-plugin - 2.5.5 - - ${project.artifactId}-${carbon.devicemgt.plugins.version} - false - - src/assembly/src.xml - - - - - create-archive - package - - single - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/assembly/src.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/assembly/src.xml deleted file mode 100644 index a73a3edaa..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/assembly/src.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - src - - zip - - false - ${basedir}/src - - - ${basedir}/src/main/resources/jaggeryapps/devicemgt - /devicemgt - true - - - ${basedir}/src/main/resources/jaggeryapps/emm-web-agent - /emm-web-agent - true - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json deleted file mode 100644 index b26d93b60..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "appName": "WSO2 Enterprise Mobility Manager", - "cachingEnabled": true, - "debuggingEnabled": false, - "permissionRoot": "/", - "loginPage": "cdmf.page.sign-in", - "adminServicesUrl": "https://${server.ip}:${server.https_port}/admin/services/", - "authModule": { - "enabled": true, - "login": { - "onSuccess": { - "script": "/app/modules/login.js", - "page": "mdm.page.dashboard" - }, - "onFail": { - "script": "/app/modules/login.js", - "page": "cdmf.page.sign-in" - } - }, - "logout": { - "onSuccess": { - "page": "cdmf.page.sign-in" - }, - "onFail": { - "page": "mdm.page.dashboard" - } - }, - "sso": { - "enabled": false, - "issuer" : "emm", - "appName" : "emm", - "identityProviderUrl" : "https://localhost:9443/samlsso", - "acs": "https://localhost:9443/emm/uuf/sso/acs", - "identityAlias": "wso2carbon", - "responseSigningEnabled" : "true", - "useTenantKey": false - } - }, - "generalConfig" : { - "host" : "https://localhost:9443", - "companyName" : "WSO2 Enterprise Mobility Manager", - "browserTitle" : "WSO2 EMM", - "copyrightPrefix" : "\u00A9 %date-year%, ", - "copyrightOwner" : "WSO2 Inc.", - "copyrightOwnersSite" : "http://www.wso2.org", - "copyrightSuffix" : "" - }, - "errorPages": { - "default": "uuf.page.error" - } -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json deleted file mode 100644 index 06417b7e8..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "appContext": "/emm/", - "webAgentContext" : "/emm-web-agent/", - "apiContext": "api", - "httpsURL" : "%https.ip%", - "httpURL" : "%http.ip%", - "httpsWebURL" : "%https.ip%", - "wssURL" : "%https.ip%", - "wsURL" : "%http.ip%", - "dashboardServerURL" : "%https.ip%", - "enrollmentDir": "/emm-web-agent/enrollment", - "iOSConfigRoot" : "%https.ip%/ios-enrollment/", - "iOSAPIRoot" : "%https.ip%/ios/", - "adminService": "%https.ip%", - "oauthProvider": { - "appRegistration": { - "appType": "webapp", - "clientName": "emm", - "owner": "admin@carbon.super", - "dynamicClientAppRegistrationServiceURL": "%https.ip%/dynamic-client-web/register", - "apiManagerClientAppRegistrationServiceURL": "%https.ip%/api-application-registration/register/tenants", - "grantType": "password refresh_token urn:ietf:params:oauth:grant-type:saml2-bearer urn:ietf:params:oauth:grant-type:jwt-bearer", - "tokenScope": "admin", - "callbackUrl": "%https.ip%/api/device-mgt/v1.0" - }, - "tokenServiceURL": "%https.ip%/oauth2/token" - }, - "adminUser": "admin@carbon.super", - "adminRole": "admin", - "usernameLength": 30, - "pageSize":10, - "ssoConfiguration" : { - "enabled" : false, - "issuer" : "devicemgt", - "appName" : "devicemgt", - "identityProviderURL" : "%https.ip%/sso/samlsso.jag", - "responseSigningEnabled" : "true", - "keyStorePassword" : "wso2carbon", - "identityAlias" : "wso2carbon", - "keyStoreName" : "/repository/resources/security/wso2carbon.jks" - }, - "userValidationConfig" : { - "usernameJSRegEx" : "^[\\S]{3,30}$", - "usernameRegExViolationErrorMsg" : "Provided username is invalid.", - "usernameHelpMsg" : "Should be in minimum 3 characters long and do not include any whitespaces.", - "firstnameJSRegEx" : "^[\\S]{3,30}$", - "firstnameRegExViolationErrorMsg" : "Provided first name is invalid.", - "lastnameJSRegEx" : "^[\\S]{3,30}$", - "lastnameRegExViolationErrorMsg" : "Provided last name is invalid.", - "emailJSRegEx" : "/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/", - "emailRegExViolationErrorMsg" : "Provided email is invalid." - }, - "groupValidationConfig": { - "groupNameJSRegEx": "^[\\S]{3,30}$", - "groupNameRegExViolationErrorMsg": "Provided group name is invalid.", - "groupNameHelpMsg": "Should be in minimum 3 characters long and should not include any whitespaces." - }, - "roleValidationConfig" : { - "roleNameJSRegEx" : "^[\\S]{3,30}$", - "roleNameRegExViolationErrorMsg" : "Provided role name is invalid.", - "roleNameHelpMsg" : "should be in minimum 3 characters long and do not include any whitespaces." - }, - "generalConfig" : { - "host" : "%https.ip%", - "companyName" : "WSO2 Carbon Device Manager", - "browserTitle" : "WSO2 Device Manager", - "copyrightPrefix" : "\u00A9 %date-year%, ", - "copyrightOwner" : "WSO2 Inc.", - "copyrightOwnersSite" : "http://www.wso2.org", - "copyrightSuffix" : " All Rights Reserved." - }, - "scopes" : [ - "user:manage", - "user:view", - "device-type:admin:view", - "device:view", - "notification:view", - "device:admin:view", - "application:manage", - "activity:view", - "user:admin:reset-password", - "policy:manage", - "policy:view", - "role:manage", - "role:view", - "configuration:view", - "configuration:modify", - "device:android:operation:reboot", - "device:android:operation:camera", - "device:android:operation:vpn", - "device:android:operation:lock", - "device:android:operation:ring", - "device:android:operation:update-app", - "device:android:operation:wipe", - "device:android:operation:encrypt", - "device:android:operation:blacklist-app", - "device:android:operation:applications", - "device:android:operation:enterprise-wipe", - "device:android:operation:info", - "device:android:operation:wifi", - "device:android:operation:uninstall-app", - "device:android:operation:change-lock", - "device:android:operation:notification", - "device:android:operation:upgrade", - "device:android:operation:unlock", - "device:android:operation:mute", - "device:android:operation:location", - "device:android:operation:webclip", - "device:android:operation:clear-password", - "device:android:operation:password-policy", - "device:android:operation:install-app", - "device:android:event:write", - "device:android:event:read", - "device:android:enroll", - "configuration:manage", - "configuration:view", - "device:android:enroll", - "certificate:view", - "certificate:manage" - ], - "isOAuthEnabled" : true, - "backendRestEndpoints" : { - "deviceMgt" : "/api/device-mgt/v1.0" - } -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.hbs deleted file mode 100644 index 8439db378..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.hbs +++ /dev/null @@ -1,165 +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.lib.qrcode"}} -{{unit "mdm.unit.device.qr-modal"}} -{{#zone "content"}} -
- {{#if permissions.LIST_DEVICES}} -
-
-
Devices
-
-
-
- Loading... - - - - - - - - View - - {{#if permissions.ENROLL_DEVICE}} - - - - - - Add - - {{/if}} - -
-
-
-
- {{/if}} - {{# if permissions.LIST_POLICIES}} -
-
-
Policies
-
-
-
- Loading... - - - - - - - - View - - - {{#if permissions.ADD_POLICY}} - - - - - - Add - - {{/if}} - -
-
-
-
- {{/if}} - {{# if permissions.LIST_USERS}} -
-
-
Users
-
-
-
- Loading... - - - - - - - - View - - - {{#if permissions.ADD_USER}} - - - - - - Add - - {{/if}} - -
-
-
-
- {{/if}} - {{# if permissions.LIST_ROLES}} -
-
-
Roles
-
-
-
- Loading... - - - - - - - - View - - {{#if permissions.ADD_ROLE}} - - - - - - - Add - - {{/if}} - -
-
-
-
- {{/if}} - {{# if permissions.PERMITTED_NONE}} -

- Permitted None -

-
- You are not authorized to view any of the dashboard listed resources. - {{/if}} -
-{{/zone}} -{{#zone "bottomJs"}} - {{js "js/dashboard.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.js deleted file mode 100644 index 9a7fa6c1a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.js +++ /dev/null @@ -1,42 +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 config.json the - * specific language governing permissions and limitations - * under the License. - */ - -function onRequest() { - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - - var viewModel = {}; - var permissions = {}; - permissions["LIST_DEVICES"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/view"); - permissions["ENROLL_DEVICE"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/ios") || - userModule.isAuthorized("/permission/admin/devices/enroll/android") || - userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/windows"); - permissions["LIST_POLICIES"] = userModule.isAuthorized("/permission/admin/device-mgt/policies/view"); - permissions["ADD_POLICY"] = userModule.isAuthorized("/permission/admin/device-mgt/policies/manage"); - permissions["LIST_USERS"] = userModule.isAuthorized("/permission/admin/device-mgt/users/view"); - permissions["ADD_USER"] = userModule.isAuthorized("/permission/admin/device-mgt/users/manage"); - permissions["LIST_ROLES"] = userModule.isAuthorized("/permission/admin/device-mgt/roles/view"); - permissions["ADD_ROLE"] = userModule.isAuthorized("/permission/admin/device-mgt/roles/manage"); - permissions["PERMITTED_NONE"] = !(permissions["LIST_DEVICES"] || permissions["LIST_POLICIES"] || - permissions["LIST_USERS"] || permissions["LIST_ROLES"]); - - viewModel["permissions"] = permissions; - //TODO: Move enrollment URL into app-conf.json - viewModel["enrollmentURL"] = mdmProps["generalConfig"]["host"] + mdmProps["enrollmentDir"]; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.json deleted file mode 100644 index b793d5ec7..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/dashboard.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.page.dashboard" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/public/js/dashboard.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/public/js/dashboard.js deleted file mode 100644 index 7247533cb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.dashboard/public/js/dashboard.js +++ /dev/null @@ -1,61 +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 updateStats = function (serviceURL, id) { - //noinspection JSUnresolvedVariable invokerUtil - invokerUtil.get( - serviceURL, - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var responsePayload = JSON.parse(data); - //noinspection JSUnresolvedVariable count - var itemCount = responsePayload.count; - if (itemCount == 0) { - $(id).html(0); - $(id + "-view-btn").hide(); - } else if (itemCount > 0) { - $(id).html(itemCount); - $(id + "-view-btn").show(); - } else { - $(id).html("Error..."); - } - } else if (!data) { - updateStats(serviceURL, id); - } - }, - function () { - $(id).html("Error..."); - } - ); -}; - -//noinspection JSUnresolvedFunction ready -$(document).ready(function () { - if ($("#device-count").data("device-count")) { - updateStats("/api/device-mgt/v1.0/devices?offset=0&limit=1", "#device-count"); - } - if ($("#policy-count").data("policy-count")) { - updateStats("/api/device-mgt/v1.0/policies?offset=0&limit=1", "#policy-count"); - } - if ($("#user-count").data("user-count")) { - updateStats("/api/device-mgt/v1.0/users/count", "#user-count"); - } - if ($("#role-count").data("role-count")) { - updateStats("/api/device-mgt/v1.0/roles?offset=0&limit=1&user-store=all", "#role-count"); - } -}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.hbs deleted file mode 100644 index 1f166ffbf..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.hbs +++ /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. -}} -{{unit "cdmf.unit.ui.title" pageTitle="Device Details"}} -{{unit "cdmf.unit.lib.service-invoker-utility"}} -{{unit "cdmf.unit.lib.handlebars"}} - -{{#zone "breadcrumbs"}} -
  • - - - -
  • -
  • - - - Devices - -
  • -
  • - - Device Details - -
  • -{{/zone}} - -{{#zone "content"}} - {{#if isAuthorized}} - {{unit "cdmf.unit.lib.data-table"}} - {{unit "cdmf.unit.device.operation-mod"}} - {{unit "cdmf.unit.device.view"}} - {{else}} -

    - Permission Denied -

    -
    - You are not authorized to view any enrolled device in the system. - {{/if}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.js deleted file mode 100644 index 35c71cbd9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.js +++ /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. - */ - -function onRequest(context){ - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var viewModel = {}; - - // permission checks - // [1] checking viewing devices permission - viewModel["isAuthorized"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/view"); - - if (viewModel["isAuthorized"]) { - context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { - if (arguments.length < 3) - throw new Error("Handlebars Helper equal needs 2 parameters"); - if( lvalue!=rvalue ) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - } - - return viewModel; -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.json deleted file mode 100644 index 04395bd8f..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.device.view/view.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.page.device.view" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.hbs deleted file mode 100644 index 3662eb6b1..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.hbs +++ /dev/null @@ -1,150 +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.ui.title" pageTitle="Device Management"}} - -{{unit "cdmf.unit.data-tables-extended"}} -{{unit "cdmf.unit.lib.qrcode"}} -{{unit "mdm.unit.device.qr-modal"}} - -{{#zone "breadcrumbs"}} -
  • - - - -
  • -
  • - - - Devices - -
  • -{{/zone}} - -{{#zone "navbarActions"}} - {{#if permissions.ENROLL_DEVICE}} - - {{/if}} - {{#if permissions.ADVANCED_SEARCH}} - - {{/if}} -{{/zone}} - -{{#zone "content"}} - {{#if permissions.VIEW_DEVICES}} - - -
    - - {{else}} -

    - Permission Denied -

    -
    - You are not authorized to view any enrolled device in the system. - {{/if}} -{{/zone}} - -{{#zone "bottomJs"}} - {{#if permissions.VIEW_DEVICES}} - {{js "js/device-listing.js"}} - {{/if}} -{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.js deleted file mode 100644 index 794382c67..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.js +++ /dev/null @@ -1,43 +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() { - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var constants = require("/app/modules/constants.js"); - var viewModel = {}; - var permissions = {}; - - // permission checks - // [1] checking enrollment permissions - permissions["ENROLL_DEVICE"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/android") || - userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/ios") || - userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/windows"); - - // [2] checking advanced device search permissions - permissions["ADVANCED_SEARCH"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/view"); - - // [3] checking device viewing permission - permissions["VIEW_DEVICES"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/view"); - - var currentUser = session.get(constants["USER_SESSION_KEY"]); - - viewModel["permissions"] = permissions; - viewModel["currentUser"] = currentUser; - - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.json deleted file mode 100644 index 4886bfc3c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/devices.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.page.devices" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/public/js/device-listing.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/public/js/device-listing.js deleted file mode 100644 index bdd66f49a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.devices/public/js/device-listing.js +++ /dev/null @@ -1,276 +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. - */ - -/** - * Following function would execute - * when a user clicks on the list item - * initial mode and with out select mode. - */ -function InitiateViewOption() { - if ($(".select-enable-btn").text() == "Select") { - $(location).attr('href', $(this).data("url")); - } -} - -(function () { - var validateAndReturn = function (value) { - return (value == undefined || value == null) ? "Unspecified" : value; - }; - Handlebars.registerHelper("deviceMap", function (device) { - device.owner = validateAndReturn(device.owner); - device.ownership = validateAndReturn(device.ownership); - var arr = device.properties; - if (arr) { - device.properties = arr.reduce(function (total, current) { - total[current.name] = validateAndReturn(current.value); - return total; - }, {}); - } - }); -})(); - -/* - * Setting-up global variables. - */ -var deviceCheckbox = "#ast-container .ctrl-wr-asset .itm-select input[type='checkbox']"; - -/* - * Add selected style class to the parent element function. - * @param checkbox: Selected checkbox - */ -function addDeviceSelectedClass(checkbox) { - if ($(checkbox).is(":checked")) { - $(checkbox).closest(".ctrl-wr-asset").addClass("selected device-select"); - } else { - $(checkbox).closest(".ctrl-wr-asset").removeClass("selected device-select"); - } -} - -function loadDevices() { - var deviceListing = $("#device-listing"); - var currentUser = deviceListing.data("currentUser"); - - function getPropertyValue(deviceProperties, propertyName) { - var property; - for (var i = 0; i < deviceProperties.length; i++) { - property = deviceProperties[i]; - if (property.name == propertyName) { - return property.value; - } - } - return {}; - } - - var dataFilter = function (data) { - var noDeviceView = "#no-device-view"; - - data = JSON.parse(data); - var json; - - if (data["count"] == 0) { - if ($(noDeviceView).length) { - $(noDeviceView).removeClass('hidden'); - } - - $(".bulk-action-row").addClass('hidden'); - - json = { - "recordsTotal": 0, - "recordsFiltered": 0, - "data": [] - }; - - } else if (data["count"] > 0) { - $(noDeviceView).remove(); - $("#enroll-btn").removeClass('hidden'); - $("#advanced-search-btn").removeClass('hidden'); - $(".bulk-action-row").removeClass('hidden'); - $("#device-table").removeClass('hidden'); - - var objects = []; - - $(data.devices).each(function (index) { - objects.push( - { - model: getPropertyValue(data.devices[index].properties, "DEVICE_MODEL"), - vendor: getPropertyValue(data.devices[index].properties, "VENDOR"), - user: data.devices[index].enrolmentInfo.owner, - status: data.devices[index].enrolmentInfo.status, - ownership: data.devices[index].enrolmentInfo.ownership, - type: data.devices[index].type, - deviceIdentifier: data.devices[index].deviceIdentifier, - name: data.devices[index].name - } - ); - }); - - json = { - "recordsTotal": data["count"], - "recordsFiltered": data["count"], - "data": objects - }; - - } - - return JSON.stringify(json); - }; - - // possible params - nRow, aData, dataIndex - var fnCreatedRow = function (nRow, aData) { - $(nRow).attr('data-type', 'selectable'); - $(nRow).attr('data-devicetype', aData["type"]); - $(nRow).attr('data-deviceid', aData["deviceIdentifier"]); - }; - - var columns = [ - { - class: 'remove-padding icon-only content-fill viewEnabledIcon', - data: null, - render: function (data, type, row) { - var deviceType = row.type; - var deviceIdentifier = row.deviceIdentifier; - var url = "#"; - if (row.status != 'REMOVED') { - url = "device/" + deviceType + "?id=" + deviceIdentifier; - } - return '
    ' + - '' + - '
    ' - } - }, - { - class: 'fade-edge', - data: 'name', - render: function (name, type, row) { - var model = row.model; - var vendor = row.vendor; - var html = '

    Device ' + name + '

    '; - if (model) { - html += '
    (' + vendor + '-' + model + ')
    '; - } - return html; - } - }, - { - class: 'fade-edge remove-padding-top', - data: 'user', - render: function (user) { - return '
    ' + user + '
    '; - } - }, - { - class: 'fade-edge remove-padding-top', - data: 'status', - render: function (status) { - var html; - switch (status) { - case 'ACTIVE' : - html = '  Active'; - break; - case 'UNREACHABLE' : - html = '  Unreachable'; - break; - case 'INACTIVE' : - html = '  Inactive'; - break; - case 'REMOVED' : - html = '  Removed'; - break; - } - return '
    ' + html + '
    '; - } - }, - { - className: 'fade-edge remove-padding-top', - data: 'type', - render: function (type) { - return '
    ' + type + '
    '; - } - }, - { - className: 'fade-edge remove-padding-top', - data: 'ownership', - render: function (ownership) { - return '
    ' + ownership + '
    '; - } - } - ]; - - $('#device-grid').datatables_extended_serverside_paging( - {"sorting": false}, - "/api/device-mgt/v1.0/devices", - dataFilter, - columns, - fnCreatedRow, - function () { - $(".icon .text").res_text(0.2); - $('#device-grid').removeClass('hidden'); - }, { - "placeholder": "Search By Device Name", - "searchKey": "name" - }); - - $(deviceCheckbox).click(function () { - addDeviceSelectedClass(this); - }); -} - -/* - * Setting-up global variables. - */ -//var assetContainer = "#ast-container"; - -//function openCollapsedNav(){ -// $('.wr-hidden-nav-toggle-btn').addClass('active'); -// $('#hiddenNav').slideToggle('slideDown', function(){ -// if($(this).css('display') == 'none'){ -// $('.wr-hidden-nav-toggle-btn').removeClass('active'); -// } -// }); -//} - -/* - * DOM ready functions. - */ -$(document).ready(function () { - loadDevices(); - - /* Adding selected class for selected devices */ - $(deviceCheckbox).each(function () { - addDeviceSelectedClass(this); - }); - - /* for device list sorting drop down */ - $(".ctrl-filter-type-switcher").popover({ - html: true, - content: function () { - return $("#content-filter-types").html(); - } - }); - - /* for data tables*/ - $('[data-toggle="tooltip"]').tooltip(); - - $("[data-toggle=popover]").popover(); - - $('#nav').affix({ - offset: { - top: $('header').height() - } - }); -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs deleted file mode 100644 index e5d83caef..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs +++ /dev/null @@ -1,662 +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.ui.title" pageTitle="Policy Management"}} -{{unit "cdmf.unit.data-tables-extended"}} - -{{#zone "topCss"}} - -{{/zone}} - -{{#zone "breadcrumbs"}} -
  • - - - -
  • -
  • - - - Policies - -
  • -{{/zone}} - -{{#zone "navbarActions"}} - {{#if permissions.ADD_ADMIN_POLICY}} - {{#equal noPolicy false}} -
  • - - - - - - -  Add New Policy - -
  • - {{/equal}} - {{/if}} - {{#if permissions.CHANGE_POLICY_PRIORITY}} - {{#equal noPolicy false}} -
  • - - - - - - -  Policy Priority - -
  • - {{/equal}} - {{/if}} -
  • - - - - - -  Apply Changes To Devices - -
  • -{{/zone}} - -{{#zone "content"}} - {{#equal isUpdated true}} - - {{/equal}} - {{#equal noPolicy true}} -
    - -
    - {{/equal}} - {{#equal noPolicy false}} -
    - - Loading policies . . . -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{#each policyListToView}} - - - - - - - - - - - - {{/each}} -
    - - - {{/equal}} -
    - - - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    -
    - - - -
    -
    - - - -
    -
    - - - -
    -
    - - - -
    -{{/zone}} - -{{#zone "bottomJs"}} - {{js "js/policy-list.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js deleted file mode 100644 index 7c329ca7c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js +++ /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. - */ - -function onRequest(context) { - context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { - if (arguments.length < 3) { - throw new Error("Handlebars Helper equal needs 2 parameters"); - } - if (lvalue != rvalue) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - var page = {}; - var policyModule = require("/app/modules/business-controllers/policy.js")["policyModule"]; - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var response = policyModule.getAllPolicies(); - if (response["status"] == "success") { - var policyListToView = response["content"]; - page["policyListToView"] = policyListToView; - var policyCount = policyListToView.length; - if (policyCount == 0) { - page["policyListingStatusMsg"] = "No policy is available to be displayed."; - page["noPolicy"] = true; - } else { - page["noPolicy"] = false; - page["isUpdated"] = response["updated"]; - } - } else { - // here, response["status"] == "error" - page["policyListingStatusMsg"] = "An unexpected error occurred. Please try again later."; - page["noPolicy"] = true; - } - - if (userModule.isAuthorized("/permission/admin/device-mgt/policies/remove")) { - page["removePermitted"] = true; - } - if (userModule.isAuthorized("/permission/admin/device-mgt/policies/update")) { - page["editPermitted"] = true; - } - page.permissions = userModule.getUIPermissions(); - return page; -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json deleted file mode 100644 index 53a1aada9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/policies", - "extends": "cdmf.page.policies", - "layout": "cdmf.layout.default" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js deleted file mode 100644 index 1338ace7e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js +++ /dev/null @@ -1,366 +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. - */ - -/* sorting function */ -var sortUpdateBtn = "#sortUpdateBtn"; -// var sortedIDs; -// var dataTableSelection = ".DTTT_selected"; -var settings = { - "sorting": false -}; -$('#policy-grid').datatables_extended(settings); -// $(".icon .text").res_text(0.2); - -var saveNewPrioritiesButton = "#save-new-priorities-button"; -var saveNewPrioritiesButtonEnabled = Boolean($(saveNewPrioritiesButton).data("enabled")); -if (saveNewPrioritiesButtonEnabled) { - $(saveNewPrioritiesButton).removeClass("hide"); -} - -/** - * Following function would execute - * when a user clicks on the list item - * initial mode and with out select mode. - */ -function InitiateViewOption() { - $(location).attr('href', $(this).data("url")); -} - -//var addSortableIndexNumbers = function () { -// $(".wr-sortable .list-group-item").not(".ui-sortable-placeholder").each(function (i) { -// $(".wr-sort-index", this).html(i + 1); -// }); -//}; - -//var sortElements = function () { -// addSortableIndexNumbers(); -// var sortableElem = ".wr-sortable"; -// $(sortableElem).sortable({ -// beforeStop: function () { -// sortedIDs = $(this).sortable("toArray"); -// addSortableIndexNumbers(); -// $(sortUpdateBtn).prop("disabled", false); -// } -// }); -// $(sortableElem).disableSelection(); -//}; - -/** - * Modal related stuff are as follows. - */ - -var modalPopup = ".modal"; -var modalPopupContainer = modalPopup + " .modal-content"; -var modalPopupContent = modalPopup + " .modal-content"; -var body = "body"; - -/* - * set popup maximum height function. - */ -function setPopupMaxHeight() { - var maxHeight = "max-height"; - var marginTop = "margin-top"; - var body = "body"; - $(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30))); - $(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2))); -} - -/* - * show popup function. - */ -function showPopup() { - $(modalPopup).modal('show'); -} - -/* - * hide popup function. - */ -function hidePopup() { - $(modalPopupContent).html(""); - $(modalPopupContent).removeClass("operation-data"); - $(modalPopup).modal('hide'); - $('body').removeClass('modal-open').css('padding-right','0px'); - $('.modal-backdrop').remove(); -} - -/* - * Function to get selected policies. - */ -function getSelectedPolicyStates() { - var policyList = []; - var thisTable = $(".DTTT_selected").closest('.dataTables_wrapper').find('.dataTable').dataTable(); - thisTable.api().rows().every(function () { - if ($(this.node()).hasClass('DTTT_selected')) { - policyList.push($(thisTable.api().row(this).node()).data('status')); - } - }); - - return policyList; -} - -/* - * Function to get selected policies. - */ -function getSelectedPolicies() { - var policyList = []; - var thisTable = $(".DTTT_selected").closest('.dataTables_wrapper').find('.dataTable').dataTable(); - thisTable.api().rows().every(function () { - if ($(this.node()).hasClass('DTTT_selected')) { - policyList.push($(thisTable.api().row(this).node()).data('id')); - } - }); - - return policyList; -} - -$(document).ready(function () { -// sortElements(); - -// var policyRoles = $("#policy-roles").text(); -// var policyUsers = $("#policy-users").text(); -// -// if (!policyRoles) { -// $("#policy-roles").hide(); -// } -// if (!policyUsers) { -// $("#policy-users").hide(); -// } - - /** - * ******************************************** - * Click functions related to Policy Listing - * ******************************************** - */ - - // [1] logic for running apply-changes-for-devices use-case - - var applyChangesButtonId = "#appbar-btn-apply-changes"; - - var isUpdated = $("#is-updated").val(); - if (!isUpdated) { - // if no updated policies found, hide button from app bar - $(applyChangesButtonId).addClass("hidden"); - } else { - // if updated policies found, show button from app bar - $(applyChangesButtonId).removeClass("hidden"); - } - - // click-event function for applyChangesButton - $(applyChangesButtonId).click(function () { - var serviceURL = "/api/device-mgt/v1.0/policies/apply-changes"; - $(modalPopupContent).html($('#change-policy-modal-content').html()); - showPopup(); - - $("a#change-policy-yes-link").click(function () { - invokerUtil.put( - serviceURL, - null, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200) { - $(modalPopupContent).html($('#change-policy-success-content').html()); - showPopup(); - $("a#change-policy-success-link").click(function () { - hidePopup(); - location.reload(); - }); - } - }, - // on error - function (jqXHR) { - console.log(stringify(jqXHR.data)); - $(modalPopupContent).html($("#change-policy-error-content").html()); - showPopup(); - $("a#change-policy-error-link").click(function () { - hidePopup(); - }); - } - ); - }); - - $("a#change-policy-cancel-link").click(function () { - hidePopup(); - }); - }); - - // [2] logic for un-publishing a selected set of Active, Active/Updated policies - - $(".policy-unpublish-link").click(function () { - var policyList = getSelectedPolicies(); - var statusList = getSelectedPolicyStates(); - if (($.inArray("Inactive/Updated", statusList) > -1) || ($.inArray("Inactive", statusList) > -1)) { - // if policies found in Inactive or Inactive/Updated states with in the selection, - // pop-up an error saying - // "You cannot select already inactive policies. Please deselect inactive policies and try again." - $(modalPopupContent).html($("#errorPolicyUnPublishSelection").html()); - showPopup(); - } else { - var serviceURL = "/api/device-mgt/v1.0/policies/deactivate-policy"; - if (policyList.length == 0) { - $(modalPopupContent).html($("#errorPolicyUnPublish").html()); - } else { - $(modalPopupContent).html($("#unpublish-policy-modal-content").html()); - } - showPopup(); - - // on-click function for policy un-publishing "yes" button - $("a#unpublish-policy-yes-link").click(function () { - invokerUtil.post( - serviceURL, - policyList, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - $(modalPopupContent).html($("#unpublish-policy-success-content").html()); - $("a#unpublish-policy-success-link").click(function () { - hidePopup(); - location.reload(); - }); - } - }, - // on error - function (jqXHR) { - console.log(stringify(jqXHR.data)); - $(modalPopupContent).html($("#unpublish-policy-error-content").html()); - $("a#unpublish-policy-error-link").click(function () { - hidePopup(); - }); - } - ); - }); - - // on-click function for policy un-publishing "cancel" button - $("a#unpublish-policy-cancel-link").click(function () { - hidePopup(); - }); - } - }); - - // [3] logic for publishing a selected set of Inactive, Inactive/Updated policies - - $(".policy-publish-link").click(function () { - var policyList = getSelectedPolicies(); - var statusList = getSelectedPolicyStates(); - if (($.inArray("Active/Updated", statusList) > -1) || ($.inArray("Active", statusList) > -1)) { - // if policies found in Active or Active/Updated states with in the selection, - // pop-up an error saying - // "You cannot select already active policies. Please deselect active policies and try again." - $(modalPopupContent).html($("#active-policy-selection-error").html()); - showPopup(); - } else { - var serviceURL = "/api/device-mgt/v1.0/policies/activate-policy"; - if (policyList.length == 0) { - $(modalPopupContent).html($("#policy-publish-error").html()); - } else { - $(modalPopupContent).html($("#publish-policy-modal-content").html()); - } - showPopup(); - - // on-click function for policy removing "yes" button - $("a#publish-policy-yes-link").click(function () { - invokerUtil.post( - serviceURL, - policyList, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - $(modalPopupContent).html($("#publish-policy-success-content").html()); - $("a#publish-policy-success-link").click(function () { - hidePopup(); - location.reload(); - }); - } - }, - // on error - function (jqXHR) { - console.log(stringify(jqXHR.data)); - $(modalPopupContent).html($("#publish-policy-error-content").html()); - $("a#publish-policy-error-link").click(function () { - hidePopup(); - }); - } - ); - }); - - // on-click function for policy removing "cancel" button - $("a#publish-policy-cancel-link").click(function () { - hidePopup(); - }); - } - }); - - // [4] logic for removing a selected set of policies - - $(".policy-remove-link").click(function () { - var policyList = getSelectedPolicies(); - var statusList = getSelectedPolicyStates(); - if (($.inArray("Active/Updated", statusList) > -1) || ($.inArray("Active", statusList) > -1)) { - // if policies found in Active or Active/Updated states with in the selection, - // pop-up an error saying - // "You cannot remove already active policies. Please deselect active policies and try again." - $(modalPopupContent).html($("#active-policy-selection-error").html()); - showPopup(); - } else { - var serviceURL = "/api/device-mgt/v1.0/policies/remove-policy"; - if (policyList.length == 0) { - $(modalPopupContent).html($("#policy-remove-error").html()); - } else { - $(modalPopupContent).html($("#remove-policy-modal-content").html()); - } - showPopup(); - - // on-click function for policy removing "yes" button - $("a#remove-policy-yes-link").click(function () { - invokerUtil.post( - serviceURL, - policyList, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - $(modalPopupContent).html($("#remove-policy-success-content").html()); - $("a#remove-policy-success-link").click(function () { - hidePopup(); - location.reload(); - }); - } - }, - // on error - function (jqXHR) { - console.log(stringify(jqXHR.data)); - $(modalPopupContent).html($("#remove-policy-error-content").html()); - $("a#remove-policy-error-link").click(function () { - hidePopup(); - }); - } - ); - }); - - // on-click function for policy removing "cancel" button - $("a#remove-policy-cancel-link").click(function () { - hidePopup(); - }); - } - }); - - $("#loading-content").remove(); - if ($("#policy-listing-status-msg").text()) { - $("#policy-listing-status").removeClass("hidden"); - } - $("#policy-grid").removeClass("hidden"); - // $(".icon .text").res_text(0.2); -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.hbs deleted file mode 100644 index d1787fd27..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.js deleted file mode 100644 index 82648b301..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/date-range-picker.json deleted file mode 100644 index 688e93980..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/css/daterangepicker.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/css/daterangepicker.css deleted file mode 100644 index b1b44916b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/daterangepicker.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/daterangepicker.js deleted file mode 100644 index b218d58bf..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/moment.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.date-range-picker/public/js/moment.min.js deleted file mode 100644 index 05199bd3b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.hbs deleted file mode 100644 index 893953771..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.hbs +++ /dev/null @@ -1,32 +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.date-range-picker"}} - -{{#zone "content"}} -
    - {{unit "mdm.unit.device.operation-mod"}} -
    -{{/zone}} - -{{#zone "bottomJs"}} - - - {{js "js/operation-bar.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.js deleted file mode 100644 index 512edff65..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.js +++ /dev/null @@ -1,106 +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("mdm.unit.device.operation-bar"); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var viewModel = {}; - var permissions = {}; - - // adding android operations related permission checks - permissions["android"] = []; - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/ring")) { - permissions["android"].push("DEVICE_RING"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/lock")) { - permissions["android"].push("DEVICE_LOCK"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/unlock")) { - permissions["android"].push("DEVICE_UNLOCK"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/location")) { - permissions["android"].push("DEVICE_LOCATION"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/clear-password")) { - permissions["android"].push("CLEAR_PASSWORD"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/reboot")) { - permissions["android"].push("DEVICE_REBOOT"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/upgrade-firmware")) { - permissions["android"].push("UPGRADE_FIRMWARE"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/mute")) { - permissions["android"].push("DEVICE_MUTE"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/send-notification")) { - permissions["android"].push("NOTIFICATION"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/change-lock-code")) { - permissions["android"].push("CHANGE_LOCK_CODE"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/enterprise-wipe")) { - permissions["android"].push("ENTERPRISE_WIPE"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/operations/android/wipe")) { - permissions["android"].push("WIPE_DATA"); - } - - // adding ios operations related permission checks - permissions["ios"] = []; - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/ios/lock")) { - permissions["ios"].push("DEVICE_LOCK"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/ios/location")) { - permissions["ios"].push("LOCATION"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/ios/enterprise-wipe")) { - permissions["ios"].push("ENTERPRISE_WIPE"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/ios/notification")) { - permissions["ios"].push("NOTIFICATION"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/ios/ring")) { - permissions["ios"].push("RING"); - } - - // adding windows operations related permission checks - permissions["windows"] = []; - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/lock")) { - permissions["windows"].push("DEVICE_LOCK"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/disenroll/windows")) { - permissions["windows"].push("DISENROLL"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/wipe")) { - permissions["windows"].push("WIPE_DATA"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/ring")) { - permissions["windows"].push("DEVICE_RING"); - } - if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/windows/lock-reset")) { - permissions["windows"].push("LOCK_RESET"); - } - - viewModel["permissions"] = stringify(permissions); - - viewModel["deviceType"] = context.unit.params.deviceType; - viewModel["ownership"] = context.unit.params.ownership; - - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.json deleted file mode 100644 index 56a988c76..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/operation-bar.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.unit.device.operation-bar" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/js/operation-bar.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/js/operation-bar.js deleted file mode 100644 index 90ce9ce4a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/js/operation-bar.js +++ /dev/null @@ -1,248 +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. - */ - -/* - * Setting-up global variables. - */ - -var operations = '.wr-operations', - modalPopup = '.modal', - modalPopupContent = modalPopup + ' .modal-content', - navHeight = $('#nav').height(), - headerHeight = $('header').height(), - offset = (headerHeight + navHeight), - deviceSelection = '.device-select', - platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" - }, - ownershipTypeConstants = { - "BYOD": "BYOD", - "COPE": "COPE" - }, - operationBarModeConstants = { - "BULK": "BULK_OPERATION_MODE", - "SINGLE": "SINGLE_OPERATION_MODE" - }; - -/* - * Function to get selected devices ID's - */ -function getSelectedDeviceIds() { - var deviceIdentifierList = []; - $(deviceSelection).each(function (index) { - var device = $(this); - var deviceId = device.data('deviceid'); - var deviceType = device.data('type'); - deviceIdentifierList.push({ - "id": deviceId, - "type": deviceType - }); - }); - if (deviceIdentifierList.length == 0) { - var thisTable = $(".DTTT_selected").closest('.dataTables_wrapper').find('.dataTable').dataTable(); - thisTable.api().rows().every(function () { - if ($(this.node()).hasClass('DTTT_selected')) { - var deviceId = $(thisTable.api().row(this).node()).data('deviceid'); - var deviceType = $(thisTable.api().row(this).node()).data('devicetype'); - deviceIdentifierList.push({ - "id": deviceId, - "type": deviceType - }); - } - }); - } - - return deviceIdentifierList; -} - -/* - * On operation click function. - * @param selection: Selected operation - */ -function operationSelect(selection) { - var deviceIdList = getSelectedDeviceIds(); - if (deviceIdList == 0) { - $(modalPopupContent).html($("#errorOperations").html()); - } else { - $(modalPopupContent).addClass("operation-data"); - $(modalPopupContent).html($(operations + " .operation[data-operation-code=" + selection + "]").html()); - $(modalPopupContent).data("operation-code", selection); - } - showPopup(); -} - -function getDevicesByTypes(deviceList) { - var deviceTypes = {}; - $.each(deviceList, function (index, item) { - if (!deviceTypes[item.type]) { - deviceTypes[item.type] = []; - } - if (item.type == platformTypeConstants.ANDROID || - item.type == platformTypeConstants.IOS || item.type == platformTypeConstants.WINDOWS) { - deviceTypes[item.type].push(item.id); - } - }); - return deviceTypes; -} - -//function unloadOperationBar() { -// $("#showOperationsBtn").addClass("hidden"); -// $(".wr-operations").html(""); -//} - -function loadOperationBar(deviceType, ownership, mode) { - var operationBar = $("#operations-bar"); - var operationBarSrc = operationBar.attr("src"); - - $.template("operations-bar", operationBarSrc, function (template) { - var serviceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/*/features"; - invokerUtil.get( - serviceURL, - // success callback - function (data) { - var permittedOperations = []; - var i; - var permissionList = $("#operations-mod").data("permissions"); - var totalFeatures = JSON.parse(data); - for (i = 0; i < permissionList[deviceType].length; i++) { - var j; - for (j = 0; j < totalFeatures.length; j++) { - if (permissionList[deviceType][i] == totalFeatures[j]["code"]) { - if (deviceType == platformTypeConstants.ANDROID) { - if (totalFeatures[j]["code"] == "DEVICE_UNLOCK") { - if (ownership == ownershipTypeConstants.COPE) { - permittedOperations.push(totalFeatures[j]); - } - } else if (totalFeatures[j]["code"] == "WIPE_DATA") { - if (mode == operationBarModeConstants.BULK) { - if (ownership == ownershipTypeConstants.COPE) { - permittedOperations.push(totalFeatures[j]); - } - } else { - permittedOperations.push(totalFeatures[j]); - } - } else { - permittedOperations.push(totalFeatures[j]); - } - } else { - permittedOperations.push(totalFeatures[j]); - } - } - } - } - - var viewModel = {}; - permittedOperations = permittedOperations.filter(function (current) { - var iconName; - switch (deviceType) { - case platformTypeConstants.ANDROID: - iconName = operationModule.getAndroidIconForFeature(current.code); - break; - case platformTypeConstants.WINDOWS: - iconName = operationModule.getWindowsIconForFeature(current.code); - break; - case platformTypeConstants.IOS: - iconName = operationModule.getIOSIconForFeature(current.code); - break; - } - - /* adding ownership in addition to device-type - as it's vital in cases where UI for the same feature should change - according to ownership - */ - if (ownership) { - current.ownership = ownership; - } - - if (iconName) { - current.icon = iconName; - } - - return current; - }); - - viewModel.features = permittedOperations; - var content = template(viewModel); - $(".wr-operations").html(content); - }, - // error callback - function (message) { - $(".wr-operations").html(message); - }); - }); -} - -function runOperation(operationName) { - var deviceIdList = getSelectedDeviceIds(); - var list = getDevicesByTypes(deviceIdList); - - var successCallback = function (data) { - if (operationName == "NOTIFICATION") { - $(modalPopupContent).html($("#messageSuccess").html()); - } else { - $(modalPopupContent).html($("#operationSuccess").html()); - } - showPopup(); - }; - var errorCallback = function (data) { - $(modalPopupContent).html($("#errorOperationUnexpected").html()); - showPopup(); - }; - - var payload, serviceEndPoint; - if (list[platformTypeConstants.IOS]) { - payload = - operationModule.generatePayload(platformTypeConstants.IOS, operationName, list[platformTypeConstants.IOS]); - serviceEndPoint = operationModule.getIOSServiceEndpoint(operationName); - } else if (list[platformTypeConstants.ANDROID]) { - payload = operationModule - .generatePayload(platformTypeConstants.ANDROID, operationName, list[platformTypeConstants.ANDROID]); - serviceEndPoint = operationModule.getAndroidServiceEndpoint(operationName); - } else if (list[platformTypeConstants.WINDOWS]) { - payload = operationModule.generatePayload(platformTypeConstants.WINDOWS, operationName, - list[platformTypeConstants.WINDOWS]); - serviceEndPoint = operationModule.getWindowsServiceEndpoint(operationName); - } - if (operationName == "NOTIFICATION") { - var errorMsgWrapper = "#notification-error-msg"; - var errorMsg = "#notification-error-msg span"; - var messageTitle = $("#messageTitle").val(); - var messageText = $("#messageText").val(); - if (!(messageTitle && messageText)) { - $(errorMsg).text("Enter a message. It cannot be empty."); - $(errorMsgWrapper).removeClass("hidden"); - } else { - invokerUtil.post(serviceEndPoint, payload, successCallback, errorCallback); - $(modalPopupContent).removeData(); - hidePopup(); - } - } else { - invokerUtil.post(serviceEndPoint, payload, successCallback, errorCallback); - $(modalPopupContent).removeData(); - hidePopup(); - } -} - -/* - * DOM ready functions. - */ -$(document).ready(function () { - $(operations).show(); -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-android.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-android.hbs deleted file mode 100644 index b92461ff7..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-android.hbs +++ /dev/null @@ -1,286 +0,0 @@ -
    - -
    - - -
    -
    - -
    -
    - -
    - Configure -
    -
    -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - - Configure -
    -
    -
    - - - -
    -
    - - -
    - -
    - - - -
    - -
    - Configure -
    - -
    - - -
    -
    - -
    - - -
    - -
    -
    - -
    - - -
    - -
    - Install -
    -
    -
    - -
    - - -
    - -
    - - -
    - -
    - Install -
    -
    -
    - -
    - - -
    - -
    - Uninstall -
    -
    -
    - - - -
    -
    - -
    -
    - -
    - Configure -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-ios.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-ios.hbs deleted file mode 100644 index 4cb006ef0..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/hidden-operations-ios.hbs +++ /dev/null @@ -1,366 +0,0 @@ -
    - -
    - - -
    -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    -
    - - -
    -
    - - -
    - Install -
    - -
    -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    -
    - - -
    -
    - - -
    - Install -
    -
    -
    - -
    - -
    - -
    - Uninstall -
    -
    -
    - - - -
    - - -
    - -
    - -
    - - -
    - -
    - - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - Configure -
    - - - -
    - - -
    - -
    - - - -
    -
    - -
    -
    - Path Prefix -
    -
    -
    - - - -
    - -
    - - - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - -
    -
    - -
    -
    - : -
    -
    -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - -
    - -
    - - -
    -
    - - - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - Configure -
    - - -
    - -
    - -
    - -
    - -
    AirPlay password -
    - -
    - Configure -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/operations.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/operations.hbs deleted file mode 100644 index 0b94ae088..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-bar/public/templates/operations.hbs +++ /dev/null @@ -1,249 +0,0 @@ -
    - - - -
    -
    - - - -
    -
    - - - -
    - -
    - - - -
    -{{#each features}} - - - {{name}} - -
    - - - -
    -{{/each}} -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.hbs deleted file mode 100644 index 8d7e6bc16..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/operation-mod.json deleted file mode 100644 index 8fcf779d1..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/public/js/operation-mod.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/public/js/operation-mod.js deleted file mode 100644 index 369f9cbf5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.operation-mod/public/js/operation-mod.js +++ /dev/null @@ -1,1764 +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 operationModule = function () { - var publicMethods = {}; - var privateMethods = {}; - - // Constants to define platform types available - var platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" - }; - - // Constants to define operation types available - var operationTypeConstants = { - "PROFILE": "profile", - "CONFIG": "config", - "COMMAND": "command" - }; - - // Constants to define Android Operation Constants - var androidOperationConstants = { - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "VPN_OPERATION_CODE": "VPN", - "CAMERA_OPERATION_CODE": "CAMERA", - "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE", - "WIFI_OPERATION_CODE": "WIFI", - "WIPE_OPERATION_CODE": "WIPE_DATA", - "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", - "WORK_PROFILE_CODE": "WORK_PROFILE", - "CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE", - "LOCK_OPERATION_CODE": "DEVICE_LOCK", - "UPGRADE_FIRMWARE": "UPGRADE_FIRMWARE", - "DISALLOW_ADJUST_VOLUME": "DISALLOW_ADJUST_VOLUME", - "DISALLOW_CONFIG_BLUETOOTH" : "DISALLOW_CONFIG_BLUETOOTH", - "DISALLOW_CONFIG_CELL_BROADCASTS" : "DISALLOW_CONFIG_CELL_BROADCASTS", - "DISALLOW_CONFIG_CREDENTIALS" : "DISALLOW_CONFIG_CREDENTIALS", - "DISALLOW_CONFIG_MOBILE_NETWORKS" : "DISALLOW_CONFIG_MOBILE_NETWORKS", - "DISALLOW_CONFIG_TETHERING" : "DISALLOW_CONFIG_TETHERING", - "DISALLOW_CONFIG_VPN" : "DISALLOW_CONFIG_VPN", - "DISALLOW_CONFIG_WIFI" : "DISALLOW_CONFIG_WIFI", - "DISALLOW_APPS_CONTROL" : "DISALLOW_APPS_CONTROL", - "DISALLOW_CREATE_WINDOWS" : "DISALLOW_CREATE_WINDOWS", - "DISALLOW_CROSS_PROFILE_COPY_PASTE" : "DISALLOW_CROSS_PROFILE_COPY_PASTE", - "DISALLOW_DEBUGGING_FEATURES" : "DISALLOW_DEBUGGING_FEATURES", - "DISALLOW_FACTORY_RESET" : "DISALLOW_FACTORY_RESET", - "DISALLOW_ADD_USER" : "DISALLOW_ADD_USER", - "DISALLOW_INSTALL_APPS" : "DISALLOW_INSTALL_APPS", - "DISALLOW_INSTALL_UNKNOWN_SOURCES" : "DISALLOW_INSTALL_UNKNOWN_SOURCES", - "DISALLOW_MODIFY_ACCOUNTS" : "DISALLOW_MODIFY_ACCOUNTS", - "DISALLOW_MOUNT_PHYSICAL_MEDIA" : "DISALLOW_MOUNT_PHYSICAL_MEDIA", - "DISALLOW_NETWORK_RESET" : "DISALLOW_NETWORK_RESET", - "DISALLOW_OUTGOING_BEAM" : "DISALLOW_OUTGOING_BEAM", - "DISALLOW_OUTGOING_CALLS" : "DISALLOW_OUTGOING_CALLS", - "DISALLOW_REMOVE_USER" : "DISALLOW_REMOVE_USER", - "DISALLOW_SAFE_BOOT" : "DISALLOW_SAFE_BOOT", - "DISALLOW_SHARE_LOCATION" : "DISALLOW_SHARE_LOCATION", - "DISALLOW_SMS" : "DISALLOW_SMS", - "DISALLOW_UNINSTALL_APPS" : "DISALLOW_UNINSTALL_APPS", - "DISALLOW_UNMUTE_MICROPHONE" : "DISALLOW_UNMUTE_MICROPHONE", - "DISALLOW_USB_FILE_TRANSFER" : "DISALLOW_USB_FILE_TRANSFER", - "ALLOW_PARENT_PROFILE_APP_LINKING" : "ALLOW_PARENT_PROFILE_APP_LINKING", - "ENSURE_VERIFY_APPS" : "ENSURE_VERIFY_APPS", - "AUTO_TIME" : "AUTO_TIME", - "SET_SCREEN_CAPTURE_DISABLED" : "SET_SCREEN_CAPTURE_DISABLED", - "SET_STATUS_BAR_DISABLED" : "SET_STATUS_BAR_DISABLED", - "APPLICATION_OPERATION_CODE":"APP-RESTRICTION", - "SYSTEM_UPDATE_POLICY_CODE": "SYSTEM_UPDATE_POLICY", - "KIOSK_APPS_CODE": "KIOSK_APPS" - }; - - // 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" - }; - - // Constants to define iOS Operation Constants - var iosOperationConstants = { - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", - "VPN_OPERATION_CODE": "VPN", - "WIFI_OPERATION_CODE": "WIFI", - "EMAIL_OPERATION_CODE": "EMAIL", - "AIRPLAY_OPERATION_CODE": "AIR_PLAY", - "LDAP_OPERATION_CODE": "LDAP", - "DOMAIN_OPERATION_CODE": "DOMAIN", - "CALENDAR_OPERATION_CODE": "CALDAV", - "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", - "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", - "APN_OPERATION_CODE": "APN", - "CELLULAR_OPERATION_CODE": "CELLULAR", - "PER_APP_VPN_OPERATION_CODE": "PER_APP_VPN", - "APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE": "APP_TO_PER_APP_VPN_MAPPING" - }; - - publicMethods.getIOSServiceEndpoint = function (operationCode) { - var featureMap = { - "DEVICE_LOCK": "lock", - "LOCATION": "location", - "ENTERPRISE_WIPE": "enterprise-wipe", - "NOTIFICATION": "notification", - "RING": "ring" - }; - return "/api/device-mgt/ios/v1.0/admin/devices/" + featureMap[operationCode]; - }; - - /** - * Convert the ios 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.generateGenericPayloadFromIOSPayload = function (operationCode, operationPayload) { - var payload = {}; - operationPayload = JSON.parse(operationPayload); - switch (operationCode) { - case iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: - payload = { - "passcodePolicyForcePIN": operationPayload["forcePIN"], - "passcodePolicyAllowSimple": operationPayload["allowSimple"], - "passcodePolicyRequireAlphanumeric": operationPayload["requireAlphanumeric"], - "passcodePolicyMinLength": operationPayload["minLength"], - "passcodePolicyMinComplexChars": operationPayload["minComplexChars"], - "passcodePolicyMaxPasscodeAgeInDays": operationPayload["maxPINAgeInDays"], - "passcodePolicyPasscodeHistory": operationPayload["pinHistory"], - "passcodePolicyMaxAutoLock": operationPayload["maxInactivity"], - "passcodePolicyGracePeriod": operationPayload["maxGracePeriod"], - "passcodePolicyMaxFailedAttempts": operationPayload["maxFailedAttempts"] - }; - break; - case iosOperationConstants["DOMAIN_OPERATION_CODE"]: - payload = { - "emailDomains": operationPayload["emailDomains"], - "webDomains": operationPayload["webDomains"] - }; - break; - case iosOperationConstants["RESTRICTIONS_OPERATION_CODE"]: - payload = { - "restrictionsAllowAccountModification": operationPayload["allowAccountModification"], - "restrictionsAllowAddingGameCenterFriends": operationPayload["allowAddingGameCenterFriends"], - "restrictionsAllowAirDrop": operationPayload["allowAirDrop"], - "restrictionsAllowAppCellularDataModification": operationPayload["allowAppCellularDataModification"], - "restrictionsAllowAppInstallation": operationPayload["allowAppInstallation"], - "restrictionsAllowAppRemoval": operationPayload["allowAppRemoval"], - "restrictionsAllowAssistant": operationPayload["allowAssistant"], - "restrictionsAllowAssistantUserGeneratedContent": operationPayload["allowAssistantUserGeneratedContent"], - "restrictionsAllowAssistantWhileLocked": operationPayload["allowAssistantWhileLocked"], - "restrictionsAllowBookstore": operationPayload["allowBookstore"], - "restrictionsAllowBookstoreErotica": operationPayload["allowBookstoreErotica"], - "restrictionsAllowCamera": operationPayload["allowCamera"], - "restrictionsAllowChat": operationPayload["allowChat"], - "restrictionsAllowCloudBackup": operationPayload["allowCloudBackup"], - "restrictionsAllowCloudDocumentSync": operationPayload["allowCloudDocumentSync"], - "restrictionsAllowCloudKeychainSync": operationPayload["allowCloudKeychainSync"], - "restrictionsAllowDiagnosticSubmission": operationPayload["allowDiagnosticSubmission"], - "restrictionsAllowExplicitContent": operationPayload["allowExplicitContent"], - "restrictionsAllowFindMyFriendsModification": operationPayload["allowFindMyFriendsModification"], - "restrictionsAllowFingerprintForUnlock": operationPayload["allowFingerprintForUnlock"], - "restrictionsAllowGameCenter": operationPayload["allowGameCenter"], - "restrictionsAllowGlobalBackgroundFetchWhenRoaming": operationPayload["allowGlobalBackgroundFetchWhenRoaming"], - "restrictionsAllowInAppPurchases": operationPayload["allowInAppPurchases"], - "restrictionsAllowLockScreenControlCenter": operationPayload["allowLockScreenControlCenter"], - "restrictionsAllowHostPairing": operationPayload["allowHostPairing"], - "restrictionsAllowLockScreenNotificationsView": operationPayload["allowLockScreenNotificationsView"], - "restrictionsAllowLockScreenTodayView": operationPayload["allowLockScreenTodayView"], - "restrictionsAllowMultiplayerGaming": operationPayload["allowMultiplayerGaming"], - "restrictionsAllowOpenFromManagedToUnmanaged": operationPayload["allowOpenFromManagedToUnmanaged"], - "restrictionsAllowOpenFromUnmanagedToManaged": operationPayload["allowOpenFromUnmanagedToManaged"], - "restrictionsAllowOTAPKIUpdates": operationPayload["allowOTAPKIUpdates"], - "restrictionsAllowPassbookWhileLocked": operationPayload["allowPassbookWhileLocked"], - "restrictionsAllowPhotoStream": operationPayload["allowPhotoStream"], - "restrictionsAllowSafari": operationPayload["allowSafari"], - "restrictionsSafariAllowAutoFill": operationPayload["safariAllowAutoFill"], - "restrictionsSafariForceFraudWarning": operationPayload["safariForceFraudWarning"], - "restrictionsSafariAllowJavaScript": operationPayload["safariAllowJavaScript"], - "restrictionsSafariAllowPopups": operationPayload["safariAllowPopups"], - "restrictionsAllowScreenShot": operationPayload["allowScreenShot"], - "restrictionsAllowSharedStream": operationPayload["allowSharedStream"], - "restrictionsAllowUIConfigurationProfileInstallation": operationPayload["allowUIConfigurationProfileInstallation"], - "restrictionsAllowUntrustedTLSPrompt": operationPayload["allowUntrustedTLSPrompt"], - "restrictionsAllowVideoConferencing": operationPayload["allowVideoConferencing"], - "restrictionsAllowVoiceDialing": operationPayload["allowVoiceDialing"], - "restrictionsAllowYouTube": operationPayload["allowYouTube"], - "restrictionsAllowITunes": operationPayload["allowiTunes"], - "restrictionsForceAssistantProfanityFilter": operationPayload["forceAssistantProfanityFilter"], - "restrictionsForceEncryptedBackup": operationPayload["forceEncryptedBackup"], - "restrictionsForceITunesStorePasswordEntry": operationPayload["forceITunesStorePasswordEntry"], - "restrictionsForceLimitAdTracking": operationPayload["forceLimitAdTracking"], - "restrictionsForceAirPlayOutgoingRequestsPairingPassword": operationPayload["forceAirPlayOutgoingRequestsPairingPassword"], - "restrictionsForceAirPlayIncomingRequestsPairingPassword": operationPayload["forceAirPlayIncomingRequestsPairingPassword"], - "restrictionsAllowManagedAppsCloudSync": operationPayload["allowManagedAppsCloudSync"], - "restrictionsAllowEraseContentAndSettings": operationPayload["allowEraseContentAndSettings"], - "restrictionsAllowSpotlightInternetResults": operationPayload["allowSpotlightInternetResults"], - "restrictionsAllowEnablingRestrictions": operationPayload["allowEnablingRestrictions"], - "restrictionsAllowActivityContinuation": operationPayload["allowActivityContinuation"], - "restrictionsAllowEnterpriseBookBackup": operationPayload["allowEnterpriseBookBackup"], - "restrictionsAllowEnterpriseBookMetadataSync": operationPayload["allowEnterpriseBookMetadataSync"], - "restrictionsAllowPodcasts": operationPayload["allowPodcasts"], - "restrictionsAllowDefinitionLookup": operationPayload["allowDefinitionLookup"], - "restrictionsAllowPredictiveKeyboard": operationPayload["allowPredictiveKeyboard"], - "restrictionsAllowAutoCorrection": operationPayload["allowAutoCorrection"], - "restrictionsAllowSpellCheck": operationPayload["allowSpellCheck"], - "restrictionsSafariAcceptCookies": operationPayload["safariAcceptCookies"], - "restrictionsAutonomousSingleAppModePermittedAppIDs": operationPayload["autonomousSingleAppModePermittedAppIDs"] - }; - break; - case iosOperationConstants["VPN_OPERATION_CODE"]: - var pptp = false; - var l2tp = false; - if (operationPayload["vpnType"] == "PPTP") { - pptp = true; - } else if (operationPayload["vpnType"] == "L2TP") { - l2tp = true; - } - - payload = { - "userDefinedName": operationPayload["userDefinedName"], - "overridePrimary": operationPayload["overridePrimary"], - "onDemandEnabled": operationPayload["onDemandEnabled"], - "onDemandMatchDomainsAlways": operationPayload["onDemandMatchDomainsAlways"], - "onDemandMatchDomainsNever": operationPayload["onDemandMatchDomainsNever"], - "onDemandMatchDomainsOnRetry": operationPayload["onDemandMatchDomainsOnRetry"], - "onDemandRules": operationPayload["onDemandRules"], - "vendorConfigs": operationPayload["vendorConfigs"], - "vpnType": operationPayload["vpnType"], - "pptpAuthName": pptp ? operationPayload.ppp["authName"] : "", - "pptpTokenCard": pptp ? operationPayload.ppp["tokenCard"] : "", - "pptpAuthPassword": pptp ? operationPayload.ppp["authPassword"] : "", - "pptpCommRemoteAddress": pptp ? operationPayload.ppp["commRemoteAddress"] : "", - "pptpRSASecureID": pptp ? operationPayload.ppp["RSASecureID"] : "", - "pptpCCPEnabled": pptp ? operationPayload.ppp["CCPEnabled"] : "", - "pptpCCPMPPE40Enabled": pptp ? operationPayload.ppp["CCPMPPE40Enabled"] : "", - "pptpCCPMPPE128Enabled": pptp ? operationPayload.ppp["CCPMPPE128Enabled"] : "", - "l2tpAuthName": l2tp ? operationPayload.ppp["authName"] : "", - "l2tpTokenCard": l2tp ? operationPayload.ppp["tokenCard"] : "", - "l2tpAuthPassword": l2tp ? operationPayload.ppp["authPassword"] : "", - "l2tpCommRemoteAddress": l2tp ? operationPayload.ppp["commRemoteAddress"] : "", - "l2tpRSASecureID": l2tp ? operationPayload.ppp["RSASecureID"] : "", - "ipsecRemoteAddress": operationPayload.ipSec["remoteAddress"], - "ipsecAuthenticationMethod": operationPayload.ipSec["authenticationMethod"], - "ipsecLocalIdentifier": operationPayload.ipSec["localIdentifier"], - "ipsecSharedSecret": operationPayload.ipSec["sharedSecret"], - "ipsecPayloadCertificateUUID": operationPayload.ipSec["payloadCertificateUUID"], - "ipsecXAuthEnabled": operationPayload.ipSec["XAuthEnabled"], - "ipsecXAuthName": operationPayload.ipSec["XAuthName"], - "ipsecPromptForVPNPIN": operationPayload.ipSec["promptForVPNPIN"], - "ikev2RemoteAddress": operationPayload.ikEv2["remoteAddress"], - "ikev2LocalIdentifier": operationPayload.ikEv2["localIdentifier"], - "ikev2RemoteIdentifier": operationPayload.ikEv2["remoteIdentifier"], - "ikev2AuthenticationMethod": operationPayload.ikEv2["authenticationMethod"], - "ikev2SharedSecret": operationPayload.ikEv2["sharedSecret"], - "ikev2PayloadCertificateUUID": operationPayload.ikEv2["payloadCertificateUUID"], - "ikev2ExtendedAuthEnabled": operationPayload.ikEv2["extendedAuthEnabled"], - "ikev2AuthName": operationPayload.ikEv2["authName"], - "ikev2AuthPassword": operationPayload.ikEv2["authPassword"], - "ikev2DeadPeerDetectionInterval": operationPayload.ikEv2["deadPeerDetectionInterval"], - "ikev2ServerCertificateIssuerCommonName": operationPayload.ikEv2["serverCertificateIssuerCommonName"], - "ikev2ServerCertificateCommonName": operationPayload.ikEv2["serverCertificateCommonName"] - }; - break; - case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]: - payload = { - "operation": { - "VPNUUID": operationPayload["PER-APP-VPNUUID"], - "safariDomains": operationPayload["safariDomains"], - "onDemandMatchAppEnabled": operationPayload["onDemandMatchAppEnabled"] - } - }; - break; - case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]: - payload = { - "operation": { - "appLayerVPNMappings": operationPayload["appLayerVPNMappings"] - } - }; - break; - case iosOperationConstants["WIFI_OPERATION_CODE"]: - payload = { - "wifiHiddenNetwork": operationPayload["hiddenNetwork"], - "wifiSSID": operationPayload["SSID"], - "wifiAutoJoin": operationPayload["autoJoin"], - "wifiProxyType": operationPayload["proxyType"], - "wifiEncryptionType": operationPayload["encryptionType"], - "wifiIsHotSpot": operationPayload["hotspot"], - "wifiDomainName": operationPayload["domainName"], - "wifiServiceProviderRoamingEnabled": operationPayload["serviceProviderRoamingEnabled"], - "wifiDisplayedOperatorName": operationPayload["displayedOperatorName"], - "wifiRoamingConsortiumOIs": operationPayload["roamingConsortiumOIs"], - "wifiPassword": operationPayload["password"], - "wifiPayloadCertUUID": operationPayload["payloadCertificateUUID"], - "wifiProxyServer": operationPayload["proxyServer"], - "wifiProxyPort": operationPayload["proxyPort"], - "wifiProxyUsername": operationPayload["proxyUsername"], - "wifiProxyPassword": operationPayload["proxyPassword"], - "wifiProxyPACURL": operationPayload["proxyPACURL"], - "wifiProxyPACFallbackAllowed": operationPayload["proxyPACFallbackAllowed"], - "wifiNAIRealmNames": operationPayload["nairealmNames"], - "wifiMCCAndMNCs": operationPayload["mccandMNCs"], - "wifiEAPUsername": operationPayload.clientConfiguration["username"], - "wifiAcceptedEAPTypes": operationPayload.clientConfiguration["acceptEAPTypes"], - "wifiEAPPassword": operationPayload.clientConfiguration["userPassword"], - "wifiEAPOneTimePassword": operationPayload.clientConfiguration["oneTimePassword"], - "wifiPayloadCertificateAnchorUUIDs": operationPayload.clientConfiguration["payloadCertificateAnchorUUID"], - "wifiEAPOuterIdentity": operationPayload.clientConfiguration["outerIdentity"], - "wifiTLSTrustedServerNames": operationPayload.clientConfiguration["tlstrustedServerNames"], - "wifiEAPTLSAllowTrustExceptions": operationPayload.clientConfiguration["tlsallowTrustExceptions"], - "wifiEAPTLSCertIsRequired": operationPayload.clientConfiguration["tlscertificateIsRequired"], - "wifiEAPTLSInnerAuthType": operationPayload.clientConfiguration["ttlsinnerAuthentication"], - "wifiEAPFastUsePAC": operationPayload.clientConfiguration["eapfastusePAC"], - "wifiEAPFastProvisionPAC": operationPayload.clientConfiguration["eapfastprovisionPAC"], - "wifiEAPFastProvisionPACAnonymously": operationPayload.clientConfiguration["eapfastprovisionPACAnonymously"], - "wifiEAPSIMNoOfRands": operationPayload.clientConfiguration["eapsimnumberOfRANDs"] - }; - break; - case iosOperationConstants["EMAIL_OPERATION_CODE"]: - payload = { - "emailAccountDescription": operationPayload["emailAccountDescription"], - "emailAccountName": operationPayload["emailAccountName"], - "emailAccountType": operationPayload["emailAccountType"], - "emailAddress": operationPayload["emailAddress"], - "emailIncomingMailServerAuthentication": operationPayload["incomingMailServerAuthentication"], - "emailIncomingMailServerHostname": operationPayload["incomingMailServerHostName"], - "emailIncomingMailServerPort": operationPayload["incomingMailServerPortNumber"], - "emailIncomingUseSSL": operationPayload["incomingMailServerUseSSL"], - "emailIncomingMailServerUsername": operationPayload["incomingMailServerUsername"], - "emailIncomingMailServerPassword": operationPayload["incomingPassword"], - "emailOutgoingMailServerPassword": operationPayload["outgoingPassword"], - "emailOutgoingPasswordSameAsIncomingPassword": operationPayload["outgoingPasswordSameAsIncomingPassword"], - "emailOutgoingMailServerAuthentication": operationPayload["outgoingMailServerAuthentication"], - "emailOutgoingMailServerHostname": operationPayload["outgoingMailServerHostName"], - "emailOutgoingMailServerPort": operationPayload["outgoingMailServerPortNumber"], - "emailOutgoingUseSSL": operationPayload["outgoingMailServerUseSSL"], - "emailOutgoingMailServerUsername": operationPayload["outgoingMailServerUsername"], - "emailPreventMove": operationPayload["preventMove"], - "emailPreventAppSheet": operationPayload["preventAppSheet"], - "emailDisableMailRecentsSyncing": operationPayload["disableMailRecentsSyncing"], - "emailIncomingMailServerIMAPPathPrefix": operationPayload["incomingMailServerIMAPPathPrefix"], - "emailSMIMEEnabled": operationPayload["smimeenabled"], - "emailSMIMESigningCertificateUUID": operationPayload["smimesigningCertificateUUID"], - "emailSMIMEEncryptionCertificateUUID": operationPayload["smimeencryptionCertificateUUID"], - "emailSMIMEEnablePerMessageSwitch": operationPayload["smimeenablePerMessageSwitch"] - }; - break; - case iosOperationConstants["AIRPLAY_OPERATION_CODE"]: - payload = { - "airplayDestinations": operationPayload["airPlayDestinations"], - "airplayCredentials": operationPayload["airPlayCredentials"] - }; - break; - case iosOperationConstants["LDAP_OPERATION_CODE"]: - payload = { - "ldapAccountDescription": operationPayload["accountDescription"], - "ldapAccountHostname": operationPayload["accountHostName"], - "ldapUseSSL": operationPayload["accountUseSSL"], - "ldapAccountUsername": operationPayload["accountUsername"], - "ldapAccountPassword": operationPayload["accountPassword"], - "ldapSearchSettings": operationPayload["ldapSearchSettings"] - }; - break; - case iosOperationConstants["CALENDAR_OPERATION_CODE"]: - payload = { - "calendarAccountDescription": operationPayload["accountDescription"], - "calendarAccountHostname": operationPayload["hostName"], - "calendarAccountUsername": operationPayload["username"], - "calendarAccountPassword": operationPayload["password"], - "calendarUseSSL": operationPayload["useSSL"], - "calendarAccountPort": operationPayload["port"], - "calendarPrincipalURL": operationPayload["principalURL"] - }; - break; - case iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"]: - payload = { - "calendarSubscriptionDescription": operationPayload["accountDescription"], - "calendarSubscriptionHostname": operationPayload["hostName"], - "calendarSubscriptionUsername": operationPayload["username"], - "calendarSubscriptionPassword": operationPayload["password"], - "calendarSubscriptionUseSSL": operationPayload["useSSL"] - }; - break; - case iosOperationConstants["APN_OPERATION_CODE"]: - payload = { - "apnConfigurations": operationPayload["apnConfigurations"] - }; - break; - case iosOperationConstants["CELLULAR_OPERATION_CODE"]: - payload = { - "cellularAttachAPNName": operationPayload["attachAPNName"], - "cellularAuthenticationType": operationPayload["authenticationType"], - "cellularUsername": operationPayload["username"], - "cellularPassword": operationPayload["password"], - "cellularAPNConfigurations": operationPayload["apnConfigurations"] - }; - break; - } - return payload; - }; - - privateMethods.generateIOSOperationPayload = function (operationCode, operationData, deviceList) { - var payload; - var operationType; - switch (operationCode) { - case iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "forcePIN": operationData["passcodePolicyForcePIN"], - "allowSimple": operationData["passcodePolicyAllowSimple"], - "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], - "minLength": operationData["passcodePolicyMinLength"], - "minComplexChars": operationData["passcodePolicyMinComplexChars"], - "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], - "pinHistory": operationData["passcodePolicyPasscodeHistory"], - "maxInactivity": operationData["passcodePolicyMaxAutoLock"], - "maxGracePeriod": operationData["passcodePolicyGracePeriod"], - "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] - } - }; - break; - case iosOperationConstants["WIFI_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - if(operationData["wifiProxyPort"] == ""){ - operationData["wifiProxyPort"] = -1; - } - payload = { - "operation": { - "SSID": operationData["wifiSSID"], - "hiddenNetwork": operationData["wifiHiddenNetwork"], - "autoJoin": operationData["wifiAutoJoin"], - "proxyType": operationData["wifiProxyType"], - "encryptionType": operationData["wifiEncryptionType"], - "hotspot": operationData["wifiIsHotSpot"], - "domainName": operationData["wifiDomainName"], - "serviceProviderRoamingEnabled": operationData["wifiServiceProviderRoamingEnabled"], - "displayedOperatorName": operationData["wifiDisplayedOperatorName"], - "roamingConsortiumOIs": operationData["wifiRoamingConsortiumOIs"], - "password": operationData["wifiPassword"], - "clientConfiguration": { - "username": operationData["wifiEAPUsername"], - "acceptEAPTypes": operationData["wifiAcceptedEAPTypes"], - "userPassword": operationData["wifiEAPPassword"], - "oneTimePassword": operationData["wifiEAPOneTimePassword"], - "payloadCertificateAnchorUUID": operationData["wifiPayloadCertificateAnchorUUIDs"], - "outerIdentity": operationData["wifiEAPOuterIdentity"], - "tlstrustedServerNames": operationData["wifiTLSTrustedServerNames"], - "tlsallowTrustExceptions": operationData["wifiEAPTLSAllowTrustExceptions"], - "tlscertificateIsRequired": operationData["wifiEAPTLSCertIsRequired"], - "ttlsinnerAuthentication": operationData["wifiEAPTLSInnerAuthType"], - "eapfastusePAC": operationData["wifiEAPFastUsePAC"], - "eapfastprovisionPAC": operationData["wifiEAPFastProvisionPAC"], - "eapfastprovisionPACAnonymously": operationData["wifiEAPFastProvisionPACAnonymously"], - "eapsimnumberOfRANDs": operationData["wifiEAPSIMNoOfRands"] - }, - "payloadCertificateUUID": operationData["wifiPayloadCertUUID"], - "proxyServer": operationData["wifiProxyServer"], - "proxyPort": operationData["wifiProxyPort"], - "proxyUsername": operationData["wifiProxyUsername"], - "proxyPassword": operationData["wifiProxyPassword"], - "proxyPACURL": operationData["wifiProxyPACURL"], - "proxyPACFallbackAllowed": operationData["wifiProxyPACFallbackAllowed"], - "nairealmNames": operationData["wifiNAIRealmNames"], - "mccandMNCs": operationData["wifiMCCAndMNCs"] - } - }; - break; - case iosOperationConstants["VPN_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - var ppp = {}; - var ipSec = {}; - var ikev2 = {}; - var pulseSecure = {}; - - if (operationData["vpnType"] == "PPTP") { - ppp = { - "authName": operationData["pptpAuthName"], - "tokenCard": operationData["pptpTokenCard"], - "authPassword": operationData["pptpAuthPassword"], - "commRemoteAddress": operationData["pptpCommRemoteAddress"], - "RSASecureID": operationData["pptpRSASecureID"], - "CCPEnabled": operationData["pptpCCPEnabled"], - "CCPMPPE40Enabled": operationData["pptpCCPMPPE40Enabled"], - "CCPMPPE128Enabled": operationData["pptpCCPMPPE128Enabled"] - }; - } else if (operationData["vpnType"] == "L2TP") { - ppp = { - "authName": operationData["l2tpAuthName"], - "tokenCard": operationData["l2tpTokenCard"], - "authPassword": operationData["l2tpAuthPassword"], - "commRemoteAddress": operationData["l2tpCommRemoteAddress"], - "RSASecureID": operationData["l2tpRSASecureID"] - }; - } else if (operationData["vpnType"] == "IPSec") { - ipSec = { - "remoteAddress" : operationData["ipsecRemoteAddress"], - "authenticationMethod" : operationData["ipsecAuthenticationMethod"], - "localIdentifier" : operationData["ipsecLocalIdentifier"], - "sharedSecret" : operationData["ipsecSharedSecret"], - "payloadCertificateUUID" : operationData["ipsecPayloadCertificateUUID"], - "XAuthEnabled" : operationData["ipsecXAuthEnabled"], - "XAuthName" : operationData["ipsecXAuthName"], - "promptForVPNPIN" : operationData["ipsecPromptForVPNPIN"] - }; - } else if (operationData["vpnType"] == "IKEv2") { - ikev2 = { - "remoteAddress" : operationData["ikev2RemoteAddress"], - "localIdentifier" : operationData["ikev2LocalIdentifier"], - "remoteIdentifier" : operationData["ikev2RemoteIdentifier"], - "authenticationMethod" : operationData["ikev2AuthenticationMethod"], - "sharedSecret" : operationData["ikev2SharedSecret"], - "payloadCertificateUUID" : operationData["ikev2PayloadCertificateUUID"], - "extendedAuthEnabled" : operationData["ikev2ExtendedAuthEnabled"], - "authName" : operationData["ikev2AuthName"], - "authPassword" : operationData["ikev2AuthPassword"], - "deadPeerDetectionInterval" : operationData["ikev2DeadPeerDetectionInterval"], - "serverCertificateIssuerCommonName" : operationData["ikev2ServerCertificateIssuerCommonName"], - "serverCertificateCommonName" : operationData["ikev2ServerCertificateCommonName"] - }; - } else if (operationData["vpnType"] == "PulseSecure") { - pulseSecure = { - "remoteAddress" : operationData["pulsesecureRemoteAddress"], - "userName" : operationData["pulsesecureName"], - "sharedSecret" : operationData["pulsesecureSharedSecret"] - }; - } - - var domainsAlways = new Array(); - for (var i = 0; i < operationData["onDemandMatchDomainsAlways"].length; i++) { - domainsAlways.push(operationData["onDemandMatchDomainsAlways"][i].domain); - } - - var domainsNever = new Array(); - for (var i = 0; i < operationData["onDemandMatchDomainsNever"].length; i++) { - domainsNever.push(operationData["onDemandMatchDomainsNever"][i].domain); - } - - var domainsRetry = new Array(); - for (var i = 0; i < operationData["onDemandMatchDomainsOnRetry"].length; i++) { - domainsRetry.push(operationData["onDemandMatchDomainsOnRetry"][i].domain); - } - - payload = { - "operation": { - "userDefinedName": operationData["userDefinedName"], - "overridePrimary": operationData["overridePrimary"], - "onDemandEnabled": operationData["onDemandEnabled"], - "onDemandMatchDomainsAlways": domainsAlways, - "onDemandMatchDomainsNever": domainsNever, - "onDemandMatchDomainsOnRetry": domainsRetry, - "onDemandRules" : operationData["onDemandRules"], - "vendorConfigs" : operationData["vendorConfigs"], - "vpnType" : operationData["vpnType"], - "ppp": ppp, - "ipSec": ipSec, - "ikEv2": ikev2, - "pulseSecure" : pulseSecure - } - }; - break; - case iosOperationConstants["PER_APP_VPN_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - var domains = new Array(); - for (var i = 0; i < operationData["safariDomains"].length; i++) { - domains.push(operationData["safariDomains"][i].domain); - } - payload = { - "operation": { - "VPNUUID": operationData["VPNUUID"], - "safariDomains": domains, - "onDemandMatchAppEnabled": operationData["onDemandMatchAppEnabled"] - } - }; - break; - case iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "appLayerVPNMappings": operationData["appLayerVPNMappings"] - } - }; - break; - case iosOperationConstants["RESTRICTIONS_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "allowAccountModification": operationData["restrictionsAllowAccountModification"], - "allowAddingGameCenterFriends": operationData["restrictionsAllowAddingGameCenterFriends"], - "allowAirDrop": operationData["restrictionsAllowAirDrop"], - "allowAppCellularDataModification": operationData["restrictionsAllowAppCellularDataModification"], - "allowAppInstallation": operationData["restrictionsAllowAppInstallation"], - "allowAppRemoval": operationData["restrictionsAllowAppRemoval"], - "allowAssistant": operationData["restrictionsAllowAssistant"], - "allowAssistantUserGeneratedContent": operationData["restrictionsAllowAssistantUserGeneratedContent"], - "allowAssistantWhileLocked": operationData["restrictionsAllowAssistantWhileLocked"], - "allowBookstore": operationData["restrictionsAllowBookstore"], - "allowBookstoreErotica": operationData["restrictionsAllowBookstoreErotica"], - "allowCamera": operationData["restrictionsAllowCamera"], - "allowChat": operationData["restrictionsAllowChat"], - "allowCloudBackup": operationData["restrictionsAllowCloudBackup"], - "allowCloudDocumentSync": operationData["restrictionsAllowCloudDocumentSync"], - "allowCloudKeychainSync": operationData["restrictionsAllowCloudKeychainSync"], - "allowDiagnosticSubmission": operationData["restrictionsAllowDiagnosticSubmission"], - "allowExplicitContent": operationData["restrictionsAllowExplicitContent"], - "allowFindMyFriendsModification": operationData["restrictionsAllowFindMyFriendsModification"], - "allowFingerprintForUnlock": operationData["restrictionsAllowFingerprintForUnlock"], - "allowGameCenter": operationData["restrictionsAllowGameCenter"], - "allowGlobalBackgroundFetchWhenRoaming": operationData["restrictionsAllowGlobalBackgroundFetchWhenRoaming"], - "allowInAppPurchases": operationData["restrictionsAllowInAppPurchases"], - "allowLockScreenControlCenter": operationData["restrictionsAllowLockScreenControlCenter"], - "allowHostPairing": operationData["restrictionsAllowHostPairing"], - "allowLockScreenNotificationsView": operationData["restrictionsAllowLockScreenNotificationsView"], - "allowLockScreenTodayView": operationData["restrictionsAllowLockScreenTodayView"], - "allowMultiplayerGaming": operationData["restrictionsAllowMultiplayerGaming"], - "allowOpenFromManagedToUnmanaged": operationData["restrictionsAllowOpenFromManagedToUnmanaged"], - "allowOpenFromUnmanagedToManaged": operationData["restrictionsAllowOpenFromUnmanagedToManaged"], - "allowOTAPKIUpdates": operationData["restrictionsAllowOTAPKIUpdates"], - "allowPassbookWhileLocked": operationData["restrictionsAllowPassbookWhileLocked"], - "allowPhotoStream": operationData["restrictionsAllowPhotoStream"], - "allowSafari": operationData["restrictionsAllowSafari"], - "safariAllowAutoFill": operationData["restrictionsSafariAllowAutoFill"], - "safariForceFraudWarning": operationData["restrictionsSafariForceFraudWarning"], - "safariAllowJavaScript": operationData["restrictionsSafariAllowJavaScript"], - "safariAllowPopups": operationData["restrictionsSafariAllowPopups"], - "allowScreenShot": operationData["restrictionsAllowScreenShot"], - "allowSharedStream": operationData["restrictionsAllowSharedStream"], - "allowUIConfigurationProfileInstallation": operationData["restrictionsAllowUIConfigurationProfileInstallation"], - "allowUntrustedTLSPrompt": operationData["restrictionsAllowUntrustedTLSPrompt"], - "allowVideoConferencing": operationData["restrictionsAllowVideoConferencing"], - "allowVoiceDialing": operationData["restrictionsAllowVoiceDialing"], - "allowYouTube": operationData["restrictionsAllowYouTube"], - "allowiTunes": operationData["restrictionsAllowITunes"], - "forceAssistantProfanityFilter": operationData["restrictionsForceAssistantProfanityFilter"], - "forceEncryptedBackup": operationData["restrictionsForceEncryptedBackup"], - "forceITunesStorePasswordEntry": operationData["restrictionsForceITunesStorePasswordEntry"], - "forceLimitAdTracking": operationData["restrictionsForceLimitAdTracking"], - "forceAirPlayOutgoingRequestsPairingPassword": operationData["restrictionsForceAirPlayOutgoingRequestsPairingPassword"], - "forceAirPlayIncomingRequestsPairingPassword": operationData["restrictionsForceAirPlayIncomingRequestsPairingPassword"], - "allowManagedAppsCloudSync": operationData["restrictionsAllowManagedAppsCloudSync"], - "allowEraseContentAndSettings": operationData["restrictionsAllowEraseContentAndSettings"], - "allowSpotlightInternetResults": operationData["restrictionsAllowSpotlightInternetResults"], - "allowEnablingRestrictions": operationData["restrictionsAllowEnablingRestrictions"], - "allowActivityContinuation": operationData["restrictionsAllowActivityContinuation"], - "allowEnterpriseBookBackup": operationData["restrictionsAllowEnterpriseBookBackup"], - "allowEnterpriseBookMetadataSync": operationData["restrictionsAllowEnterpriseBookMetadataSync"], - "allowPodcasts": operationData["restrictionsAllowPodcasts"], - "allowDefinitionLookup": operationData["restrictionsAllowDefinitionLookup"], - "allowPredictiveKeyboard": operationData["restrictionsAllowPredictiveKeyboard"], - "allowAutoCorrection": operationData["restrictionsAllowAutoCorrection"], - "allowSpellCheck": operationData["restrictionsAllowSpellCheck"], - "safariAcceptCookies": operationData["restrictionsSafariAcceptCookies"], - "autonomousSingleAppModePermittedAppIDs": operationData["restrictionsAutonomousSingleAppModePermittedAppIDs"] - } - }; - break; - case iosOperationConstants["EMAIL_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "emailAccountDescription": operationData["emailAccountDescription"], - "emailAccountName": operationData["emailAccountName"], - "emailAccountType": operationData["emailAccountType"], - "emailAddress": operationData["emailAddress"], - "incomingMailServerAuthentication": operationData["emailIncomingMailServerAuthentication"], - "incomingMailServerHostName": operationData["emailIncomingMailServerHostname"], - "incomingMailServerPortNumber": operationData["emailIncomingMailServerPort"], - "incomingMailServerUseSSL": operationData["emailIncomingUseSSL"], - "incomingMailServerUsername": operationData["emailIncomingMailServerUsername"], - "incomingPassword": operationData["emailIncomingMailServerPassword"], - "outgoingPassword": operationData["emailOutgoingMailServerPassword"], - "outgoingPasswordSameAsIncomingPassword": operationData["emailOutgoingPasswordSameAsIncomingPassword"], - "outgoingMailServerAuthentication": operationData["emailOutgoingMailServerAuthentication"], - "outgoingMailServerHostName": operationData["emailOutgoingMailServerHostname"], - "outgoingMailServerPortNumber": operationData["emailOutgoingMailServerPort"], - "outgoingMailServerUseSSL": operationData["emailOutgoingUseSSL"], - "outgoingMailServerUsername": operationData["emailOutgoingMailServerUsername"], - "preventMove": operationData["emailPreventMove"], - "preventAppSheet": operationData["emailPreventAppSheet"], - "disableMailRecentsSyncing": operationData["emailDisableMailRecentsSyncing"], - "incomingMailServerIMAPPathPrefix": operationData["emailIncomingMailServerIMAPPathPrefix"], - "smimeenabled": operationData["emailSMIMEEnabled"], - "smimesigningCertificateUUID": operationData["emailSMIMESigningCertificateUUID"], - "smimeencryptionCertificateUUID": operationData["emailSMIMEEncryptionCertificateUUID"], - "smimeenablePerMessageSwitch": operationData["emailSMIMEEnablePerMessageSwitch"] - } - }; - break; - case iosOperationConstants["AIRPLAY_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "airPlayDestinations": operationData["airplayDestinations"], - "airPlayCredentials": operationData["airplayCredentials"] - } - }; - break; - case iosOperationConstants["LDAP_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "accountDescription": operationData["ldapAccountDescription"], - "accountHostName": operationData["ldapAccountHostname"], - "accountUseSSL": operationData["ldapUseSSL"], - "accountUsername": operationData["ldapAccountUsername"], - "accountPassword": operationData["ldapAccountPassword"], - "ldapSearchSettings": operationData["ldapSearchSettings"] - } - }; - break; - case iosOperationConstants["CALENDAR_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "accountDescription": operationData["calendarAccountDescription"], - "hostName": operationData["calendarAccountHostname"], - "username": operationData["calendarAccountUsername"], - "password": operationData["calendarAccountPassword"], - "useSSL": operationData["calendarUseSSL"], - "port": operationData["calendarAccountPort"], - "principalURL": operationData["calendarPrincipalURL"] - } - }; - break; - case iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "accountDescription": operationData["calendarSubscriptionDescription"], - "hostName": operationData["calendarSubscriptionHostname"], - "username": operationData["calendarSubscriptionUsername"], - "password": operationData["calendarSubscriptionPassword"], - "useSSL": operationData["calendarSubscriptionUseSSL"] - } - }; - break; - case iosOperationConstants["APN_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "apnConfigurations": operationData["apnConfigurations"] - } - }; - break; - case iosOperationConstants["DOMAIN_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "emailDomains": operationData["emailDomains"], - "webDomains": operationData["webDomains"] - }; - break; - case iosOperationConstants["CELLULAR_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "attachAPNName": operationData["cellularAttachAPNName"], - "authenticationType": operationData["cellularAuthenticationType"], - "username": operationData["cellularUsername"], - "password": operationData["cellularPassword"], - "apnConfigurations": operationData["cellularAPNConfigurations"] - } - }; - break; - case iosOperationConstants["NOTIFICATION_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "messageTitle": operationData["messageTitle"], - "messageText": operationData["messageText"] - } - }; - 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; - }; - - /** - * Convert the android 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.generateGenericPayloadFromAndroidPayload = function (operationCode, operationPayload) { - var payload = {}; - operationPayload = JSON.parse(operationPayload); - switch (operationCode) { - case androidOperationConstants["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 androidOperationConstants["CAMERA_OPERATION_CODE"]: - payload = operationPayload; - break; - case androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: - payload = { - "encryptStorageEnabled": operationPayload["encrypted"] - }; - break; - case androidOperationConstants["WIFI_OPERATION_CODE"]: - payload = { - "wifiSSID": operationPayload["ssid"], - "wifiPassword": operationPayload["password"], - "wifiType": operationPayload["type"], - "wifiEAP": operationPayload["eap"], - "wifiPhase2": operationPayload["phase2"], - "wifiProvisioning": operationPayload["provisioning"], - "wifiIdentity": operationPayload["identity"], - "wifiAnoIdentity": operationPayload["anonymousIdentity"], - "wifiCaCert" : operationPayload["cacert"], - "wifiCaCertName" : operationPayload["cacertName"] - }; - break; - case androidOperationConstants["VPN_OPERATION_CODE"]: - payload = { - "serverAddress": operationPayload["serverAddress"], - "serverPort": operationPayload["serverPort"], - "sharedSecret": operationPayload["sharedSecret"], - "dnsServer": operationPayload["dnsServer"] - }; - break; - case androidOperationConstants["APPLICATION_OPERATION_CODE"]: - payload = { - "restrictionType": operationPayload["restriction-type"], - "restrictedApplications": operationPayload["restricted-applications"] - }; - break; - case androidOperationConstants["SYSTEM_UPDATE_POLICY_CODE"]: - if (operationPayload["type"] != "window") { - payload = { - "cosuSystemUpdatePolicyType": operationPayload["type"] - }; - } else { - payload = { - "cosuSystemUpdatePolicyType": operationPayload["type"], - "cosuSystemUpdatePolicyWindowStartTime": operationPayload["startTime"], - "cosuSystemUpdatePolicyWindowEndTime": operationPayload["endTime"] - }; - } - break; - case androidOperationConstants["KIOSK_APPS_CODE"]: - payload = { - "cosuWhitelistedApplications": operationPayload["whitelistedApplications"] - }; - break; - } - return payload; - }; - - privateMethods.generateAndroidOperationPayload = function (operationCode, operationData, deviceList) { - var payload; - var operationType; - switch (operationCode) { - case androidOperationConstants["CAMERA_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "CAMERA" : operationData["cameraEnabled"], - "DISALLOW_ADJUST_VOLUME" : operationData["disallowAdjustVolumeEnabled"], - "DISALLOW_CONFIG_BLUETOOTH" : operationData["disallowConfigBluetooth"], - "DISALLOW_CONFIG_CELL_BROADCASTS" : operationData["disallowConfigCellBroadcasts"], - "DISALLOW_CONFIG_CREDENTIALS" : operationData["disallowConfigCredentials"], - "DISALLOW_CONFIG_MOBILE_NETWORKS" : operationData["disallowConfigMobileNetworks"], - "DISALLOW_CONFIG_TETHERING" : operationData["disallowConfigTethering"], - "DISALLOW_CONFIG_VPN" : operationData["disallowConfigVpn"], - "DISALLOW_CONFIG_WIFI" : operationData["disallowConfigWifi"], - "DISALLOW_APPS_CONTROL" : operationData["disallowAppControl"], - "DISALLOW_CREATE_WINDOWS" : operationData["disallowCreateWindows"], - "DISALLOW_CROSS_PROFILE_COPY_PASTE" : operationData["disallowCrossProfileCopyPaste"], - "DISALLOW_DEBUGGING_FEATURES" : operationData["disallowDebugging"], - "DISALLOW_FACTORY_RESET" : operationData["disallowFactoryReset"], - "DISALLOW_ADD_USER" : operationData["disallowAddUser"], - "DISALLOW_INSTALL_APPS" : operationData["disallowInstallApps"], - "DISALLOW_INSTALL_UNKNOWN_SOURCES" : operationData["disallowInstallUnknownSources"], - "DISALLOW_MODIFY_ACCOUNTS" : operationData["disallowModifyAccounts"], - "DISALLOW_MOUNT_PHYSICAL_MEDIA" : operationData["disallowMountPhysicalMedia"], - "DISALLOW_NETWORK_RESET" : operationData["disallowNetworkReset"], - "DISALLOW_OUTGOING_BEAM" : operationData["disallowOutgoingBeam"], - "DISALLOW_OUTGOING_CALLS" : operationData["disallowOutgoingCalls"], - "DISALLOW_REMOVE_USER" : operationData["disallowRemoveUser"], - "DISALLOW_SAFE_BOOT" : operationData["disallowSafeBoot"], - "DISALLOW_SHARE_LOCATION" : operationData["disallowLocationSharing"], - "DISALLOW_SMS" : operationData["disallowSMS"], - "DISALLOW_UNINSTALL_APPS" : operationData["disallowUninstallApps"], - "DISALLOW_UNMUTE_MICROPHONE" : operationData["disallowUnmuteMicrophone"], - "DISALLOW_USB_FILE_TRANSFER" : operationData["disallowUSBFileTransfer"], - "ALLOW_PARENT_PROFILE_APP_LINKING" : operationData["disallowParentProfileAppLinking"], - "ENSURE_VERIFY_APPS" : operationData["ensureVerifyApps"], - "AUTO_TIME" : operationData["enableAutoTime"], - "SET_SCREEN_CAPTURE_DISABLED" : operationData["disableScreenCapture"], - "SET_STATUS_BAR_DISABLED" : operationData["disableStatusBar"] - } - }; - break; - case androidOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "lockCode" : operationData["lockCode"] - } - }; - break; - case androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "encrypted" : operationData["encryptStorageEnabled"] - } - }; - break; - case androidOperationConstants["NOTIFICATION_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - //"message" : operationData["message"] - "messageText": operationData["messageText"], - "messageTitle": operationData["messageTitle"] - } - }; - break; - case androidOperationConstants["UPGRADE_FIRMWARE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "schedule" : operationData["schedule"], - "server" : operationData["server"] - } - }; - break; - case androidOperationConstants["WIPE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "pin" : operationData["pin"] - } - }; - break; - case androidOperationConstants["WIFI_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "ssid": operationData["wifiSSID"], - "type": operationData["wifiType"], - "password" : operationData["wifiPassword"], - "eap" : operationData["wifiEAP"], - "phase2" : operationData["wifiPhase2"], - "provisioning" : operationData["wifiProvisioning"], - "identity" : operationData["wifiIdentity"], - "anonymousIdentity" : operationData["wifiAnoIdentity"], - "cacert" : operationData["wifiCaCert"], - "cacertName" : operationData["wifiCaCertName"] - } - }; - break; - case androidOperationConstants["VPN_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "serverAddress": operationData["serverAddress"], - "serverPort": operationData["serverPort"], - "sharedSecret": operationData["sharedSecret"], - "dnsServer": operationData["dnsServer"] - } - }; - break; - case androidOperationConstants["LOCK_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "message" : operationData["lock-message"], - "isHardLockEnabled" : operationData["hard-lock"] - } - }; - break; - case androidOperationConstants["WORK_PROFILE_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "profileName": operationData["workProfilePolicyProfileName"], - "enableSystemApps": operationData["workProfilePolicyEnableSystemApps"], - "hideSystemApps": operationData["workProfilePolicyHideSystemApps"], - "unhideSystemApps": operationData["workProfilePolicyUnhideSystemApps"], - "enablePlaystoreApps": operationData["workProfilePolicyEnablePlaystoreApps"] - } - }; - break; - case androidOperationConstants["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; - case androidOperationConstants["APPLICATION_OPERATION_CODE"]: - payload = { - "operation": { - "restriction-type": operationData["restrictionType"], - "restricted-applications": operationData["restrictedApplications"] - } - }; - break; - case androidOperationConstants["SYSTEM_UPDATE_POLICY_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - if (operationData["cosuSystemUpdatePolicyType"] != "window") { - payload = { - "operation": { - "type": operationData["cosuSystemUpdatePolicyType"] - } - }; - } else { - payload = { - "operation": { - "type": operationData["cosuSystemUpdatePolicyType"], - "startTime": operationData["cosuSystemUpdatePolicyWindowStartTime"], - "endTime": operationData["cosuSystemUpdatePolicyWindowEndTime"] - } - }; - } - break; - case androidOperationConstants["KIOSK_APPS_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "whitelistedApplications": operationData["cosuWhitelistedApplications"] - } - }; - 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.getAndroidServiceEndpoint = function (operationCode) { - var featureMap = { - "WIFI": "configure-wifi", - "CAMERA": "control-camera", - "VPN": "configure-vpn", - "DEVICE_LOCK": "lock-devices", - "DEVICE_UNLOCK": "unlock-devices", - "DEVICE_LOCATION": "location", - "CLEAR_PASSWORD": "clear-password", - "APPLICATION_LIST": "get-application-list", - "DEVICE_RING": "ring", - "DEVICE_REBOOT": "reboot", - "UPGRADE_FIRMWARE": "upgrade-firmware", - "DEVICE_MUTE": "mute", - "NOTIFICATION": "send-notification", - "ENCRYPT_STORAGE": "encrypt-storage", - "CHANGE_LOCK_CODE": "change-lock-code", - "WEBCLIP": "set-webclip", - "INSTALL_APPLICATION": "install-application", - "UNINSTALL_APPLICATION": "uninstall-application", - "BLACKLIST_APPLICATIONS": "blacklist-applications", - "PASSCODE_POLICY": "set-password-policy", - "ENTERPRISE_WIPE": "enterprise-wipe", - "WIPE_DATA": "wipe" - }; - //return "/mdm-android-agent/operation/" + featureMap[operationCode]; - return "/api/device-mgt/android/v1.0/admin/devices/" + featureMap[operationCode]; - }; - - /** - * 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" - }; - //return "/mdm-windows-agent/services/windows/operation/" + featureMap[operationCode]; - return "/api/device-mgt/windows/v1.0/services/windows/admin/devices/" + featureMap[operationCode]; - }; - /** - * Get the icon for the featureCode - * @param operationCode - * @returns icon class - */ - publicMethods.getAndroidIconForFeature = function (operationCode) { - var featureMap = { - "DEVICE_LOCK": "fw-lock", - "DEVICE_LOCATION": "fw-map-location", - "CLEAR_PASSWORD": "fw-clear", - "ENTERPRISE_WIPE": "fw-block", - "WIPE_DATA": "fw-delete", - "DEVICE_RING": "fw-dial-up", - "DEVICE_REBOOT": "fw-refresh", - "UPGRADE_FIRMWARE": "fw-hardware", - "DEVICE_MUTE": "fw-mute", - "NOTIFICATION": "fw-message", - "CHANGE_LOCK_CODE": "fw-security", - "DEVICE_UNLOCK": "fw-key" - }; - return 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" - }; - return featureMap[operationCode]; - }; - - /** - * Get the icon for the featureCode - * @param operationCode - * @returns icon class - */ - publicMethods.getIOSIconForFeature = function (operationCode) { - var featureMap = { - "DEVICE_LOCK": "fw-lock", - "LOCATION": "fw-map-location", - "ENTERPRISE_WIPE": "fw-block", - "NOTIFICATION": "fw-message", - "RING": "fw-dial-up" - }; - 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 platformType Platform Type of the profile - * @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 (platformType, 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; - } - } - ); - - switch (platformType) { - case platformTypeConstants["ANDROID"]: - payload = privateMethods.generateAndroidOperationPayload(operationCode, operationData, deviceList); - break; - case platformTypeConstants["IOS"]: - payload = privateMethods.generateIOSOperationPayload(operationCode, operationData, deviceList); - break; - case platformTypeConstants["WINDOWS"]: - payload = privateMethods.generateWindowsOperationPayload(operationCode, operationData, deviceList); - break; - } - return payload; - }; - - /** - * Method to populate the Platform specific operation payload. - * - * @param platformType Platform Type of the profile - * @param operationCode Operation Codes to generate the profile from - * @param operationPayload payload - * @returns {*} - */ - publicMethods.populateUI = function (platformType, operationCode, operationPayload) { - var uiPayload; - switch (platformType) { - case platformTypeConstants["ANDROID"]: - uiPayload = privateMethods.generateGenericPayloadFromAndroidPayload(operationCode, operationPayload); - break; - case platformTypeConstants["IOS"]: - uiPayload = privateMethods.generateGenericPayloadFromIOSPayload(operationCode, operationPayload); - break; - case platformTypeConstants["WINDOWS"]: - uiPayload = privateMethods.generateGenericPayloadFromWindowsPayload(operationCode, operationPayload); - break; - } - // capturing form input data designated by .operationDataKeys - $(".operation-data").filterByData("operation-code", operationCode).find(".operationDataKeys").each( - function () { - var operationDataObj = $(this); - //TODO :remove - //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 platformType Platform Type of the profile - * @param operationCodes Operation codes to generate the profile from - * @returns {{}} - */ - publicMethods.generateProfile = function (platformType, operationCodes) { - var generatedProfile = {}; - for (var i = 0; i < operationCodes.length; ++i) { - var operationCode = operationCodes[i]; - var payload = publicMethods.generatePayload(platformType, operationCode, null); - - if(platformType == platformTypeConstants["ANDROID"] && - operationCodes[i] == androidOperationConstants["CAMERA_OPERATION_CODE"]){ - var operations = payload["operation"]; - for (var key in operations){ - operationCode = key; - var restriction = false; - if(operations[key]){ - restriction = true; - } - var payloadResult = { - "operation": { - "enabled" : restriction - } - }; - generatedProfile[operationCode] = payloadResult["operation"]; - } - - } else { - generatedProfile[operationCode] = payload["operation"]; - } - } - console.log(generatedProfile); - return generatedProfile; - }; - - /** - * populateProfile method is used to populate the html ui with saved payload. - * - * @param platformType Platform Type of the profile - * @param payload List of profileFeatures - * @returns [] configuredOperations array - */ - publicMethods.populateProfile = function (platformType, payload) { - var i, configuredOperations = []; - var restrictions = {}; - for (i = 0; i < payload.length; ++i) { - var configuredFeature = payload[i]; - var featureCode = configuredFeature["featureCode"]; - var operationPayload = configuredFeature["content"]; - if(platformType == platformTypeConstants["ANDROID"]){ - var restriction = JSON.parse(operationPayload); - if(featureCode == androidOperationConstants["CAMERA_OPERATION_CODE"]){ - restrictions["cameraEnabled"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_ADJUST_VOLUME"]){ - restrictions["disallowAdjustVolumeEnabled"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_BLUETOOTH"]){ - restrictions["disallowConfigBluetooth"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CELL_BROADCASTS"]){ - restrictions["disallowConfigCellBroadcasts"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CREDENTIALS"]){ - restrictions["disallowConfigCredentials"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_MOBILE_NETWORKS"]){ - restrictions["disallowConfigMobileNetworks"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_TETHERING"]){ - restrictions["disallowConfigTethering"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_VPN"]){ - restrictions["disallowConfigVpn"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_WIFI"]){ - restrictions["disallowConfigWifi"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_APPS_CONTROL"]){ - restrictions["disallowAppControl"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CREATE_WINDOWS"]){ - restrictions["disallowCreateWindows"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_CROSS_PROFILE_COPY_PASTE"]){ - restrictions["disallowCrossProfileCopyPaste"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_DEBUGGING_FEATURES"]){ - restrictions["disallowDebugging"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_FACTORY_RESET"]){ - restrictions["disallowFactoryReset"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_ADD_USER"]){ - restrictions["disallowAddUser"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_APPS"]){ - restrictions["disallowInstallApps"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_UNKNOWN_SOURCES"]){ - restrictions["disallowInstallUnknownSources"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_MODIFY_ACCOUNTS"]){ - restrictions["disallowModifyAccounts"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_MOUNT_PHYSICAL_MEDIA"]){ - restrictions["disallowMountPhysicalMedia"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_NETWORK_RESET"]){ - restrictions["disallowNetworkReset"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_BEAM"]){ - restrictions["disallowOutgoingBeam"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_CALLS"]){ - restrictions["disallowOutgoingCalls"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_REMOVE_USER"]){ - restrictions["disallowRemoveUser"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_SAFE_BOOT"]){ - restrictions["disallowSafeBoot"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_SHARE_LOCATION"]){ - restrictions["disallowLocationSharing"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_SMS"]){ - restrictions["disallowSMS"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_UNINSTALL_APPS"]){ - restrictions["disallowUninstallApps"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_UNMUTE_MICROPHONE"]){ - restrictions["disallowUnmuteMicrophone"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["DISALLOW_USB_FILE_TRANSFER"]){ - restrictions["disallowUSBFileTransfer"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["ALLOW_PARENT_PROFILE_APP_LINKING"]){ - restrictions["disallowParentProfileAppLinking"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["ENSURE_VERIFY_APPS"]){ - restrictions["ensureVerifyApps"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["AUTO_TIME"]){ - restrictions["enableAutoTime"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["SET_SCREEN_CAPTURE_DISABLED"]){ - restrictions["disableScreenCapture"] = restriction["enabled"]; - continue; - } else if (featureCode == androidOperationConstants["SET_STATUS_BAR_DISABLED"]){ - restrictions["disableStatusBar"] = restriction["enabled"]; - continue; - } - } - //push the feature-code to the configuration array - configuredOperations.push(featureCode); - publicMethods.populateUI(platformType, featureCode, operationPayload); - } - if (typeof restrictions.cameraEnabled !== 'undefined') { - configuredOperations.push(androidOperationConstants["CAMERA_OPERATION_CODE"]); - publicMethods.populateUI(platformType, androidOperationConstants["CAMERA_OPERATION_CODE"], JSON.stringify(restrictions)); - } - return configuredOperations; - }; - - return publicMethods; -}(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.hbs deleted file mode 100644 index 887bad097..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.hbs +++ /dev/null @@ -1,64 +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 "content"}} - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.js deleted file mode 100644 index c876152fd..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.js +++ /dev/null @@ -1,23 +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. - */ - -function onRequest() { - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var viewModel = {}; - //TODO: Move enrollment URL into app-conf.json - viewModel["enrollmentURL"] = mdmProps["generalConfig"]["host"] + mdmProps["enrollmentDir"]; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.json deleted file mode 100644 index 688e93980..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.qr-modal/qr-modal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/device-detail.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/device-detail.js deleted file mode 100644 index ddc267e1c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/device-detail.js +++ /dev/null @@ -1,341 +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 operationTable; - - positionArrow($(".media .list-group-item.active"),"#device_details_tab"); - $(".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,activeTabPane); - }); - - $(".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'); - } - }); - - function positionArrow(selectedTab,activeTabPane) { - 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").css("min-height",parentHeight); - }else{ - $(arrow).parent().removeAttr("style"); - } - - $(arrow).css("top", arrowPosition - 10); - - var listHeight = $(".tab-responsive .media-left ul").height(); - var paneHeight = $(activeTabPane).height(); - if(listHeight > paneHeight){ - $(activeTabPane).height(listHeight); - } - } - - function loadOperationsLog(update) { - 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: "/emm/api/operation/paginate", - data: {deviceId : deviceIdentifier, deviceType: deviceType}, - 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; - var content = template(viewModel); - $("#applications-list-container").html(content); - } else { - $("#applications-list-container"). - html("

    No applications found.

    " + - "

    Please try refreshing the list in a while.

    "); - } - } - }, - // 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) { - $("#policy-spinner").addClass("hidden"); - data = JSON.parse(data); - 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["complianceStatus"] = "NON-COMPLIANT"; - viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"]; - content = template(viewModel); - $("#policy-list-container").html(content); - } else { - viewModel["complianceStatus"] = "COMPLIANT"; - content = template(viewModel); - $("#policy-list-container").html(content); - $("#policy-compliance-table").addClass("hidden"); - } - } - } - }, - // error-callback - function () { - $("#policy-list-container"). - html("
    " + - "

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

    " + - "
    " + - "

    " + - "

    " + - "

    " - ); - } - ); - } - } else if ((jqXHR.status == 200 && !data)) { - $("#policy-spinner").addClass("hidden"); - $("#policy-list-container"). - html("
    " + - "

    " + - "" + - "There is currently no effective policy applied for this device." + - "

    " + - "
    " + - "

    " + - "

    " + - "

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

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

    " + - "
    " + - "

    " + - "

    " + - "

    " - ); - } - ); - } - ); - } - - $(document).ready(function () { - $(".device-detail-body").removeClass("hidden"); - $("#loading-content").remove(); - if ($("#tabs").data("status")) { - loadOperationsLog(false); - } - loadOperationBar(deviceType, ownership, operationBarModeConstants.SINGLE); - loadApplicationsList(); - loadPolicyCompliance(); - - if ($("#device_details_tab").length == 0) { - $(".device-detail-body").addClass("hidden"); - } - - $("#refresh-policy").click(function () { - $("#policy-spinner").removeClass("hidden"); - loadPolicyCompliance(); - }); - - $("#refresh-apps").click(function () { - $("#apps-spinner").removeClass("hidden"); - loadApplicationsList(); - }); - - $("#refresh-operations").click(function () { - $("#operations-spinner").removeClass("hidden"); - loadOperationsLog(true); - }); - }); - -}()); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/load-map.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/load-map.js deleted file mode 100644 index c09ab8ddb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/js/load-map.js +++ /dev/null @@ -1,54 +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 map; - -function loadLeafletMap() { - var deviceLocationID = "#device-location", - lat = $(deviceLocationID).data("lat"), - long = $(deviceLocationID).data("long"), - container = "device-location", - zoomLevel = 13, - tileSet = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", - attribution = "© OpenStreetMap contributors"; - - if (lat && long) { - map = L.map(container).setView([lat, long], zoomLevel); - L.tileLayer(tileSet, {attribution: attribution}).addTo(map); - L.marker([lat, long]).addTo(map).bindPopup("Device is here...").openPopup(); - - $("#map-error").hide(); - $("#device-location").show(); - } else { - $("#device-location").hide(); - $("#map-error").show(); - } -} - -$(document).ready(function () { - $("a[data-toggle='tab']").on("shown.bs.tab", function() { - var url = $(this).prop("href"); - var hash = url.substring(url.indexOf("#") + 1); - - if (hash == "device_location_tab") { - if (!map) { - loadLeafletMap(); - } - } - }); -}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/applications-list.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/applications-list.hbs deleted file mode 100644 index 9831cff18..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/applications-list.hbs +++ /dev/null @@ -1,33 +0,0 @@ - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/operations-log.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/operations-log.hbs deleted file mode 100644 index cc5db5117..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/operations-log.hbs +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - {{#each operations}} - - - - - - {{/each}} -
    - -
    Operation CodeStatusRequest created at
    {{code}} - {{#equal status "COMPLETED"}} Completed{{/equal}} - {{#equal status "PENDING"}} Pending{{/equal}} - {{#equal status "ERROR"}} Error{{/equal}} - {{#equal status "IN_PROGRESS"}} In Progress{{/equal}} - {{createdTimeStamp}}
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/policy-compliance.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/policy-compliance.hbs deleted file mode 100644 index 673806e89..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/public/templates/policy-compliance.hbs +++ /dev/null @@ -1,87 +0,0 @@ -
    - -
    -
    - - {{#equal deviceType "android"}} - - {{/equal}} - {{#equal deviceType "ios"}} - - {{/equal}} - {{#equal deviceType "windows"}} - - {{/equal}} - - -

    {{policy.policyName}}

    - {{deviceType}} -
    -
    -
    -
    -
    -
    - Ownership Type -
    - {{policy.ownershipType}} -
    -
    -
    -
    - Compliance Type -
    - {{policy.compliance}} -
    -
    -
    -
    - Compliance Status -
    - {{#equal complianceStatus "COMPLIANT"}} -   Compliant - {{/equal}} - {{#equal complianceStatus "NON-COMPLIANT"}} -   Not Compliant - {{/equal}} -
    -
    -
    -
    - -
    -
    -
    - - - - - - - - - {{#each complianceFeatures}} - - - - - {{/each}} -
    - -
    FeatureCompliance
    {{featureCode}} - {{#equal complianceStatus true}}  Compliant{{/equal}} - {{#equal complianceStatus false}}  Not Compliant{{/equal}} -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.hbs deleted file mode 100644 index 7f0bac0b9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.hbs +++ /dev/null @@ -1,513 +0,0 @@ -{{unit "mdm.unit.lib.leaflet"}} -{{unit "cdmf.unit.lib.qrcode"}} -{{unit "mdm.unit.device.qr-modal"}} - -{{#zone "content"}} - {{#if deviceFound}} - {{#if isAuthorized}} -

    - Device {{deviceView.name}} - {{#if deviceView.model}} - - ( {{deviceView.vendor}} {{deviceView.model}} ) - - {{/if}} -

    -
    -
    -
    -
    -
    -
    -
    Device - Overview -
    - {{#defineZone "device-detail-properties"}} - - - {{#if deviceView.deviceIdentifier}} - - - - - {{/if}} - {{#if deviceView.name}} - - - - - {{/if}} - {{#if deviceView.vendor}} - {{#if deviceView.model}} - - - - - {{/if}} - {{/if}} - {{#if deviceView.status}} - - - - - {{/if}} - {{#if deviceView.owner}} - - - - - {{/if}} - {{#if deviceView.ownership}} - - - - - {{/if}} - {{#if deviceView.imei}} - - - - - {{/if}} - {{#if deviceView.udid}} - - - - - {{/if}} - {{#if deviceView.osBuildDate}} - - - - - {{/if}} - {{#if deviceView.phoneNumber}} - - - - - {{/if}} - {{#if deviceView.lastUpdatedTime}} - - - - - {{/if}} - -
    Device ID{{deviceView.deviceIdentifier}}
    Name{{deviceView.name}}
    Model{{deviceView.vendor}} {{deviceView.model}}
    Status - {{#equal deviceView.status "ACTIVE"}}  Active{{/equal}} - {{#equal deviceView.status "INACTIVE"}}  Inactive{{/equal}} - {{#equal deviceView.status "BLOCKED"}}  Blocked{{/equal}} - {{#equal deviceView.status "REMOVED"}}  Removed{{/equal}} -
    Owner{{deviceView.owner}}
    Ownership{{deviceView.ownership}}
    IMEI{{deviceView.imei}}
    UDID{{deviceView.udid}}
    Firmware Build - Date - {{deviceView.osBuildDate}}
    Phone Number{{deviceView.phoneNumber}}
    Last Update{{deviceView.lastUpdatedTime}}
    - {{/defineZone}} - {{#if deviceView.isNotRemoved}} -
    - Operations -
    -
    - {{unit "mdm.unit.device.operation-bar" deviceType=deviceView.deviceType ownership=deviceView.ownership}} -
    - {{/if}} -
    -
    -
    - - {{#defineZone "device-detail-properties"}} -
    -
    - - - {{#if deviceView.isNotWindows}} -
    - - -
    -
    -
    - - {{#equal deviceView.deviceType "windows"}} -
    -

    Not - available yet

    -
    - {{/equal}} - {{#if deviceView.deviceInfoAvailable}} - {{#if deviceView.BatteryLevel}} -
    -
    -
    -
    BATTERY
    -
    -
    -
    - {{deviceView.BatteryLevel.value}} % -
    -
    -
    -
    -
    - {{/if}} - - - - - - - - - - - - - - - - {{#if deviceView.ramUsage}} -
    -
    -
    -
    RAM Usage
    -
    -
    -
    - {{deviceView.ramUsage.value}} % -
    -
    -
    -
    -
    - {{/if}} - {{#if deviceView.internalMemory}} -
    -
    -
    -
    Local Storage
    -
    -
    -
    -
    - {{deviceView.internalMemory.usage}} % - - TOTAL OF {{deviceView.internalMemory.total}} GB - -
    -
    -
    -
    -
    - {{/if}} - {{#if deviceView.externalMemory}} -
    -
    -
    -
    External Storage
    -
    -
    -
    - {{deviceView.externalMemory.usage}} % - - TOTAL OF {{deviceView.externalMemory.total}} GB - -
    -
    -
    -
    -
    - {{/if}} - {{else}} -
    -

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

    -
    - {{/if}} -
    -
    -
    -
    - {{/if}} - -
    - - -
    -
    - - - - - - -
    -
    -
    -
    -
    -
    - - -
    -
    - {{#if deviceView.location}} -
    -
    - {{else}} -
    -

    - -  Device location information is not available. -

    -
    -

    -

    -

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

    - - No applications found. -

    -

    Please try refreshing in a while.

    -
    -
    -
    -
    -
    -
    - - -
    -
    - - - - - - -
    -
    -

    - - There are no operations, performed yet on this device. -

    -
    -
    - - - - - - - - - - -
    Operation CodeStatusRequest created at
    -
    -
    -
    -
    -
    - {{/defineZone}} -
    -
    - {{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}} -{{#zone "bottomJs"}} - {{#if isAuthorized}} - - - - - - - {{js "js/device-detail.js"}} - - {{js "js/load-map.js"}} - {{/if}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.js deleted file mode 100644 index 7c482e7b8..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.js +++ /dev/null @@ -1,211 +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("view.js"); - var deviceType = context["uriParams"]["deviceType"]; - var deviceId = request.getParameter("id"); - var deviceViewData = {}; - - if (deviceType && deviceId) { - var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; - var response = deviceModule.viewDevice(deviceType, deviceId); - if (response["status"] == "success") { - deviceViewData["deviceFound"] = true; - deviceViewData["isAuthorized"] = true; - - var filteredDeviceData = response["content"]; - - // creating deviceView information model from filtered device data - var viewModel = {}; - if (filteredDeviceData["type"]) { - viewModel["deviceType"] = filteredDeviceData["type"]; - viewModel.isNotWindows = true; - if (viewModel["deviceType"] == "windows") { - viewModel.isNotWindows = false; - } - } - 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["initialDeviceInfo"]) { - viewModel["deviceInfoAvailable"] = true; - if (filteredDeviceData["initialDeviceInfo"]["IMEI"]) { - viewModel["imei"] = filteredDeviceData["initialDeviceInfo"]["IMEI"]; - } - if (!filteredDeviceData["latestDeviceInfo"]) { - if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"]) { - if (filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] != "0") { - viewModel["osBuildDate"] = new Date(filteredDeviceData["initialDeviceInfo"]["OS_BUILD_DATE"] * 1000); - } - } - if (filteredDeviceData["initialDeviceInfo"]["LATITUDE"] && filteredDeviceData["initialDeviceInfo"]["LONGITUDE"]) { - viewModel["location"] = {}; - viewModel["location"]["latitude"] = filteredDeviceData["initialDeviceInfo"]["LATITUDE"]; - viewModel["location"]["longitude"] = filteredDeviceData["initialDeviceInfo"]["LONGITUDE"]; - } - if (filteredDeviceData["initialDeviceInfo"]["VENDOR"] && filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"]) { - viewModel["vendor"] = filteredDeviceData["initialDeviceInfo"]["VENDOR"]; - viewModel["model"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_MODEL"]; - } - if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]) { - if (deviceType == "android") { - viewModel["BatteryLevel"] = {}; - viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BATTERY_LEVEL"]; - - viewModel["internalMemory"] = {}; - viewModel["internalMemory"]["total"] = Math. - round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 100) / 100; - if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] != 0) { - viewModel["internalMemory"]["usage"] = Math. - round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] - - filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_AVAILABLE_MEMORY"]) - / filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["INTERNAL_TOTAL_MEMORY"] * 10000) / 100; - } else { - viewModel["internalMemory"]["usage"] = 0; - } - - viewModel["externalMemory"] = {}; - viewModel["externalMemory"]["total"] = Math. - round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 100) / 100; - if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] != 0) { - viewModel["externalMemory"]["usage"] = Math. - round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] - - filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_AVAILABLE_MEMORY"]) - / filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["EXTERNAL_TOTAL_MEMORY"] * 10000) / 100; - } else { - viewModel["externalMemory"]["usage"] = 0; - } - } else if (deviceType == "ios") { - viewModel["BatteryLevel"] = {}; - viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BatteryLevel"]; - - viewModel["internalMemory"] = {}; - viewModel["internalMemory"]["total"] = Math. - round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 100) / 100; - if (filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] != 0) { - viewModel["internalMemory"]["usage"] = Math. - round((filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] - - filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["AvailableDeviceCapacity"]) - / filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["DeviceCapacity"] * 10000) / 100; - } else { - viewModel["internalMemory"]["usage"] = 0; - } - } - } - } - } - 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"]; - } - 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["cpuUsage"] = {}; - viewModel["cpuUsage"]["value"] = filteredDeviceData["latestDeviceInfo"]["cpuUsage"]; - - viewModel["ramUsage"] = {}; - if (filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] != 0) { - viewModel["ramUsage"]["value"] = Math. - round((filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] - - filteredDeviceData["latestDeviceInfo"]["availableRAMMemory"]) - / filteredDeviceData["latestDeviceInfo"]["totalRAMMemory"] * 10000) / 100; - } else { - viewModel["ramUsage"]["value"] = 0; - } - - viewModel["internalMemory"] = {}; - viewModel["internalMemory"]["total"] = Math. - round(filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 100) / 100; - if (filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] != 0) { - viewModel["internalMemory"]["usage"] = Math. - round((filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] - - filteredDeviceData["latestDeviceInfo"]["internalAvailableMemory"]) - / filteredDeviceData["latestDeviceInfo"]["internalTotalMemory"] * 10000) / 100; - } else { - viewModel["internalMemory"]["usage"] = 0; - } - - viewModel["externalMemory"] = {}; - viewModel["externalMemory"]["total"] = Math. - round(filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 100) / 100; - if (filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] != 0) { - viewModel["externalMemory"]["usage"] = Math. - round((filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] - - filteredDeviceData["latestDeviceInfo"]["externalAvailableMemory"]) - / filteredDeviceData["latestDeviceInfo"]["externalTotalMemory"] * 10000) / 100; - } else { - viewModel["externalMemory"]["usage"] = 0; - } - } - if (!filteredDeviceData["initialDeviceInfo"] && !filteredDeviceData["latestDeviceInfo"]) { - viewModel["deviceInfoAvailable"] = false; - } - - deviceViewData["deviceView"] = viewModel; - } else if (response["status"] == "unauthorized") { - deviceViewData["deviceFound"] = true; - deviceViewData["isAuthorized"] = false; - } else if (response["status"] == "notFound") { - deviceViewData["deviceFound"] = false; - } - } else { - deviceViewData["deviceFound"] = false; - } - return deviceViewData; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.json deleted file mode 100644 index 787e8b1dc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.device.view/view.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.unit.device.view" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.hbs deleted file mode 100644 index 9385d60d5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.hbs +++ /dev/null @@ -1,6 +0,0 @@ -{{#zone "topLibCss"}} - -{{/zone}} -{{#zone "bottomJs"}} - -{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/leaflet.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/css/leaflet.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/css/leaflet.css deleted file mode 100644 index c161c3134..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/layers-2x.png b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.leaflet/public/js/images/marker-shadow.png b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.lib.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.hbs deleted file mode 100644 index e6111c5cb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.hbs +++ /dev/null @@ -1,314 +0,0 @@ -{{#zone "content"}} - {{#if isAuthorized}} -
    -
    - - - - - - - - - - -
    -

    -    -    Loading policy creation wizard . . . -

    -
    - - - -
    -
    - {{/if}} -{{/zone}} -{{#zone "bottomJs"}} - - - - - - - {{js "/js/policy-create.js"}} -{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.js deleted file mode 100644 index 7fadabcd6..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.js +++ /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. - */ - -function onRequest() { - // var log = new Log("/app/units/mdm.unit.policy.create"); - - var CONF_DEVICE_TYPE_KEY = "deviceType"; - var CONF_DEVICE_TYPE_LABEL_KEY = "label"; - - var utility = require("/app/modules/utility.js")["utility"]; - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - - var viewModelData = {}; - viewModelData["types"] = []; - var typesListResponse = userModule.getPlatforms(); - var deviceTypes = typesListResponse["content"]["deviceTypes"]; - - if (typesListResponse["status"] == "success") { - for (var i = 0; i < deviceTypes.length; i++) { - var content = {}; - var deviceType = deviceTypes[i]; - content["name"] = deviceType; - if (deviceType == "ios") { - content["deviceTypeIcon"] = "apple"; - } else { - content["deviceTypeIcon"] = deviceType; - } - var configs = utility.getDeviceTypeConfig(deviceType); - var deviceTypeLabel = deviceType; - if (configs && configs[CONF_DEVICE_TYPE_KEY][CONF_DEVICE_TYPE_LABEL_KEY]) { - deviceTypeLabel = configs[CONF_DEVICE_TYPE_KEY][CONF_DEVICE_TYPE_LABEL_KEY]; - } - var policyWizard = new File("/app/units/" + utility.getTenantedDeviceUnitName(deviceType, "policy-wizard")); - - if (policyWizard.isExists()) { - // content["icon"] = utility.getDeviceThumb(deviceType); - content["label"] = deviceTypeLabel; - viewModelData["types"].push(content); - } - } - } - - var result = userModule.getRoles(); - if (result["status"] == "success") { - viewModelData["roles"] = result["content"]; - } - viewModelData.isAuthorized = userModule.isAuthorized("/permission/admin/device-mgt/policies/manage"); - viewModelData.isAuthorizedViewUsers = userModule.isAuthorized("/permission/admin/device-mgt/users/view"); - viewModelData.isAuthorizedViewRoles = userModule.isAuthorized("/permission/admin/device-mgt/roles/view"); - - return viewModelData; -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.json deleted file mode 100644 index 54fae3dcb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/create.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version" : "1.0.0", - "extends" : "cdmf.unit.policy.create" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/js/policy-create.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/js/policy-create.js deleted file mode 100644 index 1c1eefcfd..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/js/policy-create.js +++ /dev/null @@ -1,2928 +0,0 @@ -/* - * - * 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 validateStep = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; - -// Constants to define platform types available -var platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" -}; - -// Constants to define platform types ids. -var platformIds = { - "ANDROID": 1, - "IOS": 3, - "WINDOWS": 2 -}; - -// Constants to define Android Operation Constants -var androidOperationConstants = { - "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", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "VPN_OPERATION": "vpn", - "VPN_OPERATION_CODE": "VPN", - "APPLICATION_OPERATION":"app-restriction", - "APPLICATION_OPERATION_CODE":"APP-RESTRICTION", - "KIOSK_APPS_CODE":"KIOSK_APPS", - "KIOSK_APPS":"cosu-whitelisted-applications" -}; - -// Constants to define iOS Operation Constants -var iosOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "RESTRICTIONS_OPERATION": "restrictions", - "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "EMAIL_OPERATION": "email", - "EMAIL_OPERATION_CODE": "EMAIL", - "AIRPLAY_OPERATION": "airplay", - "AIRPLAY_OPERATION_CODE": "AIR_PLAY", - "LDAP_OPERATION": "ldap", - "LDAP_OPERATION_CODE": "LDAP", - "CALENDAR_OPERATION": "calendar", - "CALENDAR_OPERATION_CODE": "CALDAV", - "CALENDAR_SUBSCRIPTION_OPERATION": "calendar-subscription", - "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", - "APN_OPERATION": "apn", - "APN_OPERATION_CODE": "APN", - "CELLULAR_OPERATION": "cellular", - "CELLULAR_OPERATION_CODE": "CELLULAR", - "DOMAIN": "DOMAIN", - "VPN_OPERATION_CODE": "VPN", - "VPN_OPERATION": "vpn", - "PER_APP_VPN_OPERATION_CODE": "PER_APP_VPN", - "PER_APP_VPN_OPERATION": "per-app-vpn", - "APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE": "APP_TO_PER_APP_VPN_MAPPING", - "APP_TO_PER_APP_VPN_MAPPING_OPERATION": "app-to-per-app-vpn-mapping" -}; - -// Constants to define Android Operation Constants -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" -}; - -/** - * @namespace $ - * The $ is just a function. - * It is actually an alias for the function called jQuery. - * For ex: $(this) means jQuery(this) and S.fn.x means jQuery.fn.x - */ - -/** - * 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); - }); - } -}; - -var validateInline = {}; -var clearInline = {}; - -var enableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).addClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).removeClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).removeClass(" hidden"); - } -}; - -var disableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).removeClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).addClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).addClass(" hidden"); - } -}; - -/** - *clear inline validation messages. - */ -clearInline["policy-name"] = function () { - disableInlineError("policyNameField", "nameEmpty", "nameError"); -}; - - -/** - * Validate if provided policy name is valid against RegEx configures. - */ -validateInline["policy-name"] = function () { - var policyName = $("input#policy-name-input").val(); - if (policyName && inputIsValidAgainstLength(policyName, 1, 30)) { - disableInlineError("policyNameField", "nameEmpty", "nameError"); - } else { - enableInlineError("policyNameField", "nameEmpty", "nameError"); - } -}; - -$("#policy-name-input").focus(function(){ - clearInline["policy-name"](); -}).blur(function(){ - validateInline["policy-name"](); -}); - -stepForwardFrom["policy-platform"] = function (actionButton) { - policy["platform"] = $(actionButton).data("platform"); - policy["platformId"] = $(actionButton).data("platform-type"); - // updating next-page wizard title with selected platform - $("#policy-profile-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); - - var deviceType = policy["platform"]; - var hiddenOperationsByDeviceType = $("#hidden-operations-" + deviceType); - var hiddenOperationsByDeviceTypeCacheKey = deviceType + "HiddenOperations"; - var hiddenOperationsByDeviceTypeSrc = hiddenOperationsByDeviceType.attr("src"); - - setTimeout( - function () { - $.template(hiddenOperationsByDeviceTypeCacheKey, hiddenOperationsByDeviceTypeSrc, function (template) { - var content = template(); - $(".wr-advance-operations").html(content); - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - }); - }, - 250 // time delayed for the execution of above function, 250 milliseconds - ); -}; - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (policy["platform"] == platformTypeConstants["ANDROID"]) { - 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(androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = androidOperationConstants["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(androidOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = androidOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = androidOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating WIFI - if ($.inArray(androidOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = androidOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var wifiSSID = $("input#wifi-ssid").val(); - if (!wifiSSID) { - validationStatus = { - "error": true, - "subErrorMsg": "WIFI SSID is not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - // For the secure wifi types, it is required to have a password - var wifiTypeUIElement = $("#wifi-type"); - var wifiType = wifiTypeUIElement.find("option:selected").val(); - if (wifiTypeUIElement.is("input:checkbox")) { - wifiType = wifiTypeUIElement.is(":checked").toString(); - } - if (wifiType != "none") { - if (!$("#wifi-password").val()) { - validationStatus = { - "error": true, - "subErrorMsg": "Password is required for the wifi security type " + wifiType + ". " + - "Please provide a password to proceed.", - "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); - } - - if ($.inArray(androidOperationConstants["VPN_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = androidOperationConstants["VPN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var serverAddress = $("input#vpn-server-address").val(); - if (!serverAddress) { - validationStatus = { - "error": true, - "subErrorMsg": "Server address is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var serverPort = $("input#vpn-server-port").val(); - if (!serverPort) { - validationStatus = { - "error": true, - "subErrorMsg": "VPN server port is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(serverPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "VPN server port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(serverPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "VPN server port is not within the range " + - "of valid port numbers.", - "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); - } - if ($.inArray(androidOperationConstants["APPLICATION_OPERATION_CODE"], configuredOperations) != -1) { - //If application restriction configured - operation = androidOperationConstants["APPLICATION_OPERATION"]; - // Initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var appRestrictionType = $("#app-restriction-type").val(); - - var restrictedApplicationsGridChildInputs = "div#restricted-applications .child-input"; - - if (!appRestrictionType) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications restriction type is not provided.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(restrictedApplicationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications are not provided in application restriction list.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - else { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // Looping through each child input - $(restrictedApplicationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 0) { - // If child input is of second column - childInput = $(this).val(); - childInputArray.push(childInput); - // Updating emptyChildInputCount - if (!childInput) { - // If child input field is empty - emptyChildInputCount++; - } - } - }); - // Checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // Updating validationStatus - if (emptyChildInputCount > 0) { - // If empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more package names of " + - "applications are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // If duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "for package names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - } - } - - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - - // Updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - if ($.inArray(androidOperationConstants["KIOSK_APPS_CODE"], configuredOperations) != -1) { - //If COSU whitelisting applications configured - operation = androidOperationConstants["KIOSK_APPS"]; - // Initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - var whitelistedApplicationsGridChildInputs = "div#cosu-whitelisted-applications .child-input"; - if (continueToCheckNextInputs) { - if ($(whitelistedApplicationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications are not provided in application whitelist list.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - else { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // Looping through each child input - $(whitelistedApplicationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 0) { - // If child input is of second column - childInput = $(this).val(); - childInputArray.push(childInput); - // Updating emptyChildInputCount - if (!childInput) { - // If child input field is empty - emptyChildInputCount++; - } - } - }); - // Checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // Updating validationStatus - if (emptyChildInputCount > 0) { - // If empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more package names of " + - "applications are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // If duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "for package names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - // Updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - } - } - if (policy["platform"] == platformTypeConstants["WINDOWS"]) { - 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); - } - - } - } - else if (policy["platform"] == platformTypeConstants["IOS"]) { - 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(iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = iosOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - 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) { - 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 RESTRICTIONS - if ($.inArray(iosOperationConstants["RESTRICTIONS_OPERATION_CODE"], configuredOperations) != -1) { - // if RESTRICTION is configured - operation = iosOperationConstants["RESTRICTIONS_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - var restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs = - "div#restrictions-autonomous-single-app-mode-permitted-app-ids .child-input"; - if ($(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).length > 0) { - var childInput; - var childInputArray = []; - var emptyChildInputCount = 0; - var duplicatesExist = false; - // looping through each child input - $(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - var initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - var m, poppedChildInput; - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - var n; - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more permitted App ID entries in " + - "Autonomous Single App Mode are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with permitted App ID entries in " + - "Autonomous Single App Mode.", - "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 WIFI - if ($.inArray(iosOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = iosOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - wifiSSID = $("input#wifi-ssid").val(); - var wifiDomainName = $("input#wifi-domain-name").val(); - if (!wifiSSID && !wifiDomainName) { - validationStatus = { - "error": true, - "subErrorMsg": "Both Wi-Fi SSID and Wi-Fi Domain Name are not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - // getting proxy-setup value - var wifiProxyType = $("select#wifi-proxy-type").find("option:selected").attr("value"); - if (wifiProxyType == "Manual") { - // adds up additional fields to be validated - var wifiProxyServer = $("input#wifi-proxy-server").val(); - if (!wifiProxyServer) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Server is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var wifiProxyPort = $("input#wifi-proxy-port").val(); - if (!wifiProxyPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(wifiProxyPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(wifiProxyPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - - if (continueToCheckNextInputs) { - // getting encryption-type value - var wifiEncryptionType = $("select#wifi-encryption-type").find("option:selected").attr("value"); - if (wifiEncryptionType != "None") { - var wifiPayloadCertificateAnchorUUIDsGridChildInputs = - "div#wifi-payload-certificate-anchor-uuids .child-input"; - if ($(wifiPayloadCertificateAnchorUUIDsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiPayloadCertificateAnchorUUIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Payload Certificate " + - "Anchor UUIDs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with Payload Certificate Anchor UUIDs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var wifiTLSTrustedServerNamesGridChildInputs = - "div#wifi-tls-trusted-server-names .child-input"; - if ($(wifiTLSTrustedServerNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiTLSTrustedServerNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more TLS Trusted Server Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with TLS Trusted Server Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - } - - if (continueToCheckNextInputs) { - var wifiRoamingConsortiumOIsGridChildInputs = "div#wifi-roaming-consortium-ois .child-input"; - if ($(wifiRoamingConsortiumOIsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - var outOfAllowedLengthCount = 0; - var invalidAgainstRegExCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiRoamingConsortiumOIsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 6, 6) && !inputIsValidAgainstLength(childInput, 10, 10)) { - outOfAllowedLengthCount++; - } else if (!inputIsValidAgainstRegExp(/^[a-fA-F0-9]+$/, childInput)) { - invalidAgainstRegExCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfMaxAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "are out of allowed length.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalid inputs in terms of hexadecimal format are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "contain non-hexadecimal characters.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with Roaming Consortium OIs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiNAIRealmNamesGridChildInputs = "div#wifi-nai-realm-names .child-input"; - if ($(wifiNAIRealmNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiNAIRealmNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more NAI Realm Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with NAI Realm Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiMCCAndMNCsGridChildInputs = "div#wifi-mcc-and-mncs .child-input"; - if ($(wifiMCCAndMNCsGridChildInputs).length > 0) { - var childInputCount = 0; - var stringPair; - emptyChildInputCount = 0; - outOfAllowedLengthCount = 0; - var notNumericInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiMCCAndMNCsGridChildInputs).each(function () { - childInput = $(this).val(); - // pushing each string pair to childInputArray - childInputCount++; - if (childInputCount % 2 == 1) { - // initialize stringPair value - stringPair = ""; - // append first part of the string - stringPair += childInput; - } else { - // append second part of the string - stringPair += childInput; - childInputArray.push(stringPair); - } - // updating emptyChildInputCount & outOfAllowedLengthCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!$.isNumeric(childInput)) { - notNumericInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 3, 3)) { - outOfAllowedLengthCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (notNumericInputCount > 0) { - // if notNumeric input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are not numeric.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs " + - "do not fulfill the accepted length of 6 digits.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with MCC/MNC pairs.", - "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); - } - - if ($.inArray(iosOperationConstants["VPN_OPERATION_CODE"], configuredOperations) != -1) { - // if VPN is configured - operation = iosOperationConstants["VPN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var connectionName = $("input#vpn-connection-name").val(); - if (!connectionName) { - validationStatus = { - "error": true, - "subErrorMsg": "Connection Name is required. You cannot proceed.", - "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); - } - - if ($.inArray(iosOperationConstants["PER_APP_VPN_OPERATION_CODE"], configuredOperations) != -1) { - operation = iosOperationConstants["PER_APP_VPN_OPERATION"]; - continueToCheckNextInputs = true; - - var uuid = $("input#per-app-vpn-uuid").val(); - if (!uuid) { - validationStatus = { - "error": true, - "subErrorMsg": "VPN UUID is required. You cannot proceed.", - "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 - }; - } - validationStatusArray.push(validationStatus); - } - - if ($.inArray(iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION_CODE"], configuredOperations) != -1) { - operation = iosOperationConstants["APP_TO_PER_APP_VPN_MAPPING_OPERATION"]; - continueToCheckNextInputs = true; - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - validationStatusArray.push(validationStatus); - } - // Validating EMAIL - if ($.inArray(iosOperationConstants["EMAIL_OPERATION_CODE"], configuredOperations) != -1) { - // if EMAIL is configured - operation = iosOperationConstants["EMAIL_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var emailAddress = $("input#email-address").val(); - if (emailAddress && !inputIsValidAgainstRegExp(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/, emailAddress)) { - validationStatus = { - "error": true, - "subErrorMsg": "Email Address is not valid.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerHostname = $("input#email-incoming-mail-server-hostname").val(); - if (!emailIncomingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerPort = $("input#email-incoming-mail-server-port").val(); - if (emailIncomingMailServerPort && emailIncomingMailServerPort != '') { - if (!$.isNumeric(emailIncomingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailIncomingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerHostname = $("input#email-outgoing-mail-server-hostname").val(); - if (!emailOutgoingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerPort = $("input#email-outgoing-mail-server-port").val(); - if (emailOutgoingMailServerPort) { - if (!$.isNumeric(emailOutgoingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailOutgoingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port is not within the range " + - "of valid port numbers.", - "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 AIRPLAY - if ($.inArray(iosOperationConstants["AIRPLAY_OPERATION_CODE"], configuredOperations) != -1) { - // if AIRPLAY is configured - operation = iosOperationConstants["AIRPLAY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var airplayCredentialsGridChildInputs = "div#airplay-credentials .child-input"; - var airplayDestinationsGridChildInputs = "div#airplay-destinations .child-input"; - if ($(airplayCredentialsGridChildInputs).length == 0 && - $(airplayDestinationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "AirPlay settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(airplayCredentialsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayCredentialsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Device Names of " + - "AirPlay Credentials are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Device Names of AirPlay Credentials.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - if ($(airplayDestinationsGridChildInputs).length > 0) { - childInputArray = []; - emptyChildInputCount = 0; - invalidAgainstRegExCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayDestinationsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstRegExp( - /([a-z|A-Z|0-9][a-z|A-Z|0-9][:]){5}([a-z|A-Z|0-9][a-z|A-Z|0-9])$/, childInput)) { - // if child input field is invalid against RegEx - invalidAgainstRegExCount++ - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalidAgainstRegEx inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields " + - "do not fulfill expected format.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with AirPlay Destinations.", - "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 Domains - if ($.inArray(iosOperationConstants["DOMAIN"], configuredOperations) != -1) { - // if DOMAIN is configured - operation = iosOperationConstants["DOMAIN"]; - - continueToCheckNextInputs = true; - - var airplayCredentialsGridChildInputs = "div#unmarked-email-domains .child-input"; - var airplayDestinationsGridChildInputs = "div#safari-web-domains .child-input"; - if ($(airplayCredentialsGridChildInputs).length == 0 && - $(airplayDestinationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "Manage Domains have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(airplayCredentialsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayCredentialsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more email domains of " + - "unmarked email domains are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "email domains of unmarked email domains.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - if ($(airplayDestinationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayDestinationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more managed safari web domains of " + - "unmarked email domains are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "managed safari web domains of unmarked email domains.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - - validationStatusArray.push(validationStatus); - } - - // Validating LDAP - if ($.inArray(iosOperationConstants["LDAP_OPERATION_CODE"], configuredOperations) != -1) { - // if LDAP is configured - operation = iosOperationConstants["LDAP_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var ldapAccountHostname = $("input#ldap-account-hostname").val(); - if (!ldapAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "LDAP Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var ldapSearchSettingsGridChildInputs = "div#ldap-search-settings .child-input"; - if ($(ldapSearchSettingsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(ldapSearchSettingsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 3 == 2) { - // if child input is of second column - childInput = $(this).find("option:selected").attr("value"); - stringPair = ""; - stringPair += (childInput + " "); - } else if (childInputCount % 3 == 0) { - // if child input is of third column - childInput = $(this).val(); - stringPair += childInput; - childInputArray.push(stringPair); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Search Setting Scope fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Search Setting Search Base and Scope pairs.", - "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 CALENDAR - if ($.inArray(iosOperationConstants["CALENDAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR is configured - operation = iosOperationConstants["CALENDAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarAccountHostname = $("input#calendar-account-hostname").val(); - if (!calendarAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var calendarAccountPort = $("input#calendar-account-port").val(); - if (!calendarAccountPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(calendarAccountPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is not within the range " + - "of valid port numbers.", - "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 CALENDAR_SUBSCRIPTION - if ($.inArray(iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR_SUBSCRIPTION is configured - operation = iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarSubscriptionHostname = $("input#calendar-subscription-hostname").val(); - if (!calendarSubscriptionHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "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 APN - if ($.inArray(iosOperationConstants["APN_OPERATION_CODE"], configuredOperations) != -1) { - // if APN is configured - operation = iosOperationConstants["APN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var apnConfigurationsGridChildInputs = "div#apn-configurations .child-input"; - if ($(apnConfigurationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "APN Settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if ($(apnConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(apnConfigurationsGridChildInputs).each(function () { - childInputCount++; - //if (childInputCount % 5 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - //} - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of Configurations.", - "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 CELLULAR - if ($.inArray(iosOperationConstants["CELLULAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CELLULAR is configured - operation = iosOperationConstants["CELLULAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var cellularAttachAPNName = $("input#cellular-attach-apn-name").val(); - if (!cellularAttachAPNName) { - validationStatus = { - "error": true, - "subErrorMsg": "Cellular Configuration Name is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var cellularAPNConfigurationsGridChildInputs = "div#cellular-apn-configurations .child-input"; - if ($(cellularAPNConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(cellularAPNConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 6 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of APN Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of APN Configurations.", - "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); - } - } - } - // 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; -}; - -stepForwardFrom["policy-profile"] = function () { - policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations); - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); - // updating ownership type options according to platform - if (policy["platform"] == platformTypeConstants["IOS"] || - policy["platform"] == platformTypeConstants["WINDOWS"]) { - var ownershipTypeSelectOptions = $("#ownership-input"); - ownershipTypeSelectOptions.empty(); - ownershipTypeSelectOptions.append($(""). - attr("value", "BYOD").text("BYOD (Bring Your Own Device)")); - ownershipTypeSelectOptions.attr("disabled", true); - } -}; - -stepBackFrom["policy-profile"] = function () { - // reinitialize configuredOperations - configuredOperations = []; - // clearing already-loaded platform specific hidden-operations html content from the relevant div - // so that, the wrong content would not be shown at the first glance, in case - // the user selects a different platform - $(".wr-advance-operations").html( - "
    " + - "
    " + - "" + - "Loading Platform Features . . ." + - "
    " + - "
    " + - "
    " - ); -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - policy["selectedUserRoles"] = null; - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUsers"] = null; - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - //updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-criteria"] = function () { - var validationStatus = {}; - var selectedAssignees; - var selectedField = "Role(s)"; - - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - selectedAssignees = $("#users-input").val(); - selectedField = "User(s)"; - } else if ($(this).attr("id") == "user-roles-radio-btn") { - selectedAssignees = $("#user-roles-input").val(); - } - return false; - } - }); - - if (selectedAssignees) { - validationStatus["error"] = false; - } else { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = selectedField + " is a required field. It cannot be empty"; - } - - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-criteria-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-platform"] = function () { - return false; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, true, "/api/device-mgt/v1.0/policies/"); -}; - -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, false, "/api/device-mgt/v1.0/policies/"); -}; - -var savePolicy = function (policy, isActive, serviceURL) { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["platformId"] == platformIds["WINDOWS"] && - key == windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]) { - policy["profile"][key].enablePassword = true; - } - if (policy["profile"].hasOwnProperty(key)) { - profilePayloads.push({ - "featureCode": key, - "deviceType": policy["platform"], - "content": policy["profile"][key] - }); - } - } - - $.each(profilePayloads, function (i, item) { - $.each(item.content, function (key, value) { - //cannot add a true check since it will catch value = false as well - if (value === null || value === undefined || value === "") { - item.content[key] = null; - } - }); - }); - - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": policy["selectedOwnership"], - "active": isActive, - "profile": { - "profileName": policy["policyName"], - "deviceType": policy["platform"], - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - } else if (policy["selectedUserRoles"]) { - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - - console.log(JSON.stringify(payload)); - - invokerUtil.post( - serviceURL, - payload, - function () { - $(".add-policy").addClass("hidden"); - $(".policy-naming").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - }, - function (data) { - } - ); -}; - -// 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(); -}; - - -/** - * This method will display appropriate fields based on wifi type - * @param select - */ -var changeAndroidWifiPolicy = function (select) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['wep', 'wpa', '802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-eap', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['802eap']); -}; - -/** - * This method will display appropriate fields based on wifi EAP type - * @param select - * @param superSelect - */ -var changeAndroidWifiPolicyEAP = function (select, superSelect) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['peap', 'ttls', 'pwd' ,'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['peap', 'ttls', 'fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-provisioning', ['fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['peap', 'tls', 'ttls', 'pwd', 'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['peap', 'ttls']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['peap', 'tls', 'ttls']); - if (superSelect.value != '802eap') { - changeAndroidWifiPolicy(superSelect); - } -}; - -/** - * This method will encode the file-input and enter the values to given input files - * @param fileInput - * @param fileHiddenInput - * @param fileNameHiddenInput - */ -var base64EncodeFile = function (fileInput, fileHiddenInput, fileNameHiddenInput) { - var file = fileInput.files[0]; - if (file) { - var reader = new FileReader(); - reader.onload = function(readerEvt) { - var binaryString = readerEvt.target.result; - fileHiddenInput.value = (btoa(binaryString)); - fileNameHiddenInput.value = file.name.substr(0,file.name.lastIndexOf(".")); - }; - reader.readAsBinaryString(file); - } -}; - -/** - * 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(); - } - } - ); - } -}; - -var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = selectElement.value; - var i, slideDownVotes = 0; - for (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 - - -// 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(); - } -}; - -function formatRepo(user) { - if (user.loading) { - return user.text; - } - if (!user.username) { - return; - } - var markup = '
    ' + - '
    ' + - '
    ' + - '
    ' + user.username + '
    '; - if (user.firstname) { - markup += '
    ' + user.firstname + '
    '; - } - if (user.emailAddress) { - markup += '
    ' + user.emailAddress + '
    '; - } - markup += '
    '; - return markup; -} - -function formatRepoSelection(user) { - return user.username || user.text; -} - -function promptErrorPolicyPlatform(errorMsg) { - var mainErrorMsgWrapper = "#policy-platform-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(errorMsg); - $(mainErrorMsgWrapper).removeClass("hidden"); -} - -// End of functions related to grid-input-view - - -$(document).ready(function () { - $("#users-input").select2({ - multiple: true, - tags: false, - ajax: { - url: "/emm/api/invoker/execute/", - method: "POST", - dataType: 'json', - delay: 250, - id: function (user) { - return user.username; - }, - data: function (params) { - var postData = {}; - postData.requestMethod = "GET"; - postData.requestURL = "/api/device-mgt/v1.0/users/search/usernames?filter=" + params.term; - postData.requestPayload = null; - return JSON.stringify(postData); - }, - processResults: function (data) { - var newData = []; - $.each(data, function (index, value) { - value.id = value.username; - newData.push(value); - }); - return { - results: newData - }; - }, - cache: true - }, - escapeMarkup: function (markup) { - return markup; - }, // let our custom formatter work - minimumInputLength: 1, - templateResult: formatRepo, // omitted for brevity, see the source of this page - templateSelection: formatRepoSelection // omitted for brevity, see the source of this page - }); - - $("#loading-content").remove(); - $(".policy-platform").removeClass("hidden"); - // Adding initial state of wizard-steps. - $("#policy-platform-wizard-steps").html($(".wr-steps").html()); - - $("select.select2[multiple=multiple]").select2({ - "tags": false - }); - - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - } - if ($("#user-roles-radio-btn").is(":checked")) { - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#user-roles-input").select2({ - "tags": false - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - // 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 featureConfiguringSwitch = "#" + collapsedFeatureBody. - substr(0, collapsedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]"; - if ($(featureConfiguringSwitch).prop("checked") == true) { - $(featureConfiguringSwitch).prop("checked", false); - } - }); - - $(advanceOperations).on('shown.bs.collapse', function (event) { - var expandedFeatureBody = event.target.id; - var featureConfiguringSwitch = "#" + expandedFeatureBody. - substr(0, expandedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]"; - if ($(featureConfiguringSwitch).prop("checked") == false) { - $(featureConfiguringSwitch).prop("checked", true); - } - }); - // - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - $("." + nextStep).removeClass("hidden"); - } - }); - -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-android.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-android.hbs deleted file mode 100644 index 10fcf82e2..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-android.hbs +++ /dev/null @@ -1,1428 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    - - - Un-check following checkbox in case you do not need the device to be encrypted. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - -
    - - - -
    -
    - - -
    - - - - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - - - - - -
    - -
    - - - - - - - Add Application - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - - - - - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-ios.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-ios.hbs deleted file mode 100644 index 4d326607c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-ios.hbs +++ /dev/null @@ -1,4861 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - -
    No:KeyValue
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - -
    - - - - - - - - - - - - - -
    No:Safari Domain
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - -
    - - - - - - - - - - - - - - -
    No:App IdentifierVPN UUID
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - - - -
    - - -
    - - - -
    - - -
    - - - - - - - - - - - - - -
    No:Roaming Consortium OI
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:NAI Realm Name
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - - -
    No:Mobile Country Code ( MCC )Mobile Network Code ( MNC )
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - Incoming Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - Outgoing Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - -
    No:Device NamePassword
    - No entries added yet . -
    - - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Destination
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - -
    No:Email Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Safari Web Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - -
    No:DescriptionSearch BaseScope
    - No entries added yet . -
    - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - -
    No:APNUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - - - - -
    No:APNAuth.TypeUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - - Restrictions on Device Functionality : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    -
    - Restrictions on Applications : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    - - - -
    -
    -
    - - -
    -
    - -
    -
    - - - - -
    - - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-windows.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-windows.hbs deleted file mode 100644 index 03be4923b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.create/public/templates/hidden-operations-windows.hbs +++ /dev/null @@ -1,564 +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 . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.hbs deleted file mode 100644 index 14a1df933..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.hbs +++ /dev/null @@ -1,277 +0,0 @@ -{{#zone "content"}} - {{#if isAuthorized}} -
    -
    - - - - - - -
    - - - -
    -
    -

    EDIT POLICY

    -
    -
    -
    -
    -
    -

    Step 1: Edit current profile

    -
    - -
    -
    -
    -    - -  Loading platform features . . . -
    -
    -
    -
    - -
    -
    -
    -
    - - - -
    - - {{else}} -

    - Permission Denied -

    -
    - You not authorized to enter Policy Management Section. -
    - {{/if}} -{{/zone}} -{{#zone "bottomJs"}} - - - - - - - {{js "js/edit.js"}} -{{/zone}} - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.js deleted file mode 100644 index a3daa79dc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.js +++ /dev/null @@ -1,40 +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("policy-view-edit-unit backend js"); - log.debug("calling policy-view-edit-unit"); - - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - - var rolesResult = userModule.getRoles(); - if (rolesResult.status == "success") { - context.roles = rolesResult.content; - } - - var usersResult = userModule.getUsers(); - if (usersResult.status == "success") { - context.users = usersResult.content; - } - - context.isAuthorized = userModule.isAuthorized("/permission/admin/device-mgt/policies/manage"); - context.isAuthorizedViewUsers = userModule.isAuthorized("/permission/admin/device-mgt/roles/view"); - context.isAuthorizedViewRoles = userModule.isAuthorized("/permission/admin/device-mgt/users/view"); - - return context; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.json deleted file mode 100644 index 395c829c5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/edit.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version" : "1.0.0", - "extends" : "cdmf.unit.policy.edit" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/js/edit.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/js/edit.js deleted file mode 100644 index 7c899b3cb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/js/edit.js +++ /dev/null @@ -1,2691 +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 validateStep = {}; -var skipStep = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; -var currentlyEffected = {}; - -var validateInline = {}; -var clearInline = {}; - -var enableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).addClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).removeClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).removeClass(" hidden"); - } -}; - -var disableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).removeClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).addClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).addClass(" hidden"); - } -}; - -/** - *clear inline validation messages. - */ -clearInline["policy-name"] = function () { - disableInlineError("policy-name-field", "nameEmpty", "nameError"); -}; - - -/** - * Validate if provided policy name is valid against RegEx configures. - */ -validateInline["policy-name"] = function () { - var policyName = $("input#policy-name-input").val(); - if (policyName && inputIsValidAgainstLength(policyName, 1, 30)) { - disableInlineError("policy-name-field", "nameEmpty", "nameError"); - } else { - enableInlineError("policy-name-field", "nameEmpty", "nameError"); - } -}; - -$("#policy-name-input").focus(function(){ - clearInline["policy-name"](); -}).blur(function(){ - validateInline["policy-name"](); -}); - -// Constants to define platform types available -var platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" -}; - -// Constants to define platform types ids. -var platformTypeIds = { - "ANDROID": 1, - "IOS": 3, - "WINDOWS": 2 -}; - -// Constants to define Android Operation Constants -var androidOperationConstants = { - "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", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "APPLICATION_OPERATION":"app-restriction", - "APPLICATION_OPERATION_CODE":"APP-RESTRICTION", - "KIOSK_APPS_CODE":"KIOSK_APPS", - "KIOSK_APPS":"cosu-whitelisted-applications" -}; - -// Constants to define Android Operation Constants -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" -}; - -// Constants to define iOS Operation Constants -var iosOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "RESTRICTIONS_OPERATION": "restrictions", - "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "EMAIL_OPERATION": "email", - "EMAIL_OPERATION_CODE": "EMAIL", - "AIRPLAY_OPERATION": "airplay", - "AIRPLAY_OPERATION_CODE": "AIR_PLAY", - "LDAP_OPERATION": "ldap", - "LDAP_OPERATION_CODE": "LDAP", - "CALENDAR_OPERATION": "calendar", - "CALENDAR_OPERATION_CODE": "CALDAV", - "CALENDAR_SUBSCRIPTION_OPERATION": "calendar-subscription", - "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", - "APN_OPERATION": "apn", - "APN_OPERATION_CODE": "APN", - "CELLULAR_OPERATION": "cellular", - "CELLULAR_OPERATION_CODE": "CELLULAR" -}; - -/** - * 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); - }); - } -}; - -skipStep["policy-platform"] = function (policyPayloadObj) { - policy["name"] = policyPayloadObj["policyName"]; - policy["platform"] = policyPayloadObj["profile"]["deviceType"]; - - var userRoleInput = $("#user-roles-input"); - var ownershipInput = $("#ownership-input"); - var userInput = $("#users-input"); - var actionInput = $("#action-input"); - var policyNameInput = $("#policy-name-input"); - var policyDescriptionInput = $("#policy-description-input"); - - currentlyEffected["roles"] = policyPayloadObj.roles; - currentlyEffected["users"] = policyPayloadObj.users; - - if (currentlyEffected["roles"].length > 0) { - $("#user-roles-radio-btn").prop("checked", true); - $("#user-roles-select-field").show(); - $("#users-select-field").hide(); - userRoleInput.val(currentlyEffected["roles"]).trigger("change"); - } else if (currentlyEffected["users"].length > 0) { - $("#users-radio-btn").prop("checked", true); - $("#users-select-field").show(); - $("#user-roles-select-field").hide(); - userInput.val(currentlyEffected["users"]).trigger("change"); - } - - ownershipInput.val(policyPayloadObj.ownershipType); - actionInput.val(policyPayloadObj.compliance); - policyNameInput.val(policyPayloadObj["policyName"]); - policyDescriptionInput.val(policyPayloadObj["description"]); - // updating next-page wizard title with selected platform - $("#policy-profile-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); - - var deviceType = policy["platform"]; - var hiddenOperationsByDeviceType = $("#hidden-operations-" + deviceType); - var hiddenOperationsByDeviceTypeCacheKey = deviceType + "HiddenOperations"; - var hiddenOperationsByDeviceTypeSrc = hiddenOperationsByDeviceType.attr("src"); - - setTimeout( - function () { - $.template(hiddenOperationsByDeviceTypeCacheKey, hiddenOperationsByDeviceTypeSrc, function (template) { - var content = template(); - // pushing profile feature input elements - $(".wr-advance-operations").html(content); - // populating values and getting the list of configured features - var configuredOperations = operationModule. - populateProfile(policy["platform"], policyPayloadObj["profile"]["profileFeaturesList"]); - // updating grouped input visibility according to the populated values - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - // enabling previously configured options of last update - for (var i = 0; i < configuredOperations.length; ++i) { - var configuredOperation = configuredOperations[i]; - $(".operation-data").filterByData("operation-code", configuredOperation). - find(".panel-title .wr-input-control.switch input[type=checkbox]"). - each(function () {$(this).click();}); - } - }); - }, - 250 // time delayed for the execution of above function, 250 milliseconds - ); -}; - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (policy["platform"] == platformTypeConstants["ANDROID"]) { - 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(androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = androidOperationConstants["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(androidOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = androidOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = androidOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating WIFI - if ($.inArray(androidOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = androidOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var wifiSSID = $("input#wifi-ssid").val(); - if (!wifiSSID) { - validationStatus = { - "error": true, - "subErrorMsg": "WIFI SSID is not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - // For the secure wifi types, it is required to have a password - var wifiTypeUIElement = $("#wifi-type"); - var wifiType = wifiTypeUIElement.find("option:selected").val(); - if (wifiTypeUIElement.is("input:checkbox")) { - wifiType = wifiTypeUIElement.is(":checked").toString(); - } - if (wifiType != "none") { - if (!$("#wifi-password").val()) { - validationStatus = { - "error": true, - "subErrorMsg": "Password is required for the wifi security type " + wifiType + ". Please " + - "provide a password to proceed.", - "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); - } - if ($.inArray(androidOperationConstants["APPLICATION_OPERATION_CODE"], configuredOperations) != -1) { - //If application restriction configured - operation = androidOperationConstants["APPLICATION_OPERATION"]; - // Initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var appRestrictionType = $("#app-restriction-type").val(); - - var restrictedApplicationsGridChildInputs = "div#restricted-applications .child-input"; - - if (!appRestrictionType) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications restriction type is not provided.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(restrictedApplicationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications are not provided in application restriction list.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - else { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // Looping through each child input - $(restrictedApplicationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 0) { - // If child input is of second column - childInput = $(this).val(); - childInputArray.push(childInput); - // Updating emptyChildInputCount - if (!childInput) { - // If child input field is empty - emptyChildInputCount++; - } - } - }); - // Checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // Updating validationStatus - if (emptyChildInputCount > 0) { - // If empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more package names of " + - "applications are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // If duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "for package names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - } - } - - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - - // Updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - - - } - if ($.inArray(androidOperationConstants["KIOSK_APPS_CODE"], configuredOperations) != -1) { - //If COSU whitelisting applications configured - operation = androidOperationConstants["KIOSK_APPS"]; - // Initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - var whitelistedApplicationsGridChildInputs = "div#cosu-whitelisted-applications .child-input"; - if (continueToCheckNextInputs) { - if ($(whitelistedApplicationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "Applications are not provided in application whitelist list.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - else { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // Looping through each child input - $(whitelistedApplicationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 0) { - // If child input is of second column - childInput = $(this).val(); - childInputArray.push(childInput); - // Updating emptyChildInputCount - if (!childInput) { - // If child input field is empty - emptyChildInputCount++; - } - } - }); - // Checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // Updating validationStatus - if (emptyChildInputCount > 0) { - // If empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more package names of " + - "applications are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // If duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "for package names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - // Updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - } - } if (policy["platform"] == platformTypeConstants["WINDOWS"]) { - 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); - } - - } - } else if (policy["platform"] == platformTypeConstants["IOS"]) { - 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(iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = iosOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - 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) { - 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 RESTRICTIONS - if ($.inArray(iosOperationConstants["RESTRICTIONS_OPERATION_CODE"], configuredOperations) != -1) { - // if RESTRICTION is configured - operation = iosOperationConstants["RESTRICTIONS_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - var restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs = - "div#restrictions-autonomous-single-app-mode-permitted-app-ids .child-input"; - if ($(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).length > 0) { - var childInput; - var childInputArray = []; - var emptyChildInputCount = 0; - var duplicatesExist = false; - // looping through each child input - $(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - var initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - var m, poppedChildInput; - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - var n; - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more permitted App ID entries in " + - "Autonomous Single App Mode are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with permitted App ID entries in " + - "Autonomous Single App Mode.", - "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 WIFI - if ($.inArray(iosOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = iosOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - wifiSSID = $("input#wifi-ssid").val(); - var wifiDomainName = $("input#wifi-domain-name").val(); - if (!wifiSSID && !wifiDomainName) { - validationStatus = { - "error": true, - "subErrorMsg": "Both Wi-Fi SSID and Wi-Fi Domain Name are not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - // getting proxy-setup value - var wifiProxyType = $("select#wifi-proxy-type").find("option:selected").attr("value"); - if (wifiProxyType == "Manual") { - // adds up additional fields to be validated - var wifiProxyServer = $("input#wifi-proxy-server").val(); - if (!wifiProxyServer) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Server is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var wifiProxyPort = $("input#wifi-proxy-port").val(); - if (!wifiProxyPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(wifiProxyPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(wifiProxyPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - - if (continueToCheckNextInputs) { - // getting encryption-type value - var wifiEncryptionType = $("select#wifi-encryption-type").find("option:selected").attr("value"); - if (wifiEncryptionType != "None") { - var wifiPayloadCertificateAnchorUUIDsGridChildInputs = - "div#wifi-payload-certificate-anchor-uuids .child-input"; - if ($(wifiPayloadCertificateAnchorUUIDsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiPayloadCertificateAnchorUUIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Payload Certificate " + - "Anchor UUIDs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with Payload Certificate Anchor UUIDs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var wifiTLSTrustedServerNamesGridChildInputs = - "div#wifi-tls-trusted-server-names .child-input"; - if ($(wifiTLSTrustedServerNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiTLSTrustedServerNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more TLS Trusted Server Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with TLS Trusted Server Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - } - - if (continueToCheckNextInputs) { - var wifiRoamingConsortiumOIsGridChildInputs = "div#wifi-roaming-consortium-ois .child-input"; - if ($(wifiRoamingConsortiumOIsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - var outOfAllowedLengthCount = 0; - var invalidAgainstRegExCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiRoamingConsortiumOIsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 6, 6) && !inputIsValidAgainstLength(childInput, 10, 10)) { - outOfAllowedLengthCount++; - } else if (!inputIsValidAgainstRegExp(/^[a-fA-F0-9]+$/, childInput)) { - invalidAgainstRegExCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfMaxAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "are out of allowed length.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalid inputs in terms of hexadecimal format are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "contain non-hexadecimal characters.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with Roaming Consortium OIs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiNAIRealmNamesGridChildInputs = "div#wifi-nai-realm-names .child-input"; - if ($(wifiNAIRealmNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiNAIRealmNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more NAI Realm Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with NAI Realm Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiMCCAndMNCsGridChildInputs = "div#wifi-mcc-and-mncs .child-input"; - if ($(wifiMCCAndMNCsGridChildInputs).length > 0) { - var childInputCount = 0; - var stringPair; - emptyChildInputCount = 0; - outOfAllowedLengthCount = 0; - var notNumericInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiMCCAndMNCsGridChildInputs).each(function () { - childInput = $(this).val(); - // pushing each string pair to childInputArray - childInputCount++; - if (childInputCount % 2 == 1) { - // initialize stringPair value - stringPair = ""; - // append first part of the string - stringPair += childInput; - } else { - // append second part of the string - stringPair += childInput; - childInputArray.push(stringPair); - } - // updating emptyChildInputCount & outOfAllowedLengthCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!$.isNumeric(childInput)) { - notNumericInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 3, 3)) { - outOfAllowedLengthCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (notNumericInputCount > 0) { - // if notNumeric input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are not numeric.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs " + - "do not fulfill the accepted length of 6 digits.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with MCC/MNC pairs.", - "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 EMAIL - if ($.inArray(iosOperationConstants["EMAIL_OPERATION_CODE"], configuredOperations) != -1) { - // if EMAIL is configured - operation = iosOperationConstants["EMAIL_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var emailAddress = $("input#email-address").val(); - if (emailAddress && !inputIsValidAgainstRegExp(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/, emailAddress)) { - validationStatus = { - "error": true, - "subErrorMsg": "Email Address is not valid.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerHostname = $("input#email-incoming-mail-server-hostname").val(); - if (!emailIncomingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerPort = $("input#email-incoming-mail-server-port").val(); - if (emailIncomingMailServerPort && emailIncomingMailServerPort != '') { - if (!$.isNumeric(emailIncomingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailIncomingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerHostname = $("input#email-outgoing-mail-server-hostname").val(); - if (!emailOutgoingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerPort = $("input#email-outgoing-mail-server-port").val(); - if (emailOutgoingMailServerPort && emailOutgoingMailServerPort != '') { - if (!$.isNumeric(emailOutgoingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailOutgoingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port is not within the range " + - "of valid port numbers.", - "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 AIRPLAY - if ($.inArray(iosOperationConstants["AIRPLAY_OPERATION_CODE"], configuredOperations) != -1) { - // if AIRPLAY is configured - operation = iosOperationConstants["AIRPLAY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var airplayCredentialsGridChildInputs = "div#airplay-credentials .child-input"; - var airplayDestinationsGridChildInputs = "div#airplay-destinations .child-input"; - if ($(airplayCredentialsGridChildInputs).length == 0 && - $(airplayDestinationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "AirPlay settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(airplayCredentialsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayCredentialsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Device Names of " + - "AirPlay Credentials are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Device Names of AirPlay Credentials.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - if ($(airplayDestinationsGridChildInputs).length > 0) { - childInputArray = []; - emptyChildInputCount = 0; - invalidAgainstRegExCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayDestinationsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstRegExp( - /([a-z|A-Z|0-9][a-z|A-Z|0-9][:]){5}([a-z|A-Z|0-9][a-z|A-Z|0-9])$/, childInput)) { - // if child input field is invalid against RegEx - invalidAgainstRegExCount++ - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalidAgainstRegEx inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields " + - "do not fulfill expected format.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with AirPlay Destinations.", - "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 LDAP - if ($.inArray(iosOperationConstants["LDAP_OPERATION_CODE"], configuredOperations) != -1) { - // if LDAP is configured - operation = iosOperationConstants["LDAP_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var ldapAccountHostname = $("input#ldap-account-hostname").val(); - if (!ldapAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "LDAP Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var ldapSearchSettingsGridChildInputs = "div#ldap-search-settings .child-input"; - if ($(ldapSearchSettingsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(ldapSearchSettingsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 3 == 2) { - // if child input is of second column - childInput = $(this).find("option:selected").attr("value"); - stringPair = ""; - stringPair += (childInput + " "); - } else if (childInputCount % 3 == 0) { - // if child input is of third column - childInput = $(this).val(); - stringPair += childInput; - childInputArray.push(stringPair); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Search Setting Scope fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Search Setting Search Base and Scope pairs.", - "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 CALENDAR - if ($.inArray(iosOperationConstants["CALENDAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR is configured - operation = iosOperationConstants["CALENDAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarAccountHostname = $("input#calendar-account-hostname").val(); - if (!calendarAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var calendarAccountPort = $("input#calendar-account-port").val(); - if (!calendarAccountPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(calendarAccountPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is not within the range " + - "of valid port numbers.", - "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 CALENDAR_SUBSCRIPTION - if ($.inArray(iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR_SUBSCRIPTION is configured - operation = iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarSubscriptionHostname = $("input#calendar-subscription-hostname").val(); - if (!calendarSubscriptionHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "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 APN - if ($.inArray(iosOperationConstants["APN_OPERATION_CODE"], configuredOperations) != -1) { - // if APN is configured - operation = iosOperationConstants["APN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var apnConfigurationsGridChildInputs = "div#apn-configurations .child-input"; - if ($(apnConfigurationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "APN Settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if ($(apnConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(apnConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 5 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of Configurations.", - "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 CELLULAR - if ($.inArray(iosOperationConstants["CELLULAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CELLULAR is configured - operation = iosOperationConstants["CELLULAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var cellularAttachAPNName = $("input#cellular-attach-apn-name").val(); - if (!cellularAttachAPNName) { - validationStatus = { - "error": true, - "subErrorMsg": "Cellular Configuration Name is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var cellularAPNConfigurationsGridChildInputs = "div#cellular-apn-configurations .child-input"; - if ($(cellularAPNConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(cellularAPNConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 6 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of APN Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of APN Configurations.", - "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); - } - } - } - // 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; -}; - -stepForwardFrom["policy-profile"] = function () { - policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations); - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); - // updating ownership type options according to platform - if (policy["platform"] == platformTypeConstants["IOS"] || - policy["platform"] == platformTypeConstants["WINDOWS"]) { - var ownershipTypeSelectOptions = $("#ownership-input"); - ownershipTypeSelectOptions.empty(); - ownershipTypeSelectOptions.append($(""). - attr("value", "BYOD").text("BYOD (Bring Your Own Device)")); - ownershipTypeSelectOptions.attr("disabled", true); - } -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - policy["selectedUserRoles"] = null; - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUsers"] = null; - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - // updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-criteria"] = function () { - var validationStatus = {}; - var selectedAssignees; - var selectedField = "Role(s)"; - - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - selectedAssignees = $("#users-input").val(); - selectedField = "User(s)"; - } else if ($(this).attr("id") == "user-roles-radio-btn") { - selectedAssignees = $("#user-roles-input").val(); - } - return false; - } - }); - - if (selectedAssignees) { - validationStatus["error"] = false; - } else { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = selectedField + " is a required field. It cannot be empty"; - } - - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-criteria-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "publish"); -}; -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "save"); -}; - -var updatePolicy = function (policy, state) { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["platform"] == platformTypeConstants["WINDOWS"] && - key == windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]) { - policy["profile"][windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]].enablePassword = true; - } - - if (policy["profile"].hasOwnProperty(key)) { - profilePayloads.push({ - "featureCode": key, - "deviceType": policy["platform"], - "content": policy["profile"][key] - }); - } - } - - $.each(profilePayloads, function (i, item) { - $.each(item.content, function (key, value) { - if (value === null || value === undefined || value === "") { - item.content[key] = null; - } - }); - }); - - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": policy["selectedOwnership"], - "profile": { - "profileName": policy["policyName"], - "deviceType": policy["platform"], - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - payload["roles"] = []; - } else if (policy["selectedUserRoles"]) { - payload["users"] = []; - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - - var serviceURL = "/api/device-mgt/v1.0/policies/" + getParameterByName("id"); - invokerUtil.put( - serviceURL, - payload, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200) { - var policyList = []; - policyList.push(getParameterByName("id")); - if (state == "save") { - serviceURL = "/api/device-mgt/v1.0/policies/deactivate-policy"; - invokerUtil.post( - serviceURL, - policyList, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200) { - $(".add-policy").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - } - }, - // on error - function (jqXHR) { - console.log("error in saving policy. Received error code : " + jqXHR.status); - } - ); - } else if (state == "publish") { - serviceURL = "/api/device-mgt/v1.0/policies/activate-policy"; - invokerUtil.post( - serviceURL, - policyList, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200) { - $(".add-policy").addClass("hidden"); - $(".policy-naming").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - } - }, - // on error - function (jqXHR) { - console.log("error in publishing policy. Received error code : " + jqXHR.status); - } - ); - } - } - }, - // on error - function (jqXHR) { - console.log("error in updating policy. Received error code : " + jqXHR.status); - } - ); -}; - -// 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(); -}; - -/** - * This method will display appropriate fields based on wifi type - * @param {object} wifi type select object - */ -var changeAndroidWifiPolicy = function (select) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['wep', 'wpa', '802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-eap', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['802eap']); -} - -/** - * This method will display appropriate fields based on wifi EAP type - * @param {object} wifi eap select object - * @param {object} wifi type select object - */ -var changeAndroidWifiPolicyEAP = function (select, superSelect) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['peap', 'ttls', 'pwd' ,'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['peap', 'ttls', 'fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-provisioning', ['fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['peap', 'tls', 'ttls', 'pwd', 'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['peap', 'ttls']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['peap', 'tls', 'ttls']); - if(superSelect.value != '802eap'){ - changeAndroidWifiPolicy(superSelect); - } -} - -/** - * This method will encode the fileinput and enter the values to given input files - * @param {object} fileInput - * @param {object} fileHiddenInput - * @param {object} fileNameHiddenInput - */ -var base64EncodeFile = function (fileInput, fileHiddenInput, fileNameHiddenInput) { - var file = fileInput.files[0]; - if (file) { - var reader = new FileReader(); - reader.onload = function(readerEvt) { - var binaryString = readerEvt.target.result; - fileHiddenInput.value = (btoa(binaryString)); - fileNameHiddenInput.value = file.name.substr(0,file.name.lastIndexOf(".")); - }; - reader.readAsBinaryString(file); - } -} - - - -/** - * 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(); - } - } - ); - } -}; - -var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = selectElement.value; - - var i, slideDownVotes = 0; - for (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 - - -// 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(); - } -}; - -// End of functions related to grid-input-view - -/** - * This method will return query parameter value given its name. - * @param name Query parameter name - * @returns {string} Query parameter value - */ -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -//function formatRepo(user) { -// if (user.loading) { -// return user.text -// } -// if (!user.username) { -// return; -// } -// var markup = '
    ' + -// '
    ' + -// '
    ' + -// '
    ' + user.username + '
    '; -// if (user.firstname) { -// markup += '
    ' + user.firstname + '
    '; -// } -// if (user.emailAddress) { -// markup += '
    ' + user.emailAddress + '
    '; -// } -// markup += '
    '; -// return markup; -//} -// -//function formatRepoSelection(user) { -// return user.username || user.text; -//} - -$(document).ready(function () { - // Adding initial state of wizard-steps. - invokerUtil.get( - "/api/device-mgt/v1.0/policies/" + getParameterByName("id"), - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var policy = JSON.parse(data); - skipStep["policy-platform"](policy); - } - }, - // on error - function (jqXHR) { - console.log(jqXHR); - // should be redirected to an error page - } - ); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - } - if ($("#user-roles-radio-btn").is(":checked")) { - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#user-roles-input").select2({ - "tags": false - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - $("#users-input").select2({ - "tags": false - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - $("#policy-profile-wizard-steps").html($(".wr-steps").html()); - - // 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 featureConfiguringSwitch = "#" + collapsedFeatureBody. - substr(0, collapsedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]"; - if ($(featureConfiguringSwitch).prop("checked") == true) { - $(featureConfiguringSwitch).prop("checked", false); - } - }); - - $(advanceOperations).on('shown.bs.collapse', function (event) { - var expandedFeatureBody = event.target.id; - var featureConfiguringSwitch = "#" + expandedFeatureBody. - substr(0, expandedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]"; - if ($(featureConfiguringSwitch).prop("checked") == false) { - $(featureConfiguringSwitch).prop("checked", true); - } - }); - // - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - $("." + nextStep).removeClass("hidden"); - } - }); - -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-android-edit.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-android-edit.hbs deleted file mode 100644 index 510e70a29..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-android-edit.hbs +++ /dev/null @@ -1,1562 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - Below restrictions will be applied on devices with Android version 5.0 Lollipop onwards only - -

    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - Bellow restrictions will be applied on devices with Android version 6.0 Marshmallow onwards only. - -

    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you do not need the device to be encrypted. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - Please note that * sign represents required fields of data. -
    -
    - -
    - - -
    -
    - - -
    - - - - - - - - - -
    -
    -
    - - -
    -
    - -
    -
    - - - - - -
    - -
    - - - - - -   - Add Application - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    -
    - -
    - - -
    - -

    - - - -
    - - -
    -
    -
    - - -
    -
    - -
    - - -
    - -
    - - - - - - - - - - - - - - -
    No:Application Name / DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-ios-edit.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-ios-edit.hbs deleted file mode 100644 index afc6dd9c6..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-ios-edit.hbs +++ /dev/null @@ -1,4902 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - -
    No:KeyValue
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    - - -
    - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - -
    - - - - - - - - - - - - - -
    No:Safari Domain
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - -
    - - - - - - - - - - - - - - -
    No:App IdentifierVPN UUID
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - - - -
    - - -
    - - - -
    - - -
    - - - - - - - - - - - - - -
    No:Roaming Consortium OI
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:NAI Realm Name
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - - -
    No:Mobile Country Code ( MCC )Mobile Network Code ( MNC )
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - - - -
    - - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - Incoming Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - Outgoing Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - -
    No:Device NamePassword
    - No entries added yet . -
    - - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Destination
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - -
    No:Email Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Safari Web Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - -
    No:DescriptionSearch BaseScope
    - No entries added yet . -
    - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - -
    No:APNUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - - - - -
    No:APNAuth.TypeUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    - - - - Restrictions on Device Functionality : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    -
    - Restrictions on Applications : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    - - - -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-windows-edit.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-windows-edit.hbs deleted file mode 100644 index 8f7528f1a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.edit/public/templates/hidden-operations-windows-edit.hbs +++ /dev/null @@ -1,566 +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 . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/js/view.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/js/view.js deleted file mode 100644 index ad6651977..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/js/view.js +++ /dev/null @@ -1,2305 +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 validateStep = {}; -var skipStep = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; - -var base_api_url = "/api/device-mgt/v1.0"; - -// Constants to define platform types available -var platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" -}; - -// Constants to define Android Operation Constants -var androidOperationConstants = { - "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", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI" -}; - -// Constants to define Android Operation Constants -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" -}; - -// Constants to define iOS Operation Constants -var iosOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "RESTRICTIONS_OPERATION": "restrictions", - "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "EMAIL_OPERATION": "email", - "EMAIL_OPERATION_CODE": "EMAIL", - "AIRPLAY_OPERATION": "airplay", - "AIRPLAY_OPERATION_CODE": "AIR_PLAY", - "LDAP_OPERATION": "ldap", - "LDAP_OPERATION_CODE": "LDAP", - "CALENDAR_OPERATION": "calendar", - "CALENDAR_OPERATION_CODE": "CALDAV", - "CALENDAR_SUBSCRIPTION_OPERATION": "calendar-subscription", - "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", - "APN_OPERATION": "apn", - "APN_OPERATION_CODE": "APN", - "CELLULAR_OPERATION": "cellular", - "CELLULAR_OPERATION_CODE": "CELLULAR" -}; - -/** - * 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); - }); - } -}; - -skipStep["policy-platform"] = function (policyPayloadObj) { - policy["name"] = policyPayloadObj["policyName"]; - policy["platform"] = policyPayloadObj["profile"]["deviceType"]; - var userRoleInput = $("#user-roles-input"); - var ownershipInput = $("#ownership-input"); - var userInput = $("#users-select-field"); - var actionInput = $("#action-input"); - var policyNameInput = $("#policy-name-input"); - var policyDescriptionInput = $("#policy-description-input"); - userRoleInput.val(policyPayloadObj.roles); - userInput.val(policyPayloadObj.users); - ownershipInput.val(policyPayloadObj.ownershipType); - actionInput.val(policyPayloadObj.compliance); - policyNameInput.val(policyPayloadObj["policyName"]); - policyDescriptionInput.val(policyPayloadObj["description"]); - // updating next-page wizard title with selected platform - $("#policy-heading").text(policy["platform"].toUpperCase() + " POLICY - " + policy["name"].toUpperCase()); - $("#policy-platform").text(policy["platform"].toUpperCase()); - $("#policy-assignment").text(policyPayloadObj.ownershipType); - $("#policy-action").text(policyPayloadObj.compliance.toUpperCase()); - $("#policy-description").text(policyPayloadObj["description"]); - var policyStatus = "Active"; - if (policyPayloadObj["active"] == true && policyPayloadObj["updated"] == true) { - policyStatus = ' Active/Updated'; - } else if (policyPayloadObj["active"] == true && policyPayloadObj["updated"] == false) { - policyStatus = ' Active'; - } else if (policyPayloadObj["active"] == false && policyPayloadObj["updated"] == true) { - policyStatus = ' Inactive/Updated'; - } else if (policyPayloadObj["active"] == false && policyPayloadObj["updated"] == false) { - policyStatus = ' Inactive'; - } - - $("#policy-status").html(policyStatus); - - if (policyPayloadObj.users.length > 0) { - $("#policy-users").text(policyPayloadObj.users.toString().split(",").join(", ")); - } else { - $("#users-row").addClass("hidden"); - } - - if (policyPayloadObj.roles.length > 0) { - $("#policy-roles").text(policyPayloadObj.roles.toString().split(",").join(", ")); - } else { - $("#roles-row").addClass("hidden"); - } - - var deviceType = policy["platform"]; - var hiddenOperationsByDeviceType = $("#hidden-operations-" + deviceType); - var hiddenOperationsByDeviceTypeCacheKey = deviceType + "HiddenOperations"; - var hiddenOperationsByDeviceTypeSrc = hiddenOperationsByDeviceType.attr("src"); - - setTimeout( - function () { - $.template(hiddenOperationsByDeviceTypeCacheKey, hiddenOperationsByDeviceTypeSrc, function (template) { - var content = template(); - // pushing profile feature input elements - $(".wr-advance-operations").html(content); - // populating values and getting the list of configured features - var configuredOperations = operationModule. - populateProfile(policy["platform"], policyPayloadObj["profile"]["profileFeaturesList"]); - // updating grouped input visibility according to the populated values - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - // enabling previously configured options of last update - for (var i = 0; i < configuredOperations.length; ++i) { - var configuredOperation = configuredOperations[i]; - $(".operation-data").filterByData("operation-code", configuredOperation). - find(".panel-title .wr-input-control.switch input[type=checkbox]").each(function () { - $(this).click(); - }); - } - }); - }, - 250 // time delayed for the execution of above function, 250 milliseconds - ); -}; - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (policy["platform"] == platformTypeConstants["ANDROID"]) { - 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(androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = androidOperationConstants["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(androidOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = androidOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = androidOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating WIFI - if ($.inArray(androidOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = androidOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var wifiSSID = $("input#wifi-ssid").val(); - if (!wifiSSID) { - validationStatus = { - "error": true, - "subErrorMsg": "WIFI SSID is not given. You cannot proceed.", - "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); - } - } - } - if (policy["platform"] == platformTypeConstants["WINDOWS"]) { - 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); - } - - } - } else if (policy["platform"] == platformTypeConstants["IOS"]) { - 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(iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = iosOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - 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) { - 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 RESTRICTIONS - if ($.inArray(iosOperationConstants["RESTRICTIONS_OPERATION_CODE"], configuredOperations) != -1) { - // if RESTRICTION is configured - operation = iosOperationConstants["RESTRICTIONS_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - var restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs = - "div#restrictions-autonomous-single-app-mode-permitted-app-ids .child-input"; - if ($(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).length > 0) { - var childInput; - var childInputArray = []; - var emptyChildInputCount = 0; - var duplicatesExist = false; - // looping through each child input - $(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - var initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - var m, poppedChildInput; - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - var n; - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more permitted App ID entries in " + - "Autonomous Single App Mode are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with permitted App ID entries in " + - "Autonomous Single App Mode.", - "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 WIFI - if ($.inArray(iosOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = iosOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - wifiSSID = $("input#wifi-ssid").val(); - var wifiDomainName = $("input#wifi-domain-name").val(); - if (!wifiSSID && !wifiDomainName) { - validationStatus = { - "error": true, - "subErrorMsg": "Both Wi-Fi SSID and Wi-Fi Domain Name are not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - // getting proxy-setup value - var wifiProxyType = $("select#wifi-proxy-type").find("option:selected").attr("value"); - if (wifiProxyType == "Manual") { - // adds up additional fields to be validated - var wifiProxyServer = $("input#wifi-proxy-server").val(); - if (!wifiProxyServer) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Server is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var wifiProxyPort = $("input#wifi-proxy-port").val(); - if (!wifiProxyPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(wifiProxyPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(wifiProxyPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - - if (continueToCheckNextInputs) { - // getting encryption-type value - var wifiEncryptionType = $("select#wifi-encryption-type").find("option:selected").attr("value"); - if (wifiEncryptionType != "None") { - var wifiPayloadCertificateAnchorUUIDsGridChildInputs = - "div#wifi-payload-certificate-anchor-uuids .child-input"; - if ($(wifiPayloadCertificateAnchorUUIDsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiPayloadCertificateAnchorUUIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Payload Certificate " + - "Anchor UUIDs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with Payload Certificate Anchor UUIDs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var wifiTLSTrustedServerNamesGridChildInputs = - "div#wifi-tls-trusted-server-names .child-input"; - if ($(wifiTLSTrustedServerNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiTLSTrustedServerNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more TLS Trusted Server Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with TLS Trusted Server Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - } - - if (continueToCheckNextInputs) { - var wifiRoamingConsortiumOIsGridChildInputs = "div#wifi-roaming-consortium-ois .child-input"; - if ($(wifiRoamingConsortiumOIsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - var outOfAllowedLengthCount = 0; - var invalidAgainstRegExCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiRoamingConsortiumOIsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 6, 6) && !inputIsValidAgainstLength(childInput, 10, 10)) { - outOfAllowedLengthCount++; - } else if (!inputIsValidAgainstRegExp(/^[a-fA-F0-9]+$/, childInput)) { - invalidAgainstRegExCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfMaxAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "are out of allowed length.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalid inputs in terms of hexadecimal format are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "contain non-hexadecimal characters.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with Roaming Consortium OIs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiNAIRealmNamesGridChildInputs = "div#wifi-nai-realm-names .child-input"; - if ($(wifiNAIRealmNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiNAIRealmNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more NAI Realm Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with NAI Realm Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiMCCAndMNCsGridChildInputs = "div#wifi-mcc-and-mncs .child-input"; - if ($(wifiMCCAndMNCsGridChildInputs).length > 0) { - var childInputCount = 0; - var stringPair; - emptyChildInputCount = 0; - outOfAllowedLengthCount = 0; - var notNumericInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiMCCAndMNCsGridChildInputs).each(function () { - childInput = $(this).val(); - // pushing each string pair to childInputArray - childInputCount++; - if (childInputCount % 2 == 1) { - // initialize stringPair value - stringPair = ""; - // append first part of the string - stringPair += childInput; - } else { - // append second part of the string - stringPair += childInput; - childInputArray.push(stringPair); - } - // updating emptyChildInputCount & outOfAllowedLengthCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!$.isNumeric(childInput)) { - notNumericInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 3, 3)) { - outOfAllowedLengthCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (notNumericInputCount > 0) { - // if notNumeric input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are not numeric.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs " + - "do not fulfill the accepted length of 6 digits.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with MCC/MNC pairs.", - "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 EMAIL - if ($.inArray(iosOperationConstants["EMAIL_OPERATION_CODE"], configuredOperations) != -1) { - // if EMAIL is configured - operation = iosOperationConstants["EMAIL_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var emailAddress = $("input#email-address").val(); - if (emailAddress && !inputIsValidAgainstRegExp(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/, emailAddress)) { - validationStatus = { - "error": true, - "subErrorMsg": "Email Address is not valid.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerHostname = $("input#email-incoming-mail-server-hostname").val(); - if (!emailIncomingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerPort = $("input#email-incoming-mail-server-port").val(); - if (!emailIncomingMailServerPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(emailIncomingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailIncomingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerHostname = $("input#email-outgoing-mail-server-hostname").val(); - if (!emailOutgoingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerPort = $("input#email-outgoing-mail-server-port").val(); - if (!emailOutgoingMailServerPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(emailOutgoingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailOutgoingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port is not within the range " + - "of valid port numbers.", - "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 AIRPLAY - if ($.inArray(iosOperationConstants["AIRPLAY_OPERATION_CODE"], configuredOperations) != -1) { - // if AIRPLAY is configured - operation = iosOperationConstants["AIRPLAY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var airplayCredentialsGridChildInputs = "div#airplay-credentials .child-input"; - var airplayDestinationsGridChildInputs = "div#airplay-destinations .child-input"; - if ($(airplayCredentialsGridChildInputs).length == 0 && - $(airplayDestinationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "AirPlay settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(airplayCredentialsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayCredentialsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Device Names of " + - "AirPlay Credentials are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Device Names of AirPlay Credentials.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - if ($(airplayDestinationsGridChildInputs).length > 0) { - childInputArray = []; - emptyChildInputCount = 0; - invalidAgainstRegExCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayDestinationsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstRegExp( - /([a-z|A-Z|0-9][a-z|A-Z|0-9][:]){5}([a-z|A-Z|0-9][a-z|A-Z|0-9])$/, childInput)) { - // if child input field is invalid against RegEx - invalidAgainstRegExCount++ - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalidAgainstRegEx inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields " + - "do not fulfill expected format.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with AirPlay Destinations.", - "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 LDAP - if ($.inArray(iosOperationConstants["LDAP_OPERATION_CODE"], configuredOperations) != -1) { - // if LDAP is configured - operation = iosOperationConstants["LDAP_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var ldapAccountHostname = $("input#ldap-account-hostname").val(); - if (!ldapAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "LDAP Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var ldapSearchSettingsGridChildInputs = "div#ldap-search-settings .child-input"; - if ($(ldapSearchSettingsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(ldapSearchSettingsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 3 == 2) { - // if child input is of second column - childInput = $(this).find("option:selected").attr("value"); - stringPair = ""; - stringPair += (childInput + " "); - } else if (childInputCount % 3 == 0) { - // if child input is of third column - childInput = $(this).val(); - stringPair += childInput; - childInputArray.push(stringPair); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Search Setting Scope fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Search Setting Search Base and Scope pairs.", - "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 CALENDAR - if ($.inArray(iosOperationConstants["CALENDAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR is configured - operation = iosOperationConstants["CALENDAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarAccountHostname = $("input#calendar-account-hostname").val(); - if (!calendarAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var calendarAccountPort = $("input#calendar-account-port").val(); - if (!calendarAccountPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(calendarAccountPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is not within the range " + - "of valid port numbers.", - "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 CALENDAR_SUBSCRIPTION - if ($.inArray(iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR_SUBSCRIPTION is configured - operation = iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarSubscriptionHostname = $("input#calendar-subscription-hostname").val(); - if (!calendarSubscriptionHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "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 APN - if ($.inArray(iosOperationConstants["APN_OPERATION_CODE"], configuredOperations) != -1) { - // if APN is configured - operation = iosOperationConstants["APN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var apnConfigurationsGridChildInputs = "div#apn-configurations .child-input"; - if ($(apnConfigurationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "APN Settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if ($(apnConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(apnConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 5 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of Configurations.", - "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 CELLULAR - if ($.inArray(iosOperationConstants["CELLULAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CELLULAR is configured - operation = iosOperationConstants["CELLULAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var cellularAttachAPNName = $("input#cellular-attach-apn-name").val(); - if (!cellularAttachAPNName) { - validationStatus = { - "error": true, - "subErrorMsg": "Cellular Configuration Name is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var cellularAPNConfigurationsGridChildInputs = "div#cellular-apn-configurations .child-input"; - if ($(cellularAPNConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(cellularAPNConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 6 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of APN Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of APN Configurations.", - "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); - } - } - } - // 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; -}; - -stepForwardFrom["policy-profile"] = function () { - policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations); - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text(policy["platform"] + " POLICY - " + policy["name"]); -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - // updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text(policy["platform"] + " POLICY - " + policy["name"]); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "publish"); -}; -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - updatePolicy(policy, "save"); -}; - -var updatePolicy = function (policy, state) { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["profile"].hasOwnProperty(key)) { - profilePayloads.push({ - "featureCode": key, - "deviceType": policy["platform"], - "content": policy["profile"][key] - }); - } - } - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": policy["selectedOwnership"], - "profile": { - "profileName": policy["policyName"], - "deviceType": policy["platform"], - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - } else if (policy["selectedUserRoles"]) { - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - var serviceURL = base_api_url + "/policies/" + getParameterByName("id"); - invokerUtil.put( - serviceURL, - payload, - // on success - function () { - if (state == "save") { - var policyList = []; - policyList.push(getParameterByName("id")); - serviceURL = base_api_url + "/policies/deactivate-policy"; - invokerUtil.post( - serviceURL, - policyList, - // on success - function () { - $(".policy-message").removeClass("hidden"); - $(".add-policy").addClass("hidden"); - }, - // on error - function (data) { - console.log(data); - } - ); - } else if (state == "publish") { - var policyList = []; - policyList.push(getParameterByName("id")); - serviceURL = base_api_url + "/policies/activate-policy"; - invokerUtil.post( - serviceURL, - policyList, - // on success - function () { - $(".policy-message").removeClass("hidden"); - $(".add-policy").addClass("hidden"); - }, - // on error - function (data) { - console.log(data); - } - ); - } - }, - // on error - function (data) { - console.log(data); - } - ); -}; - -// 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(); - } - } - ); - } -}; - -var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = selectElement.value; - var i, slideDownVotes = 0; - for (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 - - -// 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(); - } -}; - -/** - * This method will display appropriate fields based on wifi type - * @param {object} wifi type select object - */ -var changeAndroidWifiPolicy = function (select) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['wep', 'wpa', '802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-eap', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['802eap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['802eap']); -}; - -/** - * This method will display appropriate fields based on wifi EAP type - * @param {object} wifi eap select object - * @param {object} wifi type select object - */ -var changeAndroidWifiPolicyEAP = function (select, superSelect) { - slideDownPaneAgainstValueSet(select, 'control-wifi-password', ['peap', 'ttls', 'pwd' , 'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-phase2', ['peap', 'ttls', 'fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-provisioning', ['fast']); - slideDownPaneAgainstValueSet(select, 'control-wifi-identity', ['peap', 'tls', 'ttls', 'pwd', 'fast', 'leap']); - slideDownPaneAgainstValueSet(select, 'control-wifi-anoidentity', ['peap', 'ttls']); - slideDownPaneAgainstValueSet(select, 'control-wifi-cacert', ['peap', 'tls', 'ttls']); - if (superSelect.value != '802eap') { - changeAndroidWifiPolicy(superSelect); - } -}; - -// End of functions related to grid-input-view - -/** - * This method will return query parameter value given its name. - * @param name Query parameter name - * @returns {string} Query parameter value - */ -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -$(document).ready(function () { - $('#appbar-btn-apply-changes').addClass('hidden'); - // Adding initial state of wizard-steps. - $("#policy-profile-wizard-steps").html($(".wr-steps").html()); - - var policyPayloadObj; - invokerUtil.get( - base_api_url + "/policies/" + getParameterByName("id"), - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - policyPayloadObj = JSON.parse(data); - skipStep["policy-platform"](policyPayloadObj); - } - }, - // on error - function (jqXHR) { - console.log(jqXHR); - // should be redirected to an error page - } - ); - - $("select.select2[multiple=multiple]").select2({ - "tags": true - }); - - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - } - if ($("#user-roles-radio-btn").is(":checked")) { - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#users-input, #user-roles-input").select2({ - "tags": true - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - // 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(); - } - } - ); - } - } - }); - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - $("." + nextStep).removeClass("hidden"); - } - }); -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-android-view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-android-view.hbs deleted file mode 100644 index 4e6758d94..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-android-view.hbs +++ /dev/null @@ -1,1487 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - -
    -
    - -
    - -
    -
    - Bellow restrictions will be applied on devices with Android version 5.0 Lollipop onwards only - -

    -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    -
    -
    - - Bellow restrictions will be applied on devices with Android version 6.0 Marshmallow onwards only. - -

    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you do not need the device to be encrypted. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - Please note that * sign represents required fields of data. -
    -
    - -
    - - -
    -
    - - -
    - - - - - - - - -
    -
    -
    - - -
    -
    - -
    -
    - - - -
    -
    - -
    - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    -
    - -
    - -
    - -

    - - - -
    - -
    -
    -
    - - -
    -
    - -
    - - -
    - -
    - - - - - - - - - - - - - - -
    No:Application Name / DescriptionPackage Name
    - No entries added yet. -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-ios-view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-ios-view.hbs deleted file mode 100644 index 7a8535851..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-ios-view.hbs +++ /dev/null @@ -1,4965 +0,0 @@ -
    - - -
    - -
    -
    - -
    - - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - -
    No:KeyValue
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    - - -
    - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    -
    - -
    -
    - - -
    - - - - - - - - - - - - - -
    No:Safari Domain
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - -
    - Please note that * sign represents required fields of data. -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - -
    No:App IdentifierVPN UUID
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - - -
    - -
    - - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - - - -
    - - -
    - - - -
    - - -
    - - - - - - - - - - - - - -
    No:Roaming Consortium OI
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:NAI Realm Name
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - - -
    No:Mobile Country Code ( MCC )Mobile Network Code ( MNC )
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - Incoming Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - Outgoing Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - -
    No:Device NamePassword
    - No entries added yet . -
    - - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Destination
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - -
    No:Email Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - - -
    - - - - - - - - - - - - - -
    No:Safari Web Domain
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - -
    No:DescriptionSearch BaseScope
    - No entries added yet . -
    - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - -
    No:APNUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - - - - - - - - - - - - - - - - -
    No:APNAuth.TypeUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    - - - Restrictions on Device Functionality : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    -
    - Restrictions on Applications : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    - - - -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-windows-view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-windows-view.hbs deleted file mode 100644 index c05725b89..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/public/templates/hidden-operations-windows-view.hbs +++ /dev/null @@ -1,566 +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 . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.hbs deleted file mode 100644 index 366e772d4..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.hbs +++ /dev/null @@ -1,88 +0,0 @@ -{{#zone "content"}} - {{#defineZone "policy-profile-top"}} -
    -
    - -
    -
    - {{/defineZone}} - - -
    -
    -
    -
    -
    - Policy Overview -
    - {{#defineZone "policy-detail-properties"}} - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Platform
    Ownership
    Action upon non-compliance
    Status
    Assigned Users
    Assigned Roles
    - {{/defineZone}} -
    Description
    -
    -
    -
    -
    -
    - Profile Information -
    -
    - -
    -
    -
    - - Loading platform features . . . -
    -
    -
    -
    -
    -
    -
    -
    -
    -{{/zone}} -{{#zone "bottomJs"}} - - - - - - - {{js "js/view.js"}} -{{/zone}} - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.js deleted file mode 100644 index 2d2a43826..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.js +++ /dev/null @@ -1,25 +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("policy-view-edit-unit backend js"); - -// var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; -// context.roles = userModule.getRoles(); - return context; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.json deleted file mode 100644 index 36351d177..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.view/view.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version" : "1.0.0", - "extends" : "cdmf.unit.policy.view" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/js/policy-create.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/js/policy-create.js deleted file mode 100644 index 0f18bad58..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/js/policy-create.js +++ /dev/null @@ -1,2355 +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 validateStep = {}; -var validateInline = {}; -var stepForwardFrom = {}; -var stepBackFrom = {}; -var policy = {}; -var configuredOperations = []; - -// Constants to define platform types available -var platformTypeConstants = { - "ANDROID": "android", - "IOS": "ios", - "WINDOWS": "windows" -}; - -// Constants to define platform types ids. -var platformIds = { - "ANDROID": 1, - "IOS": 3, - "WINDOWS": 2 -}; - -// Constants to define Android Operation Constants -var androidOperationConstants = { - "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", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI" -}; - -// Constants to define Android Operation Constants -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" -}; - -// Constants to define iOS Operation Constants -var iosOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "RESTRICTIONS_OPERATION": "restrictions", - "RESTRICTIONS_OPERATION_CODE": "RESTRICTION", - "WIFI_OPERATION": "wifi", - "WIFI_OPERATION_CODE": "WIFI", - "EMAIL_OPERATION": "email", - "EMAIL_OPERATION_CODE": "EMAIL", - "AIRPLAY_OPERATION": "airplay", - "AIRPLAY_OPERATION_CODE": "AIR_PLAY", - "LDAP_OPERATION": "ldap", - "LDAP_OPERATION_CODE": "LDAP", - "CALENDAR_OPERATION": "calendar", - "CALENDAR_OPERATION_CODE": "CALDAV", - "CALENDAR_SUBSCRIPTION_OPERATION": "calendar-subscription", - "CALENDAR_SUBSCRIPTION_OPERATION_CODE": "CALENDAR_SUBSCRIPTION", - "APN_OPERATION": "apn", - "APN_OPERATION_CODE": "APN", - "CELLULAR_OPERATION": "cellular", - "CELLULAR_OPERATION_CODE": "CELLULAR" -}; - -/** - * 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); - }); - } -}; - -var validateInline = {}; -var clearInline = {}; - -var enableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).addClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).removeClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).removeClass(" hidden"); - } -}; - -var disableInlineError = function (inputField, errorMsg, errorSign) { - var fieldIdentifier = "#" + inputField; - var errorMsgIdentifier = "#" + inputField + " ." + errorMsg; - var errorSignIdentifier = "#" + inputField + " ." + errorSign; - - if (inputField) { - $(fieldIdentifier).removeClass(" has-error has-feedback"); - } - - if (errorMsg) { - $(errorMsgIdentifier).addClass(" hidden"); - } - - if (errorSign) { - $(errorSignIdentifier).addClass(" hidden"); - } -}; - -/** - *clear inline validation messages. - */ -clearInline["policy-name"] = function () { - disableInlineError("plicynameField", "nameEmpty", "nameError"); -}; - - -/** - * Validate if provided policy name is valid against RegEx configures. - */ -validateInline["policy-name"] = function () { - var policyName = $("input#policy-name-input").val(); - if (policyName && inputIsValidAgainstLength(policyName, 1, 30)) { - disableInlineError("plicynameField", "nameEmpty", "nameError"); - } else { - enableInlineError("plicynameField", "nameEmpty", "nameError"); - } -}; - -$("#policy-name-input").focus(function () { - clearInline["policy-name"](); -}); - -$("#policy-name-input").blur(function () { - validateInline["policy-name"](); -}); - -/** - * 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); -}; - -/** - * Checks if provided input is valid against RegEx input. - * - * @param regExp Regular expression - * @param input Input string to check - * @returns {boolean} Returns true if input matches RegEx - */ -var inputIsValidAgainstRegExp = function (regExp, input) { - return regExp.test(input); -}; - -validateStep["policy-profile"] = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (policy["platform"] == platformTypeConstants["ANDROID"]) { - 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(androidOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = androidOperationConstants["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(androidOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = androidOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(androidOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = androidOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating WIFI - if ($.inArray(androidOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = androidOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var wifiSSID = $("input#wifi-ssid").val(); - if (!wifiSSID) { - validationStatus = { - "error": true, - "subErrorMsg": "WIFI SSID is not given. You cannot proceed.", - "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); - } - } - } - if (policy["platform"] == platformTypeConstants["WINDOWS"]) { - 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); - } - - } - } else if (policy["platform"] == platformTypeConstants["IOS"]) { - 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(iosOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = iosOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - 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) { - 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 RESTRICTIONS - if ($.inArray(iosOperationConstants["RESTRICTIONS_OPERATION_CODE"], configuredOperations) != -1) { - // if RESTRICTION is configured - operation = iosOperationConstants["RESTRICTIONS_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - var restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs = - "div#restrictions-autonomous-single-app-mode-permitted-app-ids .child-input"; - if ($(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).length > 0) { - var childInput; - var childInputArray = []; - var emptyChildInputCount = 0; - var duplicatesExist = false; - // looping through each child input - $(restrictionsAutonomousSingleAppModePermittedAppIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - var initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - var m, poppedChildInput; - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - var n; - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more permitted App ID entries in " + - "Autonomous Single App Mode are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with permitted App ID entries in " + - "Autonomous Single App Mode.", - "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 WIFI - if ($.inArray(iosOperationConstants["WIFI_OPERATION_CODE"], configuredOperations) != -1) { - // if WIFI is configured - operation = iosOperationConstants["WIFI_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - // getting input values to be validated - wifiSSID = $("input#wifi-ssid").val(); - var wifiDomainName = $("input#wifi-domain-name").val(); - if (!wifiSSID && !wifiDomainName) { - validationStatus = { - "error": true, - "subErrorMsg": "Both Wi-Fi SSID and Wi-Fi Domain Name are not given. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - // getting proxy-setup value - var wifiProxyType = $("select#wifi-proxy-type").find("option:selected").attr("value"); - if (wifiProxyType == "Manual") { - // adds up additional fields to be validated - var wifiProxyServer = $("input#wifi-proxy-server").val(); - if (!wifiProxyServer) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Server is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var wifiProxyPort = $("input#wifi-proxy-port").val(); - if (!wifiProxyPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is required. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(wifiProxyPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(wifiProxyPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Wi-Fi Proxy Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - - if (continueToCheckNextInputs) { - // getting encryption-type value - var wifiEncryptionType = $("select#wifi-encryption-type").find("option:selected").attr("value"); - if (wifiEncryptionType != "None") { - var wifiPayloadCertificateAnchorUUIDsGridChildInputs = - "div#wifi-payload-certificate-anchor-uuids .child-input"; - if ($(wifiPayloadCertificateAnchorUUIDsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiPayloadCertificateAnchorUUIDsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Payload Certificate " + - "Anchor UUIDs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with Payload Certificate Anchor UUIDs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var wifiTLSTrustedServerNamesGridChildInputs = - "div#wifi-tls-trusted-server-names .child-input"; - if ($(wifiTLSTrustedServerNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiTLSTrustedServerNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more TLS Trusted Server Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist " + - "with TLS Trusted Server Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - } - } - - if (continueToCheckNextInputs) { - var wifiRoamingConsortiumOIsGridChildInputs = "div#wifi-roaming-consortium-ois .child-input"; - if ($(wifiRoamingConsortiumOIsGridChildInputs).length > 0) { - emptyChildInputCount = 0; - var outOfAllowedLengthCount = 0; - var invalidAgainstRegExCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiRoamingConsortiumOIsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 6, 6) && !inputIsValidAgainstLength(childInput, 10, 10)) { - outOfAllowedLengthCount++; - } else if (!inputIsValidAgainstRegExp(/^[a-fA-F0-9]+$/, childInput)) { - invalidAgainstRegExCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfMaxAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "are out of allowed length.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalid inputs in terms of hexadecimal format are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Roaming Consortium OIs " + - "contain non-hexadecimal characters.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with Roaming Consortium OIs.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiNAIRealmNamesGridChildInputs = "div#wifi-nai-realm-names .child-input"; - if ($(wifiNAIRealmNamesGridChildInputs).length > 0) { - emptyChildInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiNAIRealmNamesGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more NAI Realm Names are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with NAI Realm Names.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var wifiMCCAndMNCsGridChildInputs = "div#wifi-mcc-and-mncs .child-input"; - if ($(wifiMCCAndMNCsGridChildInputs).length > 0) { - var childInputCount = 0; - var stringPair; - emptyChildInputCount = 0; - outOfAllowedLengthCount = 0; - var notNumericInputCount = 0; - childInputArray = []; - duplicatesExist = false; - // looping through each child input - $(wifiMCCAndMNCsGridChildInputs).each(function () { - childInput = $(this).val(); - // pushing each string pair to childInputArray - childInputCount++; - if (childInputCount % 2 == 1) { - // initialize stringPair value - stringPair = ""; - // append first part of the string - stringPair += childInput; - } else { - // append second part of the string - stringPair += childInput; - childInputArray.push(stringPair); - } - // updating emptyChildInputCount & outOfAllowedLengthCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!$.isNumeric(childInput)) { - notNumericInputCount++; - } else if (!inputIsValidAgainstLength(childInput, 3, 3)) { - outOfAllowedLengthCount++; - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (notNumericInputCount > 0) { - // if notNumeric input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs are not numeric.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (outOfAllowedLengthCount > 0) { - // if outOfAllowedLength input is present - validationStatus = { - "error": true, - "subErrorMsg": "One or more MCC/MNC pairs " + - "do not fulfill the accepted length of 6 digits.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with MCC/MNC pairs.", - "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 EMAIL - if ($.inArray(iosOperationConstants["EMAIL_OPERATION_CODE"], configuredOperations) != -1) { - // if EMAIL is configured - operation = iosOperationConstants["EMAIL_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var emailAddress = $("input#email-address").val(); - if (emailAddress && !inputIsValidAgainstRegExp(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/, emailAddress)) { - validationStatus = { - "error": true, - "subErrorMsg": "Email Address is not valid.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerHostname = $("input#email-incoming-mail-server-hostname").val(); - if (!emailIncomingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailIncomingMailServerPort = $("input#email-incoming-mail-server-port").val(); - if (emailIncomingMailServerPort && emailIncomingMailServerPort != '') { - if (!$.isNumeric(emailIncomingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailIncomingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Incoming Mail Server Port is not within the range " + - "of valid port numbers.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerHostname = $("input#email-outgoing-mail-server-hostname").val(); - if (!emailOutgoingMailServerHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Hostname is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - if (continueToCheckNextInputs) { - var emailOutgoingMailServerPort = $("input#email-outgoing-mail-server-port").val(); - if (emailOutgoingMailServerPort) { - if (!$.isNumeric(emailOutgoingMailServerPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(emailOutgoingMailServerPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Outgoing Mail Server Port is not within the range " + - "of valid port numbers.", - "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 AIRPLAY - if ($.inArray(iosOperationConstants["AIRPLAY_OPERATION_CODE"], configuredOperations) != -1) { - // if AIRPLAY is configured - operation = iosOperationConstants["AIRPLAY_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var airplayCredentialsGridChildInputs = "div#airplay-credentials .child-input"; - var airplayDestinationsGridChildInputs = "div#airplay-destinations .child-input"; - if ($(airplayCredentialsGridChildInputs).length == 0 && - $(airplayDestinationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "AirPlay settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - if ($(airplayCredentialsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayCredentialsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 2 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Device Names of " + - "AirPlay Credentials are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Device Names of AirPlay Credentials.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - if (continueToCheckNextInputs) { - if ($(airplayDestinationsGridChildInputs).length > 0) { - childInputArray = []; - emptyChildInputCount = 0; - invalidAgainstRegExCount = 0; - duplicatesExist = false; - // looping through each child input - $(airplayDestinationsGridChildInputs).each(function () { - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } else if (!inputIsValidAgainstRegExp( - /([a-z|A-Z|0-9][a-z|A-Z|0-9][:]){5}([a-z|A-Z|0-9][a-z|A-Z|0-9])$/, childInput)) { - // if child input field is invalid against RegEx - invalidAgainstRegExCount++ - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (invalidAgainstRegExCount > 0) { - // if invalidAgainstRegEx inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more AirPlay Destination fields " + - "do not fulfill expected format.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with AirPlay Destinations.", - "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 LDAP - if ($.inArray(iosOperationConstants["LDAP_OPERATION_CODE"], configuredOperations) != -1) { - // if LDAP is configured - operation = iosOperationConstants["LDAP_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var ldapAccountHostname = $("input#ldap-account-hostname").val(); - if (!ldapAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "LDAP Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var ldapSearchSettingsGridChildInputs = "div#ldap-search-settings .child-input"; - if ($(ldapSearchSettingsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(ldapSearchSettingsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 3 == 2) { - // if child input is of second column - childInput = $(this).find("option:selected").attr("value"); - stringPair = ""; - stringPair += (childInput + " "); - } else if (childInputCount % 3 == 0) { - // if child input is of third column - childInput = $(this).val(); - stringPair += childInput; - childInputArray.push(stringPair); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more Search Setting Scope fields are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "Search Setting Search Base and Scope pairs.", - "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 CALENDAR - if ($.inArray(iosOperationConstants["CALENDAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR is configured - operation = iosOperationConstants["CALENDAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarAccountHostname = $("input#calendar-account-hostname").val(); - if (!calendarAccountHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var calendarAccountPort = $("input#calendar-account-port").val(); - if (!calendarAccountPort) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!$.isNumeric(calendarAccountPort)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port requires a number input.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Port is not within the range " + - "of valid port numbers.", - "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 CALENDAR_SUBSCRIPTION - if ($.inArray(iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION_CODE"], configuredOperations) != -1) { - // if CALENDAR_SUBSCRIPTION is configured - operation = iosOperationConstants["CALENDAR_SUBSCRIPTION_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var calendarSubscriptionHostname = $("input#calendar-subscription-hostname").val(); - if (!calendarSubscriptionHostname) { - validationStatus = { - "error": true, - "subErrorMsg": "Account Hostname URL is empty. You cannot proceed.", - "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 APN - if ($.inArray(iosOperationConstants["APN_OPERATION_CODE"], configuredOperations) != -1) { - // if APN is configured - operation = iosOperationConstants["APN_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var apnConfigurationsGridChildInputs = "div#apn-configurations .child-input"; - if ($(apnConfigurationsGridChildInputs).length == 0) { - validationStatus = { - "error": true, - "subErrorMsg": "APN Settings have zero configurations attached.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if ($(apnConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(apnConfigurationsGridChildInputs).each(function () { - childInputCount++; - //if (childInputCount % 5 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - //} - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of Configurations.", - "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 CELLULAR - if ($.inArray(iosOperationConstants["CELLULAR_OPERATION_CODE"], configuredOperations) != -1) { - // if CELLULAR is configured - operation = iosOperationConstants["CELLULAR_OPERATION"]; - // initializing continueToCheckNextInputs to true - continueToCheckNextInputs = true; - - var cellularAttachAPNName = $("input#cellular-attach-apn-name").val(); - if (!cellularAttachAPNName) { - validationStatus = { - "error": true, - "subErrorMsg": "Cellular Configuration Name is empty. You cannot proceed.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - - if (continueToCheckNextInputs) { - var cellularAPNConfigurationsGridChildInputs = "div#cellular-apn-configurations .child-input"; - if ($(cellularAPNConfigurationsGridChildInputs).length > 0) { - childInputCount = 0; - childInputArray = []; - // checking empty APN field count - emptyChildInputCount = 0; - duplicatesExist = false; - // looping through each child input - $(cellularAPNConfigurationsGridChildInputs).each(function () { - childInputCount++; - if (childInputCount % 6 == 1) { - // if child input is of first column - childInput = $(this).val(); - childInputArray.push(childInput); - // updating emptyChildInputCount - if (!childInput) { - // if child input field is empty - emptyChildInputCount++; - } - } - }); - // checking for duplicates - initialChildInputArrayLength = childInputArray.length; - if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) { - for (m = 0; m < (initialChildInputArrayLength - 1); m++) { - poppedChildInput = childInputArray.pop(); - for (n = 0; n < childInputArray.length; n++) { - if (poppedChildInput == childInputArray[n]) { - duplicatesExist = true; - break; - } - } - if (duplicatesExist) { - break; - } - } - } - // updating validationStatus - if (emptyChildInputCount > 0) { - // if empty child inputs are present - validationStatus = { - "error": true, - "subErrorMsg": "One or more APN fields of APN Configurations are empty.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (duplicatesExist) { - // if duplicate input is present - validationStatus = { - "error": true, - "subErrorMsg": "Duplicate values exist with " + - "APN fields of APN Configurations.", - "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); - } - } - } - // 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; -}; - -stepForwardFrom["policy-profile"] = function () { - policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations); - // updating next-page wizard title with selected platform - $("#policy-criteria-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); - // updating ownership type options according to platform - if (policy["platform"] == platformTypeConstants["IOS"] || - policy["platform"] == platformTypeConstants["WINDOWS"]) { - var ownershipTypeSelectOptions = $("#ownership-input"); - ownershipTypeSelectOptions.empty(); - ownershipTypeSelectOptions.append($(""). - attr("value", "BYOD").text("BYOD (Bring Your Own Device)")); - ownershipTypeSelectOptions.attr("disabled", true); - } -}; - -stepBackFrom["policy-profile"] = function () { - // reinitialize configuredOperations - configuredOperations = []; - // clearing already-loaded platform specific hidden-operations html content from the relevant div - // so that, the wrong content would not be shown at the first glance, in case - // the user selects a different platform - $(".wr-advance-operations").html( - "
    " + - "
    " + - "" + - "Loading Platform Features . . ." + - "
    " + - "
    " + - "
    " - ); -}; - -stepForwardFrom["policy-criteria"] = function () { - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(':radio')) { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - policy["selectedUsers"] = $("#users-input").val(); - } else if ($(this).attr("id") == "user-roles-radio-btn") { - policy["selectedUserRoles"] = $("#user-roles-input").val(); - } - } - } - }); - policy["selectedNonCompliantAction"] = $("#action-input").find(":selected").data("action"); - policy["selectedOwnership"] = $("#ownership-input").val(); - //updating next-page wizard title with selected platform - $("#policy-naming-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); -}; - -/** - * Checks if provided input is valid against provided length range. - * - * @param input Alphanumeric or non-alphanumeric input - * @param minLength Minimum Required Length - * @param maxLength Maximum Required Length - * @returns {boolean} Returns true if input matches the provided minimum length and maximum length - */ -var inputIsValidAgainstLength = function (input, minLength, maxLength) { - var length = input.length; - return (length == minLength || (length > minLength && length < maxLength) || length == maxLength); -}; - -validateStep["policy-criteria"] = function () { - var validationStatus = {}; - var selectedAssignees; - var selectedField = "Role(s)"; - - $("input[type='radio'].select-users-radio").each(function () { - if ($(this).is(":checked")) { - if ($(this).attr("id") == "users-radio-btn") { - selectedAssignees = $("#users-input").val(); - selectedField = "User(s)"; - } else if ($(this).attr("id") == "user-roles-radio-btn") { - selectedAssignees = $("#user-roles-input").val(); - } - return false; - } - }); - - if (selectedAssignees) { - validationStatus["error"] = false; - } else { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = selectedField + " is a required field. It cannot be empty"; - } - - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-criteria-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-naming"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -validateStep["policy-platform"] = function () { - return false; -}; - -validateStep["policy-naming-publish"] = function () { - var validationStatus = {}; - - // taking values of inputs to be validated - var policyName = $("input#policy-name-input").val(); - // starting validation process and updating validationStatus - if (!policyName) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = "Policy name is empty. You cannot proceed."; - } else if (!inputIsValidAgainstLength(policyName, 1, 30)) { - validationStatus["error"] = true; - validationStatus["mainErrorMsg"] = - "Policy name exceeds maximum allowed length."; - } else { - validationStatus["error"] = false; - } - // ending validation process - - // start taking specific actions upon validation - var wizardIsToBeContinued; - if (validationStatus["error"]) { - wizardIsToBeContinued = false; - var mainErrorMsgWrapper = "#policy-naming-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else { - wizardIsToBeContinued = true; - } - - return wizardIsToBeContinued; -}; - -stepForwardFrom["policy-naming-publish"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, "/api/device-mgt/v1.0/policies/active-policy"); -}; -stepForwardFrom["policy-naming"] = function () { - policy["policyName"] = $("#policy-name-input").val(); - policy["description"] = $("#policy-description-input").val(); - //All data is collected. Policy can now be updated. - savePolicy(policy, "/api/device-mgt/v1.0/policies/inactive-policy"); -}; - -var savePolicy = function (policy, serviceURL) { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["platformId"] == platformIds["WINDOWS"] && - key == windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]) { - policy["profile"][key].enablePassword = true; - } - if (policy["profile"].hasOwnProperty(key)) { - profilePayloads.push({ - "featureCode": key, - "deviceTypeId": policy["platformId"], - "content": policy["profile"][key] - }); - } - } - - $.each(profilePayloads, function (i, item) { - $.each(item.content, function (key, value) { - if (!value) { - item.content[key] = null; - } - }); - }); - - var payload = { - "policyName": policy["policyName"], - "description": policy["description"], - "compliance": policy["selectedNonCompliantAction"], - "ownershipType": policy["selectedOwnership"], - "profile": { - "profileName": policy["policyName"], - "deviceType": { - "id": policy["platformId"] - }, - "profileFeaturesList": profilePayloads - } - }; - - if (policy["selectedUsers"]) { - payload["users"] = policy["selectedUsers"]; - } else if (policy["selectedUserRoles"]) { - payload["roles"] = policy["selectedUserRoles"]; - } else { - payload["users"] = []; - payload["roles"] = []; - } - - invokerUtil.post( - serviceURL, - payload, - function () { - $(".add-policy").addClass("hidden"); - $(".policy-naming").addClass("hidden"); - $(".policy-message").removeClass("hidden"); - }, - function (data) { - } - ); -}; - -// 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(); - 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(); - } -}; - -function formatRepo(user) { - if (user.loading) { - return user.text; - } - if (!user.username) { - return; - } - var markup = '
    ' + - '
    ' + - '
    ' + - '
    ' + user.username + '
    '; - if (user.firstname) { - markup += '
    ' + user.firstname + '
    '; - } - if (user.emailAddress) { - markup += '
    ' + user.emailAddress + '
    '; - } - markup += '
    '; - return markup; -} - -function formatRepoSelection(user) { - return user.username || user.text; -} - -function promptErrorPolicyPlatform(errorMsg) { - var mainErrorMsgWrapper = "#policy-platform-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(errorMsg); - $(mainErrorMsgWrapper).removeClass("hidden"); -} - -// End of functions related to grid-input-view - - -$(document).ready(function () { - $("#users-input").select2({ - multiple: true, - tags: false, - ajax: { - url: window.location.origin + "/devicemgt/api/invoker/execute/", - method: "POST", - dataType: 'json', - delay: 250, - id: function (user) { - return user.username; - }, - data: function (params) { - var postData = {}; - postData.actionMethod = "GET"; - postData.actionUrl = "/api/device-mgt/v1.0/users/search/usernames"; - postData.actionPayload = JSON.stringify({ - filter: params.term, // search term - page: params.page - }); - - return JSON.stringify(postData); - }, - processResults: function (data, page) { - var newData = []; - $.each(data.responseContent, function (index, value) { - value.id = value.username; - newData.push(value); - }); - return { - results: newData - }; - }, - cache: true - }, - escapeMarkup: function (markup) { - return markup; - }, // let our custom formatter work - minimumInputLength: 1, - templateResult: formatRepo, // omitted for brevity, see the source of this page - templateSelection: formatRepoSelection // omitted for brevity, see the source of this page - }); - - $("#loading-content").remove(); - $(".policy-platform").removeClass("hidden"); - // Adding initial state of wizard-steps. - $("#policy-profile-wizard-steps").html($(".wr-steps").html()); - - policy["platform"] = $("#platform").data("platform"); - policy["platformId"] = $("#platform").data("platform-id"); - // updating next-page wizard title with selected platform - $("#policy-profile-page-wizard-title").text("ADD " + policy["platform"] + " POLICY"); - - var deviceType = policy["platform"]; - var hiddenOperationsByDeviceType = $("#hidden-operations-" + deviceType); - var hiddenOperationsByDeviceTypeCacheKey = deviceType + "HiddenOperations"; - var hiddenOperationsByDeviceTypeSrc = hiddenOperationsByDeviceType.attr("src"); - - setTimeout( - function () { - $.template(hiddenOperationsByDeviceTypeCacheKey, hiddenOperationsByDeviceTypeSrc, function (template) { - var content = template(); - $(".wr-advance-operations").html(content); - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - }); - }, - 250 // time delayed for the execution of above function, 250 milliseconds - ); - - $("select.select2[multiple=multiple]").select2({ - "tags": false - }); - - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - - $("input[type='radio'].select-users-radio").change(function () { - if ($("#users-radio-btn").is(":checked")) { - $("#user-roles-select-field").hide(); - $("#users-select-field").show(); - } - if ($("#user-roles-radio-btn").is(":checked")) { - $("#users-select-field").hide(); - $("#user-roles-select-field").show(); - } - }); - - // Support for special input type "ANY" on user(s) & user-role(s) selection - $("#user-roles-input").select2({ - "tags": false - }).on("select2:select", function (e) { - if (e.params.data.id == "ANY") { - $(this).val("ANY").trigger("change"); - } else { - $("option[value=ANY]", this).prop("selected", false).parent().trigger("change"); - } - }); - - // 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(); - } - } - ); - } - } - }); - - // 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); - }); - - $(".wizard-stepper").click(function () { - // button clicked here can be either a continue button or a back button. - var currentStep = $(this).data("current"); - var validationIsRequired = $(this).data("validate"); - var wizardIsToBeContinued; - - if (validationIsRequired) { - wizardIsToBeContinued = validateStep[currentStep](); - } else { - wizardIsToBeContinued = true; - } - - if (wizardIsToBeContinued) { - // When moving back and forth, following code segment will - // remove if there are any visible error-messages. - var errorMsgWrappers = ".alert.alert-danger"; - $(errorMsgWrappers).each( - function () { - if (!$(this).hasClass("hidden")) { - $(this).addClass("hidden"); - } - } - ); - - var nextStep = $(this).data("next"); - var isBackBtn = $(this).data("is-back-btn"); - - // if current button is a continuation... - if (!isBackBtn) { - // initiate stepForwardFrom[*] functions to gather form data. - if (stepForwardFrom[currentStep]) { - stepForwardFrom[currentStep](this); - } - } else { - // initiate stepBackFrom[*] functions to rollback. - if (stepBackFrom[currentStep]) { - stepBackFrom[currentStep](); - } - } - - // following step occurs only at the last stage of the wizard. - if (!nextStep) { - window.location.href = $(this).data("direct"); - } - - // updating next wizard step as current. - $(".itm-wiz").each(function () { - var step = $(this).data("step"); - if (step == nextStep) { - $(this).addClass("itm-wiz-current"); - } else { - $(this).removeClass("itm-wiz-current"); - } - }); - - // adding next update of wizard-steps. - $("#" + nextStep + "-wizard-steps").html($(".wr-steps").html()); - - // hiding current section of the wizard and showing next section. - $("." + currentStep).addClass("hidden"); - $("." + nextStep).removeClass("hidden"); - } - }); -}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-android.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-android.hbs deleted file mode 100644 index d1f8d67da..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-android.hbs +++ /dev/null @@ -1,458 +0,0 @@ -
    - - -
    - -
    -
    - -
    - - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    - - Un-check following checkbox in case you need to disable camera. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    - - Un-check following checkbox in case you do not need the device to be encrypted. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    - - - - - - - - - - - - - - - - - Please note that * sign represents required fields of data. -
    -
    - -
    - - - -
    -
    - - -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-ios.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-ios.hbs deleted file mode 100644 index 113ce1370..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-ios.hbs +++ /dev/null @@ -1,2923 +0,0 @@ -
    - - -
    - -
    -
    - -
    - - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - - - -
    - - -
    - - - -
    - -
    - - - - - - - - - - - - - -
    No:Roaming Consortium OI
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - -
    No:NAI Realm Name
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - -
    No:Mobile Country Code ( MCC )Mobile Network Code ( MNC )
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    - -
    - - - -
    - - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - -
    - -
    - Incoming Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - Outgoing Mail Settings : -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - -
    - - - - - - - - - - - - - - -
    No:Device NamePassword
    - No entries added yet . -
    - - - - - - - - - - -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - -
    No:Destination
    - No entries added yet . -
    - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - -
    No:DescriptionSearch BaseScope
    - No entries added yet . -
    - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    No:APNUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    - - - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - -
    No:APNAuth.TypeUsernamePasswordProxyPort
    - No entries added yet . -
    - - - - - - - - - - - - - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    - - - - Restrictions on Device Functionality : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    -
    - Restrictions on Applications : -
    -
    -
      -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
        -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - -
        -
      • -
      • -
        - - -
        -
      • -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    • -
      - -
      -
    • -
    -
    - - - -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-windows.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-windows.hbs deleted file mode 100644 index 7fb5d6323..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/public/templates/hidden-operations-windows.hbs +++ /dev/null @@ -1,495 +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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.hbs deleted file mode 100644 index cd911ec9b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.hbs +++ /dev/null @@ -1,295 +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. -}} - -
    -
    - - - - - - -
    - - - -
    -
    -

    ADD POLICY

    -
    -
    -
    -
    -
    -

    Step 2: Configure profile

    -
    - - -
    -
    -
    -       - -     - Loading platform features . . . -
    -
    -
    -
    - -
    -
    -
    -
    - - -
    - -{{#zone "bottomJs"}} - - - - {{js "js/policy-create.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.js deleted file mode 100644 index e447231cc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.js +++ /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. - */ - -function onRequest(context) { - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var deviceModule = require("/app/modules/business-controllers/device.js").deviceModule; - var utility = require('/app/modules/utility.js').utility; - var response = userModule.getRoles(); - var wizardPage = {}; - if (response["status"] == "success") { - wizardPage["roles"] = response["content"]; - } - var deviceType = context.uriParams.deviceType; - var typesListResponse = deviceModule.getDeviceTypes(); - if (typesListResponse["status"] == "success") { - for (var type in typesListResponse["content"]) { - if (deviceType == typesListResponse["content"][type]["name"]) { - wizardPage["type"] = typesListResponse["content"][type]; - } - } - } - return wizardPage; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.json deleted file mode 100644 index fd2590129..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.policy.wizard/wizard.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.hbs deleted file mode 100644 index 3d7aa546b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.hbs +++ /dev/null @@ -1,19 +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 "productName"}}ENTERPRISE MOBILITY MANAGER{{/zone}} -{{#zone "productNameResponsive"}}EMM{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.json deleted file mode 100644 index 1299a7b1b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.header.logo/logo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "index": 30, - "extends": "cdmf.unit.ui.header.logo" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs deleted file mode 100644 index 24f36a7b6..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs +++ /dev/null @@ -1,119 +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 "navMenu-icon"}} - - - -{{/zone}} - -{{#zone "navMenu-items"}} -
  • - - - Resource Dashboard - -
  • - - {{#if permissions.LIST_DEVICES}} -
  • - - - - Device Management - -
  • - {{/if}} - - {{#if permissions.USER_MGT_PERMITTED}} -
  • User Management -
      - {{#if permissions.LIST_USERS}} -
    • - Users
    • - {{/if}} - {{#if permissions.LIST_ROLES}} -
    • - Roles
    • - {{/if}} -
    -
  • - {{/if}} - {{#if permissions.LIST_POLICIES}} -
  • - Policy Management
  • - {{/if}} - {{#if permissions.CONFIG_MGT_PERMITTED}} -
  • Configuration Management - -
  • - {{/if}} -{{/zone}} - -{{#zone "navbarCollapsableRightItems"}} - -{{/zone}} -{{#zone "sidePanes"}} - - -{{/zone}} -{{#zone "bottomJs"}} - - - {{js "js/nav-menu.js"}} -{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js deleted file mode 100644 index cfb664ad5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js +++ /dev/null @@ -1,63 +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) { - context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { - if (arguments.length < 3) { - throw new Error("Handlebars Helper equal needs 2 parameters"); - } - if (lvalue != rvalue) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var constants = require("/app/modules/constants.js"); - var links = { - "user-mgt": [], - "role-mgt": [], - "policy-mgt": [], - "device-mgt": [] - }; - var viewModel = {}; - - // following viewModel.link value comes here based on the value passed at the point - // where units are attached to a page zone. - // eg: {{unit "appbar" pageLink="users" title="User Management"}} - viewModel["currentActions"] = links[viewModel["pageLink"]]; - viewModel["enrollmentURL"] = mdmProps["generalConfig"]["host"] + mdmProps["enrollmentDir"]; - viewModel["currentUser"] = session.get(constants["USER_SESSION_KEY"]); - - var permissions = {}; - permissions["LIST_DEVICES"] = userModule.isAuthorized("/permission/admin/device-mgt/devices/owning-device/view"); - permissions["LIST_POLICIES"] = userModule.isAuthorized("/permission/admin/device-mgt/policies/view"); - permissions["LIST_USERS"] = userModule.isAuthorized("/permission/admin/device-mgt/users/view"); - permissions["LIST_ROLES"] = userModule.isAuthorized("/permission/admin/device-mgt/roles/view"); - permissions["USER_MGT_PERMITTED"] = (permissions["LIST_USERS"] || permissions["LIST_ROLES"]); - permissions["LIST_PLATFORM_CONFIGURATIONS"] = userModule.isAuthorized("/permission/admin/device-mgt/platform-configurations/view"); - permissions["LIST_CERTIFICATES"] = userModule.isAuthorized("/permission/admin/device-mgt/certificates/view"); - permissions["CONFIG_MGT_PERMITTED"] = (permissions["LIST_PLATFORM_CONFIGURATIONS"] || permissions["LIST_CERTIFICATES"]); - permissions["LIST_NOTIFICATIONS"] = userModule.isAuthorized("/permission/admin/device-mgt/notifications/view"); - - viewModel["permissions"] = permissions; - viewModel["appContext"] = mdmProps["appContext"]; - - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json deleted file mode 100644 index 6512cb94f..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "cdmf.unit.ui.navbar.nav-menu" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js deleted file mode 100644 index 2a169909b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js +++ /dev/null @@ -1,47 +0,0 @@ -//--------------------------------------------------------------------- -// QRCode for JavaScript -// -// Copyright (c) 2009 Kazuhiko Arase -// -// URL: http://www.d-project.com/ -// -// Licensed under the MIT license: -// http://www.opensource.org/licenses/mit-license.php -// -// The word "QR Code" is registered trademark of -// DENSO WAVE INCORPORATED -// http://www.denso-wave.com/qrcode/faqpatent-e.html -// -//--------------------------------------------------------------------- - -//--------------------------------------------------------------------- -// QR8bitByte -//--------------------------------------------------------------------- -(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;da||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]= - 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c= - j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount- - b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0g;g++)if(null==this.modules[b][i-g]){var n=!1;f>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a, - c),b=new t,e=0;e8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d= - 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+ -a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;dc)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+ -a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256), - LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d - this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b>>7-a%8&1)},put:function(a,c){for(var d=0;d>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1, - correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e").css("height",b+"px").appendTo(c);for(i=0;i").css("width", - d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js deleted file mode 100644 index 9ac010b44..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js +++ /dev/null @@ -1,387 +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 modalPopup = ".modal", - modalPopupContainer = modalPopup + " .modal-content", - modalPopupContent = modalPopup + " .modal-content"; - -var emmAdminBasePath = "/api/device-mgt/v1.0"; - -//function openCollapsedNav() { -// $(".wr-hidden-nav-toggle-btn").addClass("active"); -// $("#hiddenNav").slideToggle("slideDown", function () { -// if ($(this).css("display") == "none") { -// $(".wr-hidden-nav-toggle-btn").removeClass("active"); -// } -// }); -//} - -/* - * set popup maximum height function. - */ -function setPopupMaxHeight() { - var maxHeight = "max-height"; - var marginTop = "margin-top"; - var body = "body"; - $(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30))); - $(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2))); -} - -/* - * show popup function. - */ -function showPopup() { - $(modalPopup).modal('show'); -} - -/* - * hide popup function. - */ -function hidePopup() { - $(modalPopupContent).html(""); - $(modalPopupContent).removeClass("operation-data"); - $(modalPopup).modal('hide'); - $('body').removeClass('modal-open').css('padding-right','0px'); - $('.modal-backdrop').remove(); -} - -/* - * QR-code generation function. - */ -function generateQRCode(qrCodeClass) { - var enrollmentURL = $("#qr-code-modal").data("enrollment-url"); - $(qrCodeClass).qrcode({ - text: enrollmentURL, - width: 200, - height: 200 - }); -} - -function toggleEnrollment() { - $(".modal-content").html($("#qr-code-modal").html()); - generateQRCode(".modal-content .qr-code"); - showPopup(); -} - -var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) { - var notificationBubble = "#notification-bubble"; - var notificationIcon = "#notifications-icon"; - var notificationSpacer = "#notifications-spacer"; - if (jqXHR.status == 200 && data) { - var responsePayload = JSON.parse(data); - var newNotificationsCount = responsePayload["count"]; - if (newNotificationsCount > 0) { - $(notificationBubble).html(newNotificationsCount + " NEW"); - $(notificationBubble).removeClass("hidden"); - $(notificationSpacer).removeClass("hidden"); - } else { - $(notificationBubble).addClass("hidden"); - $(notificationSpacer).addClass("hidden"); - $(notificationIcon).removeClass("hidden"); - } - } -}; - -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?offset=0&limit=6&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=6&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.contextPath = 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'); - } -}; - -$(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) { - window.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs deleted file mode 100644 index 5875fffdf..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs +++ /dev/null @@ -1,16 +0,0 @@ -

    - Most Recent -

    -{{#each notifications}} -
  • -

    - - - Failure on {{deviceType}} {{deviceName}} - -

    -

    {{description}}

    -
  • -{{/each}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag deleted file mode 100644 index 191614376..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag +++ /dev/null @@ -1,104 +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 log = new Log("api/invoker-api.jag"); - -var uri = request.getRequestURI(); -var uriMatcher = new URIMatcher(String(uri)); - -var constants = require("/app/modules/constants.js"); -var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; -var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - -if (uriMatcher.match("/{context}/api/invoker/execute/")) { - var restAPIRequestDetails = request.getContent(); - - var requestMethod = restAPIRequestDetails["requestMethod"]; - var requestURL = restAPIRequestDetails["requestURL"]; - var requestPayload = restAPIRequestDetails["requestPayload"]; - - if (!requestMethod) { - requestMethod = parse(restAPIRequestDetails)["requestMethod"]; - } - - if (!requestURL) { - requestURL = parse(restAPIRequestDetails)["requestURL"]; - } - - if (!requestPayload) { - requestPayload = parse(restAPIRequestDetails)["requestPayload"]; - } - - var restAPIEndpoint = devicemgtProps["httpsURL"] + requestURL; - - try { - switch (requestMethod) { - case constants["HTTP_GET"]: - serviceInvokers.XMLHttp.get( - restAPIEndpoint, - function (restAPIResponse) { - response["status"] = restAPIResponse["status"]; - if (restAPIResponse["responseText"]) { - response["content"] = restAPIResponse["responseText"]; - } - } - ); - break; - case constants["HTTP_POST"]: - serviceInvokers.XMLHttp.post( - restAPIEndpoint, - requestPayload, - function (restAPIResponse) { - response["status"] = restAPIResponse["status"]; - if (restAPIResponse["responseText"]) { - response["content"] = restAPIResponse["responseText"]; - } - } - ); - break; - case constants["HTTP_PUT"]: - serviceInvokers.XMLHttp.put( - restAPIEndpoint, - requestPayload, - function (restAPIResponse) { - response["status"] = restAPIResponse["status"]; - if (restAPIResponse["responseText"]) { - response["content"] = restAPIResponse["responseText"]; - } - } - ); - break; - case constants["HTTP_DELETE"]: - serviceInvokers.XMLHttp.delete( - restAPIEndpoint, - function (restAPIResponse) { - response["status"] = restAPIResponse["status"]; - if (restAPIResponse["responseText"]) { - response["content"] = restAPIResponse["responseText"]; - } - } - ); - break; - } - } catch (e) { - throw new Error("Exception occurred while trying to access " + - "backend REST API services from Jaggery API invoker layer", e); - } -} -%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag deleted file mode 100644 index b038e66ad..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag +++ /dev/null @@ -1,185 +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 uri = request.getRequestURI(); -var uriMatcher = new URIMatcher(String(uri)); - -var log = new Log("api/user-api.jag"); - -var constants = require("/app/modules/constants.js"); -var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; -var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; -var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; -var utility = require("/app/modules/utility.js").utility; -var apiWrapperUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; -var util = require("/app/modules/oauth/token-handler-utils.js")["utils"]; - -var responseProcessor = require('utils').response; - -var result; - -if (uriMatcher.match("/{context}/api/user/authenticate")) { - var username = request.getParameter("username"); - var password = request.getParameter("password"); - //Check if a username and password is provided - if ((!username) || (!password)) { - response = responseProcessor.buildErrorResponse(response, 400, 'Username and Password must be provided'); - } else { - try { - userModule.login(username, password, function (user) { - if (log.isDebugEnabled()) { - log.debug("User Logged In : " + user); - } - apiWrapperUtil.setupTokenPairByPasswordGrantType(username, password); - }, function () { - response = responseProcessor.buildSuccessResponse(response, 200, {'sessionId': session.getId()}); - }); - } catch (e) { - log.error("Exception occurred while a user tried to login to MDM", e); - response = responseProcessor.buildErrorResponse(response, 401, 'username/password is incorrect'); - } - } -} else if (uriMatcher.match("/{context}/api/user/login/")) { - username = request.getParameter("username"); - password = request.getParameter("password"); - username = util.decode(username); - password = util.decode(password); - try { - userModule.login(username, password, function (user) { - if (log.isDebugEnabled()) { - log.debug("User Logged In : " + user); - } - - apiWrapperUtil.setupTokenPairByPasswordGrantType(username, password); - var permissions = userModule.getUIPermissions(); - if (permissions.VIEW_DASHBOARD) { - response.sendRedirect(constants.WEB_APP_CONTEXT); - } else { - response.sendRedirect(constants.WEB_APP_CONTEXT + "/devices"); - } - }, function () { - response.sendRedirect(devicemgtProps.appContext + "login?#auth-failed"); - }); - } catch (e) { - log.error("Exception occurred while a user tried to login to MDM", e); - response.sendRedirect(devicemgtProps.appContext + "login?#error"); - } -} else if (uriMatcher.match("/{context}/api/user/logout/")) { - userModule.logout(function () { - response.sendRedirect(devicemgtProps.appContext + "login"); - }); -} else if (uriMatcher.match("/{context}/api/user/devices/")) { - /* - @Deprecated - */ - if (userModule.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { - carbonUser = session.get(constants.USER_SESSION_KEY); - result = deviceModule.listDevicesForUser(carbonUser.username); - } else { - response.sendError(403); - } -} else if (uriMatcher.match("/{context}/api/user/{username}/invite")) { - /* - @Deprecated - */ - if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/invite")) { - elements = uriMatcher.elements(); - username = elements.username; - userModule.inviteUser(username); - } else { - response.sendError(403); - } -} else if (uriMatcher.match("/{context}/api/user/add")) { - /* - @Deprecated - */ - if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/add")) { - addUserFormData = request.getContent(); - username = addUserFormData.username; - firstname = addUserFormData.firstname; - lastname = addUserFormData.lastname; - emailAddress = addUserFormData.emailAddress; - - if (!addUserFormData.userRoles) { - userRoles = null; - } else { - userRoles = String(addUserFormData.userRoles).split(","); - } - if (username.length < devicemgtProps.usernameLength) { - log.error("Username Must be between 1 and " + devicemgtProps.usernameLength + " characters long"); - result = "Username Must be between 1 and " + devicemgtProps.usernameLength + " characters long"; - } else { - try { - result = userModule.addUser(username, firstname, lastname, emailAddress, userRoles); - } catch (e) { - log.error("Exception occurred while trying to add a user to MDM User Store", e); - // http status code 400 refers to - Bad request. - result = 400; - } - } - } else { - // http status code 403 refers to - forbidden. - result = 403; - } -} else if (uriMatcher.match("/{context}/api/user/register")) { - - addUserFormData = request.getContent(); - username = addUserFormData.username; - firstname = addUserFormData.firstname; - lastname = addUserFormData.lastname; - emailAddress = addUserFormData.emailAddress; - password = addUserFormData.password; - userRoles = ["internal/devicemgt-user"]; - - try { - result = userModule.registerUser(username, firstname, lastname, emailAddress, password, - userRoles); - } catch (e) { - log.error("Exception occurred while trying to registering a new user to DC User Store", e); - // http status code 400 refers to - Bad request. - result = 400; - } - -} else if (uriMatcher.match("/{context}/api/user/{username}/remove")) { - /* - @Deprecated - */ - if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/remove")) { - elements = uriMatcher.elements(); - username = elements.username; - try { - result = userModule.removeUser(username); - } catch (e) { - log.error("Exception occurred while trying to remove a user from MDM User Store", e); - // http status code 400 refers to - Bad request. - result = 400; - } - } else { - // http status code 403 refers to - forbidden. - result = 403; - } -} else if (uriMatcher.match("/{context}/api/user/all")) { - result = userModule.getUsers(); -} - -// returning the result. -if (result) { - print(result); -} -%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json deleted file mode 100644 index 5091d70b9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "appName": "WSO2 Enterprise Mobility Manager", - "cachingEnabled": true, - "debuggingEnabled": false, - "permissionRoot": "/", - "loginPage": "cdmf.page.sign-in", - "adminServicesUrl": "https://${server.ip}:${server.https_port}/admin/services/", - "authModule": { - "enabled": true, - "login": { - "onSuccess": { - "script": "/app/modules/login.js", - "page": "mdm.page.dashboard" - }, - "onFail": { - "script": "/app/modules/login.js", - "page": "cdmf.page.sign-in" - } - }, - "logout": { - "onSuccess": { - "page": "cdmf.page.sign-in" - }, - "onFail": { - "page": "mdm.page.dashboard" - } - }, - "sso": { - "enabled": false, - "issuer" : "emm", - "appName" : "emm", - "identityProviderUrl" : "https://localhost:9443/samlsso", - "acs": "https://localhost:9443/emm/uuf/sso/acs", - "identityAlias": "wso2carbon", - "responseSigningEnabled" : "true", - "useTenantKey": false - } - }, - "generalConfig" : { - "host" : "https://localhost:9443", - "companyName" : "WSO2 Enterprise Mobility Manager", - "browserTitle" : "WSO2 EMM", - "copyrightPrefix" : "\u00A9 %date-year%, ", - "copyrightOwner" : "WSO2 Inc.", - "copyrightOwnersSite" : "http://www.wso2.org", - "copyrightSuffix" : "" - }, - "errorPages": { - "404": "mdm.page.error", - "default": "uuf.page.error" - } -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json deleted file mode 100644 index 8e2b80c9f..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "appContext" : "/emm-web-agent/", - "apiContext" : "api", - "httpsURL" : "%https.ip%", - "httpURL" : "%http.ip%", - "enrollmentDir": "/emm-web-agent/enrollment", - "iOSConfigRoot" : "%https.ip%/ios-enrollment/", - "iOSAPIRoot" : "%https.ip%/api/device-mgt/ios/v1.0/", - "dynamicClientRegistrationEndPoint" : "%https.ip%/dynamic-client-web/register/", - "adminService":"%https.ip%", - "idPServer":"%https.ip%", - "callBackUrl":"%https.ip%/mdm-admin", - "oauthProvider": { - "appRegistration": { - "appType": "webapp", - "clientName": "emm-web-agent", - "owner": "admin@carbon.super", - "dynamicClientAppRegistrationServiceURL": "%https.ip%/dynamic-client-web/register", - "apiManagerClientAppRegistrationServiceURL": "%https.ip%/api-application-registration/register/tenants", - "grantType": "password refresh_token urn:ietf:params:oauth:grant-type:saml2-bearer urn:ietf:params:oauth:grant-type:jwt-bearer", - "tokenScope": "admin", - "callbackUrl": "%https.ip%/api/device-mgt/v1.0" - }, - "tokenServiceURL": "%https.ip%/oauth2/token" - }, - "adminUser":"admin", - "usernameLength":30, - "device" : { - "ios" : { - "location" : "%http.ip%/emm-web-agent/public/mdm.page.enrollments.ios.download-agent/asset/ios-agent.ipa", - "bundleID" : "org.wso2.carbon.emm.iOSMDMAgent", - "version" : "1.0", - "appName" : "EMM iOS Agent" - } - }, - "androidAgentApp" : "android-agent.apk", - "windowsConfigRoot" : "%http.ip%/api/device-mgt/windows/v1.0/services/federated/bst/authentication", - "ssoConfiguration" : { - "enabled" : false, - "issuer" : "mdm", - "appName" : "admin_emm-web-agent", - "identityProviderURL" : "%https.ip%/sso/samlsso.jag", - "responseSigningEnabled" : "true", - "keyStorePassword" : "wso2carbon", - "identityAlias" : "wso2carbon", - "keyStoreName" : "/repository/resources/security/wso2carbon.jks" - }, - "generalConfig" : { - "host" : "%http.ip%", - "companyName" : "WSO2 Enterprise Mobility Manager", - "browserTitle" : "WSO2 EMM", - "copyrightText" : "\u00A9 %date-year%, WSO2 Inc. (http://www.wso2.org) All Rights Reserved." - }, - "isOAuthEnabled" : true, - "scopes" : ["activity:view", - "application:install", - "application:uninstall", - "device:view", - "user:modify", - "configuration:view", - "configuration:modify", - "device:list", - "device:search", - "notification:view", - "policy:list", - "policy:add", - "polciy:modify", - "policy:view", - "role:list", - "role:add", - "role:view", - "role:modify", - "user:list", - "user:add", - "user:view", - "certificate:view", - "certificate:add", - "certificate:modify", - "device:android:get-applications", - "device:android:blacklist-applications", - "device:android:change-lock-code", - "device:android:clear-password", - "device:android:vpn", - "device:android:wifi", - "device:android:camera", - "device:android:encrypt", - "device:android:enterprise-wipe", - "device:android:info", - "device:android:install-application", - "device:android:location", - "device:android:lock", - "device:android:mute", - "device:android:reboot", - "device:android:ring", - "device:android:send-notification", - "device:android:set-password-policy", - "device:android:webclip", - "device:android:uninstall-application", - "device:android:unlock", - "device:android:update-application", - "device:android:upgrade-firmware", - "device:android:wipe", - "device:configuration:view", - "device:android:configuration:modify", - "device:android:enroll", - "device:android:event:publish", - "device:android:event:view"] -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs deleted file mode 100644 index 2a9ba1322..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs +++ /dev/null @@ -1,76 +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) 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 "accessControl"~}} - - - - - - {{defineZone "favicon"}} - - {{defineZone "title"}} - - {{defineZone "topCss"}} - {{defineZone "topJs"}} - - -
    -
    - -
    -
    - -
    -
    -
    -
    -

    {{defineZone "headerTitle" }}

    -
    -
    - - {{defineZone "content"}} - - {{!-- {{ defineZone "footer"}} --}} -
    -
    -
    -
    -
    - {{defineZone "footer"}} -
    -
    - -{{defineZone "bottomJs" }} - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js deleted file mode 100644 index 3dce168f4..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js +++ /dev/null @@ -1,348 +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 deviceModule; -deviceModule = function () { - var log = new Log("/app/modules/business-controllers/device.js"); - - var utility = require('/app/modules/utility.js').utility; - var constants = require('/app/modules/constants.js'); - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - -// var ArrayList = Packages.java.util.ArrayList; -// var Properties = Packages.java.util.Properties; -// var DeviceIdentifier = Packages.org.wso2.carbon.device.mgt.common.DeviceIdentifier; -// var DeviceManagerUtil = Packages.org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; -// var SimpleOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.SimpleOperation; -// var ConfigOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation; -// var CommandOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; - - var publicMethods = {}; - var privateMethods = {}; - -// var deviceCloudService = devicemgtProps["httpsURL"] + "/common/device_manager"; - - privateMethods.validateAndReturn = function (value) { - return (value == undefined || value == null) ? constants.UNSPECIFIED : value; - }; - - /* - @Deprecated - */ -// publicMethods.listDevices = function () { -// var carbonUser = session.get(constants.USER_SESSION_KEY); -// var utility = require('/app/modules/utility.js').utility; -// if (!carbonUser) { -// log.error("User object was not found in the session"); -// throw constants.ERRORS.USER_NOT_FOUND; -// } -// try { -// utility.startTenantFlow(carbonUser); -// var deviceManagementService = utility.getDeviceManagementService(); -// var devices = deviceManagementService.getAllDevices(); -// var deviceList = []; -// var i, device, propertiesList, deviceObject; -// for (i = 0; i < devices.size(); i++) { -// device = devices.get(i); -// propertiesList = DeviceManagerUtil.convertDevicePropertiesToMap(device.getProperties()); -// -// deviceObject = {}; -// deviceObject[constants.DEVICE_IDENTIFIER] = -// privateMethods.validateAndReturn(device.getDeviceIdentifier()); -// deviceObject[constants.DEVICE_NAME] = -// privateMethods.validateAndReturn(device.getName()); -// deviceObject[constants.DEVICE_OWNERSHIP] = -// privateMethods.validateAndReturn(device.getEnrolmentInfo().getOwnership()); -// deviceObject[constants.DEVICE_OWNER] = -// privateMethods.validateAndReturn(device.getEnrolmentInfo().getOwner()); -// deviceObject[constants.DEVICE_TYPE] = -// privateMethods.validateAndReturn(device.getType()); -// deviceObject[constants.DEVICE_PROPERTIES] = {}; -// if (device.getType() == constants.PLATFORM_IOS) { -// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_MODEL] = -// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_PRODUCT)); -// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_VENDOR] = constants.VENDOR_APPLE; -// } else { -// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_MODEL] = -// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_MODEL)); -// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_VENDOR] = -// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_VENDOR)); -// } -// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_OS_VERSION] = -// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_OS_VERSION)); -// -// deviceList.push(deviceObject); -// } -// return deviceList; -// } catch (e) { -// throw e; -// } finally { -// utility.endTenantFlow(); -// } -// }; - - /* - @Deprecated - */ - /* - Get the supported features by the device type - */ -// publicMethods.getFeatures = function (deviceType) { -// var carbonUser = session.get(constants.USER_SESSION_KEY); -// var utility = require('/app/modules/utility.js').utility; -// if (!carbonUser) { -// log.error("User object was not found in the session"); -// throw constants.ERRORS.USER_NOT_FOUND; -// } -// try { -// utility.startTenantFlow(carbonUser); -// var deviceManagementService = utility.getDeviceManagementService(); -// var features = deviceManagementService.getFeatureManager(deviceType).getFeatures(); -// var featuresConverted = {}; -// if (features) { -// var i, feature, featureObject; -// for (i = 0; i < features.size(); i++) { -// feature = features.get(i); -// featureObject = {}; -// featureObject[constants.FEATURE_NAME] = feature.getName(); -// featureObject[constants.FEATURE_DESCRIPTION] = feature.getDescription(); -// featuresConverted[feature.getName()] = featureObject; -// } -// } -// return featuresConverted; -// } catch (e) { -// throw e; -// } finally { -// utility.endTenantFlow(); -// } -// }; - - /* - @Deprecated - */ -// publicMethods.performOperation = function (devices, operation) { -// var carbonUser = session.get(constants.USER_SESSION_KEY); -// var utility = require('/app/modules/utility.js').utility; -// if (!carbonUser) { -// log.error("User object was not found in the session"); -// throw constants.ERRORS.USER_NOT_FOUND; -// } -// try { -// utility.startTenantFlow(carbonUser); -// var deviceManagementService = utility.getDeviceManagementService(); -// var operationInstance; -// if (operation.type == "COMMAND") { -// operationInstance = new CommandOperation(); -// } else if (operation.type == "CONFIG") { -// operationInstance = new ConfigOperation(); -// } else { -// operationInstance = new SimpleOperation(); -// } -// operationInstance.setCode(operation.featureName); -// var props = new Properties(); -// var i, object; -// for (i = 0; i < operation.properties.length; i++) { -// object = properties[i]; -// props.setProperty(object.key, object.value); -// } -// operationInstance.setProperties(props); -// var deviceList = new ArrayList(); -// var j, device, deviceIdentifier; -// for (j = 0; j < devices.length; i++) { -// device = devices[j]; -// deviceIdentifier = new DeviceIdentifier(); -// deviceIdentifier.setId(device.id); -// deviceIdentifier.setType(device.type); -// deviceList.add(deviceIdentifier); -// } -// deviceManagementService.addOperation(operationInstance, deviceList); -// } catch (e) { -// throw e; -// } finally { -// utility.endTenantFlow(); -// } -// }; - - /* - @Deprecated - */ -// privateMethods.getDevice = function (type, deviceId) { -// var carbonUser = session.get(constants.USER_SESSION_KEY); -// var utility = require('/app/modules/utility.js').utility; -// if (!carbonUser) { -// log.error("User object was not found in the session"); -// throw constants.ERRORS.USER_NOT_FOUND; -// } -// try { -// utility.startTenantFlow(carbonUser); -// var deviceManagementService = utility.getDeviceManagementService(); -// var deviceIdentifier = new DeviceIdentifier(); -// deviceIdentifier.setType(type); -// deviceIdentifier.setId(deviceId); -// return deviceManagementService.getDevice(deviceIdentifier); -// } catch (e) { -// throw e; -// } finally { -// utility.endTenantFlow(); -// } -// }; - - /* - @Updated - */ - publicMethods.viewDevice = function (deviceType, deviceId) { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - var utility = require('/app/modules/utility.js')["utility"]; - try { - utility.startTenantFlow(carbonUser); - - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/view?type=" + deviceType - + "&id=" + deviceId; - return serviceInvokers.XMLHttp.get( - url, function (responsePayload) { - var device = responsePayload.responseContent; - if (device) { - var propertiesList = device["properties"]; - var properties = {}; - if (propertiesList) { - for (var i = 0; i < propertiesList.length; i++) { - properties[propertiesList[i]["name"]] = propertiesList[i]["value"]; - } - } - var deviceObject = {}; - deviceObject[constants["DEVICE_IDENTIFIER"]] = device["deviceIdentifier"]; - deviceObject[constants["DEVICE_NAME"]] = device["name"]; - deviceObject[constants["DEVICE_OWNERSHIP"]] = device["enrolmentInfo"]["ownership"]; - deviceObject[constants["DEVICE_OWNER"]] = device["enrolmentInfo"]["owner"]; - deviceObject[constants["DEVICE_STATUS"]] = device["enrolmentInfo"]["status"]; - deviceObject[constants["DEVICE_TYPE"]] = device["type"]; - if (device["type"] == constants["PLATFORM_IOS"]) { - properties[constants["DEVICE_MODEL"]] = properties[constants["DEVICE_PRODUCT"]]; - delete properties[constants["DEVICE_PRODUCT"]]; - properties[constants["DEVICE_VENDOR"]] = constants["VENDOR_APPLE"]; - } - deviceObject[constants["DEVICE_PROPERTIES"]] = properties; - return deviceObject; - } - }, - function (responsePayload) { - var response = {}; - response["status"] = "error"; - return response; - } - ); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - // Refactored methods - publicMethods.getDevicesCount = function () { - var carbonUser = session.get(constants.USER_SESSION_KEY); - if (carbonUser) { - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var uiPermissions = userModule.getUIPermissions(); - var url; - if (uiPermissions.LIST_DEVICES) { - url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/count"; - } else if (uiPermissions.LIST_OWN_DEVICES) { - url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/user/" - + carbonUser.username - + "/count"; - } else { - log.error("Access denied for user: " + carbonUser.username); - return -1; - } - return serviceInvokers.XMLHttp.get( - url, function (responsePayload) { - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return -1; - } - ); - } else { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - }; - - publicMethods.getDeviceTypes = function () { - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/types"; - return serviceInvokers.XMLHttp.get( - url, function (responsePayload) { - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return -1; - } - ); - }; - - //Old methods - //TODO: make sure these methods are updated - /* - @Updated - */ - publicMethods.getLicense = function (deviceType) { - var url; - var license; - if (deviceType == "windows") { - url = devicemgtProps["httpURL"] + "/api/device-mgt/windows/v1.0/services/configuration/license"; - } else if (deviceType == "ios") { - url = devicemgtProps["httpsURL"] + "/ios-enrollment/license/"; - } - if (url != null && url != undefined) { - return serviceInvokers.XMLHttp.get( - url, function (responsePayload) { - return "" + parse(responsePayload.responseText).text; - }, - function (responsePayload) { - return null; - } - ); - } - return null; - }; - - publicMethods.getDevices = function (userName) { - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/user/" + userName; - return serviceInvokers.XMLHttp.get( - url, function (responsePayload) { - for (var i = 0; i < responsePayload.length; i++) { - responsePayload[i].thumb = utility.getDeviceThumb(responsePayload[i].type); - } - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return -1; - } - ); - }; - return publicMethods; -}(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js deleted file mode 100644 index 02b2198b4..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js +++ /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. - */ - -var groupModule = {}; -(function (groupModule) { - var log = new Log("/app/modules/business-controllers/group.js"); - - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var constants = require('/app/modules/constants.js'); - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var utility = require("/app/modules/utility.js").utility; - var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - - var groupServiceEndpoint = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/groups"; - - var user = session.get(constants.USER_SESSION_KEY); - - var endPoint; - - groupModule.getGroupCount = function () { - var permissions = userModule.getUIPermissions(); - if (permissions.LIST_ALL_GROUPS) { - endPoint = groupServiceEndpoint + "/count"; - } else if (permissions.LIST_GROUPS) { - endPoint = groupServiceEndpoint + "/user/" + user.username + "/count"; - } else { - log.error("Access denied for user: " + carbonUser.username); - return -1; - } - return serviceInvokers.XMLHttp.get( - endPoint, function (responsePayload) { - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return -1; - } - ); - }; - - groupModule.getGroupDeviceCount = function (groupName, owner) { - endPoint = groupServiceEndpoint + "/owner/" + owner + "/name/" + groupName + "/devices/count"; - return serviceInvokers.XMLHttp.get( - endPoint, function (responsePayload) { - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return -1; - } - ); - }; - - groupModule.getGroupDevices = function (groupName, owner) { - endPoint = groupServiceEndpoint + "/owner/" + owner + "/name/" + groupName + "/devices"; - return serviceInvokers.XMLHttp.get( - endPoint, function (responsePayload) { - return responsePayload; - }, - function (responsePayload) { - log.error(responsePayload); - return responsePayload; - } - ); - }; - -}(groupModule)); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js deleted file mode 100644 index e96ffcdec..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js +++ /dev/null @@ -1,134 +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 operationModule = function () { - var log = new Log("/app/modules/business-controllers/operation.js"); - var utility = require('/app/modules/utility.js').utility; - var constants = require('/app/modules/constants.js'); - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - - var publicMethods = {}; - var privateMethods = {}; - - /** - * This method reads the token from the Token client and return the access token. - * If the token pair s not set in the session this will send a redirect to the login page. - */ - function getAccessToken(deviceType, owner, deviceId) { - var TokenClient = Packages.org.wso2.carbon.device.mgt.iot.apimgt.TokenClient; - var accessTokenClient = new TokenClient(deviceType); - var accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); - return accessTokenInfo.getAccess_token(); - } - - privateMethods.getOperationsFromFeatures = function (deviceType, operationType) { - var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/features/" + deviceType; - var featuresList = serviceInvokers.XMLHttp.get(url, function (responsePayload) { - var features = responsePayload; - var featureList = []; - var feature; - for (var i = 0; i < features.length; i++) { - feature = {}; - var analyticStreams = utility.getDeviceTypeConfig(deviceType)["analyticStreams"]; - if (analyticStreams) { - for (var stream in analyticStreams) { - if (analyticStreams[stream].name == features[i].name) { - feature.ui_unit = analyticStreams[stream].ui_unit; - break; - } - } - } - - feature["operation"] = features[i].code; - feature["name"] = features[i].name; - feature["description"] = features[i].description; - feature["deviceType"] = deviceType; - feature["params"] = []; - var metaData = features[i].metadataEntries; - if (metaData) { - for (var j = 0; j < metaData.length; j++) { - feature["params"].push(metaData[j].value); - } - featureList.push(feature); - } - } - return featureList; - }, function (responsePayload) { - var response = {}; - response["status"] = "error"; - return response; - } - ); - return featuresList; - }; - - publicMethods.getControlOperations = function (deviceType) { - var operations = privateMethods.getOperationsFromFeatures(deviceType, "operation"); - for (var op in operations) { - var iconPath = utility.getOperationIcon(deviceType, operations[op].operation); - if (iconPath) { - operations[op]["icon"] = iconPath; - } - } - return operations; - }; - - publicMethods.getMonitorOperations = function (deviceType) { - return privateMethods.getOperationsFromFeatures(deviceType, "monitor"); - }; - - publicMethods.handlePOSTOperation = function (deviceType, operation, deviceId, params) { - var user = session.get(constants.USER_SESSION_KEY); - var endPoint = devicemgtProps["httpsURL"] + '/' + deviceType + "/controller/" + operation; - var header = '{"owner":"' + user.username + '","deviceId":"' + deviceId + - '","protocol":"mqtt", "sessionId":"' + session.getId() + '", "' + - constants.AUTHORIZATION_HEADER + '":"' + constants.BEARER_PREFIX + - getAccessToken(deviceType, user.username, deviceId) + '"}'; - return post(endPoint, params, JSON.parse(header), "json"); - }; - - publicMethods.handleGETOperation = function (deviceType, operation, operationName, deviceId) { - var user = session.get(constants.USER_SESSION_KEY); - var endPoint = devicemgtProps["httpsURL"] + '/' + deviceType + "/controller/" + operation; - var header = '{"owner":"' + user.username + '","deviceId":"' + deviceId + - '","protocol":"mqtt", "' + constants.AUTHORIZATION_HEADER + '":"' + - constants.BEARER_PREFIX + getAccessToken(deviceType, user.username, deviceId) + - '"}'; - var result = get(endPoint, {}, JSON.parse(header), "json"); - if (result.data) { - var values = result.data.sensorValue.split(','); - if (operationName == 'gps') { - result.data.map = { - lat: parseFloat(values[0]), - lng: parseFloat(values[1]) - } - } else { - var sqSum = 0; - for (var v in values) { - sqSum += Math.pow(values[v], 2); - } - result.data[operationName] = Math.sqrt(sqSum); - } - delete result.data['sensorValue']; - } - return result; - }; - - return publicMethods; -}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js deleted file mode 100644 index 00b82116c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js +++ /dev/null @@ -1,152 +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 policyModule; -policyModule = function () { - var log = new Log("/app/modules/business-controllers/policy.js"); - - var constants = require('/app/modules/constants.js'); - var utility = require("/app/modules/utility.js")["utility"]; - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - - var publicMethods = {}; - var privateMethods = {}; - - privateMethods.handleGetAllPoliciesResponse = function (backendResponse) { - var response = {}; - if (backendResponse.status == 200 && backendResponse.responseText) { - var isUpdated = false; - var policyListFromRestEndpoint = parse(backendResponse.responseText)["policies"]; - - var policyListToView = []; - var i, policyObjectFromRestEndpoint, policyObjectToView; - for (i = 0; i < policyListFromRestEndpoint.length; i++) { - // get list object - policyObjectFromRestEndpoint = policyListFromRestEndpoint[i]; - // populate list object values to view-object - policyObjectToView = {}; - policyObjectToView["id"] = policyObjectFromRestEndpoint["id"]; - policyObjectToView["priorityId"] = policyObjectFromRestEndpoint["priorityId"]; - policyObjectToView["name"] = policyObjectFromRestEndpoint["policyName"]; - policyObjectToView["platform"] = policyObjectFromRestEndpoint["profile"]["deviceType"]; - policyObjectToView["icon"] = utility.getDeviceThumb(policyObjectToView["platform"]); - policyObjectToView["ownershipType"] = policyObjectFromRestEndpoint["ownershipType"]; - - var assignedRoleCount = policyObjectFromRestEndpoint["roles"].length; - var assignedUserCount = policyObjectFromRestEndpoint["users"].length; - - if (assignedRoleCount == 0) { - policyObjectToView["roles"] = "None"; - } else if (assignedRoleCount == 1) { - policyObjectToView["roles"] = policyObjectFromRestEndpoint["roles"][0]; - } else if (assignedRoleCount > 1) { - policyObjectToView["roles"] = policyObjectFromRestEndpoint["roles"][0] + ", ..."; - } - - if (assignedUserCount == 0) { - policyObjectToView["users"] = "None"; - } else if (assignedUserCount == 1) { - policyObjectToView["users"] = policyObjectFromRestEndpoint["users"][0]; - } else if (assignedUserCount > 1) { - policyObjectToView["users"] = policyObjectFromRestEndpoint["users"][0] + ", ..."; - } - - policyObjectToView["compliance"] = policyObjectFromRestEndpoint["compliance"]; - - if (policyObjectFromRestEndpoint["active"] == true && - policyObjectFromRestEndpoint["updated"] == true) { - policyObjectToView["status"] = "Active/Updated"; - isUpdated = true; - } else if (policyObjectFromRestEndpoint["active"] == true && - policyObjectFromRestEndpoint["updated"] == false) { - policyObjectToView["status"] = "Active"; - } else if (policyObjectFromRestEndpoint["active"] == false && - policyObjectFromRestEndpoint["updated"] == true) { - policyObjectToView["status"] = "Inactive/Updated"; - isUpdated = true; - } else if (policyObjectFromRestEndpoint["active"] == false && - policyObjectFromRestEndpoint["updated"] == false) { - policyObjectToView["status"] = "Inactive"; - } - // push view-objects to list - policyListToView.push(policyObjectToView); - } - // generate response - response.updated = isUpdated; - response.status = "success"; - response.content = policyListToView; - - return response; - } else { - response.status = "error"; - /* backendResponse.responseText == "Scope validation failed" - Here the response.context("Scope validation failed") is used other then response.status(401). - Reason for this is IDP return 401 as the status in 4 different situations such as, - 1. UnAuthorized. - 2. Scope Validation Failed. - 3. Permission Denied. - 4. Access Token Expired. - 5. Access Token Invalid. - In these cases in order to identify the correct situation we have to compare the unique value from status and - context which is context. - */ - if (backendResponse.responseText == "Scope validation failed") { - response.content = "Permission Denied"; - } else { - response.content = backendResponse.responseText; - } - return response; - } - }; - - /* - @Updated - */ - publicMethods.getAllPolicies = function () { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + - "/policies?offset=0&limit=100"; - return serviceInvokers.XMLHttp.get(url, privateMethods.handleGetAllPoliciesResponse); - } catch (e) { - throw e; - } - }; - - /* - @Updated - used by getAllPolicies - */ - privateMethods.getElementsInAString = function (elementList) { - var i, elementsInAString = ""; - for (i = 0; i < elementList.length; i++) { - if (i == elementList.length - 1) { - elementsInAString += elementList[i]; - } else { - elementsInAString += elementList[i] + ", "; - } - } - return elementsInAString; - }; - - return publicMethods; -}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js deleted file mode 100644 index 93f76b3e8..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js +++ /dev/null @@ -1,540 +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 module contains user and roles related functionality. - */ -var userModule = function () { - var log = new Log("/app/modules/business-controllers/user.js"); - - var constants = require("/app/modules/constants.js"); - var utility = require("/app/modules/utility.js")["utility"]; - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; - - /* Initializing user manager */ - var carbon = require("carbon"); - var url = carbon.server.address("https") + "/admin/services"; - var server = new carbon.server.Server(url); - - var publicMethods = {}; - var privateMethods = {}; - - /** - * Get the carbon user object from the session. If not found - it will throw a user not found error. - * @returns {object} carbon user object - */ - privateMethods.getCarbonUser = function () { - var carbon = require("carbon"); - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - return carbonUser; - }; - - /** - * Only GET method is implemented for now since there are no other type of methods used this method. - * @param url - URL to call the backend without the host - * @param method - HTTP Method (GET, POST) - * @returns An object with 'status': 'success'|'error', 'content': {} - */ - privateMethods.callBackend = function (url, method) { - if (constants["HTTP_GET"] == method) { - return serviceInvokers.XMLHttp.get(url, - function (backendResponse) { - var response = {}; - response.content = backendResponse.responseText; - if (backendResponse.status == 200) { - response.status = "success"; - } else if (backendResponse.status == 400 || backendResponse.status == 401 || - backendResponse.status == 404 || backendResponse.status == 500) { - response.status = "error"; - } - return response; - } - ); - } else { - log.error("Runtime error : This method only support HTTP GET requests."); - } - }; - - /** - * Register user to dc-user-store. - * - * @param username Username of the user - * @param firstname First name of the user - * @param lastname Last name of the user - * @param emailAddress Email address of the user - * @param password Password of the user - * @param userRoles Roles assigned to the user - * - * @returns {number} HTTP Status code 201 if succeeded, 409 if user already exists - */ - publicMethods.registerUser = function (username, firstname, lastname, emailAddress, password, userRoles) { - var carbon = require('carbon'); - var tenantId = carbon.server.tenantId(); - var url = carbon.server.address('https') + "/admin/services"; - var server = new carbon.server.Server(url); - var userManager = new carbon.user.UserManager(server, tenantId); - - try { - if (userManager.userExists(username)) { - if (log.isDebugEnabled()) { - log.debug("A user with name '" + username + "' already exists."); - } - // http status code 409 refers to - conflict. - return constants.HTTP_CONFLICT; - } else { - var defaultUserClaims = privateMethods.buildDefaultUserClaims(firstname, lastname, emailAddress); - userManager.addUser(username, password, userRoles, defaultUserClaims, "default"); - if (log.isDebugEnabled()) { - log.debug("A new user with name '" + username + "' was created."); - } - // http status code 201 refers to - created. - return constants.HTTP_CREATED; - } - } catch (e) { - throw e; - } - }; - - /* - @Updated - */ - publicMethods.getUsers = function () { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users?offset=0&limit=100"; - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - if (response.status == "success") { - response.content = parse(response.content).users; - } - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /** - * Return a User object from the backend by calling the JAX-RS - * @param username - * @returns {object} a response object with status and content on success. - */ - publicMethods.getUser = function (username) { - var carbonUser = privateMethods.getCarbonUser(); - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + - encodeURIComponent(username); - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - response["content"] = parse(response.content); - response["userDomain"] = carbonUser.domain; - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /** - * Returns a set of roles assigned to a particular user - * @param username - * @returns {object} a response object with status and content on success. - */ - publicMethods.getRolesByUsername = function (username) { - var carbonUser = privateMethods.getCarbonUser(); - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + - encodeURIComponent(username) + "/roles"; - return privateMethods.callBackend(url, constants["HTTP_GET"]); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /* - @NewlyAdded - */ - publicMethods.getUsersByUsername = function () { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + "/mdm-admin/users/users-by-username"; - return privateMethods.callBackend(url, constants["HTTP_GET"]); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /* - @Updated - */ - /** - * Get User Roles from user store (Internal roles not included). - */ - publicMethods.getRoles = function () { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + - "/roles?offset=0&limit=100"; - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - if (response.status == "success") { - response.content = parse(response.content).roles; - } - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /* - @Updated - */ - /** - * Get User Roles from user store (Internal roles not included). - * @returns {object} a response object with status and content on success. - */ - publicMethods.getRolesByUserStore = function () { - var ROLE_LIMIT = devicemgtProps["pageSize"]; - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles?limit=" + ROLE_LIMIT; - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - if (response.status == "success") { - response.content = parse(response.content).roles; - } - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /** - * Get Platforms. - */ - //TODO Move this piece of logic out of user.js to somewhere else appropriate. - publicMethods.getPlatforms = function () { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/admin/device-types"; - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - if (response.status == "success") { - response.content = parse(response.content); - } - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /** - * Get role - */ - publicMethods.getRole = function (roleName) { - var carbonUser = session.get(constants["USER_SESSION_KEY"]); - var utility = require("/app/modules/utility.js")["utility"]; - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants["ERRORS"]["USER_NOT_FOUND"]; - } - try { - utility.startTenantFlow(carbonUser); - var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + - "/roles/" + encodeURIComponent(roleName); - var response = privateMethods.callBackend(url, constants["HTTP_GET"]); - response.content = parse(response.content); - return response; - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - /** - * Authenticate a user when he or she attempts to login to MDM. - * - * @param username Username of the user - * @param password Password of the user - * @param successCallback Function to be called at the event of successful authentication - * @param failureCallback Function to be called at the event of failed authentication - */ - publicMethods.login = function (username, password, successCallback, failureCallback) { - var carbonModule = require("carbon"); - var carbonServer = application.get("carbonServer"); - try { - // check if the user is an authenticated user. - var isAuthenticated = carbonServer.authenticate(username, password); - if (!isAuthenticated) { - failureCallback("authentication"); - return; - } - var tenantUser = carbonModule.server.tenantUser(username); - var isAuthorizedToLogin = privateMethods.isAuthorizedToLogin(tenantUser); - if (!isAuthorizedToLogin) { - failureCallback("authorization"); - return; - } - session.put(constants.USER_SESSION_KEY, tenantUser); - successCallback(tenantUser); - } catch (e) { - throw e; - } - }; - - publicMethods.logout = function (successCallback) { - session.invalidate(); - successCallback(); - }; - - publicMethods.isAuthorized = function (permission) { - var carbon = require("carbon"); - var carbonServer = application.get("carbonServer"); - var carbonUser = session.get(constants.USER_SESSION_KEY); - var utility = require('/app/modules/utility.js').utility; - if (!carbonUser) { - log.error("User object was not found in the session"); - response.sendError(401, constants.ERRORS.USER_NOT_FOUND); - exit(); - } - - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - var user = new carbon.user.User(userManager, carbonUser.username); - return user.isAuthorized(permission, "ui.execute"); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - privateMethods.isAuthorizedToLogin = function(carbonUser) { - var utility = require('/app/modules/utility.js').utility; - try { - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - var userManager = new carbon.user.UserManager(server, tenantId); - var user = new carbon.user.User(userManager, carbonUser.username); - return user.isAuthorized("/permission/admin/login", "ui.execute"); - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - }; - - publicMethods.getUIPermissions = function () { - var permissions = {}; - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { - permissions["LIST_DEVICES"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { - permissions["LIST_OWN_DEVICES"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/groups/list")) { - permissions["LIST_ALL_GROUPS"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/groups/list")) { - permissions["LIST_GROUPS"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/list")) { - permissions["LIST_USERS"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/list")) { - permissions["LIST_ROLES"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/list")) { - permissions["LIST_ALL_POLICIES"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/policies/list")) { - permissions["LIST_POLICIES"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/add")) { - permissions["ADD_DEVICE"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/groups/add")) { - permissions["ADD_GROUP"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/add")) { - permissions["ADD_USER"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/remove")) { - permissions["REMOVE_USER"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/add")) { - permissions["ADD_ROLE"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/add")) { - permissions["ADD_ADMIN_POLICY"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/policies/add")) { - permissions["ADD_POLICY"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/priority")) { - permissions["CHANGE_POLICY_PRIORITY"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/dashboard/view")) { - permissions["VIEW_DASHBOARD"] = true; - } - if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/platform-configs/view")) { - permissions["TENANT_CONFIGURATION"] = true; - } - - return permissions; - }; - - publicMethods.addPermissions = function (permissionList, path, init) { - var registry, carbon = require("carbon"); - var carbonServer = application.get("carbonServer"); - var utility = require('/app/modules/utility.js').utility; - var options = {system: true}; - if (init == "login") { - try { - var carbonUser = session.get(constants.USER_SESSION_KEY); - if (!carbonUser) { - log.error("User object was not found in the session"); - throw constants.ERRORS.USER_NOT_FOUND; - } - utility.startTenantFlow(carbonUser); - var tenantId = carbon.server.tenantId(); - if (carbonUser) { - options.tenantId = tenantId; - } - registry = new carbon.registry.Registry(carbonServer, options); - var i, permission, resource; - for (i = 0; i < permissionList.length; i++) { - permission = permissionList[i]; - resource = { - collection: true, - name: permission.name, - properties: { - name: permission.name - } - }; - if (path != "") { - registry.put("/_system/governance/permission/admin/" + path + "/" + permission.key, resource); - } else { - registry.put("/_system/governance/permission/admin/" + permission.key, resource); - } - } - } catch (e) { - throw e; - } finally { - utility.endTenantFlow(); - } - } else { - registry = new carbon.registry.Registry(carbonServer, options); - var i, permission, resource; - for (i = 0; i < permissionList.length; i++) { - permission = permissionList[i]; - resource = { - collection: true, - name: permission.name, - properties: { - name: permission.name - } - }; - if (path != "") { - registry.put("/_system/governance/permission/admin/" + path + "/" + permission.key, resource); - } else { - registry.put("/_system/governance/permission/admin/" + permission.key, resource); - } - } - } - }; - - /** - * Private method to be used by addUser() to - * retrieve secondary user stores. - * This needs Authentication since the method access admin services. - * - * @returns Array of secondary user stores. - */ - publicMethods.getSecondaryUserStores = function () { - var returnVal = []; - var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"]; - var wsPayload = ""; - serviceInvokers.WS.soapRequest( - "urn:getSecondaryRealmConfigurations", - wsPayload, - endpoint, - function (wsResponse) { - var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text()); - if (domainIDs != "\"\"") { - var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g"); - domainIDs = domainIDs.replace(regExpForSearch, ""); - returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]); - } - }, function (e) { - log.error("Error retrieving secondary user stores", e); - }, - constants["SOAP_VERSION"]); - return returnVal; - }; - - return publicMethods; -}(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js deleted file mode 100644 index f81849fe3..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js +++ /dev/null @@ -1,43 +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 conf = function () { - var conf = application.get("CONF"); - if (!conf) { - conf = require("/app/conf/config.json"); - var pinch = require("/app/modules/conf-reader/pinch.min.js")["pinch"]; - var server = require("carbon")["server"]; - pinch(conf, /^/, - function (path, key, value) { - if ((typeof value === "string") && value.indexOf("%https.ip%") > -1) { - //noinspection JSUnresolvedFunction - return value.replace("%https.ip%", server.address("https")); - } else if ((typeof value === "string") && value.indexOf("%http.ip%") > -1) { - //noinspection JSUnresolvedFunction - return value.replace("%http.ip%", server.address("http")); - } else if ((typeof value === "string") && value.indexOf("%date-year%") > -1) { - var year = new Date().getFullYear(); - return value.replace("%date-year%", year); - } - return value; - } - ); - application.put("CONF", conf); - } - return conf; -}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js deleted file mode 100644 index 5d22ca0eb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2011 František Hába -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of -* this software and associated documentation files (the 'Software'), to deal in -* the Software without restriction, including without limitation the rights to use, -* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -* Software, and to permit persons to whom the Software is furnished to do so, -* subject to the following conditions: -* The above copyright notice and this permission notice shall be included in all -* copies or substantial portions of the Software. - -* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -* -* Reference:- https://github.com/Baggz/Pinch -* */ -(function(){var k=function(a,c){return a.length!==c.length?!1:a.every(function(a,b){return c[b]===a})},j=function(a,c,d){var b,e;if("[object Array]"===Object.prototype.toString.call(a)){b=0;for(e=a.length;b \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag deleted file mode 100644 index f6bafeacd..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag +++ /dev/null @@ -1,80 +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 log = new Log("/modules/enrollments/ios/agent-controller.jag"); - -var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; -var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; -var tokenUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; -var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; -var constants = require("/app/modules/constants.js"); - -var parser = new UAParser(); -var userAgent = request.getHeader("User-Agent"); -parser.setUA(userAgent); -parser.getResult(); -var os = parser.getOS(); -var platform = os.name; - -if (platform != "iOS") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else if (session.get("lastAccessedPage") != "login-agent") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else { - var username = request.getParameter("username"); - var password = request.getParameter("password"); - var ownership = request.getParameter("ownership"); - var domain = request.getParameter("domain"); - if (!username || !password || !ownership) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); - } else { - var fullyQualifiedUsername = username; - if(domain != null && domain != ''){ - fullyQualifiedUsername = username + "@" + domain; - } - tokenUtil.setupTokenPairByPasswordGrantType(fullyQualifiedUsername, password); - var authUrl = mdmProps["iOSConfigRoot"] + "authenticate"; - var payload = { - "username": username, "password": password, "ownership": ownership, - "tenantDomain": domain - }; - serviceInvokers.XMLHttp.post( - authUrl, - stringify(payload), - function (restAPIResponse) { - var status = restAPIResponse["status"]; - if (status == 200) { - var responseContent = parse(restAPIResponse.responseText); - session.put("authenticatedUser", username); - session.put("authenticatedUserPassword", password); - session.put("authenticatedUserDeviceOwnership", ownership); - session.put("authenticatedUserDomain", domain); - session.put("iOSChallengeToken", responseContent["challengeToken"]); - response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/license-agent"); - } else if (status == 403) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=auth-failed"); - } else { - // one visible possibility would be server sending 500 - response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); - } - } - ); - } -} -%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag deleted file mode 100644 index eb3e3acbc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag +++ /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. - */ - -var log = new Log("/app/modules/enrollments/ios/agent-enroll.jag"); - -var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; -var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; - -var parser = new UAParser(); -var userAgent = request.getHeader("User-Agent"); -parser.setUA(userAgent); -parser.getResult(); -var os = parser.getOS(); -var platform = os.name; - -if (platform != "iOS") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else if (session.get("lastAccessedPage") != "license-agent") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else { - var authenticatedUser = session.get("authenticatedUser"); - if (!authenticatedUser) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); - } else { - var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; - var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod; - var Header = Packages.org.apache.commons.httpclient.Header; - var StringRequestEntity = Packages.org.apache.commons.httpclient.methods.StringRequestEntity; - var ByteArrayInputStream = Packages.java.io.ByteArrayInputStream; - - var client = new HttpClient(); - var enrollUrl = mdmProps["iOSConfigRoot"] + "enroll"; - var method = new PostMethod(enrollUrl); - var header = new Header(); - - header.setName("Content-Type"); - header.setValue("application/json"); - method.addRequestHeader(header); - - var username = authenticatedUser; - var password = session.get("authenticatedUserPassword"); - var tenantDomain = session.get("authenticatedUserDomain"); - var challengeToken = session.get("iOSChallengeToken"); - - var inputs = {"username": username, "password": password, "challengeToken": challengeToken, "tenantDomain": tenantDomain}; - var stringRequestEntity = new StringRequestEntity(stringify(inputs)); - method.setRequestEntity(stringRequestEntity); - try { - client.executeMethod(method); - var status = method.getStatusCode(); - if (status == 200) { - session.put("enrolledUser", authenticatedUser); - var stream = method.getResponseBody(); - var byteArrayInputStream = new ByteArrayInputStream(stream); - response.contentType = "application/x-apple-aspen-config"; - print(new Stream(byteArrayInputStream)); - } else { - // two visible possibilities would be server sending 401 and 500 - response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); - } - } catch (e) { - log.error("Error occurred in enrolling ios device", e); - response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); - } finally { - method.releaseConnection(); - } - } -} -%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag deleted file mode 100644 index 45a08c762..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag +++ /dev/null @@ -1,47 +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 log = new Log("/app/modules/enrollments/ios/agent.jag"); - -var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - -var userAgent = request.getHeader("User-Agent"); -var userAgentIsiPhone = (userAgent.indexOf("iPhone") > -1); -var userAgentIsiPad = (userAgent.indexOf("iPad") > -1); -var userAgentIsiPodTouch = (userAgent.indexOf("iPod Touch") > -1); - -if (!userAgentIsiPhone && !userAgentIsiPad && !userAgentIsiPodTouch) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else { - var enrollmentUtils = require("/app/modules/enrollments/util/utils.js")["methods"]; - var Handlebars = require("/lib/modules/handlebars/handlebars-v2.0.0.js")["Handlebars"]; - var template = Handlebars.compile(enrollmentUtils. - getResource("/app/modules/enrollments/ios/config/ios-manifest-template.hbs")); - - var iOSManifest = template({ - "url" : mdmProps["device"]["ios"]["location"], - "bundleID" : mdmProps["device"]["ios"]["bundleID"], - "bundleVersion" : mdmProps["device"]["ios"]["version"], - "appName" : mdmProps["device"]["ios"]["appName"] - }); - - response.contentType = "application/xml"; - response.content = iOSManifest; -} -%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag deleted file mode 100644 index d3cb1c5d6..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag +++ /dev/null @@ -1,26 +0,0 @@ -<% -var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; -var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod; -var StringRequestEntity = Packages.org.apache.commons.httpclient.methods.StringRequestEntity; - -var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; -var caURL = mdmProps["iOSConfigRoot"] + 'ca'; -var client = new HttpClient(); -var method = new GetMethod(caURL); - -try { - client.executeMethod(method); - var status = method.getStatusCode(); - - if (status == 200) { - var stream = method.getResponseBody(); - response.contentType = "application/x-x509-ca-cert"; - var byteArrayInputStream = new Packages.java.io.ByteArrayInputStream(stream); - print(new Stream(byteArrayInputStream)); - } else { - response.sendRedirect("/errorpage"); - } -} catch (e) { - log.error("Error occurred when downloading CA " + e); -} -%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs deleted file mode 100644 index 37deaf50c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs +++ /dev/null @@ -1,31 +0,0 @@ - - - - - items - - - assets - - - kind - software-package - url - {{url}} - - - metadata - - bundle-identifier - {{bundleID}} - bundle-version - {{bundleVersion}} - kind - software - title - {{appName}} - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js deleted file mode 100644 index 91175c764..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js +++ /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. - */ - -var methods; -methods = function () { - var log = new Log("modules/enrollments/util/utils.js"); - - var publicMethods = {}; - - publicMethods.getResource = function (resourcePath) { - var file = new File(resourcePath); - var resource = null; - try { - file.open("r"); - resource = file.readAll(); - } catch (e) { - log.error("Error in reading resource"); - } finally { - file.close(); - } - return resource; - }; - - return publicMethods; -}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag deleted file mode 100644 index eaa84869e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag +++ /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. - */ - -var log = new Log("/app/modules/enrollments/windows/agent-controller.jag"); - -var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; -var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; -var tokenUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; -var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; -var constants = require("/app/modules/constants.js"); - -var parser = new UAParser(); -var userAgent = request.getHeader("User-Agent"); -parser.setUA(userAgent); -parser.getResult(); -var os = parser.getOS(); -var platform = os.name; - -if (platform != "Windows Phone") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else if (session.get("lastAccessedPage") != "login-agent") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else { - var username = request.getParameter("username"); - var email = session.get("email"); - var password = request.getParameter("password"); - var domain = request.getParameter("domain"); - if (!username || !email || !password) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); - } else { - var authUrl = mdmProps["windowsConfigRoot"]; - var fullyQualifiedUsername = username; - if(domain != null && domain != ''){ - fullyQualifiedUsername = username + "@" + domain; - } - tokenUtil.setupTokenPairByPasswordGrantType(fullyQualifiedUsername, password); - var payload = { - "credentials": { - "username": username, "email": email, - "password": password, "token": getAccessToken() - } - }; - serviceInvokers.XMLHttp.post( - authUrl, - stringify(payload), - function (restAPIResponse) { - var status = restAPIResponse["status"]; - if (status == 200) { - session.put("authenticatedUser", username); - session.put("windowsBinaryToken", parse(restAPIResponse["responseText"]).UserToken); - response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/license-agent"); - } else if (status == 403) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?error=auth-failed"); - } else if (status == 409) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?" + - "error=auth-failed&message=Provided Workplace email does not match with username. Please check."); - } else { - // one visible possibility would be server sending 500 - response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?error=unexpected"); - } - } - ); - } -} - - -/** - * This method reads the token pair from the session and return the access token. - * If the token pair is not set in the session, this will return null. - */ -function getAccessToken() { - var tokenPair = parse(session.get(constants["TOKEN_PAIR"])); - if (tokenPair) { - return tokenPair["accessToken"]; - } else { - return null; - } -}; - -%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag deleted file mode 100644 index 66a4eed09..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag +++ /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. - */ - -var log = new Log("/app/modules/enrollments/windows/agent-enroll.jag"); - -var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; -var parser = new UAParser(); -var userAgent = request.getHeader("User-Agent"); -parser.setUA(userAgent); -parser.getResult(); -var os = parser.getOS(); -var platform = os.name; - -if (platform != "Windows Phone") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else if (session.get("lastAccessedPage") != "license-agent") { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); -} else { - var authenticatedUser = session.get("authenticatedUser"); - if (!authenticatedUser) { - response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); - } else { - var enrollmentUtils = require("/app/modules/enrollments/util/utils.js")["methods"]; - var Handlebars = require("/lib/modules/handlebars/handlebars-v2.0.0.js")["Handlebars"]; - var template = Handlebars.compile(enrollmentUtils. - getResource("/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs")); - - var windowsWorkplaceAppID = session.get("windowsWorkplaceAppID"); - var windowsBinaryToken = session.get("windowsBinaryToken"); - var workplaceSwitchRequest = template({ - "windowsWorkplaceAppID" : windowsWorkplaceAppID, - "windowsBinaryToken" : windowsBinaryToken - }); - - response.contentType = "text/html"; - response.content = workplaceSwitchRequest; - } -} -%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs deleted file mode 100644 index 8911383b5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Working... - - - - -
    -

    - -
    - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js deleted file mode 100644 index d9f442cdd..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js +++ /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. - */ - -var carbonModule = require("carbon"); -var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; -var carbonServer = new carbonModule.server.Server({ - tenanted: true, - url: devicemgtProps["httpsURL"] + "/admin" -}); -application.put("carbonServer", carbonServer); - -var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; -var utility = require("/app/modules/utility.js")["utility"]; - -var permissions = { - '/permission/admin/device-mgt/user': ['ui.execute'], - '/permission/admin/manage/api/subscribe': ['ui.execute'] -}; -//userModule.addRole("internal/devicemgt-user", ["admin"], permissions); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js deleted file mode 100644 index 87f840d3c..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js +++ /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. - */ - -var onSuccess; -var onFail; - -(function () { - var log = new Log("/app/modules/login.js"); - var constants = require("/app/modules/constants.js"); - onSuccess = function (context) { - var utility = require("/app/modules/utility.js").utility; - var apiWrapperUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; - if (context.input.samlToken) { - apiWrapperUtil.setupTokenPairBySamlGrantType(context.input.username, context.input.samlToken); - } else { - apiWrapperUtil.setupTokenPairByPasswordGrantType(context.input.username, context.input.password); - } - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var carbonServer = require("carbon").server; - (new carbonServer.Server({url: devicemgtProps["adminService"]})) - .login(context.input.username, context.input.password); - }; - - onFail = function (error) { - log.error(error.message); - } -})(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js deleted file mode 100644 index bd1ecb2f9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js +++ /dev/null @@ -1,328 +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 utils = function () { - var log = new Log("/app/modules/oauth/token-handler-utils.js"); - - var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - var constants = require("/app/modules/constants.js"); - var carbon = require("carbon"); - - //noinspection JSUnresolvedVariable - var Base64 = Packages.org.apache.commons.codec.binary.Base64; - //noinspection JSUnresolvedVariable - var String = Packages.java.lang.String; - - var publicMethods = {}; - var privateMethods = {}; - - publicMethods["encode"] = function (payload) { - //noinspection JSUnresolvedFunction - return String(Base64.encodeBase64(String(payload).getBytes())); - }; - - publicMethods["decode"] = function (payload) { - //noinspection JSUnresolvedFunction - return String(Base64.decodeBase64(String(payload).getBytes())); - }; - - publicMethods["getDynamicClientAppCredentials"] = function () { - // setting up dynamic client application properties - var dcAppProperties = { - "applicationType": deviceMgtProps["oauthProvider"]["appRegistration"]["appType"], - "clientName": deviceMgtProps["oauthProvider"]["appRegistration"]["clientName"], - "owner": deviceMgtProps["oauthProvider"]["appRegistration"]["owner"], - "tokenScope": deviceMgtProps["oauthProvider"]["appRegistration"]["tokenScope"], - "grantType": deviceMgtProps["oauthProvider"]["appRegistration"]["grantType"], - "callbackUrl": deviceMgtProps["oauthProvider"]["appRegistration"]["callbackUrl"], - "saasApp" : true - }; - // calling dynamic client app registration service endpoint - var requestURL = deviceMgtProps["oauthProvider"]["appRegistration"] - ["dynamicClientAppRegistrationServiceURL"]; - var requestPayload = dcAppProperties; - - var xhr = new XMLHttpRequest(); - xhr.open("POST", requestURL, false); - xhr.setRequestHeader("Content-Type", "application/json"); - xhr.send(stringify(requestPayload)); - - var dynamicClientAppCredentials = {}; - if (xhr["status"] == 201 && xhr["responseText"]) { - var responsePayload = parse(xhr["responseText"]); - dynamicClientAppCredentials["clientId"] = responsePayload["client_id"]; - dynamicClientAppCredentials["clientSecret"] = responsePayload["client_secret"]; - } else if (xhr["status"] == 400) { - log.error("{/app/modules/oauth/token-handler-utils.js - getDynamicClientAppCredentials()} " + - "Bad request. Invalid data provided as dynamic client application properties."); - dynamicClientAppCredentials = null; - } else { - log.error("{/app/modules/oauth/token-handler-utils.js - getDynamicClientAppCredentials()} " + - "Error in retrieving dynamic client credentials."); - dynamicClientAppCredentials = null; - } - // returning dynamic client credentials - return dynamicClientAppCredentials; - }; - - publicMethods["getTenantBasedClientAppCredentials"] = function (username, jwtToken) { - if (!username || !jwtToken) { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + - "based client app credentials. No username or jwt token is found " + - "as input - getTenantBasedClientAppCredentials(x, y)"); - return null; - } else { - //noinspection JSUnresolvedFunction, JSUnresolvedVariable - var tenantDomain = carbon.server.tenantDomain({username: username}); - if (!tenantDomain) { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + - "based client application credentials. Unable to obtain a valid tenant domain for provided " + - "username - getTenantBasedClientAppCredentials(x, y)"); - return null; - } else { - var cachedTenantBasedClientAppCredentials = privateMethods. - getCachedTenantBasedClientAppCredentials(tenantDomain); - if (cachedTenantBasedClientAppCredentials) { - return cachedTenantBasedClientAppCredentials; - } else { - // register a tenant based client app at API Manager - var applicationName = "webapp_" + tenantDomain; - var requestURL = deviceMgtProps["oauthProvider"]["appRegistration"] - ["apiManagerClientAppRegistrationServiceURL"] + - "?tenantDomain=" + tenantDomain + "&applicationName=" + applicationName; - - var xhr = new XMLHttpRequest(); - xhr.open("POST", requestURL, false); - xhr.setRequestHeader("Content-Type", "application/json"); - xhr.setRequestHeader("Authorization", "Bearer " + jwtToken); - xhr.send(); - - if (xhr["status"] == 201 && xhr["responseText"]) { - var responsePayload = parse(xhr["responseText"]); - var tenantBasedClientAppCredentials = {}; - tenantBasedClientAppCredentials["clientId"] = responsePayload["client_id"]; - tenantBasedClientAppCredentials["clientSecret"] = responsePayload["client_secret"]; - privateMethods. - setCachedTenantBasedClientAppCredentials(tenantDomain, tenantBasedClientAppCredentials); - return tenantBasedClientAppCredentials; - } else { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + - "based client application credentials from API " + - "Manager - getTenantBasedClientAppCredentials(x, y)"); - return null; - } - } - } - } - }; - - privateMethods["setCachedTenantBasedClientAppCredentials"] = function (tenantDomain, clientAppCredentials) { - var cachedTenantBasedClientAppCredentialsMap = application.get(constants["CACHED_CREDENTIALS"]); - if (!cachedTenantBasedClientAppCredentialsMap) { - cachedTenantBasedClientAppCredentialsMap = {}; - cachedTenantBasedClientAppCredentialsMap[tenantDomain] = clientAppCredentials; - application.put(constants["CACHED_CREDENTIALS"], cachedTenantBasedClientAppCredentialsMap); - } else if (!cachedTenantBasedClientAppCredentialsMap[tenantDomain]) { - cachedTenantBasedClientAppCredentialsMap[tenantDomain] = clientAppCredentials; - } - }; - - privateMethods["getCachedTenantBasedClientAppCredentials"] = function (tenantDomain) { - var cachedTenantBasedClientAppCredentialsMap = application.get(constants["CACHED_CREDENTIALS"]); - if (!cachedTenantBasedClientAppCredentialsMap || - !cachedTenantBasedClientAppCredentialsMap[tenantDomain]) { - return null; - } else { - return cachedTenantBasedClientAppCredentialsMap[tenantDomain]; - } - }; - - publicMethods["getTokenPairByPasswordGrantType"] = function (username, password, encodedClientAppCredentials, scopes) { - if (!username || !password || !encodedClientAppCredentials || !scopes) { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token by password " + - "grant type. No username, password, encoded client app credentials or scopes are " + - "found - getTokenPairByPasswordGrantType(a, b, c, d)"); - return null; - } else { - // calling oauth provider token service endpoint - var requestURL = deviceMgtProps["oauthProvider"]["tokenServiceURL"]; - var requestPayload = "grant_type=password&username=" + - username + "&password=" + password + "&scope=" + scopes; - - var xhr = new XMLHttpRequest(); - xhr.open("POST", requestURL, false); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.setRequestHeader("Authorization", "Basic " + encodedClientAppCredentials); - xhr.send(requestPayload); - - if (xhr["status"] == 200 && xhr["responseText"]) { - var responsePayload = parse(xhr["responseText"]); - var tokenData = {}; - tokenData["accessToken"] = responsePayload["access_token"]; - tokenData["refreshToken"] = responsePayload["refresh_token"]; - tokenData["scopes"] = responsePayload["scope"]; - return tokenData; - } else { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token " + - "by password grant type - getTokenPairByPasswordGrantType(a, b, c, d)"); - return null; - } - } - }; - - publicMethods["getTokenPairBySAMLGrantType"] = function (assertion, encodedClientAppCredentials, scopes) { - if (!assertion || !encodedClientAppCredentials || !scopes) { - log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token by saml " + - "grant type. No assertion, encoded client app credentials or scopes are " + - "found - getTokenPairBySAMLGrantType(x, y, z)"); - return null; - } else { - var assertionXML = publicMethods.decode(assertion); - /* - TODO: make assertion extraction with proper parsing. - Since Jaggery XML parser seem to add formatting which causes signature verification to fail. - */ - var assertionStartMarker = " - * Dual licensed under GPLv2 & MIT - */ -(function(window,undefined){"use strict";var LIBVERSION="0.7.3",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded";var util={extend:function(regexes,extensions){for(var i in extensions){if("browser cpu device engine os".indexOf(i)!==-1&&extensions[i].length%2===0){regexes[i]=extensions[i].concat(regexes[i])}}return regexes},has:function(str1,str2){if(typeof str1==="string"){return str2.toLowerCase().indexOf(str1.toLowerCase())!==-1}},lowerize:function(str){return str.toLowerCase()}};var mapper={rgx:function(){var result,i=0,j,k,p,q,matches,match,args=arguments;while(i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j -
    - If you have not already enrolled this device with {{companyName}}, - Download and install following EMM Agent to continue. - -
    - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js deleted file mode 100644 index 438338502..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js +++ /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. - */ - -function onRequest(context) { - var log = new Log("mdm.page.enrollments.android.agent.download"); - - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var viewModel = {}; - - // setting android agent download URL - // Needs host=>http:9763 since self-signed certificates won't allow downloads in android - //TODO: try to retrieve page name from UUF - viewModel.agentDownloadURL = mdmProps["generalConfig"]["host"] + mdmProps["appContext"] + "public/mdm.page.enrollments.android.download-agent/asset/" + mdmProps["androidAgentApp"]; - var companyProps = session.get("COMPANY_DETAILS"); - if (!companyProps) { - viewModel.companyName = mdmProps.generalConfig.companyName; - } else { - viewModel.companyName = companyProps.companyName; - } - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json deleted file mode 100644 index 2a09cb084..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/android/download-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk deleted file mode 100644 index d0ac4256d2b579f5b0e23a529a9bf359f9d179af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4000566 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%0A*h$@n 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 z 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%0Dg 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�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�o%#3SNbe=B_~& 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≺HilD&whkB{q+;gjq9Jg<$yn`Z~6kmJ(RCgXbCX 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 z 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%0AE^pf!+@cQgePZ*75nlzDPhVPo2zUZ@)6pqqJXj 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

    xr~P9apIlQ_0N)v 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

    y5fUifp9DOk=zdJfefQ8zY-RWR?zAzl`zaE1 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�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

    vVE`NBVw^Vxns!fW7CoeeS$b@gZ_&>mzKEF}i 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

    5XKy7(8({bmy0 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

    X|G4qdsml(iYC<L?9*sY$Of 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�A9}(a+~=G`#X-2h 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%0D#xrxM5id*sIT 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

    %8hd| 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%0AFQi|J#yJV=DU+`vEDTjLXXNbDM zbwpih8K#>2ihLMa|CrTx0}$jr1FXaeMUL{PH%K+{mp`7>i!_nga_9X%st2Y zSc;LqxRH!N3Vj@1ABAL|O>2)njM9qQg)_fOl9VrOC_;xQ23s%}!WPbkFoOzCWwtf| zkaHWF>*V+;WwA2?*+9CToj^>G${R5)`CCw<&p}zysH6?y2RYt?f>U35+h{*3wZerOSse}_n;lj ztebtqp$*(>7+e`RFM?!#lI*HCrMK^aoc_V37cA?g)G6l+an-2Ulwf2wrN((UlcZFu zwREXPI4>w<#Iw)#Z7v`)cpc#J9MFOCxhJJ3;b<9r9fO3|FS7uwH!{*Wl2yWJd&T)lW88O zl72}=yikQ~;S=bvpl}gyV&o9r8@fSB$@U8A;jnAW8(8YRzEAXuvSA8?^(2McuPUKc zkv~^*6*{H%P;)#Lu{&!yzPu?%RQ{v!^eAmb(`x12Q`%NO%4+nrir%{RQPQTh%&UQX zJ@1YQ$({T#kgt8){aRA%TKPMahmW;YkQ!jzl`pO;{z_(sSw%_C-2WwP|3h8`AG$_i8HvEZ;U zsp2$fuhjO)p!ktl5MAeQ638LWD*PSGby%p=;)Wu-8a0q`WGG8qh42+ZE5r&x#OTj} z9}kMGxv_b;{loU*`wyE3TN{U4FaOrm4`Jd>w1chIyPYvw>u}@X@EUDzf1k96pbd+g zUbSRN*D2L&oKn4HGV3RQk!AW$_RsUD{QFGShJT)G{EB^9i9eL5?Wbqm;}2zr+Hbcq z92h8S)z-P4l}GX<&fNl@06h6x22Y8Q%tE=4N3aNw+fb2- zC_j=kUB24Mu} z{vk!$MMFM^gVrP{C0v22RPBx-VwfwbM?W+Qh+P%l^(eU)KiP_Ng74cMs z^Y@h2YQ2Sr9$e0-*WX(ic(SXFO)2&&=&Md;SFirDu?x=N3UcE8f=-pM-qQQ=)msfD zErk6PGGSX>sc9+1cS?-35P`{ZU2Hcy`Vmz3PqToF z_T35%r=uB2}3^0&q|q1or&9dClx@}l00b-a9Ur_6D%`u>$Mq0$GwxoI_Ne2 zHvit*+ij9*#roD!d8Lfjltc1n@5z<=%%K29#p=yeS%mnD}T{OWw*#T6AT$vOCV-eNgrVMBT zEl!zbAf?&6sg}e_OfqeW1=8q+jJxe3@yI0{t5TYFmt|Ls_T$85RpU8Y5wEt^07kGo zzJuS+lM~dN?v$tbi<#h) zh^)3Qk$24JpVVZCZyP=-kDqi-dg+lY91-@U4@W3ZCLZN57YRPPTO&pwJ(l%}-#auH zRWt*xp{@=qtuRCzz+J3Kf23YR-ull#|#oytAsvT`Z_Uz z-g>6@a4}K6)Hy}C?_;cmh8{>eUbK5CX}zMwZw+MG&(&m;=UW+Z>Z5SofX5wN=0Ap7 zw{*_LLnn7rd3w;5WQLQ~&eWvS;jsVM4=l1M8JX916@A6&|AhCA$HVp+#}#Q&{NEWP z$?`wzAcW-)47uJdb9wAsanZ2QMe|0m>-vVHh%D|fn)VArKFEOm(019|2N$GExg(kB zy)Z=Aj8GrSlI?=(d;OxM6}B|TMJ?8?E8mUN-8Z>Oqkj9T^bk?6-<$Z&c&6Bua5?{>=o4{?{BSjrSQpwYG@W{iH1@SF8~-_a)8Airr4Os*G#h4D_X=N zbL>T9gxUq>+@#7h$4ok)5-W)qUH%0AjP@2bh6n{MMOLWjj8M8?ZQ)CUh4~^83$n(m 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%0Ayzgifp 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�=8 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

    *llw#st_;_HrwKl&ZWRY3AWY}om)kK zec6nTP4`&*wXOQzJ!*mXp1gK{$58Gdn>8Lu;K3U{d!GNHQ-R=iO0jmPxWK+ssSD7l z0qAUpXbAbuFt+kl6)U@9?vo{P3L1l{aeLN^(IZ9A$>Nfj*KEI<35%VF_Uc-;TfIFN zWV}^<*oS14{Mf+t?Ij8>J{HJh zBfn(y2+0q0^0^$83ALX!*_3Whr&1m1lp7>d_X8EoS%>i^8bP>MOzvO)viyr&lm4@$ zqki8d*Oc~@=ck&`H5q%cCYaJ{Hvvn09+-_D1df!C%@t;=_cu`F-d!PfMt%Rn3=qmz z^yqMtAD~$}i)Hb9+P-6nekWSey9@_6yrw3&$XEOa6tg>EZg)LRwZ1fwmRnpX`?H(G zdwn~kxN|Ga(iftbd=WxC2iG7xH3u%$eI!P7obIzv2pI*v*;b;V#~%T#eIv>9lj%5( z7?rQ5fcQm7s|2Exp9tiko=y@w;%xOX9&wRaOZv7xXqXIDw1HaF3l=)UxF3DwJY?$kQyJHZOL-Ax&mb!{rj zCvqc8awnc+9lhQ|+&PVq3N zk9ur21$pX#CY&rjF18!ED1c^eNTXNKaw>UoR5{kOTcZ5$8Kvh(`5P}NJoYcMENXn#?l)Ytj6*M`zad*% zX^s)6jS;W&F=7q;FCHTnh%w^UtH$_K&}5=`Q;<&LE}3-DMo5x$Sfb4!2(LLF(Yq6# zw6?8=@#@2wn2f=@Krb@B4sb0aQ7t*STl=n4*W%4?NoHJMlrQicP|(=LU2JU^>-PI! z{~Gzr>Hl6r_-Kwd{_E5K$Lh^NJ5oy^B|64H<264<-cR%P@|(HuH%jp;Zl!JG-6}#; zn8u>CBzv^j`p0Vi@lO8m0si!AaqAjBkC2Nb1F7hO3++V8PTEPg$@Y>h?4c6*z-Aui zX$0wYHE>V6(H;nD6O;kxqo8k#fHlA=?^9tGC8U_~Jm1GbL51S)LHJtE95U zEb4+pHB4m>=?Ly*f%oe>5-wZjh*B&*gK~VdBTb#IRVyrVd~EiC$u|OA?ab)gesiu|^6JV*j4qRLG~dfph^v zfLap({bnkHcQ~HoWLkZSr8Y*zQe)3x4KRkmWwE#v(9v~>{CoRBalv#`_9NraSt2#r zHJ`V;1>=#p z{_?csFVnufZ5q5}EPZ}I+)c-x(4l`y76mYx}K%QDq~Xf&DX!7YnZ zJ!lg1@}_!li7yE?xW*`r#^8eV;D(^ns6a%eM~F*A1{D=W25^taB8Uru;t~xKjb=0Q zJLlY6-94cB<-Pa)?iPYd0Z^h*9%yQy`DNe+)awlDoDw_*ivuZ z#0R;=aS5O`unKcjh)7hV0x6oMafv7$>ZAF31LHM@x1g^*~1pA+l- z5%y3ZNcar)5=Mb?A zG-!44=I&^noE2BvM(&U$Q%)9TC$r*y?Q8D-GV{2l0FPb{49s$?#VlQ5R#|~A9UH19 zcS73W;5gCbT+BE0*leQXwFj+Jn~sLsY0$sL6)omQ-SaPNl>UI?S9V6c9`UFqF?IZ6 z$!Q2_mOm`7sc8hrQUrRZk6FsTZtVutk@`@d|s=BUxiak?7S5l+0BV1=Wb*4~EgdK*wPho`ILwuU2ekXT{Muo1NR=(>nun6F zh}$fA?W-gNZjb|NkQ7KOg;bio4&k1XGhQXeuoB$kQQc{+Gl;mz_HO7(;Np(NnZVw? zF8wrab5NA7y`boN z#hQ07WS%wXg{6^D6I5R+ZI|y$|7;EsB(}1J z7Vay`ZNqDH*>|5|~-PHFV)3+Df+Vm<=xn55gU9 zJ5E|zSIz=E`KVGHuK^}eL8XOKT?rC_Nl(@~s@_&|@IHvH@9v|waWX=DJrVN~lXH-~2oSxzLCS59@U<{h>%!E_d5>!X z@*p{Po7S%RD&SMsBU-;DDR(}llaJIv)<0)wnIb`N^@dkVwRJnGJO<~02rUyQ-rF0W&^MeD+PaZohaL*+xiXSTx+EP*}6Z!dcSjG{bQ*yUjVNpN-| zH#fY*hw~@gEk?)>NQpUhi5M+cZ_|p6$AQ46E!zy0q#Two!{`x5l2kLAhT`yuQ{X8f z@N<@mGOc2!7Zk*|Eb-9-h-UwlWqVJ0s}#k`II_v2OX{vbG0_j$(=aXxMZd|6Q`YVc z;9OrUF+PO)33W&=BGHDU{eBBcMN6v`=T&MZzjg~?NzM2Ig`|-YwAmFnP7cnTKq6N% zCXEI+zR)us7me3yc(hgtvy;V0>+X$!E|;5N6cVxFhP z^J9oICr@QZaxtr4u|SXcTEZM0c5fhtM&GWFzP(*4T6t}C_CU?=afZYWsqN48>$-K~ z&xkI!vpJTRqETo@IVQBhp`gUxw)9KZ0|{lHdqlxM|Wx!;T_qeT97SxCrz;})Hg8|$y{ zSQo6DNb?VWeie2MlY^`APUw-0ebkVgiGeYrN|zJQfz>=Hpdo@T9;5mEdeLKSyLEy` z9=b)bgk^Uwj*2R=b0$1gGfv3|SKwd&{(7=lEUQZ*1ln_Dqsxew^(XDJH1a6<)@E?- z%p=WyEBskP|7ip#hmg0a9%FQD3R}X=LavkaUCXk>J$*VZ=Jb8-?%TE1eRHqrn|r!o{kDgQv!rCoiS-Prf_-M+7%_igq%tIz9I(B~_ivfov#o2zP@IB2vOzdVa2#boP9a2i zwB}`o^>xFD7-Ck3CkMv)Dxz+Ot>pN3Jqg$RCnT?q_=EE99B%Rkb zQ(W439b({`B(WWijhNPs|4)X$zb$tYr@>R!Q+MF@T(9gaUV#mVk5ppmlejFAl-CO_ zFv@x4dHf;D>s=)i1Bn|<-fiKWqTkzVB2V=WnS)1P$cv-Po{v|TzEbv@)H|nVWL|uu znC#CM-zzJV?pvkVdUu(8YnfcMQhsu$nOs-6ge>b+4pC|qU%610G&DK>L1Lp-aoxMJ z>h5o!srum>zK@rcvyg~^UZhkjiAxHTCs1%vyI-A(F&c3ld02M(br6f3F-LK(T)2{Z z^DUaxv}loYh(l8l-v@kHzf|{2Y(aE~09LGs2S9Zr@w6_=WtCX}2wYJwo|S6D4InPx zCasDH8Z;rDiy&-e4U#Y07J+??+$Rnf8QNiWO^5(t2FPb=J7jq$QsdEP_jWdm52f6& zl}s;kO5VIi{(*G!7p|7GD7e$SX+#U3hh*w80i4_7Se??+v2nf3I83^rX+(oktY&wG z=J+=tCG)7Xx*h{@+v9NGMkw{PrYB#>%E47f4-xN4b?2LeN^o>7+@)78#7($=T>K{< z-=W0{X?4Jzk5TN>{cgDeo*(Y2{jtqiV_GezTaP2K2AS#V>Gf4Les0t7w5mbW%kIR@ zzpuu}J0P)yBSP-4s<;8@NU%QFzRv#H^|F%Hk@k10h8{>!Lot2-@NRmSj;g?cIDRU3 zrd?5oP1M+fSk3g!1f2hd4cthLGsxK=iAbz)s8ivu9nO9SxvaClhu@?MJ4QHF+qgn8 z>7@jIAraS!DU-N%m{a9m<STC~o&HWuXP67$JaeMmA5Ox)?CX2|-?X>X0FKux& z(im3~_bCcFOuQM+^}>LxAtp7l3kjIiB+ikTp<@|j8v`u&=~5Q$g>YeuEszGp`-t4o zQH(0_ZB5;2Z~voNjS9bugvg&|1`8i;vN;R}`OW&r48T?7NHpw^!KW}uyQk|=6PUA> z*nhvd73@q$7#32b@7qD4W*EB;_!Qt4FjenW^3ug5KnU_A3JS);g^AV#vX->YN{}FSoXjvqc)s4&= zBkr}LRyiV`o8~*S912nFD(nzm@T>!UN8+e&8fm6=4&4*tA<%P{Gb`?9Golv&*Xk;c z-J%2nu32M{l%Sm_E422Jmqav0ezjKYRDi2~DNU_*XjFR7<@G11D_u!jy<*;v!wMF2w+ej(SS4jlQzEB*NQAo|P}w>?W%`e)4uHA_`}XIVlO*mO~;XN>(o+nwFxMYp5&t zi#I3zI>#AIeveZrf^33Ak`HRasl)4)^O&Y3{LK;U+%|d1yLo0;TuFpRjGVIyuR z9?r->f$5}m#oMxHSi!bfk+)}<&+Lx1HQ{M48G1|Gb}XoEvMonCw##o9CL;QJ?J#$& zoBoO|>f99kG+~r{hBoOv`4y~0X6RH0yH|Xn_ypL!%ifjIX{V#?rkiP21>%{-eVk33 zeim3YcImJ{Yk%XevzEU^G81o?2?JP9y*%`0`&190bv*|_}Ji`B!Sp-JnA!5Ik$7TVC= zop)4zoUQW8DlCJABl3QOZFOU^k}H5V5cg)r)Jvn9$7n_rg-Ia5sn> zrS5f!*20NjwF*xno@>b+Na1n5T}muK!E0y~5wFa0ile~g!FKK);bn<<$zK8QAKa?o zhL@4N@I*aL)K~O9hsX+{KItOb=c?K#R};$9@8+5GXWys!ZNJ;r(;w@THzoe5etbT? z9ng*U0YZW+DM)v{s(kkj{5w(&d}=i*vnyxyWwbL|Wrgjyj^ozl)R47XVB_HkcPj|) z=0mm5lUwNWIUo*WC@R1{_7E6Hn(F&FLsr2>ZydksBg`AEbE0-y%O3`gat6BL4-ri8 z=`8p@9#FEkhl{#>_(_v)3kf;VO(dr*ZU-?F5#E2kBrT_ygy8)l=F%hddF6iHQN}&I zUIq72g5PtDIioQIF2+qoOk5`A98#p3KGb*!J(%$vU!>(-%`-hR&=I8MpWa)=XqIS#|k>?^I{j$n@>C*AxQ z%zxbYE3mB>NiIw~!Sno9IUs(KcwX+=8&a-1c^c`R(jge-2kr?e1RuIv za3H(B!2LgQV$d42PQ*X(gBG#Ku+GjhpP4K&v^)2ScIUojyR(0RfJR_B9AWtH6S6^= zQ`L8`VBMaGr6qdmcyZ zJ5ZIlu{R&QZ8B~g%R(~r#`>8ZAu%`9yxj;>S{cBep#)>5Khu=5KUthb4C}v90KxF) zA-?#m$o$wX^-;-^UK;zafGBG!=;~SVyo!_<2}P4b@KE2fO1_3bXP_eAnOkcnhS}L` zXyWprxJlvXF}3WR!{oLpZa`9Xjp|J+!~cqj_iBG@`E~uy2)!Z3ZAeMuj znZHWj^BC-0W8CX7>G^0Bp!m1+ou?J`h5=W*4}&Lli@zYq+zOZ8 zMxlK^UJ0ypf^+vhT%P&c;o42|PG)1UyM{uict8S_TiBy<-mPgt$`mEa9!4)oEJAs zg{>Ap(#@YO|3btZ!rft)XYC}>qPQ36f!C!|3H^oUl(?Cbd0VxYrz54DFYqmSI8AZJ zp(CuD?0rctdP7?MaQKhcY{eb3O0>jE+4x0M!YP*U*K1b)U3v#2#;h2t3zYTym*lSz zbdVRgoDU<~+}UtS0wJf8Z$B*UkxFdEKi$fCX|uE!DtjaT85P#Gs@T<=;gVdKPLE*> znY_lt#2=)EwXg=3#**y6A-4k*Q6!hsAM3Mapj<^Lua#>R=iBeihmYpN_J`%04@;g# zIH<+$heU_d&u<=1yN_zL+QMt_9npYP#bb!kXVVSYG}#FA#0BC&Sroa=Gl{A8p&H?v zosfg$OYurQl=jZg#kXuNX87lF5Hw4~CEZbT-H$Abr|Zp=HDo@*Dl6keWh#qh^5Pi7 zHRcS08HTeKh*L$eMl3OIa2`9tk_FLLszK+b&s)0B+fk;M8)xVq=+)kaA6`0Cd`;1E zQ*uQyIWNZQf#XB(9nPe;*}AeqrO=b>mG|Sx#kn&awaY z2fAhC*@V@mb9j42kn$F(4?%9JD993|g_;ErdSZ>-O97wEjs8BG+rT^kayX$Iit(cbhnY@RnHO+QB_aEa=8d9LY}N|7CHO2*b{bK;Cc_IaXSoDMTzhI?PrvOk?k2H|Dj_vI_>Pagaa;B;)69vEGCux;#N&nvB52( zexFZ+Q{-S`Su2-fTG+WHj^b}8rHNXEDEm2g30{i;Q9ewR2_#9HRwIv0M@g*21UqtjJ9 zcKLw=Zksb_?p!#nOKgz3#0F`KY~bm*oa{XatHqJCmnj0J*MZ!!U2?o>*!G&daf^&4 zw2?epDNcPtZX!Qx_Ow~rHgqLNYEoF|A2k;?v#JWVWoI2lZzSBKcv_~>EFzhB9)rZBbPtGm3%)RBei+&5OOGKxc zpw4K5I(dQ~FAL7iu7!7#)?6={f0Ms}Yn1iDV%V}4?!5s%e3gvt5Gk|ElW5Qh`PF?% zbNohSvOd0^vUa}8F(f_(XOC2#D35%b0HFcWL8?hijXs6NcIr>P2X=WYyTm1V5|01fgoS-{3L=O7JQYp97Fh-j9O?wu|kw42h^X9>Sbs-qkUA-*YOWIM! zHMHlTf7fqrg?+ln67;fkc$;&UVGUQoc%t{G*2W>$C~~+_(wl z_#ppQYlu59{v2H*f5w?Un#6_oEYY%Uoi0X;^0$EoO#deS0)pwXkBfxV_Xp>w74OP< z@n@;V0lGdVN$*1n1QOK|E zuLO3CcniIYBz+Hc1Vvz3yAdchTvMI0UVn&u%PLZ?97XO? zluaqv3v3$TIniV|(GN~ZXjU}&NGp(g;dDLH^e^EsX2<0+lW_>`8Uw^C&{<+l6yF&3ITcu_IS8bRjkIU}7~DL;*S;x(!F24W`IM_a6u zTJJS_-z=%`m9t_odAzRJz7h%vw|SzHi=Jf7^3eSCSie>R^D!4bws|9R!mpp#j%MsgKCk&J=eL_u#Uf^h$0c zQ#h*9;O+&|N+wMfX&xQ~gB)m_0)=$Mt3zA!3uD>cxj4{^Dfi z@UG~2aJLx9tRbx<%Aloi1WZm8QuMDoN)E0T`yd?JwrkfexcEbXGa(+E0e|b2g;kNh z=|BULxTT}$r;&cXVboAtZiU(|y48>G5?9fMbw3eRTEv0qB`Jg>#!figwlBcp2vxWz zet)wq#W&4&z8PJrq^@fM*|W-yMhnh9y94^Shy{E@-V1=Y{Zw|U-$nMQ6V8SGCY*R8 z3~PZzi>IZ$Cy8#5)5zu*=Iv2t-xl#QX$V>Cw@D55LwUpiad#C=+Wf8LPehTy7drfi?zg=wXSNtBi@Vu2YGDhLDeOPLU(&sIPmpOg=UgfuP`e%EU zf1A^9u3}dgmVEXRcp&lM&r(Xfu}Xdtj~t#XVv|D>8D2|J0O9e{D$QtqI#SK-#C3gw z$gkWS*3sm+R^nFvMeJ~Tua+s_vY1R3=2(Q`>R7mcD|=p9_WXNV?2On}K}qkC*-(a= z@-GiVsER{a7x(<>!;m7_xgAF#9;%>B;tsN#Zm!U`pwtDQt)PcerdUx~{DQcv(zJ3_ zWw90Un<(-2n8CZBiy4>VTVwJavfmO{RLC3n{(T^(Cq}#%)9MG}uQ65J0tDA>-AMHP zfb|Vt942mabfd+NEp>F`#e{bp{zzk5sSO*!{^*t=K7xMA!qMHnTHY|m7gss@`%xu7 zYJP>o{YexvvL?rE#pT-Qly@={l?lts{KGM0oElU3P-IrjMu?@y)FZC8qo?)7v^&gG zUR-WRPtO$7v|HU*`Ir5w<&sEXFa+e^HyHx{wk+K04kd41MtrQaxZKi@q9-DWZZMw^ zuS6;DYj2t+9viy}w&io0`Lo&9K*AM&u#9hJvDl8D9=GM6SFu}SisOV8hik0G69)r6 z$dtU~7|Ni28++#kpFT=5dIAhHS= zh*K+gKc{Wb^4ziXa}NCs);$PCUD-GGmHOMHO4CMUR)7AlrV9oj)wKWyEP#C$z|DDZIZPSk6zbBf%o#yXNTy?T( zVz&8vlVgiHdZSnx?uePTcErLInyn+<7a-u%-oz0pONfz)DKKY7oa+D_+#80n!*Bf3>= zF+eR(w%cU@BP(9$2UvkKvCc=8^u{ZVZ@VjtjonnC`y;yhm6ur3=k1z4Z#VaOd!ok?B^(xU; zByF;Eu~!GVJRZ)a2tVOE^3NhQJ@sI%_bw4T;VO2697h56< z(If8T@9L{$p^gqvs{A--u4i|z+xy9#d{mb5>#FGWAKZ`W(d%r^?T%jm#IK*5UgJg2 z5YzYvE9-j4u&kKI0PG)@T+4XU0$V;nODL;tC6<(4EYZaU5vM8wj0L6V0`2svYcyu# ziI*ZA=g(EdGI?Vg{5gK-e-K3H_gA;UpN4HA4#_NDjH%UqOMSLSsWr+pw^?ayOI*d! zYYprLj%HetJLHOO(W(xOP6ZwU&lm01^mpaWtDrC+7IhajxKC0#)g&d8p}3Z>Pi;?n zmm-V$sT^Y{6r)IBSF%uq)yQ7DO3Rb;D&Os&4#e;D~a_Aj%aZ*PSGmVom z8z%yh?}w#)ij?S~s>QZAv}I6_g$m@~rE@7+WDt3pXtvc*N4aDksE{RdbIOsPcNF=$O|ZG9=BZvT%}rB}AZQu=1Jz5Oe&m@= zpL_zhO!*M$R!fK{w{XyhCfZU^)tKz*&drv!1K`Yr+uZ>H zd&xxu)@Cn#NrDN=ZJiYd5)7?Oyb?&ej$PQhm{!9OXEbygl6H`sH^ zmfQH`*kUVaMgap)I@=_b$_D-zf&jixQb`7@CMO7dx|RLV&l&VJD~duQ=CW?n`;wc@ znaaemGo->L(nNy(os^pkMpyc2oZcXp%bkM%KaErV6CDI%qKUKeOKNK_sCQS&2$}N4 zCuYNE#lwcDmW2LI)a!|K4B0?G@WiyzF~Yhq;rcxjE;ogCgMtHT1xI;>yf!2+r)Cmi@l^$de3;I1&&#NqwUrkWe+cHDPmmQ zTs9QuyZH#e80h>|Lp;8S4fF18$@gue8zKFWAlGns-Wb+S&(~*%+v1jbyjgI#WNeRT z4#GAHV82Jj{U+HJ2zQ(c-&D@lx7#Aqx<}o!+q5Nr)Di#0A$~^Oq?=1b&G|5-#dcsq z!g2hJ+gWNdV~bRBk0#G;)4^2xHu>ZpJ@jF43-&Oi9`4!Xo}E0eO&Ckv)&Ckx`p(BPD?fN#j`PWUOp}O&~!=biu^kHyljcA0! z8{M!7nZ&b>d~F+zJa;loPUJFV3q`Iw#4C=48Ml}8G$tz9yO5Y);kU75HeD>aq=HU5 z?o__n{0xN!d=0>N4;~yzBE)aLu#DZO%uO7d?w{;!Qb$noFa9RmbJyhLQMFdbJyr!*dT77Fu+mk`Ckjn8fajnPb zr^Yr95pR%-@U!j>;le~%2=igLSVAcs*K~Dq%_FkOCH}8ix;%U6m7V@RBQJ2qP`6o+{nxDn4fq%%y{{GX7tb*J*)=J`0=4Xxkhu-;dF{-uK6_&MGtp_Vf*Zgq-TGSn(HIplEwk* zJF*;!5`XObx;c7fJ2Q%zqicQIx7gqMzV;X`3=?Z~xe1$M>b?*?tm|8Alfl`1sBR<9 zQ9A6Tkk5K3uk`K6X%_BET=-|E!RyP(8C6>oe5Emo2)-+xCij4Jdu8i$zIG4U;a`-_ zhzHplpg$#@feR9?VsoEz%whfo?^bKXkwK zue$N%zs&tu{j1#0e_8iWmfo&kocrp(tUK>t=Dz+fd$q>aTLaOx=SzAXZwSE9E#&+|%(}nwMHbOt21sh_plJ$|8Y&D?k3S#H=Zl z@gz3!Z&;+^Z;(aZvni!JM=Q9k(xH;exD^j-QYV6JOQYBO_;qpgdOyD|iC!Pl9yy}d zGm3VHKQ)N|e;MG`rWFG9Mb<$t6Gc%+f`h2x1sdHafHSB0i+ndW8pwWNblDvp-F4qK z%khk4VKQ?vE@0)$BHXNj?=(SElZKmXZFwh|vAcDQ13eRu2n*P^$(9QA^LYsy9O?fW zYfKJ3av3PzceG2g2gyS{;^Bs<>y%BlQkJgv*{?|(Nx^4gl54iKPb%z=1yiT6$*!YZ z5-aJ%dVW7MM5vc``y_Vyq3hAxfnQST;?TXQtP<%gsa#a)a9t_Hj*uhK&=FxOmveQ| zF-DUKvuU>PNMN?_mNnxB7y0zl5Rro^aesN&$!SSs9ZM)ujS8^t<{XSFemX5u5! zXj?FQN&*XPE1M0tbxNBpa*i-#&fIJZ8r)5#Y3R5c@k;749@-B-movvKRf@-v>l_tQ zn0BNwwM*GL7{Gx+aG<4;bQJsl3mdSP*og^xlM$J}kU8#eIOb&DRTie>F0<>)#00%Q zM{QpgPuX&)BQppvZsbz4WjUvyhwJmj%dv865Eo;^F@9d|Xb*;rH}Uh;S|Ny^*El7{ zAbZ^vbNF{2|Nf>dn86-<2p;tD+6TeRQUO3T%cmhw(CAJmfo;nF~5;uS} z8{luhZec?=KbLl4hHQgRe%%%=eP%lCv%^e&rnDzAd?3C-ORdbFmb|A=qwUa9Tz~1i zt-WDurnHCKsUq!K-V1;Fb({Fm?#pW^YT0jdN>GPAcEf;`c)^V5%YYb3{09cs>~8Qq z#(2+WE5{-O^;ia~pr^~Q!S0Nh;7E|LekY=-4D2Ip_xkAJ^N6pVi&Acn9`1@Bt}UY8 zpzjLP_{Y)b)=8tvy$Lkj8YJh;*Pa&#%B>GE|Bx+7#uOF6h8hljBu-$}@PGHu zqW{d+WX&e29316&|0)y72ll5)@sbs}T~}D>ij7prWp(&x;$D3nxk>Lb(o6;b{M%ns zJM?=K|IQ&34d3%Auv2r+ONk#UoFx4EbwoVj)X?0_iWc!wvxu&zZ9A}6QU6Y8)&`@I zSlA<>4h=U!iXP`C(mqco&gR@GecuIe4$m~@guWO{0=xG&%g^gpOo-L&65o>VlhxpC z@ly*Q-nj>s-wrR&FG}0)ms-)L4hP*U?~T_f*x4&zh*O`YJ|VY%i51DcaWAc$w>H8H z@mG&?7uD6RAr}?mVxvAaP0B0SsOko(@S#Ws&12%zD8mFs5aae1B{9L`qiqq0Q{-hg zV)0hnLU?b9AIjyom%V=(dqO@4Dr`9 z!_i-=$?NYLCr~vy^y@LCRkv_8#ct&IRuo8jo*1w2<=zc?2p*O2aa@33TExOv zMC%$MJ^_B22;>F&Le+l+6olM4{nP#{^_Xghh@B zJg-hUBx%og+fF-U<(ne)*Gu_SeWoKf^6%4S%Cu|B5LqpJV=Pb~%i}eae~!8%ex}}7 zC6}*NiUz5zr0{xM$yY3 z%j;|@&pAsgJi6kS(F02(_aR0B)J`Ccvqmq-27!1NESznes0VvlVH=ZO+yF}ak;0|t zN82KQGi2Mm6UBA_EcWm+)=Ap}#FpciOg=Am1MFN3A1-Dg-soB~r`I?;$r>ZY(+5cL z6uYybsCe297m*6gZo@7ip5_|)X*|gQ+Hyn^w-Twk`&vW3PQ_L&rZ@Yc#lRvg=TUrb zARPR!M#UYmQ`~TT5*i3Y^k)*i_WsRqMJ-Kct+bum4qw&ayxlOySB^QS z_U}2gYsG!jXjc1ujC0tas!1PyB%;-HSfT#})`zI1B8Yz>Q4FrK=!*M9&G_VqCK6I*fiQnkWK{zRH(Y~9*)|HpR?S9`_Ij%R2>{+gPT8V~{cI6nP@4gl{K!P&Ek~tLa@) znZ+Sc;=u`O%CzEC`kdItB@3n`W^#l4me=)2<=V09shHUn_!{ksJ*#|S1N_3)4|;o) zo@p;T(YqLIBZ7gK90Cfw$sTyUq|bJqCTZCFo9p@Q;z0J8DZZwoA&!(YNVPq$eI^jX z==W;zd^i>l@Nrt&EWW4k@6D0oFrseHuEcFopAA9^XVJ!Dh*Knctu2?TBnMOOED(|e~5h7x%3PDmyiQCN@PcCxZMi)?}KFeKnOVxl%h=#w$&~! zENhHTM-G#5A6)SUIE0whAi0tbGM(XBcrg)?Lc6V(kYi7YSGP;>RK=gK2O!*ewN93= zVRE1rJoR5T2wlYA8BId&xsA`d}$ zx;vsB>fd;@JbHj&iP4pYt!zZaBbC6@;`k>Gam8PNm{)qCc~I}Z%u+c7#gR@1EsU)rtyQMW$qGhMiS4{d`CMbP4n7g2P0IOBTy zY08xoCtbU^qejv*yLiTAeD@Ed1f&Swy$=CPgNl*eV2Ff+bz?U;p{l^Ow!J#y&|2gc z$F2wwo5f=hqd;mi=vH^RtnE7$UR@n|5Al(BF7M-+A$+|JaW#taMSToYHW?E3R~FCX zHxP{UN6g|q-2*4;0d#Q>V$Z+AJvb|2PG~HoSfjYR>y(Ik06d#c%tIUww^f>aLTRGE zH+onYiKtx;My15(Tk(4ooOG$l*_P4DhlAuBY`2#c!!=Iri9_Yi4O-!ib#w|MsW2hB z(R0OQqX<~~+b5hN^M3d~|DpB=`1{An^^8av)ct6qfqWe4dqq%C94S8~w}#?d3jY>U zN1E_NZYO(xWloYfL9^3HBn{g837=5>%nf7Q0-|pWXM+Y?40D9IcF#hyzM#;Mc1~=h@r4uuuH8FU|X=Q$+D_>*DG>aurd%XEu!<4F@;E&zdwxBtWvV z56YK8B3eF=h(OD9*Uu;6fJPso1u-vN*H5*l;PeTIS_F_gaHOXtZgoWJSbXX) z2iAybKwBc>kcda5LJAQVLaT$sl;}cqF|FhWWDu=gjVzV$$Is<+3)nq_E|4?@h;U3Q zq0Q4gFGXw6=%;h_A}sq%3#=3^@c5KOCfi)spnymVzIl}5M~FAMBeg-fFAv#QTVtOY zxN^h*k0BAvp6q^`BqoTre4m02?wm5wKqq73Mold0Bpzkt~I2 zF%Wg6h(_y@IBJxeJS*#pk3jAwSDAR}>W4rk_D5ta2xMKYtQ&yG#++!|oX{g_kU0Ga zL)aEFSzI8u{b;h?e~#9pStGe@Ox}wmHx~K?>91xcz5j!lkk~{rVW*KE0J&`l|7$GQM<-bquj88 z7mQpi65Zi4(h;NbDV&&1^8vRGyorC@damJ-m-c!D%rRZhKaQ~~%<=iIce0F>#BfwG z@|;U$Ad#Q~&`u<)!xUf4snNwr`I>2LEO00_Rp`@9UcX&M&w-mtN}}@}q7wzTd_fCd z7Bv(oE$UD%U|MglCh~pyrAl8V!nf2{afXJ(f#@g$#d@CG_Lyh)e=yI<|KU8l|F_L^ z_`jUzlR-n&SR-86lsv+9L-KJxo-A`e$iY8y@G;qaz*$Wx7})3{J)QPkisZJ6Bx&K{ zJ}IM%dz4(cjEGI>kN=;a2)!^2#ics6g#u3?v3v)Grl8n;2vWx<+^{)xn=`*~1SXEn zhHfjKUOHdIsh<|YTG0siPaz@)Q5)%psa#6`-)dMMZgbjqQ(^O1*LR!4RP#s$%&H&R zN^UWxYa2|lQOP^l$y)ofJYIe>&xIK9XAj{*`ERr9%u_WgrPCMz?lhg0XA}ok~h60XO79r zI$6A{(9Izhnx)Wwu!_9We8Yy*;G$_Rt2Ty?7-ox< z{zK#0uH@6V1I4&+E(OLrS+S&vBiHhL46Ctb2pbUjO1Tx6+vzB z?2a2M&er;WL`Aw}9Ko7@uDHdhij>4VwCWcMI-{<5g*V36~jOenvbV$=~wg zbVDt(s!wAib%Q}|a8}#IAUiSey87t1eT%`P7XByelG+2JG-pqUR(#8aV#EKHuT3lVm! z_zPQa)OVKAd7ra^fMTWz4rwIS8-$vkIIVJz5+ATc4XKvJ99-h8CW=(S|Ael{^;aKm zfIBXOPBz93m2)d`uS0zqH7on+`E;%in2>Q*zkhCmD{6~w5>zENYn%9t@Y62h^-}~F z!_=-bJiU{`w3ZAo$J+}vYn}8@PnGUFAMKTyWOtRII#v25gf`Cv%8JFz<4*beL<0nPP60 zS?VW8>*QQ7tk=keyQ=O$7uJb3MpC+14NStIN#p?u(Vm#BqKt#6XuVRjHU?=L z)eG^2J06G2Yfx-3DQgGN8{;P?Wxzi4R{quA!zjf)#SL@K8F+Nc1jM4Im+}qHgm{KS znAi1CJ4tuMWXmsj?)#>A#$sYc95;P$!N~3XR{zX;*AD~V_le=ZrnWrSg+VKA5x`lv zcM8AqburOfBVt`S7}W+pNQ7o43z5-o<|4m391DM@C5k;e8)I}W;3*vli8htsUHY~Wg5aKOxeq*tt;(qF8uDv%?FxOS`OWMjVTr+x7T4tzlv!q-}$EfIY^496qn`T>3fbAH)IUh@05U`l{bNaie&sKLbjJQ%McJNGAs`gFGHc zMZn+JxM}FGgW49&s-%zsbh4Ctm`+&dip~8Qaj?wwVQbo_PfOezQ3hZ_*tdnY>WL?L zVM7VhcnoDOK!pBA&^mL7QYP@DmqE7e639*xuj8%Qg7=I8U`hk9QtNtWkA|ui-LO)Y zZkUA81ioq;1NcRgFP`j2OGFZ?Hb0zQprx8KpR62n(0>BX?YRk3VQQ$C!w#TRbz!4V zuHACK)T&Jl_2T6!Z710ajV#l8%28-@64SKC}b&BgaNnE=q6{(x4Rs0#%=QFx_-!z;hHZ!+;k1cdK z8{xZkq|Iu%Vta*%wUrvc`veE$T@llK+LQ~&fjEs75a0~nw#q{IGM?{@*zu+@x z_4+?5|46dzBX_gu$Q*X3N2+5si_MiqIvEEl^)T)Hls@DoNCP`Wi|5v*;bsIjhq-lr z!*K1gu^ix}3a&nLtnR_m@l1-r&w&H9*wEqBQ5q7N;*Jw&*?D{B*uDv;_`n zQ7Yq?%o&LbpW8>?rFG1&*$426nV6?4$yjp;RTJbv@zUm;7>b8#__CN7`eG_Rw%{~b zq%(mluxJ`hJ=`{pxXo^uag$m&sGO- z5q_E=kv%KZBB;2Y0(@N+u%!fCM3JUsa5}yC?$MXP8I9sOT{GTw5mE?CF%^C}iA^Rs zk$@y7T`);}%5)ok>@2bto(A$$wlsQ+-CO>qY996#Un8?fc1)I)GpG> zjR^Yul)uj3h<$N5dNBE6%8IRsGf(nD*eaS}!4xWEE?KX+$IsLG$hGrNt~ECdpM`XbjxDHeIG}C&or1hCYdu@(}Dkeyl#(d8W-6#xUg&r>B3gG;qV9)xU0(kBCN=m z^s+w(*~-V;3+IXc9ty{_h`Fk$PF;w?#CZqVVsHo3XtTzo$$vNdjtTX`Bf>b;5xCOt z--kr*)X1E#4mUtYHhV)Diu0`^CxjYqWXq05JW;3O1)IwhzAmnnvGO7hErykgfoRJF z+&!fUHVO)J?PkI-=n;=qlNK2Q7z9`UTn5iP3gkPT)i`{jnJJ)ZHsLh{URvA|r@MHS zmbr*Wda?iP##G5wM&KYFC(Xb`7W7-8&)YSF^=nqYYSyD>s5@d;4QZr&`jq@c^Ac-< zjGqa{FcU5M+`3)j*&2J^G`Ra=_-l@|;oc|kRP^E?ZR2pJ&hA%Ih64@)XF2`I(3_cL z{T!>lj#BE{@g^ma(eX$ODpH^#T|DJf`Fc4#B+U3GsHzjID=2DcaeA^T|J0#bv7tg? zYSBfQPQ0($(zE*98Us-@`Qk5C#@LGGl|8AXR^4)q>K0z=thtp{ z_Gk0i@vVG*qkJ(=^tjf|s<&&DGslRN9jC@z%Pjq_G~tW*)TvlCG9G1xt>WPA{2}1^*Wsx*fnl> zhN(b3b-?|CrYJ{uBWt=*Q7SW>%6zT#u?9xMDkv2PAs(wD{{R2M*>wN^Je!ZkVW&Ro zjnUa-9uY(*9Y~!E??=*)Wm+9_IyH9~D-x6?;EB=+`Ygu8J#nJ&Qaz!#N%L|Vb190e zdB4Lx_|4n&7&B;zto87J@wv^4NhbGd+bp-yN}^>a4Il36NH@}UY{{|yVB|7FBVp@g z4WV-Ii-f^DQ+XtYZ8-!BatTtNr4nLWWw{|`Jz_C>Pl49F#ZAPUs-EZ<&PnS{a}DCa zu750?pJ0sE@5qt#@o)uewsUi^JqJ&0Rf)UOXXX-;ZP6gOnw zW=V5Qqm=ao^X3%QQL4(}2jYb6L>qT)1Oc&w(bjg17fO~>RcVa9ibYo1f3{PvYw2cn zg{-MiQ7Sc@N)0X5ZD3_COhbq-uISh2K>rWM*MJ0Xf8ReSC=nSQBqiES8H{^>aty~Gfn)?#* zB|Zy;kpkI9m7r3!}X)f)jt-qER`GAb53kuK2J5Fppi_yJ6~1 zisCjChp9m8iE3h>%huZxOLU7HBlz$It$k3f{=Bsak&;HcoA^mYyV9Z1e)kA=Flns; zg_%Vp*_yPc6uQF{&5_8avLS2CU*5mG>5+QDvfjwjnwgKmzgR00!q#c98k!YTd#;%J z!WApd^oTE*X;Qx{&i1xw4$9|;XJ@+csgToY?!`mJ+PIb+@w+=&OpQm5)@rn{!6sTh zLN9l%6N@W!1;)=q;tCN`N;GRmY>C0DSK%(w?0|imn&HgE#EEC-!W^78K`e>MRj+b? zsDSOsVYO)()&xIGz<@?QF<~l%vnR2&Z#}|nTzf_eJ>uI*_-TunRb$*xAbv}{1V&-& zl&v-Ut7pw5;YH=#HN-CL|KLin&s6;=ID*?-2m3X-KHE~LDs2x?K>-o!RE!kM-E4i` zQeyS9+~TxE(r@M^tMXZI9uosCrwHAG-`hKxFRmX8C?@)uPq7M10ntIZq zDyb(y&aZ<(P52x2rXN*F>)yE8;krMCX6_8);gG@3Xd94zx-&?9dzQL{yW4F>SY|f|9)C8TS;DwLD7PL_Ek@`hjy0S)3?d z(>t>zEEXN_!;mI8BXPFTn)iw6lku~u@nH%sULvNEx1eKIM|RkuAD(0j?>K+=X-KFi zI>kRo_uBJw?Zz}&yFz%zE^}nkn879|Dmnjk(w+Jt2M@Q~F%3~4+uxG82_(B_D;e*Jo;W*B(og28OEwg}i`*RWduVM6-Clz4itl(%Ih z?XPcw|4I~R4pF>SJOjm}t7oA{mv8Z*u?c>hC{16OdeU!Am!_^8XYOdMbI}sf&06W6 zc;3<8E93zKFBuw$*BtG5!Mt9janG6zj%VyJu|OlAHGzK|T%71kiQSHNcM|wxhl-t! zH2#;^t75MbcyjMZoM4Mgu2Vc#%sobXA^elZRim~))gA>CB}n7XB?pM>wu=WWZS>`H ziwFx+Vzy2~I#V-Ojb}pFh;@J_<{BctC49Iy!g9hEqQ;%Sfp0Fs~4Q zRApX88iNR-f7}c`C>#4Nv|$j2oJPSKQ`%!+>Gfspl!cop+b0EzRkkq7b4icn7m4Up zwP#ZWAL~9*?zDwkFdL?The>?4cjj2rF1ao}Q=D&P_VcEZ%>MdKd&=xjXgUW*8=*bv z2E8^&X?DK$=x9tnJH@?&jjI}x)ln3g z`JDTfZnLr2ra!q;SES!d#3utu470$f$}$IkjG_V1m9Aq7c}bFrRx0(7#>H$c38^Cq zc~R!;*xKa9_78_-O91JFzCtu!t!3DFtr63<>Oj1$tF#+E7}AzLhtjm9rzjDJfTit0 zQBYob%9V-FGsUO0{#+irI{Bcoc1}--X_YkBq;W|++e?|Hmt#rM%rSne@50wx@N;lr zQ##^mj&CYsS>kW-MSsfJp2XGMSfS-OX*jeg#P;0w_V$4Ph3ZMrK1n<^C=%k3lYLhG zKcKcVY<+rgP9Kh5?VVx|jfOk^J&lGxRoQwSaSgUCfYqeYP^ZWX9A3qOW$uJcRcUG4 zI3hzL@wqG$pCdVvLSW0{bD~tDl#NW=xWz(V?_o?Oo#J-nn%m)lDQ&jwZ7t>V^;reU zMtq?ww?DTgIZKvW*3aVZDob}Bd;Ul#$>RbzpanV-y-G0>CI`gF>$WS6kddT}m33hz z_p#WqKYKFQo42>un0qO~iolFywLslUy1)XwRB+!x;a6dMYilb^Xb~Up$FlX&Mz+pk z>_VATon-1|5_R$0{k1&3chz3vbhk{be`f_-3NIl3iPjx&8`~!6SjW3?8eVdYS zW=n{ZPtyexdA3f(nL4LMTsfo&oe(bFFvP%>W`ZRIP(=5Ty+DnIG@ScBIdl$t%`C8n zfi2(yaui;gwyFD(Hbn22=t?ZuuS}t!cMpYv-Y--r*tlndFn|QZzbt+BL~MB00g+b0 zi&dmmFyuuD6P@~01`VuLkRz>vjn!I-prelx!O8*Zsb#PnuYB@1ex6dZaK3}I>UTRL zz`qTZ#S}uliYX<7WO8H~q-7tWt`Wn-pC?yb^YwThd zi>ZOwRn!x?XXu`KBE769VwdTOtP(BoSRXx+UM;rmEz=X}Wj&Eo(wwRFM8+V6ApU-U ze0K+Xir{lQ4mU&pgaY0S=7P_3cw`YuKWDNk$f*flM)qOB4|GfMh*uv_u61Iw)=3xM zPNZ>i%s2kq3McCavT!tJ@Pay{d}j1UA{Bs~K^4Ft5_OSkh#TPuzJDGo1>l++qbeYxCQiHI`FkX%Lz)-mlMP()DShcW?C8CTnhoRwjd=CB)5xXqRnX zz^5i`?)FbIx-Ne1Y8>YI3C|~kf3mna#t|u*s3lA0XW|-Q^+KuzzLUrqT=P_0q$72W z({QT!)Zs+a*+Qh@Y8`-BU4wsz)4Wo;=l+Byk;I56x%x0VPKuM1r4J+gw9RI8kFzny zt%IsY8KWd|&A!^w2JsiI=W0}}GtdxsyC&A^=7KFi}wtNqB+59Ni->p5x zBvUS2DC=u*@oSn8wM5udFM3MYl`*=`VlFOjZ)cb;B3Ptf)`UaoHOepWnrMW=l*AX$ z!EikV#5dELGtpeYlcLd$2H8;>KS5odfL!YtX}2^BNmixEA?-o$vjw!lvmTl&~R%##M9VOG;aS#;#xbJ-(F?~{9=HyiRJ3dpmyyC;)#w7V~pbF(%hwM7Z! zXwgxP3x=~-y8B`|ucGyvz8H|2Mi)w!RJujH8JN}JiO{##tvz*opVGzt*eQO%vG^+G-&Ke z_;^9jXc?cd`cbuvGyT z7#5C+R#qyWY%Ax}P~yw^+~lIj??4yGOkPi%al~=#TY)!;oL|J}oa}Ilh|fEg(r^sN z!eT260b-;oC;_f;xMZ<2rLW_byG{u`d+S<+`@xvYnprUCda8r12BTgm~mzRY5w-GVI#{SA3?jJ@(20FGgNL=Rkxh<~KogVzIogNLbV>zZGnPKk&Z1*s_ zy6mOVzk|ZdYHvxGn8vIEq@3RqHN>&BIh8V9zX z5vC!o3t7e-+{J2=pUa{(c&I3|F^g@R*_OD{G}yD*97=$_Q3`_X^@+xVFqQ?wfW)f8 zEwL))$#!RB&2;X7&TZ-3Msn`ilw(Qqlb!k70$!7}nz|P73SXEa;pJ)xFPp8;Auks| zxTsP~$W9p>kP!DmIkAu!T6(1@DhBSCZH64fB3fXx3>d{Sn6<1S2g%5-hk%2DxfmBe zXoO8Xj7QHJ#jErQkK!7`N6_De7UzI9=BiM)KUt+n3J~{}ssNquXSf$Q^CaJKh|C9( za!F;_5mh7b+Ae1Cf48K|UdlF=Gi+Gvx_&vp;W}bH8)jyznuz{rB?|BDUpa_3ZV_jU z$-+^aPLlKueP(h!GrekM>Uv^;4iTO4e9?rB0>4r~+-$=D02~yYk;Xe{&j$WAAUj=O zk8Us9w8kmCkwD#3Oc#*=0b2Dd3-+!oudhd-e7NpT!#h8<#Vc$GpqiC`4f%4lQ0#DM zl!F$3QMk3jYfd~4O^83|+>BW4{1tTT|8kBBA}HPArm4EzVT-f=e~HTN3aF#~zEHoF zd+@fK>pKG^FDj&XYy+%#=ck1>-9p?Iy3i6%1>26I?Ko3;@=SGNs1|bANEQ`3VqC%erI0+%x+TdG}47^ST-$?tcr_z$^?MQ=^HnIQ>q{WZmUFB71I0d~G z86r5uN-K$@!(;%}LZ19Iv?>{BPCx_V6pg~Q0ZMMye6W28?Ck&+@TtfI$hOO#%GG7X`ZNQ3X9yr zo>+%;sKexde-}lQ3NKRb3RRZXK>t^;C)1K;p&ZetR9q8s{!r+NazNd%TkW3GBsB>| zd)|k$OO3r87Y7!jvdpf$8Se-(L0K6cPrW+(A!eP;-!$ zHiwY{wu~D4SX|sO4EBr;)v!swlZG{HnUM^@ll?QAsoMnh-e3)f1}7#>g47Tbe;Qz# zG%yHkak}9*nm`tMwW*R4ffXqep7sSPtp=FcFce0j#eKAMp__?1LHKz?EF*k}%|1!@ zS}Rm#4Ltz@Y66&QdPyv%mzG*gs(TRXZh3XTQS1LGn>-?~RA~XhfCs#x##S|FBoAew z*FUZ_Rgs38bE>Q&)m_lSKxzx~p@mjz3$f4vA+mgcjn(C=Dd*Jy+HGOG-&PlPp$aMA zT#K&kfI+02#R~0`&{ih{m9|Z?F$`YV{v75@eBj+CrjJ&coZT1j?YJmkOfxM{9D`|b zjQn;Y8)r?GCL%(m;`jdLGD&Xa6zfa7vY5CtA+sSy%wlIU|2Ii#tjYY}DWy@D`M*R; z;|NC~|7EXn^uuvsDR8f_#k>T#;hhy?QXlum*@coJIav>!|B}im+vuk+cJOX#7^Z*O z9XuP|P(3YtU?l9JV8rN-c`nI%h+N=Q*hD{Fv3--PHm14a4n#?3Q zjYjj^bQ}WWk7>FstS%;tsP@KaUIk*c&2HO5zC;g$nV?Np00J zT`7djl~6;Ny&`;(2y!h1;W&j4h&I9w7#e32+EivwdSJtLv`$*TN6dagOrIqV?GPVL zN|+P3+2M3;;KNb>*oWzSE}go|z`Rk2Pvj(^{@4j_K=32AV!{S-s+B9l;U$j9Dqbu` zgrdsWylI!PF#=6-_z55NjhFXzoLGIti8uq%UwJ?%E*Pa0vFpt$*p1)VE6f_e*)Zkn zf$g3RUurW1PU*D4pBklxhwNrNm(IUgO4-?DsG##boZKZ&FZOVN5+Yr#oea($CF=W# z3r2|l47t*n27$M2hnX;ABlo2(?cZN*-v-mKjEy$Md(Y$TS)h2kNA@TPZL?^?JqGx| zlz3Sw#l6L7oK(8;yV*2TDmY7$K$U1v(Q|`p5}Cua^?m^La{zSqZdeb74`}IkhsE=A zfxJ?B#2z%>Id~V_Oz@zK7O4RUeK&Y9RMth8B|fxx{4O>vUG3QjfW2)>1@kTR0$d^) z!2|LN2ds>g)luFAm=?NQHGr;^kklkojGRz?1~N5ho{>;LgcebtAWjA{kWuUZZHWv0 zw2J$}?JmRlyHZEQ9mVXM5fVr=P{!%bYT{5KlHy(r&J>>Lo5s6HPh7Zyw*C&ZaJd}`tE@$Mn}gP4ar&U6@#G12d4DvQNe5p*g@$_p zA+{RtM#S)8W_EOBv=aWS6hX9lZrI{K_(eJFDV&Y5BKC-dJ2$Rjz-tw*nx0N&EEZbwBU!y<)#(Y2E*Sg3H#D8V% zi-1h3qAoma7uw;XGKhXC&8uEc_>M{)>x7Z?@_fnzhMNbY74F{O6o{RVN-Dj$Mzz3O z$yy-Fc0`9^KqvLCkrI(<#CEE#V6NdKyYpm=i@agt&ZKPds$MK^BvroH^#v1Ca-MCQ z^DN}tXn5@!5DtrrW{Ka1?1n18?=?>28W5dRSHwpG409UIQTyX zb4H(2r1BDv=OQ>YX^MI{F?M->wiDM>d@k(qNhzIkB>ak8*UX`-iX67&9I1_Duu^+& zT1u00ZxhvZ;vSMB-M@pZ#JB8&_513%DwquEWIC<_7+BhXqp=?B^K?1=EdTr+eh{6F zIWBO`XzEMQ=KWr-4g4Cf-N{eo-eU5fvDyp+QYTNXzmegw3whbCb9x$7ea;g| znaq7cJi3+FZ{-bJ`I%(;#AXND5GW3NM4X!x$!<%EJl&oY33;Rl{Tqm1>|+ae!->0* zX6Wnmy$!eG$uZH>a1YTW{Hw(SVa2p9gwh`R=e93Vc}q;vz?lZ55$ za`u=PrbnkZeDz@%o0_M^JwucO`8K=5F>iOM(L4O2dE)&(i`mXJ`jk&@HmSnIH=@4UrpSCunuNB#8P9 z!SYMllpdx{>HS>1XdV%|rh;usL)#WM`gO6{K|DFAc^Gzx&GSe;fb2S4Av3nck#KpP zm5RlG4aHqY=D=R{L7%uSgOhg)zs7(7b7A~X;iZwpjxt?o;T&*9)hyK86uG5lE^Ju1 znc0uJZcUL)+f3#;GM8e%oD8EDl$zzXZRI+a;aZj}^F|-Sb6-(e{ficuEi_G9oYs>+ z<@p^>%5<72uDGYsOutFoQc6cImYHkjiAx5UGSb98PfO~2`_^!Gb~+JK-={Ln?oSNQ z2Yu?p>{&B;e@oupsDa_`w6QHSlXop=c-X$PO*$YOF{O<*+R!6%263M#yuvooNVS-1 zhjRQK>X_-5Tj=jl{le@^^W6KB6E5rv`_sc#Vt@LBw?EmA6HeNoD#Aa$8cKMRN*--c z$#`e1s!ZhMU}<1y!v=s&I|VZZ)&lBT$~#PnhVp2Y!uW_0!+=$XIms6LTNa)h{Y_Z^ zsZYg3_7FM|gVoy(^bietSMs*jrlyhaUQ-WTwVAxvb(Z+v22>@2 z`VresJ@}Eg)qN$z_Ln(eNc7u7QCp?wq&pO!3uu)!rt<^j7K&VU!!|a`LO%}V`U1C= z0#;*5<%WaQ6~>8?p(1ssy3tYgrawSqgk^RaS!;%}5GfzwlXeS0BEX+693{RaoL^$s zpzJ+N9(NrYL+TY~?@7FJQm|ofQ6A{SKaWaTJsT~9S5(B%f9ijPfJf{nvg$}pZVuo| zz+t+iKgu10O*jIAY`g)A*TXKtoiIS=3|BpUKFeWoFu8r49H2A+=1` zGGf27VR&te*ISk&?i%5x1OnY;cA3K#7`*xgGRYa%p59+J_?dAeO|Nud)B^Wc_JjR! z3t+1a>5mO{txhELhQbt+j)}Q)CSIhPsr|Yg!%fl9e%++<>&9W~L)HJeKV(^yH1;r$ zpn~Fi#bRj4`2+0s*c$_78cl_g80;Qc=r?4t8`PvkF<>Q&`0O61Qrb^g&}<7lyIw5Hxzr}lLSX&4*n>%ycuq$wDF z6_>5R$W1GfJl_pP%98dEr5>v%P`oE_sr^}zZiRQK0b7Q|7Nd~a68bR#tXU>40B!b` z=}j*}=0P$*p5i8%0Xp#hk*@Pk5_RsIQs=9&TFPE~rvZQ$VzF37S$RW4!yNIa5DtiT zomq;Hp3IOt_lS>k=UxZR0LJm)F0m=(j6;^bp8c3JgX?HRzyPastOr_9_hSNROj@vB zEGY!NFNZ20Y(meMp)mWUSkc5kLJQhJBeU!9tN_wPaa$lqZO~&4#im^ZD`GCnGeigV zV1Lx9?m17YNt9};=N0}DuG3HRLMD14!w>>V^*QVTp7hb(pQpX~(RVocRv-ru>`DQ@ z6eR906Lr7iurhH$^zC$Cop$cgp--q}9 z9gBg-g@sLy35wKVBHnlaav59HB-z3Z9Mva<)?CJ;`O2`(FUxb;4z5g2htX0ly+zpu z-o`1>a-tvkXM3Tr%ED+-uO93^TKiv?(1nTAV>ES>cL!p*qy?>{>hV>-*cvwKaL|z7`)2KZKj=94&nR zGd>9mtJR;^d&L7^6^^>)k)cBM$h_09iwax1O0dLBP*MszWyEF` zDgvg`TU?zw4>m;)OGG7`w^V$U8)iEM-!zV{10M0;KBSqEt4uDd`G(3nHaZYa`kJMO z5lxU$uwBv?`ik?$jNz(kZ>uJwePa4%Td8m|W6WBGaswN!WbX+9uQiDA-3t5OXm|F4 zz#ev!LKf*3K=Q}+t8-%yc82Tsa=ba9SGOX{9`I7T6{@o@fybmO_I+}&SL}IALEqtw zJaNGLpUA7!ZQ)p1k>j9Wgl^;&;S#>E5xdzAvmc7L-{Jf4B%wxRAEMjhyF++S95vVn z3&od(j}OB`P@^A-?DP{=yh9E~4>k=p0Fa*v1x+YwiYb>Fw9!lNgh>j3ur!y<)cjL_ zOAG`Yh=_GDt7O_edrS-Z_3svoMU*q@%AN&HJyH}!aZSC(K!`ICf4a4>*la^CVJHng~L#E zR$Cvo(TpM8>Q_xcQ^1b2hy*FqvY0^Mkarlzr=~0*l3iUAV2GNX+zfZSS|3VCHo@eZ zW|5O&@jx>Xj_iFG0EE%o8I*&9$EfF0UtyQSwmeH}-yG$3iC6!qQ{n=%hF&u~EoP_8 zMw31&S_%?Tu0+G+fMY8QFAi%*vu?DokS!qrc8{S*&RMQ=Ms?0;B4-S99v8{}a4Ogt zI(kzE(A=f&9DUUH6595QIHIUd{8y&mE%ET7D^KRjbMNnrcsUHwH9r^Ud9NnKzb{{^;Ss^ z-PR!prz%_-R+A#y*Pj-SS0LG=cUUbl49+h^WvO2k*y!dX06-e>{G%8Vs&u9RBS%u% zY!>!KZGm>?D>6$VK2ql08;4mFPvY*1ZD7)RIsKe4UcLe~kkoY8Ws~_p7&HpqrCfPa z&Jw4r1h{Us07}q{n`GGGj`o1`6W9zE=xA0$WA{V6){8hJ*=UmLChT=7?%EfUXSj8_ zW9*0xX$r~9-&Y0b0-i2_%L>>%a`k3D<}9yYhgZ?Pf|9+yL^Kza0Qb0Pxp=fF9FxYl zR`j?odGiwb72EN5P+zqcfY%=x>e=@?c0Hgg>&O;6k{;s6oZdCBrtRy z=IDm!0$xpcx1d^6g@866;S!i;U6&zEF&S9e2z&#-xTB&x(ZCir0~ewHUAoRLl=7vy z2|fuhq)2u>TuU75E$n&PJP@05zk29w`r#sS0-N3XYO?IhdTCS<)`__ z+D|j(8-&8m9(T|FT}S;||B{=i>+li92Rg!J-$x(w*`+LoAGe8#%lM>axL3ZJCSF@EJlYAp42L%*y`>y0vCpC+&LLN8x)+aT&Gi@^YB=Nv) z@ai|#tKV!(zs&Ri?(@>D;kvAsxqz3G#04G+=w!#emyf)1k8$jny>zxS&(L{4K^A#6 zuW9Cn(47gPpGqBlzn2bnCaMP@+Yfi~>Ri}_r?(3HWzTGeZ#K?Lc~C)wj!K3&Rq96X z_p0-PhRDtuiH@D+1#UG3ypVa^Yn0R>HB#r= zENB+Bsc77*=uWQ#cX~NL@OouVng;rq_tNN%;1X}(7I=fZ$$NRm8?S0_D93qaU9J`% zaOgkrJkPQv+(NE(znJrmc%>N=J}@(h<85jeJ!dSEqTTY-5WmNq9+|-0kxuBlxuWBjNHHBV*(e@m9TuL?h*>u z4A*=@jh7g36Rhx2+fj$Gd#RZ&Vj(NtDRcPu^GXbH-*&=Li;G--QJ!NkJtmHn$47~+ zK^sQbck^!u zP%n#%d+Pwq^U2u-WnY|lKQO zXg(f84D_7ozmMaeaT-3KKOWb^~wHl0)VSHJ*MI5(5i#0awQt6k!}{5g+Hy z!NZ3s7$N)|iEXDPwYX6-<#Tsx?As#c6V}T!Nqqq!AEu`NH1+dXYWCBqv8PjGA8zx> z`NM}(%33N?#xT*OjpvJ~Pc86%j`D7Puh4l!N`fU)Z+spsbHWC=l_K5h z{N89ppr#Dd`PNzb5~=A(%tCSTbNn0V#ECrZ~P#s-d9Z%L{><(Qm z45bN2(ca}Mdypq)?0J$r3Q0a#d)_2ABpI2Q*yjPV7J$6B?pu=BY!M`ZW}GvLt)Oh< zlIfP7I~As5;{XtJ$+^oSNWk6$A=EyBA!oGe`uSAq=ZVzMS}D$qL+T|t@T^FwN$q-G zS2U{vcQnC2NU646#U@ESz)#M8y$Kxz(`4Qr{#>J2&?wZ9*yyAS`|g9a{(U{W0|V&z zMhC_4y{t2o*EJL-YJDEXBiTCO|C9qw_J*l<-xG#@`NDg7$BR1Py-YB%(~h<(zq@t7 zPDf|=C}Cr@$Sylfm27~ZHw2$TRM@LhZNIKG&cyL@+}r~{Xf~Cj+3))We{2;|Pr^$l z8{;J5rxJW2@Th2Pauk;qY-A_!+9q9ZWNGT!CIHnK7rddbiOT3?6NQ}uhUc(4)U(G( zv0KCLL4LV2EK$U!3O;uUwr;QBG`IYr1KfU`?%%%V{F%)}@zVzOff@tEUXU-mR`VK={1DL-qvHU+Vl2#+Ors#h76oqh28s`0ccg4nTZx` zkTTcM{x7D%41?3%T`hWT0!nCQ+qyoBQ+J>yNoNo)gQBi6d3TG~`l)DB7d|TRhuw>R zSct7h_=Z+>Pv(!ralHuQ=UxO2est>Ghn?J;`|gg z+yc{xHzO`}cu|nOEydRHDrv1`C&r1#gLu--A{Jv!o)^=t>Lpa;10yFYuH=jMi&gn0 zPL*cbTIsn>oe`pQZ@O;>wm-q+U51Yt6!21jj@5d^B!k{NUP$I1@cw8$MbD?_X|-L^ zdka0krjVobjGKZ%JFrhrx64JR`w>{GQ_R1a z`zgzS3BsPP5z_%ix}Pd$Sb!67x3^1pUhak6hq5g~Z<@QjmoZ+S*3%d&Z_Rr8`OR@T#9*kuXS_=wO%CVI<$CV&N=z`HQk7?A3HIcWohawT@=Qz4so z39^X+$##qv)Vnjrd;L%yKyT~R=Yd2ApRvvrIz51m-rvGsAFt&lQCGC6g3f@#f+0;Vw{O-6 zrk?%S@53njxdABS^EbGUH5{6_Plb3#bwAP*PVw4Pv|Yd7q!^ z7l*FlCI-2M)-@1_;U6N1Omx6g8M0)A?qntgf#9uDo>pHYaLZ(h57(KgpOkPjB~+(Z z6wpioW2l=SP%=go@;0^LeII43yPj5ho}lb5rJG65FSHZhk7mL~bs-x=fs^PtmYz%K zNj72FczQk{)ah7iF_YS~IctDcx`_@1Jw{S*xQeYu|+kp*!CD}6iUT_peYkM zD4P8j?G!HRL{ajT>xJ@+UR;@3GX8k$7lCIWiBe-hr0uifZ775|EEE6141?hiXepC20fb1r=@^*%Sy=XUS&QT+nV zqbo%uF^ClMn0@ z9ajk7u$Q`5W|Qf;TKM8cZ_(?+^t=-v57O&wkwE`A0Y19?a(0S3@G#Y6%{iO6S^5%7 z)0GUf#TP86VG8J%s}vHQ7Tk|Ww3U~#Y9Y3?5?Psuh{6CX6r{dUMK}3#BNuCyi$sut zgolT9m-3{`sO9aq8!glx%?YrUmz6_*ibRweRBG-vO00y%bggFpzC}s{vLb z;^RmScWY`f^}_RJE^^Zvtsi0sT8c6FL#%wx8@hN7&*Yv-V$9lhZfS~L#qWmU$yK5ShG@kb_(!Lr0(}j8F12wl zrY7BsXz690^wpG(W8Dy8utNUH6LdCQLu7Ednm5FY{tO=x{wUs&x)Bm=7VBB5x*OeO zD!BwejpNs#SuWy)js}}pjm7VODkbDG9n!>hTKt2vBqsQk=H?Tr?zh^8)LBZ-qKS?7 z-{xpoFbVgy^7}eEQAEQFYf=haYpFx0rY5$Tu-0~Z?xyDpiO6H#dFm(L%SrF0#e3QB zy&UmgHd}nbY5P95iJ#?AHYUXL`jS- zprX7?PjbHL5fb|ILMC$l!hR)H$u@9hZWy?;E!=Oj;a7+4IA`b~m91EGY!}ccks?AHO&G8o_HMD&+>B*6cN3YaMo`hn(;( zqLU`HQCud)>AhlAK_wueSN4j9xrO0E$+uuoVgFv`eM|b0;S!Vgh4(NScDDExc!>{T zSFk4vQh{*=%q;_O3P>417zq%{!f5dXPf*zS03rVX-?5n}B02Rb@nzwRVKoLHKS?}M zw4(wANVQzHcnql8;4f8k|BR)h3JMI_ju!to@P~P9RS%&mLdzX$vosiP5}ixMZJ{E` z4{zZU`cxM7?_KVQs^Wg-VfLoi3(N>S13#~d?T{CCL8zLk!P8avLGDC@K|IC7x0fH_#2>qukH9zHhc$TaQe zSmK`gNN}7f99SGMlVkujLPJGnz_CO`pPp^KjvMIhj3+#tn`vlpj5du%q6>D15Y+yb zl+((eo3LK>JIXw8bOz451!E+ISQk=vP``EbW>w=of}j!Nyv;v6dqx zbUgG7Q11G?YU_3NgDmSBYBH(X6e8C|YI-KxHMXovy*M<4%(fIDh;{{gT?_<+DZ((9 zQ_ICp_R5PRPzb~y_Dm1m&;=n=kv^)4fHie;awxK|g)a!ARi74)jNJF~@PFvfmKWeV z#*6dA5h1?ZCYwLpu04-GNHb0ftPZ+?GkFUSH)FwV=_h8ery|3cd)^1DK=IrFy8JP+%v&U&6;q~r5PZni%Vr_+4y%!JP>Qpn# z))*uWeg{tZQDlsBHO)3cKPvbWI#ilX%--xAeSyiI&mrmdR{D51+j~2mofKT3tL{Ni zzv6*){BWPPQaM1sLel4RZ|Do$bZbsZ>bK96da+8~=oRU*-5GQ=}v3jlAm>u3NuiRiq_tPb6rNdsPIO5cj!eb6w zOxS%(TIzkvXWj98o_{>P6S*3;gVMf5&!rUd5j|JYb8#je6p-ZWCQ9=;Js(UXvV+2F zD9uRWu^Br%6qBPjb%;VOEcwtK8U!(+dL3QYq#T${XN*fT(TNGC1}?c z8mP3tHWx^7R+G<{VL!KM-W%^;*kgIk{c zBI%({?UKHplyrAe(pTCio!?17yHwJ(^sbUVM(-&}ze%d=gGo@2wXf^=&Ugi>G!;~a zCz3)`woyqTz;q=t*K|&l)6h9l&S&jw-<;@OyxL+P1yv8r!~pCIChvu?h0x5R9VucM zns;XJc^MP1??@2A=YBoVmA3tE{0s@%F7HM=3s9M7x^bjw_Nyv{*t=b|tmVgD5uw!J zmd`eHF`e>Vk_XC6$VzLBXC9tjC zQf}z+H0v>B%v{(xSL}z)(RN0P1sry0vHyQiyIz^cu7R$qZWZft?OI@jf%lvn#M2=> zoqtM<34MKw(lpY9A}2yI0toH6#iu?ceDrr3(Vx)hk1O;iDe+JG!l<3e;P37y<*^eP zSj~N#xn|KS*~WCm{{d=zGhMv6QM|TCeT~aPZ3TL5%~X_v&7R8g-Zp3P$-7j_2QoO3 zMUardYfMRT_hs?-)gEvv(|c>lQt~YjeJqOx3E-W{Qt~JexEB#CU%5ln6+MY}Pi%df z;;Mn%2Nctg@7VPXY$l;!KUI{i%JjC9x6>7W46r^)=c}rzZXX0xw9W2IQ&geN7N;vY z8XHnRn62bs;B~Twgu%1YebEX`l%67p10kPNW&Myad$@x-wMUELY(@uEOkhA~dei=} zX#kgC)T7P+hP>rh3K9=Zlxd zi4WH*{7ytUuqf=Ea|bWY_gRT+b+8*7*>p8f(3L<)bQU|;sC&J|Y+YwDb)oms+*y3s zsy^!37o8P^C6X;`;-BWOaLCvTdX}vUnLrFz z)w4La)JH1oK|-Ro?bg_KMJ$XKM1eu3iCESe@uW!{wv)nX8HR1NPKf`2Dp}3bR5(Co zKG^$q0kQw~TA}E9%3!N9VmA9Y0}nm-Dcr570moJrLSbL+RBbY4zb6zHw}#ZMM3E_6 z{fjOkeCEsHmhu?@#o=$5t}yB{wGf~O-SMG!Nrqm5(1nIB&JW$u(4&~>BJY5pkP1`g z=>Xj=(}fNU_b3drJ^Cvg_KIff+tjKF@2v!_ExNZ7UdrSOq*1|G4>l!BOr0TG@DMpx zK2V?6+C$mHSyJt|WXv)~j+9!0v2sB7l!UFwQiN0cs3@Cv9-t3oR!L`4%>{%(=$nQ^mdfdpV}WNhB|3d$N)_)`=FM zg@Uxd@-Eq6$C(#&mavO)8NW-^`H?Kug(~d03d0kdB(i9|p$NVCW;zhpRyxo^x^rxq z*0P7U2JHyjOCnpeHz?tKx^`P+se@T!GU&OQp3i7k!sxnFz0C1m9!yiTJ$o!&%`hjz zo=w;HoMmh^>~rJP>tRc$YzU;1c5a{@X*V;GgneSQBj9SZoil)XG)=#rV$;3XC2W40 zpI}wu^|M6Ut=?+|JCK&VcA)xu(p4u%yj8nALnl7XK2G<`80CeQ#q?52TIiEAymp@> z@}&g4=kzO^m61}5C2U)pURv9}mkuQL(!xNyUOF8}q6hY5w512mNeFyH=d7zuz5hLD zs2MuQOfRs~!|ZdZhW%RdrEH0ao~5w}ds@qMvMo}t)>B%-nVk`d?QxG(bk{&L9Z+XF z`^ePW<$D@5TV!ha;H9RP4<2Rt;y&z46DRINz7+l`C(1&%(0{O;^n52y=qqom=z#~?={fIM{@cG0b&(AU?E^fAf z>bc?tk4JyO>z;?am&r2GD>arDL|pH+Vw(3dQ(f?<`Q#MPx@hx2bw@)wULr0@H-I=f zyIyQL#80mEwBpb_G1*D5$-KfU*aNS1%JEO!86p|V3bas`&d;t_vxMkFT(X+d@q;#} z^DT#XQkwng+9bfQO#>%_!8>+fuX};lm}Ym&tYs6>vlDwdL!JhtiI=vbdZU;Y+;^R} zdefL84lfepXOkIBc6PRy(8m@%s?7j-+_C~!TCAbgy+-oY%f+Y;6@GRHO~g*Iglmcm zp_}*8!OBj09-!yp45@l(H6Ecjuc88WEvZ7YyFF@%h@J>(LP!;alzS)))J~+r>CSF8 zRH#0B4H1oWYkV+l(|0(mF^NPvtl-Q_qK-;bP#rf^(E4}z3rmHLfR^t~^M}y8B&a{v zB|&exB)F3<3HqJ$l3+ywQn*EQDiyb*MKL;AuP^MEIFlcx=R!1!imzUM*zQC-*r7xN z*cV(*cn2ZxqgzS9t+WrMC2v@t1(J?fE7_?u(5xGFHG%ps<;Hiv~O(A_8;Ss$k#rp>BQA_E$ik|D}xs{&Jc{|lJ?e?xsgzT0W z%4-{x1pDvOL`kkje&|H`UH)`%kSPi*5ymSLWw6~7hTo_WT{{TPQY|G9f+udj%1|6c z+wd{x12idtLEFV`GZY4G7xA)G3<#-*Vm+5h#fY>^8P`VU+eJKWC=}c-;-Ha`Vr?6@ zn+OsgMYoGztBmIfh2YwOo_4;752Qlc?IPaR5$#I)(oh(wZ9ktlPxxd#;;8kkCYhd% zbyBlj(`Cx+Lp6(JRjGDW+j+hbjh`=K!M6=ki@|63jEy+ z{OZ7WW8mkRgy%wGR%a?lWautQy{zs% zv9O_Dk5r2fcX73c@pRL)*}o1DUy7E;P^%hV zo*)YqWSz-ozfnn~Jn}Km$G3 z(sL0#S8#ojRo<-HcxuGl1n4AF33c3uoowlW`*4y%pFC%% z5(or7`7OE-K0<{Z!XAL>PnRpmTD9;Q^i8g-{ zsn`Hy$3mcAo2mZerz({5y;NCNIus-M}p%# zl|Hf!rpZ6s@kxr9JtjyX z370!VSuxVWbm|@)C%(c*&e>@MH6$!B6@%%d7Yn~Z9oD5_O=Z3!Q2Uxv(v_A5f zjiUBFUh^Iv`d(cs`jx69KsJ+vs_Eof)c>_q9Al+g@q0JLJdQ|BwER!0n88c64*UFs zCbM`5@_fol^@-sq?yEGDNY1N%%*upnv-ldIJ;1$~R}w1D;snG@^kd#jQFRvEAaao( z8S_=1#o$tLr5F4#LHme=-JgXT?8F+7qH{w#MQ8COBsk<(G1Wi-EWjb9;`_y}joma^ zw$Xatqm`KyqvbJIQ%t4OTur3tVl!2xc{r&we@@5fN9cLXRM@W7(`5#JbOP>Fv(bP$ z!M6LG!j*E-L0IZBt>N6DHJq!oj&q%*b+~4Eip&eVmp9I>(fo=hR5ycaI?nX;nt@$a zdd=T_yI%8LPrr1U_*?qN+dci`r+kp|i)1y>=VY=9^cM-W$xqIsHn}WS_jSB%qu0FE z(`yEDNa;0y)<&=Sa9h3R<8Abs-}UsE*J(ZGC0d@zzO@G$(@{qj)lwf>oc%{snlDP+ zL|&wY@BUx?&i97V3wX^?ER5eVV~uZ7k3D>z20nj29p}{v_1M3EoSO{I;COXg)VB7! z+v+uY5ic3)cFxaw`aFuxUWTud6rGdC=SkyR6`i*x6rEFM_}&yn=kL_=6vg0i;vZ0S z_L}tkKQxkU6`kMxJ4Z6LN+@}sL;8nVb*P94?_Ej%uyB^h)|!W_P{lB}aU}+HX+(ki zdduSyr2@Fwjon5f?XyTYa$vq(eiHdl-Y;n54> z-fIo+?dRoq*~2f8jC{khV|Yvw@Xt+#lLF(!;Q2E=ra_ju{5)DyQ~M>OR+Bz|JttyI~GX9LgLi{IsY)yE-#Th zZ*S*kK!Xi;d>u13A&paBbbI%7KzJ$bb_oxgs4zYYPyS~6tz;7{QNK}zqO81n*+wV4 z^q%MtI|e)a0|6R%^k}=mFMe< z>1=}Giwm8zAFc&FcmB>QiIp^!L~M~cguOzH$69)x@O1BAq))ogA`gk|3p1g)w3i~c zDYZI!DwV25B=P_C0grv?#XhszPG6gJ<_F^OS>XI}6Qw4#YP^H_bqL$=l7{{$?hUzP z*vvF!dCsoIGt>yXII#tMlC01@hAe@d9IubLQRMzv3OX`7DQGGMy*W22=oiWuUN{yb z?s~}7Cq&1(>0)3VdqK;>ukd8yR}fox2A-u;r;A(b*e5#0CtiwAlqf%`l<`cUcwkp# zKyv{F!zS-ST4??x0f^zuE?^=w5oB1t^o;LN2oLEOCF!;;5DCqUcD4huMuJW2}P=@#q{s&Sr0r z7W7v;bdWMhK8>rzgDy5ntKD`k1O)slPw2%PY}#bXW0!>4vx$fj_bNxJQnNe#K<8dR zdH5FCJ5Xcx&neYJtI$-W$gb8p+iv|&V~K2ZNtuTRbsgtgJmv|x?APY1Rebd-KKd!~ z#yUQ|)jNj5n6eDlMvcEkyC+Ycyv$~o$`3YTG>|^0@v`8Via;^ozxD}#K|pZ8@s67$O<>-i7!C7& zgB07>ig9^B=qy-*>wsSrWYZJrM2`{T_r=bQ&ZF?x&k?aw_D~|0-6Pd&BOOvjJgvuH zo4lJt2U7K+UhKd55mHwt&G>8ZK|S>YUqKIz`Xa@5&9sr*x9`}#51!k%@2Rh6w|l}; z?05ziqt3#l(6Xx7tlFS!7~_?UiY+cc_dF59BwLnftW$2d2m7 zuH|R*X3Jjd@PxyTN_*yVai&jLqJ7r|!Kh68WG(+9k9Q1;5wlFoOf!3$w%Kd2)zh-A zUcWVM-l+qgANK@;!|Y|t%O}hcU*yFs+m;tT)`}kJzE@w3=F2Z_cFA2%Cp;&M#boE@ ziy)yRf6%a8oXvA(m+dYLf0<>uaZx#}42tSv{-Dh2V*TJ|%d+DmU0L$_TO!`k<{fkG zp7HodyC09d9nHZ7}oTX zGV78*o4IDt>|_?17ng=Xpn%&JyMCO1iY}r$Fo4km6-BCiLh3s%bIDbPBZIo{F3^3Kr}|Fj(3rU{bzqK}XI@ZdFpVFsCR-4e37qC*M%(V}=5=R*o~~#^Hhc0>n5P%ZoM}h- znLa=#1$DP((F7jj$aL&aM|Pqf@;bvtr>@u;wbG=<*NRG>hk~`H36#vm(26W*MJL-W zk(nhmX)ikXmu(?O>tck%qsNau9}SVB+Wg-C-jL*6WacHaG*4x8)|~S1ic}3 zZ;a=LVXaW}>!)Sg%h;AACEo_Rov@&Tp_P@z0a zvZFisd%x(#%P({8ctOSHCKsEQT5K%h+Y{(bTSEOm3Sd@tn|d$(F7>Vr2$&RPhTDm-vsU6u zTOn~HtR;tx+@WV4yJrDL;6}-gCnbhJT3#Zv*kmLX<2gofhf+BUvJeI^a{jT3OIA51 z26;Lf2Qku8umCRVF=Eprz;o;QA1HPVrpLo|#091365Sc({WsVi&T6cH>HrM{5H0{o zf)GhSa7E8j@n0d=9pwK95GMM)5ptB3kp;m9sNUmgLJbaG7|h>FJ2cNQnGLLb5j!UE z))a`t`Wif;3Z)ni&$kVs?S54%x12+I+wvD2kt=uC)U zpzJ}2!A23~j0a|l`N6Z&dYYu%I^{_N_~|jhCYeoLY7d-abkoB;r$XkE)jfL*?~*4o z35S)q6=Fz;^lK4mWg{YYWv2t{`SF6dEI74_Xo0R%_Mi-{?7sIw;lgj14|l;g&$2SU z581kyU15JJV9hx+@Ai!ofNBnU3iHs&))jnxC{}ij$+`oPGbDSXkm2+-(XqMJ7l;CXfxt%l(M+)~ z=x`3iNO}=#PANDd^OiS5fiWXp7dTK_RFw*uwxSseemi31dj&g2P>*&=9E!?E-P)j) zZ#Thi@JO}zyh90EX#ADg(T>X;8q5k;1vyPwS}&>p{iY#KnNx0=#HM)8*E2< z>L_r65%EXP@ogNIz*b^v5Jp?dHlQin*sswCE^MTDe6t+32>~TrCTu>cP*kV~=G8Jp zklQ(w)?}NLiEmYbLW%0%j{|9O&VmFyNr3zA;DU z>|F^-<4v-|2d#jypbvMh6t%$?9}#QX@?3&=DxH?+}ANKgJ<`NlYMxHT#ZU< zqz<*A-MpM&*7!oEe2mS zTdg*JS+J1p&Bm@BzYGY74z$B515+|Ud!lP(X&Z(mcf{gGhPKFA5)*gx3v$eiLTS-G zjmYNzk^}fCBU`qJ$U4B(7>v^(ZivrbR>=Q$2Z(1vz%glj z^)d{&YsfEOR-44FKA8*?S(L-hRA^bEGyf+nOjw!l#h%PDRM$fF$*T(VkJO~TMRkEK z)1oYg@oIYt|W9bO*LVR3_*AvQqe%`zr0y*Jm0SkKu_#s638_1iB zQ4TBN%8VJspem$i!;{Uoc+*@Z=2joj_O-~8lmZJ=pyn_)-ND`62DZ=A2SSMiApt4UbzA&ZwY*c{H+>;XWrPVg%n|2|KxL0K} zsmi)W;s?dz`jFE%;%;bgM&gh_?x#X$%g&a?s$x}BOwoj@CeJjA;{}d02XH8R*E{ke z3s?%C%Y&UnRj98=cAu?6p8z^pz)M!_6)P?tB5n*h10(M2p?;Y>FSm$y&KsUo=7c`F z%uoF`q$RaME8~gFtHljypV=Tdv3ngYrc`x}G@%PkSB$KK31$}R8_#KYdu5pwSK31@j_8`Y z;_?AND+5$XP&X3DA+dh&_fr5V2YC>s<4gs3Rauhh7wRO9RQfehq_S&tHmFomQ$#b!mp&EDtY4w^wp_nM1~Izx^Mt?p)~b!lNN!y zRZj>s6Mu7cZ(<) zA%4>+zE>@VhF}`O=1m3a@?gLHTP0SR!mdFVc4m#MivwO|j<~*R;$;czY1ejgS~ZlZ^}BH`Yr2lMo6#21EL*5MP)jI_Xb;O zwV$gAPo!kvOkU#+R=W$3+Icy}mNiUvBY?qkH=v3>NH! zpX4DQe4rU=DA!=*L~AZ|rD#U7#E#skw>ASUaw{B3L`*2DOby9UC75 zOKj)gyHx`3G+I>WxojdOeElsE2zd$X@mV6-q=RB&UWq+$jO`4xfumtCuS75eB=;eq zr6UhMD8>|>9p)FJw5I5P_8Ey#wmz6#1wWo`G5%2fYzmbJX)&_N43oZx_TCwrBG;m zBVU>u7IzIXxfP&rSN}c)6wXBANq_?W>HxZ+j2dkGE`n7kI+1{e{uD8&Ffa@KEjCum z^+fDKr>dm{mr@UM6nxs7Gz*pps8=B8R)g!B&Aw3IbTvsyH(h109AIESgqdolldWU2 zRF@8Dg0T~(PzwRMB+tNE)Rz3UCcYa8zx3&?Kw8IKBW<-JmLi7n(E*}3<0w!3z&gGM z{iRu2V#_3nEd%N4m7#V2?HGX#iOuji`PS#D`y4|yzeR76LE2~Urj(o~=L$C;TBx})81_?h z#pt|&T2Svz0~3>2%y1cm#Wot)i)=zCeYShH-{Kq-EzwmrMPjnih`zg!HwUB!m{Q$Ijnwe)9pN|&km@nr08F(nEzah6R z)3-Lm$i|1;QJHz@L9z3yXw1lYIZjJ!FmV1kw#+~Iy7)TBj>rsJMu3Mh?21?f&*Rd~ zd?*>pjY-Ak@cdj$0Q&%KH`rd31$JuKmUO*^!1muH8O(WL3q)s_<>I!G($M*;ps&eY zZ{yisz-3ji^TX zx389a<*}EN%Ggxk40U&!&bzZYB-4bGXsEx#-5=o3kd-m= zDe_@3Rza?jS*vF-`a}KFHo=P|CcY4#QG-vPCB7`2KMXa}-KPAQ+I=M*wn zu!i1uWoVqYy@^jJM=%XxcH9f}@G7iKjYsVgB+XBdD*Zr{+aha-Y3WWztuba<_CUKF zPyg7YjAY!5EY1SNUpte747d+ zq%x|}OXkH}`4_?X2AQ?y4gO6ZePQ?wUKn=L7ls|wg<%&pNRI4AC-5$E^m%1g9ulwJ zpcQ5YV2uuDC$mdWE2~8I*!C9e|2)kbbn6tsGjSv~F*|2fO-KFA2_t)|t;)Q1I*=sp6_PtfWfk2Umy8s=-K^&N@Kj)}Zt zGvDkObF6NDEgQrwjb=A1-|8qXEX7#5P49jdc(ZtuG!=cu|2e-#rfuHMzs!4EO1g!J z$*!aK-~mL9Yh=&erJM=Hc)-jya`b1BnPX)SB9oSBX13YYK5W+vjoCK>2V1~i$uwY{ z!KfXn){C^s3z>gd4FWrME@ES`CN?7Y-5qI--pRDaKY66u&wWZQ%=&x87`*?hqOpWe zV})7Rr>MfL*E#4X!=s-}KT{d|#B*>##vd#6st8v`q*U|0LNCaYt1A#0qni<7Ne^|y z&dA25fIySxu{yv+fZ)r^hYlS|Rs&)~*!#jqb+*J?cQiQd1z-=ThGUpsc|%Pz7LkS;@R*dzg(b%Mtmzj9-TGuJKNIu@vO*7JRHnba4+gR< z$(C-Q%}7Fzi_9VMf!BC742MPK5Y)p}Lp$FDa&%*rxCHky2^95z;E)DxjY&%l<(S)H zEO+B*n}H|{9?Dy{omq(rrFj)P|J3rUQigT8C#f#tPj#jtx(TTcN*rWP1l z(@{-{0gr~K5CYw?0K4HNuc%*fLa<}CX7KNLGLB_It^aZ(CzR}eA0`_Yx8Q9GUA&8b zDHWw7&=lVvwEgdue=QZ8*a%>;E8QC8anZ;}HCb+l1hqvU4^t=J>U%=b=@=bzi#;oq z13Rat+<6p*iRmkhV#kW|sEVSEcX*$%TzfBnnZ$CdPN6?mNZo>B%Jpof&I;7!qIu8_ z4tk>^Z%HvD1MyhlhG8(;&n_3A2K$%Gz`-?qLLVEZq<=T72!xA~SsPqWpVh$Zq>JGv z%m90rRKa@+J)SwCyyjj zyG(Z3JszH0WWfieAC|b@=>1lQ_s5HwsU7HIy;%3Wl;BoeJ%RKd3{6uiip$ZtJkmPO zkxFC! zKe|YtL03A5?rxXZ z$FK=@bSgY6|J&taT55JJYT1z*Tc{0dId8nh??{cW%}VR;J5b73!IPbhM|ZYLz>Rf zW_q)O8wmREWB;^rJL2pGl#p6b>p};#zLdrO{swg5X6yjXORbdDk*d*>-|_)pn{1Fa z%;$nGH=#rp$O?X3a0+JuR*4=450%afJJl&FeDT$IMS37$b$!I@N0c43HiP(s3VJ}Y zg;FVReVgB!6vqw&tgQt)PU|^=bW&+Tz>Y=kI`AbVa@ZX-#(+CMQe&K_n_y{`2oW{~ zHi~^~_{#WD$+xfJvy)Yl!RmwskiDS-o97r6XWcyI0tx3*B+9WpLoGYf7^l^Vc`3{W z9G0ub5-3~K$Lmk`Nm>M7`dH@CXg13jt&Vdu}vQTGI(Sl6FH5{Eu8SIY_9 z4EufVJaDaEDoD3u!};R4-mrOJ0*pxZqFMmc&8TVK*SpweULd(l_iX6{8=$42N|_3L zxJDBND5_gSVnGJ*));52Ejw6aj9DFLC@g7p(pWiGxXZFPt`rAKXV+9)eBXH3vG>==<$2tB4tlI zmR1%F9bZ^^(28lPnYGA>@Q1bt*htRq2BR_kRp`-bHWy9N0;SL-WNh6*F+1IOmiOxH z;SDk;k)~9_3@nFXiE8u17C0WpiIX;eUucbFXKEU!5F;>-Mr$7K7LyGRg_XO`QeHM` z%&qWH;?I`SqG+2wo*yP-nADvP77wWa9H#U`6gCDm7Rb%bEr%;N?Qj_x{W(IjY*6@d zy=4Y2Y}|Hu>zLuK^FrRb*5kbrtio{enUItB*jXVf@3C{+o|iz{=^-jMx@K!^9X(;4Mr2lbNo-=Q&4Fnj_9w^}i9?`R`kOj0d=4cOyQ%y97oF~BW zB@sFq9fR2-#nzbfx>)jm#nc1{Uh-!SwJLzaFRv0vVC z$VoDC%RC~=uSd*yD$VJk=ZT{xh!IJ(>op~Z+YF=BUOBC~xq0~X>2SkVI3TgYHPZHKbnNB^&Q+P3Vq8qgz&rL7me3`cuO8;-V-INIkA;b_N( zZ3K=0KS030_7+kVuO8t^?I4nC_sdKl)_#=ct7-u+*&uT_U*UuVfsaLlayfPD>)+k+JuVPosd zMZvJD$g0fHZc!h==(*%gbEhehX2TVC%Z}1~>+f^fTa)}d&E6iXjE89?cZhMb@Q_@e zcEyt7%yLmt?he(~zUZ!C26t4^mUjj0>A;STBVRn1m5ZLb2?aJRs8MYpf1C6uZjng*=p8oA>=3%SU?(IEC*6_ zKZTBMNp9W`l)#=xal4%%u3w}`?R(VW=1BFFMsF}Gge&hKchNWHSEzNC9n?J{utD7i zHUC$1^P17q2$?XT#=2ruDlrNP`5*asIe^SowBlS&=I^)ARYj9lu|6l$_4SBZ{8UPL zOom}Z@4|aG@Wt(+cLx=Cdl%(TqxTEag+Qlm+YPiVm>Zz=p*&4oh4SFVjXNw5T_1QluRB^Aa zuzRh!O*~xWEn(kM(h?mPTtSTr3BFoIjK&uJ^Hu&`=_)`S``KyypGbH$vy25ddlrbN zW{K@H1Bb%fxr#yw2ykyJe;^KscV8=iu}GhFeTGL^yI3MIO93!ERC3lQK$-<2a9D}DYII1SxbX8g_Cml4t&D^RF2ivTQjn;x2 zoezt4xuB+~QnLrL8tn-B3O?ozvg%h}jDN?UniYAh!VZUz`%1{UhH8eItA2KHc^0~hf5yNkRVQ_@o6l>1z7II#H8x!V$HaT(GpmhUjMie!$( zoq%JK&pi$0v!!fnqzA{C9!N$;8&x8!+FzX8{>0(hKVN7s>n-AtiF!yxW@@H(?&YyZ zh4S3CoGh(OarU%OzSCGY9Og7KoalCab1RA?ql`#7qk!wr-^(7hh~iJ;N&o&=@Cfr2 zXwq^E-3Lv<-8gpdJk8&oDe99RKPB!47Vu4MyVRQKT6aB9YoK?EYM>Xi(LgUKl`*4% z{$GW5%qh6@Y}wIhpm!jxZ`YUkf!cSMtkdNjw6M)pL3fM_x=p&^ZfT%{?)A5A_X?!} zj)GvI=1}iECXVLi_(9=x#HWtx3F8VnEtd7Qs@i1@B&C6&q$o${hLIFg-3wsJGKUGCW2 zb+|jYvgHQcy?=x|`C{0>qpuqqCth5X$!N=-2lpzG zgnN-^Nv(8&_WBkbShwKeu+8=hEBH>1L?jDbhnJ{5n_4{jF+FdCHvq7{sm>SYKNi1qG+wg(*)&2vLTzoP?O5x-)74g`m>v~Fatw& zkTZj)Nyr4SMP?;RaU{hS%E0!)2?AYsfj&uJ+bMAzlqO*J*nKi$n!=T7O3&_@fck(< zHafzn?m|F^R(cL#?@1>6(PgTYCW469uaf-8R~4OD_keA zW(5ooH3tT|^6*8!`JTM#A~1OkBT2Fe;!sQ4SoqT9@6VnYsdM5yZAQyRi1jN_HQ<$2 zZj2gS6&e02lF#su#!}!pZtq?wwnEYQO5ZeewoWegw-V+iiX{sOvWfMx=PVPCZ=!&e z3(a$CI=5rSIS#ro zX>DLrxK!^chp5HHfffK;MZNkd&O-p;tQ0!~9j{|YOSo&g9o4_cn4}Nwbr0=^(F#Vl zh5dwLG~r9LlPE^x=oE(=awTgq+NLMsHZ31}Q|yn|Wk=YuN`)aH=OO*^QWR7!a;J_w z2B9}&<$s2>e^ZRW4aY>yX<#&ciOtZ5FY{rzvwk1t$K~uGeE5Iir4}z0co`lHR)6Jl zC#Vr-JiK2TxnB{vzmM+87Z%#81nE<`)|Qz^iR;i8pYoc^cGLB*I=sO3`u8(R-A7j% zm)=@pH-%nxB~$eEzSj+h20e@YlI>lMj{Ai733wQyK$C0yOs=hp!XY<53$gMWfa^ zwl#7F?YVhn=ZMisl#sFSA_Ea9C6XH;4=H4^;Pf~r#U_m6H(yOUbky9zt zm9q0}0hK-(QPH_DsQi`gp#&PIiG2l~)kW(Fj z9A)lPZIsI@+6SG+Lm}t%b|43L{fJV@pu<6q=suxcz&X7gz(GfO!NjIDgml)Ra26gD zgb-qqPty=mF5Y_%PYJXx0|LsywDe6NG(CSR+a;BrhVjMDrOwQDAIv_L+VkNAE*N~*;=yOxANgt&ouq#VJDpbn z*!_h$$a?aPE8&M7Ktx$bf~5nc_tzX+yAhNA_%s`mXte%?9TkP;wxcsqQ$QjChoTe! z886@q%QDcE7Nu>A&cS*B97{z4lq#1kZNJE2W0z7nb1?vqB&#D3PK6_TDP|hVK^jVi zNLtoT!_~x2v<1d26Q|i22ty4METEwiB~Akj1fx-xDEnwi`VH*nh{lleh-W0L$95fb zQn2AqQ*tq(W`&&rb6pS&`UqgQVbtwP;834`3Oz*eWn;wV0V$dH#>+IZiaTGe#p-=M z;>B^b#jsU<6f9(_GIehHPwsCuFCGJ2qf}P*2!0=ax6Z;PgEI%~lxj#xe#ah8KKn(R z0a2rQ@?h65o1Z}+dA;Ikwu$q5U&r|@t^sUwP113+bfVf4`&tZ8DEUOC0R}O;{ES9` zhrOJC*rMz&=;Mb4pVo{Iv+y%`+1ff2(b(@ zao?^(>BR5LuPOr!1+(2mvQjcJBXjX=GkcHoWrSGSgB&sa^j%82z@>WFMlM%ejL8HE z>Iv8x^U}QNOB*;}yHJpS_}79G_eV>-86?k%CO>YzHj57Oy(&xIGeAfK%L4|(eDdDtC(ly^UbQT^{eBq!CJ|3cNetsi z?J}meuNU}nXcb**?2e)m5EDA9IK?R_mH9Nu=rvkHN(X9S_82?Q?vRzS=GFXQXWq#{ zWoFbcb@H4JqNtp#kUGE~-06o-N59@1ZFhuaeMf`Xp5R9&eEi40MTgI99L@A3y56aK zv6$T}pj3VQ=DBpvHYmF`xvoAApObtvHlmTch;3hK-NKl;g*rY7JTv5|L& znLxW_*+ZBLyv5>eM40qpOO!iY9npg+@jFTJ+3_ms9dL4K$&@iIE4A>zd*u$X=`~*L! zPy$tZ=T1Pg1`WA@R+po8L)oQ2YvISoCtaKM4Pq(lOow^CBU{dgtu13T+)V=d(Ttq( zp%_|2O+I}J$S0~AkYXn~^%FPrwmXTAw`oqtmX&qG4`WB;4BX*JQB#>e17*#q`%VF(^Zb_hEpli5E0+|Lc z9f)WBv?!P+W8bVpSyo2c)VQW}wQY+(^tNMtj0$$zG2L|D_UHr);x+eZXJEt+M zU-T@79cM>R=4S3Db}h>;i=M}1beNLggnanb|0e(Z+%vIZ$`31E{}LR;M2a`?_ENiO zTJPujbjCb;xu-L|kx5{IsiWc*PCumUzNf4La%S%M9Dxy_$k)o4#NRI< zda1;i@$(>+9gRcs;CwY0S=K{QQLX&g1RID}5%-|B)mLMM)j=N`Sp~s2cCvm>q{!rz zA~FbWVp3l?GDuf*qu zh@0TwS-TgKJQe^jSHjA&5&3E=QOAxDu$1=C*RqC^_Q0xF4p@ zB=6iT`9AW9d!5bu!c-O)u>rYYfdWbP%LrPyAjArN^z@#bJFVTs$Me;}`^zrtd1zzV z@sYN&vvQkycJ%Q|W5#;Cori+RyjE>K3rs9mD%9-9x$P}i<`y9y7!jVXlk)=9U<#}= zdg~sT=YF|8IaR!{Q>-NN!mTUS)T|dULq>AoO&tuZM*eS9+<1g5?6?& zp5Xf=Jjb+ZwJ9NjR+&@y;>6LG7MC00A>;H=*wUX{cdj*2P+x z$H6gX{_MfzKXfq%Psp|nXPmJ`WY&yHfX6zJN#>Vfu*T9BSuo~^(UeN%3+QTcS=HQi+ z+TWmtM>n9rxl`#7Q46F=uOsf0;;z?d{;ub}3d#G8QaCIaf*L$+=#w8r*#wlhFVnYl&A}LrR;Vjqhp+|xTY4O z-tTi+g5y%<$f1h;)cWF4J-dt6@JO^gN8RwwPMfck&`yrJp2j1ze3!ZfUQ6& zmsWb`NQWppcPLuZr~^w^)Q(aj6dpesMFB3i947^28T=gcD=eti+G3eUGAlaYM|TT( zjsQShkE%XMqw(V8H~!| z$P`e}>L+Cg%Rgh~S4+k|*d?qOnbxmA-^$ykrUbS{?KS1Ne+vxEHL6p^;cOKjGFx7F zF#N$GQ)N&YvkG1eXR2h5T_Ap+bPB31v2Hv0r6{v(-S0lyOa*uCV5%$=J=3-VbXP~t zzHl6@6igWW9BW%{B{Zsl{WWLYfBf%xfnR<&nu!o&rug<17*&fME8&K)Ye-R7;j&Bzi_Z;BStM6}oNL`o zqYe<=F|7ZbaBf~^9do)kEN6r$7D-2q>wkz3ef2T%4|H3eH6zAu=DO3(iJcedPQOMN z>?;G)4fB8o*CmKjQ~_{A5$sUnT66>+L|COboHsy<)|AN%WFJPWv7*&XnlF|Vt!`jj z4qF0UMppT!N=`++N$6~t18SrYTWF8hL;W1%HM5mG7Sys}H~(zDc;^8D1dSzv8hu_8 z2eJY2(Q~t-8SK$$6L^p=lB2}$r-|Yr;;LkIb#-%fb#1K}F^o-Ue`qq2-84^ZFE+cp zTTjtYCNxf}U(+~!y0~hBs6!R*$jkYWmu+}?UvU<8el4{xGyVWXw^11xgH`!ih)%1c;3K9NA-403yhLdpg(J1L$jw>T;-4&~y0Td*=+$gGU6pcEz_(m1*@5?X;~vFx-<#Nb0Wt|3 zZ)hD;XsIykA4-Q17CvO%p5u>Gz2XIy3FtbD5UV((Ta0$-I!vnzrxBu2QnQ^;+(S}1 zAkcAGNUd>|au2(lhwu`;-yYRO;(NC6u_@p`&~dRh+^6W+-p~&+-?e?vaG@ zHpjK@>m37u4eO42w6}2`e;#azK!OsXS!=PCs`5&`8IBA)eq9bv^5>lW z?_wQ4>R|$bnI>MDdT|at-bL3bChX@CcvqsE0Ez!;a_AJ&l+zn`Kw%ER=*Ky{tHLg18cmzcKE711vdY&C_+&Hiu96 z?1!ig#`f&ukw6bs7JG7`(qpa1IC#`tzn)FxQF|L|_b!dAnt&VQCw8{^?J#h&XjChM z!j-0z#_l&Or8@Qzore%Aye64JAr>C6)K&ZZ2MP2GOltOJ*2njW`LGay)QwOvX}1Mw zDix>k7a?V3RA1);lGj8c;CRKw3Pnmq z#3d9U9r)gRlL1NLvEJo1o*Vf~>%R)6w0S=lK$zlwD|EG_NUQc|{a9l}=pBQ!gK5vo zqv?6{ZlEoX?*hb>jFER3GsQw~HQUxcYMyz7P z#NZlHF-)A9tQ{U0FD|v&^x?xjrJv!}!kT&KT@DM%!+YnoR&*0h$KMW6uZ>xy1LDs2 zq%{k}qDlLsC9n?^+IC3~1U%1?b6XsHjctq5Ccp-TyL&Awf}b1sQC%$S{T=^iE8$kK zm$X7+2ZzIt;*(0-?j}BL4|`P933N@zP`O6&4Vmya6Me2!0aky^cc37T%ZP|}fKIa% za3Nx3CrM@ah6+$g)>TRI0xjAk=}QdDO17#2&;iWRm$$<&OK7&~2;#h%S$)^xWpubY znqe;rRt?2$tP0e8e-|Q;bYqF%%zhOXC9`U3OAmz1vGYtk-E+En!`T@DlKk_O<|(Ww ze6J{n-TSff+^_boB2sGB&8CODY;$~q;-xS|u(+Z8FMuXz*%7+>ZA*o+R`ExP zuKw6U(wro#ii~~)$ml&*7=PE$+m9sJm)0TF^(~sZ#u_zs{RmLkRhqiK#0G5s!cH+y zqqERTR>`g~h9&!BRDR`onT*F8xD9FgEf#3hTh5zC->}LfIl1SR`RpYNh3Na1BX%Z+ zz(xPZWXDy<#)V$K%Cu%^#%P9G9ReYS@)43fS2Jd=u_15$G434}a8^ce!5!-aC+2D4 zWLe9=D+pcS2w>DGawID*P6DkRE0vN~am#VG94Xn`PoN_8c``rPEAnx#$WPh%`lr;9 zEyrrr*O-q_XmNr`^5%|*QaHn%?NudqnSmyP zN6h(~B)V`;#BqE?A@DffA7lq3s_RfHZ4%Xq>xS59G30be*&Xobn30&N=pD8p>_K7J z11qnMSg@4Dg4l8=Xt~_tNNPDZ6K9!;gZ85P9p_ZX@t|$T4FTrnqNHPaAEQVCm=NzA z;<>4%F(XvOmI|B~RV zoerYYF!CXQu8<4fKyd~peQkV)iCA$0OyOOTgRgp1a?F?H%A;Y zHxEbIXa(VGG~t@@y!z>`6neS0C0_yLXia;xLYk5(O{-RVcmn01hmULdF@=ufR#zJ^ zzXqcy@}uKu3TPz4IKy|OCSc&|4|A#4`?(6Bjn{wC^>V3aB|^fl)ofN77U*IQmDn*s zztYUji5;xLX!*&%X7`eL{Cc`>pzB&I9Icl_zW}0Sl(>A6=rTn7A?Zu5;zIPvnpg|d zap7Q42i(P;Px|7DY3vTFuZga=MQXh}QtR;;Z~}k{tuAUY#)YY4ebT?j7VUgVTr>?G zCXAz)(ny~^leqmts8LB@E&1wvMPRBU#OXXNq(rtRn1f1bQ-{XZ;kn zAp>qB>xuH-&|j}2`qz;AsQ)SlvO)6JXF0p~4Pa>QdLuYbZE14dZfsl7Sc)5`gP>-` zF-ecL+5>Yjy#SRI1KnZvs07>%()j8 zR&W(FlY|vK%Ck?51ZhX3q2Wjc0tGv-3$$(SdX9D##31&OF>@B@Q1gZYEv8uCv{z8eLK%cTE!pd*aCI{Xmno6&ch!d<$zBfDsAf3FKinU(Ky9+^2qeWLQ5~x ztOk7ukR~C@hCl%sXOT|-#}8zQ9PocCcMJIw!tyA*jKs@OaW9(ms;R-vqfyHgI%}E2 z3yJ$L)R3XhvPd%_00vJS*;|ZEdIL$0ss92k2Xpv=mB7bt<=Vf4=?zSJORsKzJu0jP zlW<3L5;_kNSK|J%cMYG=1?CVYVa2IE)bIlD?@-Kzv|nah($+(6J5~kxfusSS3y=|W z9MofXY_^74@J((DL~&AFo%C-o`(VQ_N%xV9(W7kcEup=1Wu$@6N4FA*9G)=i+*jjp+y7vllXNR`-hX89sf_V(j(&e$S&tD* zg_KifAxA6u-*`*6VlTe2KK;o+l^r)gjy`@8D<2l6%XprxT z<9bVu5_2)U1~vlR2TG&ABK%FYmw&il@%_J9B3iI@J|Oz6!!V}$ZQS%eDV_rg=ZU{2 z{R+Qgx>Ccp{pOLj@EqYckFZ7E+~(=?m(25(&}UQ0450i=9X{RW=&N?hRz5Zb+qtA~h>KaY}FYSz)M{E-9vVij@zO6hC z`7p*C!}-fxO};Rgj=jXP^!}S$G$4s%RV(&r7EKphzaF17Y|rV*lG9# z^AH}QK;lrX_Lj*6A^SY`5Y6@6h+skqDW0IK@>lyPU6;^xthQEk*ZAxACYUowOTVepK3SExk?YAY!%0KrXl$jGL zGrz=JeVAg){)4LC3f+u&JejC7c|kG2SGR}tWUf@^5^bv*4pnW^vbw|8voG{m0%eLl z;5fx~NnjDQZ2+`FnIsug#c9jLTXFZK!Rw40RD}q>Ex7>Ao>7!}gUSiy#vc=E-K(5A za_s?SwYm9PgjPNOqWcL_y9%xbc1Rg&kx!T&O3mf?9IfdpH)64pY#>%p=}P{=X5H%n z-9^+ta@eslUCYMvPf)Z%*3iE|QTP&%3$_eM18HG9kJ~Y#V`dYF)|Tc@1vK|4pmAai zb_`iFV&H6c4{x8N}RMB{Q?Pe zT}DGedCP|9}ZN9j>el#v4R}&!I?R2rsLL9J_|RriZtww zVLY(YA`X&wupwgZUz6S|=#B+uYRnkm(t(7WawEDk;5~~=W&RhhLK}d8xN$MMtFZH> zJ$|ubHnbaK71^M|b;-@}5cKeX_$&isAdnHk;;!OE{^YxJoqRWN%>ZMBIWgCXT{ma| zp}73kN^fK(9^v$N|3qc+1PID`Q07NeBxdIW%;mG*xe<6!iwidF4MYj0Lh0I3kt1a& zQkylF7@IwR+#oenHS)k)cxwJII?x0%6Q0nOr{CMm_)N#b~_ueqOi`Q~dEBO-m@mi&LXN<7>+oGFa&CWK(3fZs1+X$5O zz>{VA_C(*8(%&kk_7_JDA+58xvNXdJ5 zs&JyUo}u+cl*3{%qQntt_O^1{OV>St*fc2yj1p&$3Y?{hlZV+1$nD{t!#uxYgkKHY zXZ3I&|C?ShP@LPF&9b6EC{m-uWux%etTt(iRSXyZ-J7kmB4QAA_TpCojW(Gy=|u^; zXS^IGBuiD6!!a6TxToZiO+R4NHEjCWY18=2# zd$EmrcntS~_wQ4Od)BI{>c-x`Mcp{h%@?8Gy$jUeTpn!XDA(mNTi{`c3h97O8o5Q4 z#!RJorqX;KJM86twZnE01_UfzQ|KZ-B00i)Y zu;TS*GjdJ?ME_CZ*Q3zET6OYbEPVr(zCo2fr#I|x%C~R;H@@gOO#H4r@F7U~{|-5; zWJF!AQ*R*S{#O9xhs!NvROe6`UcpkCIA)mmWfFN#OYyERBXfEJ!cPv2l~n~WR!QLH zQ2#USfY(3(uTfmb=3~3&D@CBsw!kmy42X5FiW|FlJl+}qZ{cw~EnV~m`gDbV1ig2$ zezx*m$k6iHl5ee0iZu3v%d~=yl#uw!@{#|H%eYEj|G;Koqb%D4f4g8u>uPeOx(%MVe1py3K1)At5z_O?#ACv6P zb-W>kG>Otguc%k@G*UersXYPA=s_pfqJKF%G0H`I0T=CE1vIBu@71$Y5ZMqj`%&kw ztB_YECs`(exap5NAE+X3+SS}N-fC5F&XtRr}sJCvj73_499R(y1g&#T#$50s$yKPtu&MFaMKl46cxr|J_T`MT?T2SUZD=72w z4k}iSpUK)m#Gv`))%U?Spxv+G$krb|>*~X2P2x@%gNQQiXD18Hv|?eYoBpFxzmq{B zZ7m_<<*ZjUHC(j^`*rgxh&Hax0wbZ;;@-r@=ouqB4*5WmXJZZw%@IX`tRqd{Z$rv+ zP=I=rJJ^0<)(^uhlsya|D*2oz#m)U%x`s|fSpQ(QtAJfs;NFfoCuhgw^sT#1(Db#! z8d&_ExV2xMa%7iaUKke3l9L(_ zJ({<26w)lQV?33A7z7E|Use__F+Kk=x6yG*W zY=Zfdfz8RgTg8;r>sbKkUzdyC|P!$o+8`>TS`X zmN?XaVOv-71<*o!%5K0-{?AVb1Z}&Y1mO=C#Keo+{__gGwiTXrTAK>*jfqd!Xo&?@ z1t6RkR+gjo0j-<-I8-)nFmcQkPAmhX@znpiMU&fa(F%$cztTYui%{n&U0un)x=)N9 z5O_JcoP8NnuGrbT4u5SI%=*<`q2d{{g*}4Z48_zGS&li_NwVqfq+%!-wAjjc)0YMw z4ps-yTD8CioXOcHbVgTd@lQ5E*PhR2Eo{a~F1MZ0K-&9` z=oWp+$HPYwz#I<&X1rz&P@35nsCR5aqs+}YO=<*V}DWJ*-`V`MX8TP5X3uo8f075 z(gEgVTrtX=-SLCAD$Qh!WWlV0psl4cHhGp9KcH4Rx6Kl!1+PURTWLi}TTRxW8|X_s z{1T9|(tL@-m$r~Ph0R_8LI4J+V5=e@t&Z=gk6N9U?xvYUJFvV@7ZPqsrw>}TZk2At z_IB2&^T90fWb*feGcu;_ysQ~B#b*h3Vi=E`)Q(@aEOy5%Akkq->h7B z#xgp_mk&DI#5Xpp*;kIbDGkE(0K$&o z#PI{!*RY#S*an?8N1{njoWzR@#jvFNF>HD(7D5Xzmh!2E=yBV+1>YZ(vDmz=H1~_4 zYM91nPpzs#C1mc3>v+1bwz?EJv8vzU2xr(sj&i5y@!~jJtZ*-`^-pa|Pr~i^Jft53 z6e|*_uF*q^Z!y%aFXiOh#iu1@J#V(y^UCmCj2>pQ9&~#2SqXc{CbjX0*D84I5G(}G zvNek6=Y0?ObMoi-`!f+?cBpVVtf6CaO9PfW$SeZ(lIluQbetnbC)WbA`OihdR&JoZ z3ih`=GH&W!X4@r>y_15Qkg^Ko-7L_A642f1g(hAYq&}zLR1vlcmHt|8D6R^&MHkwu zf8Wu+x9h5x(#zxYlR7JXfUYa(`k5}jL;udpQ(9{3X%;;dYO5q*GSw#e2G8~Qn9Z^u zAho-3rHVJePUX$5%7rSsM#V{CS^bNL3|J0lmfUI28R@ z&bvTmCpZ5-qXS7-)Jb{k9b#<~_AEMX6Lq6bv+avQr@pYdDp1Z%!{TA&G&=gSuYKk?zFz&mCGbdCc*r`!wFVblMtt=Vqk{Bycl#193Q4p?$9Bh7I}QPQZN zzzw{=L%cqK4I$lj9)zy=c@W)Wgf3|@WBR8YPE~Q$)O$F8cu8n!P5uC28Na!nmP|vi z5oRlzkbBW~`_s69w-m>zAgY7$RieRUC8e(BYE`GRwd`d1Jh?ettpJ7nI2?#+?R1&U z;C@DupWGQ&=T(;wX!8JusIzC`Wk_(Gb-n7EKD)j#$tLq~2p??IQz>Y%XDfU>Ow-5D zBZ6*T)HSF@sT&w`y}r7`YI)5ODt0w2i!3`H!N3R9zTSW~%zyu|+hmqlr|19AdiuX? zXDsr`eKrd^znHEYc^fErmXf#8mH2mhZz2!En*1`haA*kx%XBFM`Db>&*a)x+~)=@!F3Ws=d2udr000nL9SJ6)L z^^l*ghrB}VAKEK*oDt6j8##K5+sS^c@TwKTt0^{EZ#gOD&=*I=n^yuYU;YMB%dD5G zfSsrdzO2~$KGyq>p(qWolp1s3$-1(~^<4GozTcIs;W6=5LPUD5Qw;c&8j0 z22*l=sJb$Pn}9Rfp(QPJPBk?St6DG6gV10G;b9at70u#T*bzE^eim&qtJvpKvgYNO z3T*Pm_|yw5^o~6x^9dyI$9ePe+@yzOPzqlCu8>}x7?y)ZepmwK zHcO2B+2#{7go4y)yV%UbHFnYAhWwpytSA7fi;6+0?J$O(*tb&U*B&N+QP|u~TU586 zJ>0kM$?30OOii96aVI4&uz)&Wv2=C0Q}mh@9h8-EN*onU+cE&Yd?P{O_V;pAUkyJy zV>zE#^p~z#SO)*(MEt|FTT+8GefEu2d}Z+?!{EJV!uLoyh!?^~*XHy=&&BIOkNJ0R z3BL#i>l^$v@cTk;$JI-3|Jw%KBKU^;gDLh^uWN!{Pf+tge(xL%6wZB2VdLbX4{=*VVe9wF|w}LNo+OkUZ z_;2DcK>ay4mGBRC04~~?&069g>h8|2EjtN@4wTNRNwb?o&@v+P{92%*38Q___}`v0 z{w-aoH5+q4Q4iOxGUyJ9>TuhE_a6&;K91(8SSF0Ss%3ADFbPK%DZMK^`x&X4;?+ZePnL=WNgy><<1*^^AS}A$G2C2+l?1MK zbZ}uJUN2@8uj3LDV!yPW^g;Dr_6k3M z^?vmXx6@71ron8ivYdP7K-qQKG)nA%zOh~ZC*r#DsKmyOU5JiCMdxz*+5;9*rsDO5 z^kVj$u1%y{FeUXCelhSkO<&Nlhd!~?QU7Z~;X2Qk?CZB+WA2Lx6hnCDZ{5i?Q3=2= zIZ2OdtANy1XE4}3bN=B(C5stLZrMpivS&wa{PB!h$rdRR+8NP2Sn}AOTK1+Q`wtZu z!0t_Pc<8!aGjhsvb|@7kui6I_=vABaX`zD$bO()duA5};^BdUL4&Oc#_O&zN%1;t? z05G2||Ng#umV8C^)y?f|eNJCb&*`h;9F%^{-)J^AAOHetf8sf!(60u-ya5mNX&Mid z&Z-H5O|@zS~o*Gq>`Fwj$(x#B@Eu~YjT15=l1IA4s10{ zN~w0&m90iSmr_UQALc7O-5UT*vp(YJIpV5hQ_3Tdnw@Ow;b%iHYMa?C?ef~!N+FXm z6qK5omUIu8n=yj7l8^Ef>#H@Fld4tw6Kk{h_X4rS6^q$4L0Ap80n2XvyTWR)){5i0 zIG(8N=0OBl-G;2E6?`hZf!;tgR-kyoqIeaCYO{pVa{z{BiI|QudOmRpQaJI>JRWDO zxUD}5sO-bp!paK}DrzsG*A8AN1vQ}h0>F6d)oG-9!Rla2C(*nMOJ}8X=Tp2P?(3J* zGPZ9G2ine(_J^ny;&GeA@36GHrT}W3DksKXgJwW+s8}~67UK0>Pdj(8f0}t8lQ>=sH+0qHFNsE!u}9yZe5zAkJQ-0-wv^uzIhhsDO!*{cC}^rN}R1OJfm_ zd+2Tqfaa-Ku1S{RQ40|mIBO=^X8xIa3LJ*6cNRv>v$pZXUm+LI;7bSK*K zr{ZNm9nF0eI=tkvp)jf&Wi-2$vK!XGR6b7GEjj)Es*pX?raHFJ2_z9g+VZxA9&!Tt zLy*?u1e{cm_O1QBjr}h?7zu<9ttRvUIY7q0lut1`CKbUz-iX`JEou(C^+30eij!#8 zJOUdpObBv(`5+1xRSqQV952Qdq17jmvuwU*I(*_}J}z`cB8h>S$i46EWUV*XHG6L} zo7ASuu4(ylYWXwYKg=J7Z*RO!OfEu~l6o)2kRD{VEEX?>KDy*L8erta&e|4|ZP$aA z(r-W|Yi|=bLM5Gsi0g(0Z&vZ66BX={u)olfr{iqL_c!fk84MV#v@u03JxhE;IW~vl z3!mJn-Bjc@uq{sX3oxrYauS}2qkuJM$p2_07fF+ZyY;A~d)2Q2wVGMLm!TUO_O76D zZ+MAYR>-{aRGb}9q9?3|AfjLQjOImn4Epju5BdUV|K=jrWSPFpCntyofFSGnonivI zIaY&#TjZLt;@P+;UW9ui`U!oBPbd;KITR1fq|SEvsiYYknKP{K5*+SmfT^6<*)4LVQu^HnZPGNAR{Hpwyrxjq`D~Q*5i1 zJAqC(V_ zvj!_t4>R@frzSu>2tZG^)0kaW&>z|m+538jWJ|OVASn8L+jh@86kerJTMdJ%h31mctkt9_@Q(nf0Oj3U2hcNmxzOUZ4OAZ2Q{L9dMlDzi2o2oP2G?kZx_ zVn#kk6~eK$f}eSluYg z6t;ufn$%Gxo%4}q>zTnB<`AVzH)D%HhEzFuyT(QViW2f5(H{!z(yk95g9(YbySz!j zPWNN0ZAF)QUVSy&6(eznm^X*q6dzp!=;^ZLosRGZqo~KVc*`6m{~$pRQ-U5qhVz$* zMRDNFBpYk zSir|laO9fvct^s=O~tA7WhlKz4m)P*0qV9xAOv9mQlBKe`aliD(zMX^O7FlT$-|yq zu<2qUU`j1Ozt;~A2-&S@(q0s_v7hF%_RIV&K#lcpkR4{ej@()Y88Z?Bk~pPh-p$mR zvt3b;)cvWDa^f6RvGaPQrL|@kI%ga)UE1%DM;5NsJ&wl{K;MQ`t#(={GRdAm+Q!gb z;U!MqInYP}1U~+hp^V{Jq|A;Hos+?zx$TJ39*z_R!yF9nXZ6J6eAjW@5pJdym!gA$ zPfQd=!+<7t*c(>PL;<-&gDHx8L&1npR1IMxV9FzlNvG+H#0~6qoMk6?xlF$ty!M-A^CV{RVMVZ*fVII;%RGa^!CvM-(42Bv(yS!+{-d zJY2^=BcHH@(L_h2M7(-HlW#3Wa{!-AkpXpY0(K47nk9lhvTcwAEu!$>OC+4A=Ba{8<~Q#5kc={Y_x7e@;)ftpd~0!Y6KA%O~u)vwb}H zoAR`M&eN#Ry8&2eHwe9EY5hIkrHBIXX~`ry{kY`% zM`=7fVW_lcRmSSbvnsJ(Wo$GV>rKWkmGQ30*kv;Is*Jtn`6E-}bCvOByjOug)=BTpwsv`HBSMD_#kK{QFF>3QJ4mcY&Su#7iz4)68Eo4i` zv#5nw36qfeDO=)tQ;y5_L`%hw^Rzh>l@}|X;i{CEVYlTge@H5USH!i`Q4bBmzszG~ z{X&^ZQ9Mjsjd9a=v`~uY4X+-Wt!A%a?J-k(p3X%YEe6|1jBUuxpElR{K{W+l&tpMv zpi#dAVy)hbd%rFMg|&q5zMu1MRqzsu)=HS4r!9N#DE{t33q9$Z;bFJrsUg7} z^ckY-QI9R^y!P`1v@;7UE~n_7xsUziv_{;FNxLA;erUlXOw{_7I)(gK42*=8bd}e0 z_62T8BA7DQ?*Tm5VD@2~s%gD);5 z9~SSvOZOb8=1YKC*jr|%wga;7FX|_dKCP^9WG!p8QEL*w zZqht4VZbD0t6GRZ`zGP0y+*Cmz+S{b;#3=UyN~uXysiD@x7tsBp8Vvq=l@PnVe$2U z*WhuA&AT}~oq{#2)_y3nCNBcZ_0c&}>qrQpBPQAzb{*606J)}bs+dmvIK@_3%4Jat z{9}&+OY}I8u4VM6x}e?ECGDmzZ#Q)+nYP?W*ULFDmdNQGhgv!PjMgsMB&nFL>*@Lo zf{)ZtLhA;xWUh4ijYq;QwKpW#^%=gn4t}mUn<@T~1PdOTS^+OVQOE;)CoZ1#!JM-pVinqiyi8AX`&$ubLlmLT-DR>Q*mKqwXErK-pg zN%03feVe%(hx_or5QVY+*9QsqCv2fg{AeY0Nl{RKjW6v3ONHGat*@4%Y@jbct=JrPXZ4o5RWcK% z?ZXmvB!prWxqZCw(P!Getr$_HvfB;po1BsG+)8!4(;#yPh;#^G6vm4-jXx=g`v3oF z73DQ*Ios00cIJn&jpg7&e0J!We1Zs2*z&^70fe9+cGHHvsW#WiM zenZx86u(cpu6Ks(iL1)lB$O*uNk(n}czKs9Hp@0u7~T1Eb?jdAd;$NiMJb6u`onP( z@`Ux`yB<>-@Fxnm1N`~VS%Ajxu2njm|3!kG7q!`o^$%nA;?=h(T^@9>Q7y5O8;h$g zw35M>FGb3*9u|HzvQNP=8?1e8$B^X(HY;;jS6Jl#jrCyo9%seN@b>-4BUCh5Le~{) zsaWjqZvc-lww8B}+stLBsJ648(wVjO{7alEErn&uAS5*EEF`!3*R;``onEZuS*Iwe zPmcO*7Sqnb%kS}WTA=iODl?H(NQyLEYsy}M4;O@bvUHAlBL9}$=_wVD2eqm+{~A5x zRCtKx(6FC&@8`I^;5)u~l6ZU*#uI_XAB5svp~cx1_(E3e z1vx7Yn{(e`bLJj4XTf1}8inv@3Ca}lMYh1`K%yG|i9Zg*(28O7$w01o9N$Y&bRs_V z$8d-g@@MZs-tqW{rn&oL6loyCt$p>EG-1@2#f5 zP3Gn*{dW_0$`{@^HaEoAYpLk-$^5xI1TelVdiA8^Xi2)A8 zlO!6GoI$%-O>ASU8n0oDFyCkM#lGSj*jWk<41k^3t5=xd@nWx5t!!H8<)qt>2tk{1 zq2{8NHU%kZwn2ES_mSAnpEKZdS zSmZW|BMvDxti57NF#D4?{h-EEjJv}!&lT|r)k?_056%VR#8Sn-9V=*9$@e*o;xe?$ zcl(Rcqj;ADew&npuL+b{C=gg(V22TG-ie~ci>p}Dp0p-9K(-km7`&e0xUlm>AB%uL zpc#0q&>aumYLModcaWnt4rahG1l{4qN7PC2?KZKfOS&rUSJ)z>V`;ar`k=-Up6FO3 zu21sPgmL8Od8E=iJ6Q_)L_qiGeu;j~G3rES6)LOm0`NmHWhKQ~w;cF?0XMUD&J&E#ebXy@HFMJ{gV zyQf1JuK3>1Vu^`7cr^_j7?b-rHGHhCVBMt}_j}YtvMze;&2P_O4wPCa9ct1Rdr5Sh z+%sTlWz(57yE2-bX6_-q2#cn_rzc^lbHdiMqjFjsMC&uZC2bmO($Rw}`$@E6enoV0 z%ttY`&-XM6^Sge}8c#;nIPDI{s0NuJvM14DaGMctrulg0eHHYVYmYl>_}ps5Y+?5O zhh$F;Cs@GcG3t``M_R`q(wOk5}YAPRRW_09NkvpK>1uMjC#G&dS|T z21H8yq}>v~h?J;ox5RIP5_Rmt$o(ae`yOrPtYa`|i`fZIPTtFS>=aI^3rH*6&tO0l zPW*NoK@BIU2)8hgPByBYSY3tNSi#2eoZ{h5=cY3izXFaSt9_F9^{d&ONYL3#=$SMb z*&%x24sl5`KeT;0!Z1Kw~505CBBU~K;BQ35k7abuJ7_MA={zHPx z|8VpAWpwirVbcUO&F7`XK0h|0GNMB>aCM#J!QM3xHB6N=K%Wf`H<}-YxBbG~^6>Wf zHZ3P0J~Fa*?B@#numtO@;lF#EjU=VKedlfu6@vkFE@&@tT{|1eYi+lQm)j=nY@3j2 z2ccJBUBkZ@qgR~XwSpbn-n(Z4iX05Y_V>Q63XMF>W-|KUZYE8U-2?WENx6^rNvgl6p8_IOG_r2}uJD4yfAE5u+VS&3pc zc$m^R?EDY(@6o37uy`c{njVi0DKfX~o!!l6r-m&%sOimyNg12{8YolRj!#zKSDx}` zCmUA75+}8uH@N-xmHf^*0(AzMRb*6Z6Ay0Sjj0dOD|A-oDGMQBX$oaNlzpQ37(9M- z3LCP%?C{o7NXUx9VRi>mm#oTK1$Vt7zAIf@gF(uT?uT5q6-uE>!t$+Rehc2Qk#8z_)L)b%V zuGJrGIH+SE^p-*~Qs1gAd&O3P$g(dVCEc!w#DhSaRJPa=@DOzj7 zE=FyQm{a`!SbGxyDT?cVypHaky{}oo1!f1(#2B|15RAvpf+#Uc51{!*lvy;!#AIi| zBk^FtB;L$|7oaTOs5l&IG$1Ib@nAVjJWvo+4iQYyB;H4i8s-1qtLo~WnO)5H`~OL@ z(_K|vcfES=)vM1-TT$J|XdGMJB}=YZqDHltt^z>!q9f7jj4Y=*@gk=fHn}WU?XEVp zN?Eq<_!i62JJmNch5tJ3d;B3YrUSgbn1ljXj7OA%ESO2xDAa=XH=WS5#g=o9MY z8v0_gRjYGNSrJ|SB&$f5pOLnzbcwXo9gPtgt5?uo8TF6;RimSo;`}kj7OB*Z+O>8s z(Q6{v*hicqr`G8OJ?uo+$_m}NWwM-VoEb;8jRNcZ4&9!arcE_wb*DUnu6wNJG*liP ziW2>{=ZuA*6!7^h1FVDJ(1HC;BN7U&LCm_8A5$Uz#kdE%w}rX|7QS2m>JFH6U$$EI zWmmz&C#{GNg#MoqgeBx@Mq7KQm2E9~9mSpXV4E_0Z7*NDmz#?^RtZdH>@y%Y^_HWH zh+9&ZL8pJs=qyg1(gk)M>y;Cunt-%swFS64ZD?9rKxpPxxl6>aXP|wWh^l)IHoKZ@ zGO5lh#wlb0B6z#aC66RIRzdDZlH2dt;7nROJlSKj#$-!jx--yo#h8sXW1Cv;|lP5c#uaow=A}7hq}xb zXQ!G3Bu0r}HywK%A-sysufbGZ07ObmX*yO^G$q(D(%L_>mp~@9tC!~|P<^4f|B8Ck zTD)d98YhnV7}k`w0<;8~;#|?z7Tn*`PL^JnkkkOSr`ZPia517~7Tx1})njLdL2OxD z&j~N=IqJ8PsfaLtfd`G7j1vJj%gfb8SP*6$lhcyff-)-(GP`a6(F?gLOwK|FI***K z6`rEK={R<h(X{rOQ1B*y7(I47 zw{&n2ZrT2KF)=fzfah5QK|M}mkJ8>J{Anu9H1(!u*a8(vW3f&7lu}d5o0eirgz6#@ z3>AcShCbN=qs|Z&icltwXBt3c zAZE}02q#fpBAjHaS_Gf?P%V4H5TbclP52!ayb!qSy#;4~w|8O=veW4ns5v?ux&OM=?`Zq^YC`|UD$?i$64g*|tQMGR?Jj-%r?vBu1aUqK*Ij=zy>;Q$uY zj8Kav9cgdc&(SN^w3NrTKw=2AB4$(2#~nEySMxAf6B(21aH80k#PAM>C#E%s(k6m( zM(`y&m>U5V;%-fXO{80T{xlJ0nk3knc-ZJSsv@{)ZE>Ah61w66-ZND2WBZAFct3G} z`LDo(*Zfzh&dUQ6_OUK$r}|fPfL<7{Pe`Ln6X`k<@7$dl^WPE!vnl^^5a$;1hO~tw z{Ls3e+uZXK1JY?PF^G`J6YU^_(E5_weJYn#&cdJ?bI{omY;h7(d{l+13bKpptg*9V%A&{4yMEHoPgl2X*hTso)_-_!*31na%xzS^LBE6{%7R}oS7eRN`Am;`2oMk z4>&zP;D7!fH0#>~TJuY}AV1*O`2kb%1J2D4X#0Oq^%HW&;P-eC9}c*j6SQ_HE(#tW3m(7GdBNky!Q(7TmvFab!mbmlw(WQg z3TXW`i-G-q4DGMjHf@jt?EC9LPs#A6oxL4|z7L_F3SH>PehAU<^=kcmyt(^>Te0acC> z7dE)kf;zumqrD$Zb}jxX;&iM_yB4|z!Y6ZMY1c8Vk5Naf50@4B5y#q0x*QLArq8_%0rTfW`sN4|BZsmWO-IF=#cJ-L9k2$_lzdup1 zZ`lskqUxjWDBVQXclVPKqZ;;`LeFnm=DD4H9lWrm0-wzU+-rwk*~*-^J9FONw}LmA z0GXV~jX}}ywkGFoN2pq#=EOW?X&^u|318D8?d(rEaX1zKVuedQk^?In>Lvg8EYn+O z=-yf_OwhA}{2=sECSHiTNYM7K#U5NwV+V{On)N4q*kim?MeZZX1Huub95L1w33dyY z>j@U0JQgIv<4CDd3Wm;omxpScMR%`svFuhHxlP)AOUel7juz0}mVb^)DHMb{O>+h* zLj={rvvs>JRMSbAX~%x5W7-O0&I^a&)HAvHzsG18)1=Phc>Vrk{eGf;KSjUie}9~g zAFtyN&FP^;Lg7ADn9Fv@^GA@MQ2fDg{c;pJv(+zAA6c=pGs9w{kdgV{E7c zu0augF%N#qd43BKXwESIU?Rza+oLC&C7&DG%Y6*SH(_MhC-jr z7LF=xxS1swQQ`GP1UkhwJfTZ9jcb9 z&oIMUQ+*CL_4!49eb5RC@_K3$w><;qzI+5bRM)Q&L(m)Uxq51(jbY>2CjT)8_LiD+ zNjHO8gtcr5ka15jptz$AC~lL{z+Duo=8ye@kdEuAAP;8izq{1>nxLN8D*}Czk?kQi zpkBEMRHoAGE}@nj>}}!YX6!(6k!Q}<4fkWuF=klPb<8epn#o@9AMW%YmiZ4~>j!i( z#@73x*Ydo~zwP%b%?qL@YW47{|FFb=c--)dtkVzcDZeMEL)HmxjrwQJy|J4G^1Pvh z(ZEPCD=vPRRV&lOYHdANojaAO?_n_13_00M>9J;63^UV&#{B3042jgiI`c?YEWzbP zlYzQ?grT&J#^CN?vvN-lO^_yk9xG}`n_&Zes4Mh+-_0(YNagB`jx%{An3uC1DFE<+ z;`x_-TS}N~!^|QgYv92?0rRv6>1=vZ|8yHWT6K}jMr$S;4>2JDW#pyVst`=_vXDn; z1Zj?ChV;*}hv@y!p|6m+NGI556!D?D1s1YN-$XawGVbAGdMuG`Kl0NuCsM74CcQvVMLb?X62 zP)fA30pfAOD0pkOm=|A4X5+9GD)!|bUu0VEARj_gGNou=wLgQD2=RVRf%fW}HeOo= zVgyl;dHG@lZkP9RB}bG5azxD-@oSJHY$*2q8rPC{+(fl%w5&VT6R_~eY)uJUmFwcN z()nf=jQ19s*^VNDzhfaQp^tsBps=P7peqr&Hsn}YEhLcn#9(N^<)T1ND9j=2;}<3$ zg-_P>TvXNvUG>XJ3_!CD_A>w9l+y7Cl(M@}Fxk&1d$3~pmQ#~7_jjh|{%E^eLK4a- z&8X*p(xyK-Uwz{HY4`DJyQG;aK=_`w@lBDVRiWn@q31h8&)@y9HqEYo7oUv)?)dp;)) z#hxuxl%nT5=$V9Y_OjG{{RUvO@(K2k$Q64E({)n1jUrTN3K4a+4q^}LARN;Z1y?#c+I)G-O)jG8Ozh!< zN??*oV5(Q#OaOdfab3FG;&!I?*gRz>*%ch!KL)eQ^@hW;nGVZ_55*hqFCxiFo8&is zd-B&I`K`L^Q|!L{zOU7T4?DHG7T40R(dW9e9nhfD)pHu3z0mVdLeEDj6L|_SMn`7b zgFR>_?}iMLRT6p%Wp@yDpMvIVwDvrN*hzPgM~{Xy?-lKv=FzHx{asf<5$1!;eS;xp zlRv?rr2MQW4v=KK$wmqY_VNAf99QQ$pyx(!ZPo4Z`ZOhDY{x2~l_ARCxAJ-`pjkq^!0=SWacuF(r4td#)N#;iFT0l8 zZZa8a+soB1a2c^0Kg8vYhXFCqO?$sb zBSx=-bxOJc*GBA#+sLkz>L~A88REY(32nH@>&tCEi7lXsutQLPYC8lZ9Fl<$Fn5?J zYam<#g>H+^F}d$BkNB*z=SzdZ~zsD6l0lQTejC;NfXEZ}t;*;H9LmxVmn|2ptdqzO1hBi-4V+ zj(`T9D+ZxIE3Y}T=%|sIOjqLwZ)C=UpG*c%9~JIU3;R?E=$PA{ zU4lo5rQPv$X;(>gaRh(fLpX-Uiz!~rAWxz|#H@{7T>0sI<1K=#RsN#!O2tLcr9dFJ zutTLuL~}uR&D8lCJ(Cpc_eyhYG)W7M27 z#;r2l_0V0#)LpzxO4u~6jb@TVZ0RPgQhie<;~j=9VA)o?)G5p0ZP$`d?h#+tq{W3X zyTmC)8^2O^rCnHFA5&hVRTY$1?w4m#dD-Mp+Zx<1%f8&pzp2QILt=KBm>6@)JgZVy zp(80v-`&OMR;A;jZ>wEum)VtBen6$Hpqg}vvtxFJQ|44=V4!xYo59Hp5CT_R%&RM4 zq9ik1+9mj%sBB;xZR?JmSj~6Qc*5SiTj;~rdo2q(-?So9agxMS-$$x4Fw=&5vTt@L z)MAz_f%ZLJ<2J6dN_87EhspjQ-Xp$@c3H*xR5v4rtg(yj{^BPwr`YKaE$`>Iyo_3o z&ebYDz>hkUR=w_^Mrv4$8kQY|=reZAu5X5n`q}+6uB`j}^ZfH@hWDy&l+{l?2hXqp z_v2+wS!dFzr>~t@*MaaMe3rDU?K-<(hSyfJ#gQB@qmom9FG4qCqI@Ef%M#CGWFY(U z*-3Lqp9uj?Nvf5{HrpJA1Mful)REUltnhR|gav2&a`7P|f7$Qsfwk0fDr_@XM(l7h zb&v2f=fC>)eW#mmZ;j+k!xv`j@V#~<9IlSvd;7=l2bhUkZ&d~pwJdjGbR`>YDXJT? zvSjaD96iUEDx1ST)w2A91!8@4kF5H9D>)(=0F$lMF1M>f(=;2mQKZLFfO;{j;`� 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


    TGOn1X=i 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%0D$z#l@%u)LLZ(pGa>v75iS}NHf?a zjO}SgDm7%Yh5Wi2Yib-i)=quz7BmfC&H%_ZHLT597QNEBof@45;7ilDn(Ym%l7D=X zQTZr(FM{?p_88kH@`sYG$-h}L6h#(yn1U-+kCx3=X(*9kgyYK)sy)ǀw(425Z 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

    soSP_Aw%#GB0RbGHQ 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

    DwxhmKWt?Fv+3dVv{j21>7t-s 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

    {;2w{qo>>76fPJ)*Dnxx)2RK_ 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� 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

    |W_Mt>-;yBu4hSF`e?XmH|n znBI%8L-up;TMQ~W$i=a*M|f)*{@Uj|M88@PW4Zp)uLivKct_}{qwGj4y`75SfmWB*3#pOIqt zbB6tA+{wRj`e&RN{~V`322%VRsDB2E_0NI&`(3C12JD{!+whNo{dO|#-%$M?s#4?4 zCG`lA0}cWHl3SKnf6bO=^V^f)e&1uQXdnq<$3L1)h-N)w#fz3&nF2%JEXKY30`WJf zy(1Jyan+^&M#+nn9cAi=UOo8q@o}Gosbwm|;69HyKXwl)y$jo2Hn!Lm$*PX*mPqp6 za&GH73$ubXr$Rm{yF|nUni2! zy%VIdF!`w>%Cd}+u7GY@3;SP_Vu?zpg-TI`)|Vhvuw|~a%FG=?2JJtE2&>1|AP z+#%#`x(Ee99U-ynFo1 z;KjSEf<77qeG~Uz{Z*F1bv>g=>VSBfKIhqK<~Is!GHZrbiWgheoi9}C1SK8Lx1vm( zDS1d;<^Awlq(p^f#Kot(McH=hQJ1{Rk|F?T?td{~*wjtKP zZaMyc#M%gRaQ*5BLW3I>eNHk}m)Vp)_PlkIdFg&~gr=;}_*s#KnDghE6TH;E2=tn0 z2dU+bN$ccWbZl5%dW2(0uf(5`%o|Q9V1V#kco7M|O4E zZu1JA?Db&`j^y1_&-O5`w$tpX|LT}#?Phl_G&PDTW>e_vBE!B5cX#I%QB@vlXxaAU zQjy@T)NKKp?E{C>WsN@F%|2GwWn7|2)9>jrD(JQ<_>(5zH-{}$xz_Qh%{=zj;K zqjCJ(e}7!Dw>GfnH^1m;V{2)Bk%ou@8N z*=Q{ticl*SMqd&yI$^F5}!q2V-UdZLfpW5zI?M`>O!=@2 z^-9psm;U-$N;SXq+t0Q0-oJiEQ!W|2xXn7DN4X?0P#s`z>Gk~BGr_?HxgV4+?(9pk zf4ll)Ak}I6YxgJ_vEB5aviKEO8xsTTi~3g$Y)yWfk7BT8lIeDIp z1j8%%0xWovlRR945O@I-z)nvPYTyrr@EHVfy5bt7Ko@MlVYwnWLnd?r15W9zj2BWg`eJ@PU`G4BR;Dt^*`0zKsa;&naYf^6u7jT-nK2!kT{27;P+4@5#6FlgbU5CpGa8IGMnJfIqu zK};K;fn4|k+&aid2#0!@1OBsEKZt@77yz;^@&$|_0P>&%esyF!!3^$06MO?vJ%X@+ zJopJm^bs>?2F~-yStx*ckTyV_h1Wo3hr7#Vm7tkg^AuNEzMS^gH zGFXJe#spylneYi%FQMK;EcC&46M`^=IOqdbQ`Awo11+$@47mrlAs0qryE)oKcnICF z^D^2FNQFsYvq0{ECp>{sV84Rzg#c)TIXG;I{DLZ=yGjtJ-~sf(4l7*9ha?z*Z}1Z+ ztx?y28$>`AOu-XEARhAJ6?DNU%)tt*vq63V7wiK~@P&M+fH&|C#$XzjVUsP|O4tqp zAO;d(0RC_flA#njU>s)PkR9q1oCH0HhjQqHFR%nm*RUR-0hhr8f*=I$!$Zh`=kN;J zU;rjy4hVbHIam+dfFC4578JoA+`t#c;D`gt5_G^6Y#|U*p&NENqCS8ZJcdkYhb5qP z!ty}@Tp%0jVGOo8qi+Ed@PG(tg$*uPA2$FF^7l2zuaz zop1=wz!mU>`w$P0;3^1uj4Ai+~l31IZuz5O4uG{FFzAp)Mm7hnlS`GW)~fhHJ(4R}E? zL_!KYhu82H`e6co0_iT+3DyHM?1O`#1X^GMP7nwWAPMrI9BQBudf+3B!W^u=hjjyP z;D>`C3z}dGSHK1up&LHK43I<6z5+KK0$ET64bX>6U>XO$dQ!@CMd|VI4sT4nr6;LO(2nQaJV(AQL`-b_DVS0-yu--ba50N>B%!k!Z8Q z5rUu)TERF9`>^l^3?3j~fHfL%hCA>MzQM*A#0eC^AL?NeSYpvOKoGov4%iom7=S;- z!vM^~iFnj!$b=b?NI;yyA09ve5? zyde@sVG)>;@E-7ojmc;SfGP!j3*-4d-9tHJAs+YScxrgHB+r!TuZ+f!Hh5MaYC6m<0aUXcr+0 zlAr|IU=(J7wif*km_a&JLLYF{A)lZSI$#*+-k`sQ1aPTG?!YjxH=u2U2@q<;y2A^Q zZ$b>jHzaSdKTk-wy9q8X;zX#qx<~zI>eA=))Slf>BgnrO@k9|Z4 z>_GbgL?`+t_yjk)kW*majXa0bJy>Tr)r)n6)qU7zh=zGk96(M%4D^802ef~{I*6Qs zV-N_D&H;K5zEqMLw=Qq^T?^q7RgZUKV z20MQsZy^SXrjfUBdj>IwPWS>xX0bkS9TGu#4s{MBf1+N(EEvzDOo46zaexrWgAt%u z#P@&Ai2z&5@JXiv@)ge!$^*2(26EsFtl32(E`T%K1w12w;M|S)fIO7J5NzLr z_`w{k+Djsgz!O^F2MFvV5i;Ndk6;2Ac@bZD2(|DL82CuUE-(XIXa+WZd>@#@9ry@j z0mL5MAQ*;VjUZwHhL8^LL1aIP(1iui6hiq!84SZJVJsU`;Rmb}K|X^XeEjuOltctU z8dSqHNQfbZ5DmBjK-j}=_yN`j5r;!0LKY0+7O;zx2xE8w5r;`c2~5IP3B&~M!zxJ< zAqLs7R|@ZkVjvwM5nI3*u0t?91u<#l1|+~wI3k1cflPP-oiG7HviLg$!+l7CMqoOM zvH%0HhU?G0vdzb^t^y<81Ut9|F;E6GAghWPfd{;U zpK$#o>M9h#B2b?q5ho!GKEe`+sF4USSO!*gydOS6)@f`LOar|J;th|1&?FH&AOja6 z8y10Di$nxM6G)yx?!$U*62T7_AO!kBLl-E)Wjy z;mif(3lu{mOak>qd=4xi1Kz`WW3+AH4B?Og4bTk-E@7J>4+i0)3Dy-DO_5Vj0pEej z4EX}Lp#?5B@w3~4z^mMeFAN; z1a}CAVGy=P8w&T}2~2{N4b}nLVVy1B1G3Nqn6?DWL;LN=WA!urEom;gm@lqU=U;e+2H5(?lo zw812-_C@;%yFmiZfit{*iH27Kzj>q4P1c$$O3WzVhO`=^ft-?48ajzf=D3h1o%J|dpco>H5#mF5nfkK!E)e`&;8BheTp%2!UB4@w^3PI^P z;tLKC4;j!7`^peY7z3Viv}0fb-oRFY?FB8!hEiAro)@SOP!Bwn$W=&#HW02tF2G}` z0*04ppP(4t!55&c#xlVjdSDWqYp@Jxf=M|33S|mW@Cf>04vxP@UO^s=!QNVI52QdD z^Z|Pv+CeaY>+l(lzCkX)Rmg!e^;kdPZ9qMQn=lMsjo9yopCI0Z{vV3Kxf%PG@D4;< zkVCC#C*ESYFbl%(&?Z868`{}+>?;8Mdu(e5${e!B>`y^0dCAr0E_6iQ*;1ln})fnbP%QlOf|{viZFJ}kkJ zZ|Kv(3#x$lj~Tu9B8P>#BHdA74WCV>%g#Sf_7lpOeW64HAsSHkm4W{Zh&!^1QjQl z;D;Qb<{}e{pbd8*4pN{Dx?mF4Z9!~78cu>CdjKiMoWFiY{L2n0{ z2!|Hfz)dFJf#y#9od;zDdv;-4VF65cV|}3!+V+qMroCihKh(qNeRvH9z=)Sjc*8?5 z$4yM}K*3KYe4!L%1hB2}0SpAmgexfSClmIN1q;9^gtCXPKr2ip93U1LMG!}bf(@c5 z15k#1xFv?~f-%^20Lz487zN6MWI_cxU>d9r;roG3oJ{n>$-`vA9m0TKf=o!jQ{b1x zdO!f|mLe00&;qNEkO?lh4;{cPO(ueXLWYccA+Y_xCQBxGp$b+XMQ(to9GNJ9ZcvlQ zcLIk3nFxe#P(4N_>>wPnVeN5jAIK;ouHXt2psIu%05KIZ;S6)I?*z&WE~=7=LU?cz zIdKZh1x_`TJ*cW9&hQqhPm^(f0htH}O)dN#q|T6uB@ordHt3Lv%V!Y-UAzZgz$8$d zBNN9#4=f-S@?Zvb>0zB96?j1d=DdkMJ$;b3Nha)Xy(WQsTdtr_yd9C3sU7=g6Q zsDq$pK_)^W@CtGS_F1B?f$&u<9}ZiQi4bUq*Vc$91lo{^^|n|R3__e8wgX1N_!{!j zo{VeLs54;XNGAGVn-jJP+@TicV6QV7*P4-+kPN0S$SGI+4k~Ua3+RV*cjPxPd7#`u z(i8FaLXJWte1@$)SQZ3AGsOCmacqH{hOK^xkw0P%sy7gao5+`2XdB>G0Lu6_Vi1V< z1>xTyc?a=?TF?t76W2lfE}3`&;`hk7mWOqMR=5{}?Sy&Y4#j&R9zH^380s?6hvU6q z9D(=2k^5+S;dmtKHMGE$D8v@FJizjREt*WogCX1ox){`}Sk$RFlubOg8Ez+_Y#*YX zhE_07M6N*@bOO~QHkt6qLA`+^xyUPU&qF@L zJK)L3XP^Y;3(!VA!!|(&L=+;Pu(=5R0E8E#o|d4$D@9qt!RP2-AP2f&1(?c^D-a1O zFbNXns7sIpqo7oQz5+^s>IL!&Zo(4~tt1m(kO=QUpbFaz_h9Es)DLI?!)oLvl)^Yr z)?nR17n~smQsEVFzCvEXW9SCK*C+>wf^HD5MZXHh;0SM^2WH`H9qJ`izyR!jgLuI; zsD@_v0(XDF}cf{2%7t13Iqr z%JY0}D~k%GA{C!DZKj(Rt=eIoH{~xd+o^k&pGUR!f zXA#djo=rUehUe~o1x-9B|4-1%)6Me%&lfzyJU0(v13Zg({y(0}58)$u7W1s<*~ar< z^X%t2<=5zq=Utv@zX1sEzdFk23+v`n&${l+rLFGJQw`0 zV3y}^c)sTO-oN{f^An!MJX?8A``^Cf%-|{V{1wmH|2we^&vKsqJpb(ffDfL(*(Qe4B}c!wsBEE(!9b6Aq3D zrAauI!#V%_S~;OKvSrBDLz=Jkr^RfY8)5PuRVz+W+7o2V_E#$JVY)`t_ zZ_4bV!i0ho5(fo;|NAu}>eHe|z2Uo%&-E{i)N;!$W6K#-dG^_ov3`e#TBuBuRe7xSnW%As2J` z<#7ep`Ht(ak4x6zdb+UC0!jnNW2`(%n(u=`5)U%__wzazUKmGB&0EDwDd9?cCq8wO zo0~K#uI@ySmykT<*lI@-IXB-drMF{2Vw~5j*((3(GS>jMrrWwZi-k(Q-B@g3ci;Qo zShCgp)RkApG83Xsom4!M(i}?}D8=}(s7BMdxD(S7G+6V+353f#KuwxS7u&iP_GL4A?xH9Cm=r-_*>a|5VYW?9Gq^FA&FeN+ z$4Ebvt*w~JNCVN+o69UL^ks^CT_}pA+34}E>k2y#RdvbEr-Gk6xsE@R#w&~q2>kLj z{S{XF&qM%b$Y_?l2COg`v{ftgR(kaah=nRdBQB+-UWd7C zscfZ{)4mIu^s1|(>_w7_ZZu`ss)d3`%C@ddTX$>WQB8f*P0?}#uhZ65D3myJTu@@l z5c)NjY36Ok$L7+s^%Ak*u&^yh9V!@2eA#7jzNfdmpu*0f+r{tfIa)CvZ^%`Z9K+L(7Ks;kgrY|ezn0U&$Yd+a`*HpO5MDSCkp)Q3=G)~~&O&h^KZF=Xt1*CZ>JkxF9*^OrvlMEg z+HmS@8`h76wK(G?!U>|q1-!)8ZJM;8!HT-%NYRnhLD9wsgcJLOM%5puiQZxXaFt4= zEoPS#^5t|cn$5V}a21K!0>VHqlN5ClQ-dXvbs-Dwr{&Sp`-UR>r(a zS#8xL)lQ%OM-&qfGi6GBDeA5*8X^^&NIfjp*epRMaTbWKWvqi(rI?ZMr6X5Z9F=UG z-jnkM)rB=Ux$lM>Oqd(!z9-Y3t@LPZY7;lyAVM(B8Od+v#0280LRNicpDm-I8O zMyy=uwOx( zk!T5o)PB9L@%Gs-QI9lyIO=hw-eo zIUMf?xdQG?RGVp6Esl-Gn1-a0H7Jek*}kmYuNFl?GR$)6N*+ZNmB2=j7x`<1A~Mqo zQU+m-uvt%(t+NFGQt#1JXZ68_8Pu$^3WTpi31W{X_N+@%)2g~hnkh@CV)tjr7WR%nEYZN*<=!ENyg2H7}NQUUOA=yZGWf73}Qo&0MZo>Vkz!wBgTCE2k z#;CRpw*(pa9$Lp1>Ox#Yv+$bG$R-$3(9qdTClpaLlAv!MWRE(S1l}!8mFOAd7Df~` z>c~#<5!7C9b5o}#w;YPl1Qu*DH1ZW8-CK5N272r4&Q~4-nxdmohi-9fT5VK9Ieu+* zPzeO4>Z)NT!NX}eI&2Vh$a~ZIj5qRQ(UD+ZwzkXZJQ>=f3UAUCDwUZb!@A;InuPYV zG1<0;8}aRrMPTHK-eGLfP#}FvatR(ySqKJDT083+@C3hYNt_Y7I`aw-3)g$3khE1$ zwqt4(ZPd|fi#b6|%4BGc%66imu4W@e!LvBGn0|i^;0b|@=M+0CBC1{{_!u1O?V=q~ zD{T_H8|yMrh^9}_iLwci($s@yqskg-jVvILs=tIJ>Shz-IJ3A&=QWkGMh;yXF;DM} zI=YRZ6Hlg%fP~0QdWkZeCO$Dd_#MV(xsYc5u%nn}vZ#4CCLpJjVfqDQ^VY*yX4gbj zF_Wf3VxvYSL5wN{+lU$=If-yvl8vH+q&~RCc%#vy=xj?ZxUrfGBmO2GvqnH_GzQm% z0*jAE3iLhq&9^doD)TnlJ~xPs)IuY|^P=)P&hNc9Ik2cB-^{KBF=Aa|qvWDck^8^{ zE@sdEBT2C2*eJdQ(zYV&pxg+Gz78nE>(Cp&XI0&(RcN3LtAvCg(|5RGD>grG(z!?rPOKD#-NlC5mq6MT5RdQRPupivL)d)u%pCPhyz;- zqXxEJw>?xa>Hz2b+7gdA+YklKo$aWFXY+2mk4SqH zsy;~omh2<#O(=U^P#cngRY)TyEE;@|YvMs$hK&jcK`4oWNB}YhHf%CR4Tg|1>=Ghv zXNZnONm!DM#AKoTb?PvEj3kkamJ~DTR!kyc8HpYDx_Z1Uo^fw(rFE49Tg+CDn=>GNY^_O zjfF^vkH*Gi&53f441I;_Z6J4>;mEL0s0aifH+rVoZ4E@mT|#BlX&}suO-dtk{syB* zAu=M;2v%@dAa11kx?oK6Ni5dLc9V#dgG=yA_MjzSp+`D8nADqMGH1&@~O_GBXbIV zZH;?uk$#Y$DXcDkzQ@K)q~p~%qov}6d>)lZrL$1z%w>96$I7OdK9(buR0EMIJ-C==Xs{-agcVbb#!Qqid-S03xI;shYz-uYHXcvvhZ9Z7hP zYqo463qt(@(1Ka+>c{$x!k!v-W7nJ}7?$RedUT-MYH+M+NYQ&jgPFjhKj>kJH?pF) zjzzCi-YBdH;OyO<>MxV9YH7md7#A-4L^k2l)?_kDLrb%p1fe#aDv^XHz?X;@O*fo~ zZDbe#AX)XJj<%$W8qAg0!9`^AfG<`bd!}mTGr>t{%A~HRE&c>r8^}q(V|&F>2UKBh z>sq1&O6sAc<@g3;^U_3N8f6-<6tUGtjT@SdW>oVL8y|Iu700?w`KX;mhLo_87sfZ=2O0G}W7!Ak=S?8paBizFVh4|oxq$G_@yS5}i?h9E z^aXAo%+nw1gb4H|N)#5QQflk^lTrWiZA`|i+clV;=xBB-~DF$%(O8ZFF3 zJbXZl@-lkA7-{OqSWL|XBJE~SPBV1WxyneB)2tw0GPcW!j8+Ck#Hv{{+D&I98jq#z88Jv1%LtX92sTDzLUk`Qtw1!?5px7DWcFvBzHB@cZw}uTs8X6{vjCO=M zlX1P|K6W!6$2gP_R9){bmB;!9B*{}C-(U-8WIQ{lL^Y=)b+Mx)O?hh)D<|b|$eU%0 z=5Vii!}nOL4PZv5*TVe8=+AB=8rrbRCTWZ;$%Yfy3*5Y2dqd>a*KTJ`YMzjeKjRla z@E#e&u9sHq9_7)8JPOo++j_)ChFZh*Cyg7AKCFnV-U3x*JRqpu5?ky(%Or8vY$#!r zyg9)9_BFZyCaLXg1~7};hPsC3_;KwdRN691Snb--)rcu7xa!)nq#A3|4GGD%gCrI` zDJASwOA0F5y5zLD-gK$7xKK1_4kWQ;Nh5A*JqfXXb6M9i1SS(1dx=bW1c+^8Z&xv` zBZWy_<7~deY@dy+p9sp}45_r7-PN!ZJ>RrZ_f}a-8j-Znm_%j|yLFU;B#$3Dj8`a0 zO2~1n6%M3kqCJ<>5|f%o5{j$QG>QG*UQV&A6&0D94P+Qzgp$-M)R1g~DvoIjE8LP( z_|U`JNQahDzqBR^pgz(K%n3#~o1K@(XAJ1WXTg;|6(6jW%DbYc@THUNYOvAK#2U^n3^RE)(> zQnybPpUjU{LSzs*LI?KPc%M_lk+;xZ30t7v{Qu~+p@E}!tW0RDN5l9rRKHlVSMTVF zw(IpWCv`+sqZoilf4A=#&zd-P(|8h`GcPECw33D#Ad*BF-r3K?qVmw4tja)U$_L z)M%eAC?VV%ixL(gkJ?|5w_YaUAudZFQ6vUs*!9OP zU5<|K1sR)FZZu<&5H+KqB#VUjammOYzDI+cqoctFcGM$}x+uGl$U?0eJ#Z3UKpP!h z399o_YHxZBm`@n$j}Cf-s<98D9BWneGbhmz2)nA7RhZErFG!xCx>3wU1w|mk`kA+} zR_I6O7El{WGc<)cR>Sn`vavLVGSuM(VW36uSj&i`V+?j4rlZcz$Djc%$*0C*Xbc7) zM~p4su~HKQz%lrYFf}$EW3W6eq~7wPZE|1-^`@jH)G1~R1z3K@Qp<72nQOwFV~_1A zb+R&X z8AYAf%XqbnHc#jJr_h&K>1;03e!r=O%j;tD%x>qV#@hQ9_P$k0&PgXd+%oS*cdFcq z#g&FL<~=-j&b+BJ7EYgc|NJ>K7tEaDoOW99a@N$@b9i(5>A{n1j2JvDUInQK&m?x%8lNrr^e z)A_bc&N=(+nR&U8&AmUJM+oii{9>U4tvTQM&b<4OQ470Ek->v`|0X`(<(Z*CR6os> zxae#C?71bEk>0DyZcn=0)-}nUPgkmx;cn2$Xb-GhetB29+zLE><9RJz9XH&(AX8X0 zGtG5`4^N$Q&%8w)Kk2!D?xNO3U5~WSZvFB1mMmB_WA2nRVx3;#?6t?xwi#8Tg0$J#!v}M649}K4F3T}@(uD8<47feCKEh$l9FZbSMfOZi9P={;) z%@n7$xARH7k@-EpP%J~PE*oiY$#7d;+4-~Y{PWkzS1M7`wbyz~tB3}QzF`)baz;wrF2Ke5Y$%W>Z7)F&gCprgXj`F2OhB8 zk=vnd8*W0*>Nk4fIz}8AEPM7PN)XQ!coG0p?59 zQIIP}ohz;oz_?edA$m$zycK)75{=fI#wyc(jdR&$g0H%CJ^hlvEA<*2*8)6bx>HKN z>@rWfvhv#F&uy=$tQHqJU0o=yxdtk2&0sEggI+wzjW>!X@hlBTis|(M;lN>fq=xl# z(@kELMQOjvkxH4Rt#ovV5$DU4%nAOvOeY3??zvvBfCQ5rDlWXxM<0rjDgXA6gNI5% zDD%Gx0;~xGLl-2YEM;<%%f*(`eo50|1d~dIP-Kwmdfs7@n@wfh+uX&A7pKy#ZPJcQ z#9|s3;(en^NIUDSP$^imY3w5J15bDBty62U1_JFV^Z`g8b{>)Ou)qCwJF7R@tuf2! z@?U-R>^ugL&SjUFTqb%5j4cpNip#nm%*%Dvav2&@oT?Xr@^)@PB1ID@d6go8*kZL+ z&<05i#tT%=JMV$aWC_r;wH2jevC|9rj%-onYfLdyYzbO#96LiW5#5_V?V>T-{XopRdB4154%!}VWzeO-8 z?%%Ym__i4ZaV+lQH28;o6XE!`Cc83{XPO8N;3(iuJg}65+tpjzF=-J(SGtcl2fsvN zMgEYs4M(Ys8wJonddzA-eC@UE3f@WD97+A93hk0j2v**fLECq7`?IuJO%k1c`cK2n zR+<~hB{suFhzzu)7Gona)yVDSlRZ;eoX(bsQEJhrC9(@Hn3_~IyaK9p$uKP75p%y2 ztyr~sa`44jYb!i^QQ&Ed)zVLZ+T&tVB5pCcY#z60EL#Y6sVeQNUly}YNvx`QBug># zmz69Yh6)ga3KjbiMkuTj#MMDdm~s>Os>%I~GrYJB5975q)Nsr(sTp%yh|;7%)y|VZ z%Hv0BBo0W|oC@8UP(ry>SVF0ol#b){_S#x3ReEV}%B8x%CMD>bOq?!_7mKaBC;M#z zrdvW(G>AE{D4z|9ST(V8&d8e#eitO=+;h)Kvxw#kip@`Ou&l4ELWdJ`v zCU-4@X;GPsZS2%b-rl8HOlNg-cQRKB=Yg0=3x+|qB(v7{5 zoTr|uPPkuua$mOGk0IG!Ie2~Y$#V*w!LM=S<`7v0KaV|@V1=M%{CGM6ayE)_73#;% zKYwZ;{E7Do#sEq|&NI#ki)m)DNJMt}>CwoKW>j$L&Y%6+B!YAr zQexTJGl<3|ZkH}2h(GBh;|4GCbFO1E}_2k0s4^#Ej~tBD0Ze6mkKwg zGClOob#P()cxh1<1BPjpY_5F<5fnj@3Hu7g65_`r>zIdDam+Dt$2H^-ernUmpV^Z3 zsioJF?UmmWQP5W7S5e(8f)?#~oO&w1=9^&xeR0-VYEXL2zSybsJ@`N5>s7?g_18C7 zb;=)`n1e*HXU~ySns+_9)uk0vF-|YVjlqnH%zJp@{HYJjoV#G*{0HXEVi0BF)cNxl z&Y3;;zS(o{rf203+)SKUBFb&AFqRYOd4AgTx+YAh|0de*TT*jom1$|+N|uTG}Io({`f*{f+`s&b)ck3l)MuX=y#zDW2GC4(bgxDXI?$bBe{2Lawn(%g0N3 z+j?*=={7i3$4XV=`V2Ay7ZdJGd-)_BDt8qNmCi1|&*!&RCt;8#h|u=O3z|+iA&4r+ zjq5SPZVTjEYiG(7E4A@gLEX}zrK4S^lrwQ+4NRt~gAb_3KVn&nGp$II78UeYxTF)M zwaxM@>A~Jk?lsRa_Q4>Nh}mzqgz+L3T)&-Y^{VoQ%ItN9k*j4x_d;*uq1kPgbz{o3!9v!=uYRPt%x zp{88z;HlqF_xM3Xi5O50siHk0t3Xz>qLmIVD+}38f;>(?eYzR^5pWroeDlpMCM1kf z;8|BfN!MI6JCB#k(!(;@y$(^peqbOeXU?3tk>*Ysq&k-U3X@w&$tEU@y)o#hHmuPt z-SnO;gD_$-glI-%68M#f-c6slSn6V=u+X6pGMW+sBx;jxOejqE?CGqt{K(T_#qXS) zcAAF?KeWWvb6{JGX`*D9%WpKepYty(m~%glup^z*F{VrLHtsCYEl_XLQ%t)kqk#RFfHV#D+T z6XIT-E)zQUmR&xyUw_4om$zRd3i4ZU->rpz4>JmfL2szaAmz^P2<0uZ z{8F0WwA-HT=%4@@)F6ZgkA&sMedvXc`nKd=ed`pL!NQwwzUi7tzKQwumx3mSR9etA{f#3U|kynw}!nLzYk;yt3sf-{)rR)fN5dH`1yra zW1pJOgobCI5@3t>uV90nG_~}h^Zo9_vuDlL=CG14*P0+>uo}o~f{+CezAs#;Ev&hJ znrML`H-Df6KaeTu^g{-1wN(fxRI(EJ`F>Lx$-pl$rt7O!%FvOZlbpZ!3)6`I39Fbh zN0~4IUrmLwO`>^(AgK(VO#YLc`|mdte_Q1hi%Onn*){t9bWzN=*DrHVI*HIfg=f5< zd)*nfm9|h^-wck#XVhCHrCslD3y_tH5q_wL8$vB1xMu+AcKn6dfM-UL*sqeOCChfu zGwuhzC4wn$*sWwnZdx-L25jXnF64FMi3Csu8OG?RLo<4paIse7 zw6*3f(|!qE%a#n`DjSY;LTq|hp}?qcWCZ2plc&qVQI|#@g`98#4Tc$cJLQxX*oqhU1SnjlgZh6|?W3Iotf(!oSBIcR$7C zZo`mHA|Ud{t)}LBan2R?q%mj4WO+7!4_(ay+@5w?Px?_JAbRh!^D{U#m1-F_nUl$P zmb(~zh;;Wzo@I$Z4?V0$37_a&j~`C~2D4L5m>`pNI{DR-m2}cD7fNMi^yHHn>XNY6 zW81`Q%o`tb%*;m_B|P?6)dU61o-6&?yA^v(Rx`27$C(d2Fz*2ftgRq8@x)+D8I*vq z4D{@KfkNI+mpR2<)C!G}Z z-bGb2GOd+Pm!Tj0h?m9d2Y7)z()W86jGc54Hb$^_+;MXWBC|adW=bv;ZzIf{*K!-O zc|d2w1zqVJLgWpRt1OiOUU#81X?BsuB$vNgY>_4b3Kk2exb}R>(88FN5whtrNsnnN zX)bRr0zdgmWir7@*P?TU9CK^Bf0qI-# zW0w+nb8@Bp!?3HwLpr=z$>$gckify4R!Cs;wA1|F9Ahj6Vl!sh?j}r%qXSRzpe~Sc z9)5TMVPUD4**=y9nIML|8j_i*j7M=667`m4-GFh>K_J%Vxl}74mT?jaNIAFMVsS#~ zOy4+Q#M7BXq*J|V^@qg?>+sI0r+NzVXPwSJ-w+$m%Dwk$CzyU>CmT#VQLNfk9ZTO9 z(Q)!jIago(V7@yq6SH(;nOe|RBR=VrDJmGxJKGrcqKkTwl*?Wg?t#`WNL%hIA0V?%NExY~ZxzW8dg zcy;c*H==d<$Xyh%y7MU(tMI~p8hqbAWR&0=7N#Q!U_o4-6>_KOnd9g30%wi6`RxyD zD2SZD`m3;R#P#A>FdE zm%{(XDUszjyOJoo? zlPj5sQ{9JM5^-fMWw?y$y6O`uiS|tI;9IiVA+eN65?mpEw=}pbZ#t>EItjz-X{C0z zoMEJi$fHnVM!bR>D3sDTS6~2xGHyytXi|2hTZxf`Xwglfwah3rPH9o4Jq;KiP=chQ ztISwtx;XecZpY1~-Ex|-b%e>+^5EOv*NU3@g{RG+Lq zW$GcE!4xSI*U3_s!MBsdsQilwr*+kw&_J6)%cxA}Wu;cB5!dbXrt^J;T&0)m+lz6m z|9oM~Rb6Qr1a7YkZeu(kZ+w8rkTqj%SzI?lC<(!XyNI||4ak*cS=z8L(kruyxlCId zI8&C=xw2S2(Im?>op~)u!c_(42H)xcpJSEoX{XO?r4r~VXG{^!U!>zJ%CLH@fu;<| zP`nD(2;0Xup^3KQcnKY)aHdXUMFnjc;}_{R5r`NS!$sLgRaK>{$WI3VAtr)4<(xZ_ zr4~rGCRH$M%#h&1M@?b@q?szUq#IP?oN{Wo4q_g^V40K7bmF&*8D>~TX}CGHk|Y?W z;5%NnSy5adGa9f)e7o+nboSAPWM6Rwta%QmL0QhsyJP9;ApG}zMnDzLDaX>_KxK9t zOzVDaa|7_upK^Y1o2fQ1VDV3?bVD-^Be|xNPO9<7sK?AWQ&J0;uuKqz33~9eecXZ~ z$iYmFeMxwx!<8v#=B(z}^vG2~}DPEUF9u=#@r?xYRRZ=>< zwoGEoCMZ7s_<7o>6`hs^GvJ`RIQT0i5Qj>8Nk5}C%S1La0jBjPIA#k4y~J^2R9=EgaJgD`%SqI4gM}%cF1TP;W>L<~CVal;ng^NPZr3SJTFM^LLVVJcGvx-OIYmTK zL>U$q-51`4UB?}FhPB<8$G8$MzBpETe%%Q9!i%N~S_a=v01JIyG(%I}&M<)Ym&Ip2 z20ZXJ#=z+l23NKcNP{z)*9;9bs|4eSN!q9+z z={9GsiHE}oXrn9Uq_Y5KpXJt;6I@tzXsGv7*f$#6?WY@_$v&S z%|$F?vguB__enh2O?=eem+h9~WNHVG!?IX})U^l$Wck9(yTz>(dKrUj7Yua>JQ+gf zWlrr!NDkR`lI@O@-b>%$uZrCzDa0u)R@Nve-O(jfW|M8$6TC=D>n@cC2XJCU%^frs z_FpJ{m%WS1NUvH&+E;ca>|39{ke7+Q;)~US1hcYapw$e z9ojXtW#}#U&|^be4y_#8H}uZXTSGgX?>+q6>XY)<(3anj-3aEIPH^te0p z{?IlO^VY^|DA_i?ZX@ZT75uUD&`SBZYv`Sn^W*AjidGd+{$lZ)haT5DEsEV=zb%z+8`|L-f}rFvE&I@_p{+vSZlT8I*LytMgc+%ShyJVNzb6@a ze`w`z)=>u;NXO!jtCY<{kIOqq7}`lX1ajyxN)0KgSpC8$o4Vfl_1jV{@@Y!D;oD>3 z9je$hv{!gR7{7){xP3?Ja}Rwww0r0sWbl?(eUwT|to-%c@^OpM zBEp7yq%-u6s%RIVe!Y$4k_DDe9FO+)nsRpY3DG(Ws?Q#J{Lo`c&q@~>ksV@$plzZZ zRrxNmL$hcyz|2Zgyg#(ZBve>v!6F*fr|=03Qi6iLP`l;OTK6~Wgj&CdAt<9-#E1-# z#QUUwOL#&7LT$BL{k1Q5r9-pxZHxQs$AnQ!{vj-C0SLp8Alz6W+DdIenSX{pkh+xs zRf(t{n0UNWeu#F2>={I&21o%}n37@&9V)DolyUDrtuZ%tTX^TtibG39LEjYq4^@Bp z$J8GyM(-tXgsM(o#E#&fD{0Ddx(uQh@ zq)HE&zpXyuoN{hbO6P*>q#U2A8jZ1RIa3yhkZi{Z;fPoKwe33%i=)+wGqXgo#yf8r ziuIZ<{>E7BZ`R>6)HPeW3b{@7*D8`2saj@!bBkYVO~szt$Xx?Mr0{rci9M)yzw~<| zP@EJ*u8>ASS~$;RDF?BVrB%2>M5|uXLr82w=b{@VT@n%Tc_v;dd2IJVMKO)3b6>S8 zDQO%4tax&fjOWB`t;eZc+PWmVRAuU2vA~9kPC4T*5K4#MN1WPviyJcym}GSB%tPUC ztMA$x5Ow=RPCACk}3!ai(33A4)q`=ziwUXoF}~&9?iTDw z)t{~WhhHr{y!0K*TP5V*cDPEyHGlufXHuKb!QrJ_geR%#6|D>wHymEJ?(kBmBUz21 ze|USBQVq%54EKkZZ4B790_5N%Bu#q~* zBV;uvzQ+9FrR#jAq5K6E+gWy$DUy0=_wSzF?p*QH<^{j|yC*jP{sWZ#!r^6W1A-1O ze_T2H%>PT#?6bqmpFO<%y~E3wD z!3h`@%y4{TKnP$zQ2 zxxZhr5&w!WjW})RWUuEhiNW2n?T1yhPO7@bZz>GN>syNfp}@+cRnnYzxrsgRVx}0&B+mxzg*4G*UX(xm_=aT6$3JN*k zntMrx%0)VLVJv0LnMcJ~AY|v5aW-SlrSqGMWy@Djy!O>gumAnP`rkeO1UjT)`$uW8 z;?>mz*o#VVe`uatJOl-R8zAje4$=F$+-JZA${4soM?5s9y)~7>eGCs!e8Jj=S zIzlDGfij}3<7dpX`r~H|@tHBfj0_20eDQ2^5)ZXoVyM;V+&NXL^X3Y?!AL2%He*oA z4Q^)omXc$ONO7+Cyk0Z38lS?MJ8y;#zsk_08JT1jL(Tx8P=+RDZ<{L<8#0>)2?Jh9>D{D3wG3A5&l>IoS zMvJ4`u&gZm_lswj!%Tl3gVhx}=xSxENs@tAe|VWOm=)DkD%b9!W*U53CcR=ugRK&D z#99VUsYb?wfrU37th5jG`y<(PD5!9(j5RPE2Eq5gZ%dz124cpi1v@Ad>^uY_Y@WjU0GV|`BgLPzpB;_1`0<#Wm z6Cd2{JoxapR!=bNpcZG=@|4lNjD}}(&duKoBO)FS9^AYc4_Plbe*7$!`;>Ys?Cih; z2)WMPv&T+#AalmlySrsCkeeUeoN{jPXOR?gNZ3!P(=C0Wfq=<6ArxJS6*!{F%INqr z23Phn&nL1EWa8X@M?J}5hvCpbJk`8BgQb9&4VI1|qBb!kr_x$!O~;EjxT zO`QR=5x*f*mQ0M+rYvRN0oWz@lM64LYUV}btHZ@vTAnQeuNkc-GI)nkfPhre>Jb=3uP$EQM7%+}U01D0f?WIO59e-C(Ik zSJ}4%YGU~vCE{SVRd;^#3OPT5^?ocS%s>L73u?YQQykn>b{A#Z3oQ6Em9yxQV}r_r zAD5S~*ydr`$(CnrFG~+(QDDd5$3@D?%DkE`CiZsesz%hI-y^xz`9)T*+G3QY0VN~J z+1^UOY>}O~$duEKIx|$$Rb*GtVkVxoa*U?q~yS}m)u1=MG$>*NSq&Rd-ijGWIj+1WMx>#}yALpHC zTbKaSFOHAbUOS7_)WT^z?jx1XBD>2}*)beCr;mRy-#PekuFU*nNoO1jEX9mVdBO>X z9BR1gs+a@;tZKxR*;XEx(sS@e@!tA{#?oSaQ-(#qMpQ9Hrkv?BW(g+M`~p3VLe3H0 zJFqz@Pm#HnL1~4d`%Pl{@(XMRluz@rL2|~@7Gwe zY`uIi-Ca=qQ*q!n{g3t*xYY@j<5xA#DMEMuY$*7dTypNbK1cecAVjir&*)S}BzEQtz%yjv{GYI2gY zkLAp*oNEL$Q~p*HuX3of7BlsUg_7HDwd5Eej)mw+u}qZII2QROhZPF(^x{H9%Zfcc z+Mv+O8E!PcFvWfr>b>r|dE%eMB}lgz@1(1)LfI!%xqy+G&C~Bsr@IA$3cmt}nSLWw z80G{OmtJa_Qh<7oM3pafc#Yhcq2uK@rLiR8#2JQlikvWEp7ax0yHc|gmcZY~DRmY> zKIf4}-IE7B-unerpo;`P7A>rC9IRKPtvbZVg8wGAl%#JD7b3d5?n3dD&v9fLN{OWl z`U-4a1?qQ>M7c8-h} zeBp(jt}J5wkD@Y8aOThrY4b!5XIy^Z)q~3p>^!jjVD;dW2R=El$33vq<;|W0A060p zaK(X7dAHq}Sx`M6_=GecAK305*v)?qRu61Hu;aj|q#l^$^6yg0*>m6%m)9R2_|!F} z@wX)4(|}}URyaMQjM9tz63PsTI883Gq*nMyfrG6mP3SY~#yo1Z6@&o%0 zE`{Ws$~IYHE9D;8cwncOWshM{3Ol%z@-)u?{E>r_m0ehW(y&ZfYm_&?)PVzg7*m^c z;LVzV>V$Kfd*Jy4d!-)a_fg8Z{0H`LUyGv>gX7+C;FplN=in;jf$-3MGu=2pY(MZC zdC&nYeISbAZ)7K24nX&ZqBR8pGzN+nH1J!cJqiV-oI4hcz8aupa3T~4EXP{e)l&~V zB|wcUXq1q0jyd7LFAlC0H8X8nHN*=*1i#?BM$=Bk8It-G)T;Od4;Hq`1upigU_a!) zNOM~~@bRc5k#c@seQ_+%#;n&I*e4!enx9WcA#3FVfy2)Lcu|Z9^MVkOt>+TN z1zXLeX$_nUCpGgWHjbTpsw)n>h6F?IKpLKqLlCh_YjJS3C%m25kNR14^suGB1V+(@ zYLx!sl=G6wc22)2+D;t!SbUCYB#99Iy!!lqAu5rWM3jPAdkU#8tNv?4oS@HYqV`}d z>RrXzpj2u71)O;05J>8p;BfdL*(gR~^69}RMMXf_!Vn)7J&)14Th2T11T>C zc&b;QznypsiVZhn-~xjBkm0I3ZR^#-U^Ns|nbM&orkOjq%z4OL#~5{wP^9iV)LgjI z<{a1?5>jlXunV?hq*LQJiK3Kq#SaZ4#X$wO=d}?6^oAj%bI#1+fu+L(JBJ6}93I#_ zJn;DNz?$KKy~F!f4G(M`-d7zSST?+GwItZLTt3O)oAtjN_3OKuYl}0zx>><9JV3_n z!~0eY50HSrpBo<7rNvUk3&R7X=Z~dUf{nuidxi&IR04Jf#Mp7JJ3O#2DoWh z&V_fXi~u+psTZ74;8>J)NA>mLeTbQCNXk&KTN#6AERnK|)$m{60>s32X&SIWm3*=^ zj@>mksEC;5XFWhET8!4Yz53dphDP|N0^m_EG+=~O@fLg?g+kAsHd=)WtB96j1v8op zaYDu$|Ji*Q;=pMk^%qsSxLN+j>H{o#Ud1`_d<7g|L5OcE`<5I3?A%%XNb^&i!F5BV zOE%-Yj4A+fq+A46-v(e7sAauUfcwVF?@_x%uG`fQ41~>J#7@yh=1>;Nk0J~oFF04+ zSMSAwCQ7J%*Y|E=JM*n5G;-?9tiJo7s9h2o8#@A+d_!H{s$oy+X!e&XFf@StRy#LW z5llojF|xIM??$zDt7yqialEPb;a)Z0R5iyc` zURUKs>t*~7)M1)dPI&BxWC>{Kbjg#1SNS-7|*LI(KTbxUyzEf&#sxp}8cE{^>jhLVX=`+q_3DVAzG3yCrbSa-z%7PIVq}bT z0*}kfeZp8oH1gAO-O^+Sc_|-pqoq0+*u+iA{fTTU-i@9%*$2*g&*j%l=vn0vvTL$( zCS25n{*zCBh|%?Ku3#v3aoYKGi#K<2Z#u^@O%*wk(d{1G)L$+SelYj}JIT|`Z0Y1C z2MdPFR%$9MX11E1(y4awu2XQiUz95^+vJA#$60kR&c79+c zRii`|IBLk|zebMDy{x&sFI!xcuC!O2TW(eLM@y=)XAhpZlS`Zcn#-{|M;JW2#)+NE zIq!T^e7VBPRwU2)Pn$T>gB2o`tSn)DNK_RfG*A>*VLBIIIxoV9eoomuIQQIp|KO&< zOMyh^V*Yi-$=^sYtM~7#XwbZczc`vb4jPnejP7xjBA^^H{hcQ)s1f z+vWnx>;`1Mb0V3jUgZ0O9|>}87dWQs?>A?AjamzWz_9HEGO7WDyO=`0XN1zTwSPli$3+6z6JUy6K^zg|`myk)4T*edVf2+4e)m2Xp-ZZaGT zfhp&Z2pkQ`M`Xc|F;)HT3C2@;O*suo9i3oiRYg6j zEm%a_ztX?=>fZu|XO&}5m}rwuFW41T7$kbH5X^SIK-)S|(B@^7#BWNjfl*b#ODJ2e zqC`=GSkZ|Q`c^F%@j{4TCRF*0!<&~H*(>1An(R3WV;Q72(AzGQDekoBz_#X9cl@Wf zt#^kveXQIGH#NnL+N#dE&i003AK=-Efu#I!PPuG&Q>aEyE6*wk#=Ms~S3i_oX4tP_ zf}njfq~o(tDq4Bfz=2nMd|wITttgVShpHQ!mMl)p=tYdkH}Sv?TBaq*d}k53OCK9gn|3x2b#jipJPc*iu{$P zGJXKF^MrCKwwnpmZ$-AgoImP4-{>Foc`A>$@|{zh(}D_xomb*B}eNeau5J2Ow?0LC?RF_Ej@Qkjk@RV;3IGYTa6;5L=~3SBvJ~L z9uw}wcs|n}8Y|qa<=5%lqgtH8X#BKIrD-NSk3KqYJ;C0trd5g?$L@SZ%&opZCgFKD zFy`I{RT{BCeq3`mT5YEsu@F*wg{ZF;hgS;|ol~zCAPS?eDX*qt@sf3p$dWngKs6h$yRn}jC{0~ zja+>rA8qEtM_WQ;6ttNaHca50f7vujV*^g3Vw|(i578=g?0`OFNY0Y#CRJqr;5!u| zZVTI=M?QL?>~|rP+~>mR1^*>Pn)=8K?4CAKc|4iaoMfl0mB6;7;nxWe4A3 z8yx9`-Qoh~FZLhzEf{=VYCs-u3Wqqm_69dG6zOHCmpiR7MUJWwUuM*ha2NIA29@~z18^QYN<6asb1nV*}3;zVRw zWMr9%oX0HZ(1*n7={h9RG0ADx&+0f4T>&c*$_tPewZZPetyrCxs3Bfb&iC$atOZbl z1&&7I(|$f3^TGpQ9o^uMEljF2G`kJ!z%VLG@$%5u(QEYl%Z%75FWIR$XI~V8vxi-< z_-3!0g9hh{DGen8iBXL^6V5|MuX&*V{AuG0xLrd`!8z-q&!6&iY=IY(c+DF_K5HU! zsrf`ZhH^^PH&nTSGZlkvOrOV5;6y@3Xj!)HUEDdb&IxCO#XnjZ`EauVQ-W_g?~<^G z^&J8Z4)@R|&4J@y8{)FDl5UvRGV;+5@k3Ah-sMrTX#uo&90Q7mWiTHy&aRQ41|B_V z1$r*NX1drRC4RWKSqt(#J;TNJJ-sw;Z)QVwkDEs~A!lW)GUfc#%ya(JuQ)!)i6H`4(b=Z2f7a%g`y zTI0a`zWy&hO}AGTv9GMag%+Bvl&gI4X*T2Eo#4u0N8AZ@s$X{Yi_J_$IOkn3U$W>g z$2;D@dj5f;KEx0_qzsGNBy_HeS-e;51m^BEd;*{FBt40!4-aApb0>h=m4+{ngQ zbK$WF9;F49aJUN@3!GZcEWr2~4amlDW-(&R>AHY%L4XVB5FE9N;py zqZr+>M^DZ_SW;Ou_#t~AIFRCtjb)5mO(_O?&X4Z01flkqB#m?p)?vRmb1wK4sBt6% zQ)Gx{tC(G-`1yK-A^P?#Pz|Bf-Ct&AvQ1n~%6+7-@cE}v;f(Y5>n~BdovW{#n^}?v z@%?67>)_ix%*A;KP4|Q@AYd!y%qU0k9>w!y5F2mR6VLP9VT_-1F1f6w-kIU<0zV}R zaLzbuUYQN+;!bSSb|zl%5Dry9FD@q#EZZVQ1I}fav$@ezBeDs;S3;9F&c&Db$&%Gu zT~&QLDvsU)7X-D6Gmim8;EO=aM%o4s(^z;u(_3igR%QitW8-G;aT^zHB%1aqr_asw za)ndPA~?ArMxY!r{?dUrWy^}J<7WZ=fb3xTRQ5I;e3sX;Q9)nH*Uw~&fVbh`S=PmW z!s_^Eyge$99b8A^j}I<4y9#tKf$rFOjb z^(-3^KBO?&)fl@c=HRo=spsns0Cq931wyweeavnL-8#b8^RGGZD$K!+PXSvX_$oh_ zQl{nSowKiy{Zq;;yJJXkV7F{{l5Lf;uSd#O4BhhJfoF7!CFO{~bc1SKO5N}wyJaY9 zhfpB`R$@Gk!p45ac?UKo5_jhLJ|i)CS-%|>!e>f8J5AU&BFyN%!Gp`4i*HD-q(ADk-vU_pL4>6p)VzBPF)^9DJ6>DNMg-dsbBu=-5Qp>MTdLG=?h$z&~a5cw3{Vz?Vcv7egUP5qcN^HI-N z7?}UI`oh6yz@co|ViTo6RX}N18bv|Wi2$9wF~#h41y(>!w#@B0_(aONz4O4^qDI>@ ziS5?RR#0?cCwtAXlCYcFIR^9-{;sHg<+16R)@WU#I04(u8q z5>CyP&`gP)v1d%QDpHkAZR}zEOgsZk(HQ-NGP2iWC-4-v{p{OCTetz3^Vef6ee_;L z1Z|1P$9%}obG%j07zwB|rm+F%x>@EB2DFXB#K9SKs`EjM@`7*d1GIgYZdtS)Wy(2j zobAAzAGUpS==-8EF-NH4kke;f=k*6TMgf;3wmhl`ks-(|KEo%62R|I+^Vzg)F{ zulwanE9Jf~pV@$5g*-|NAB?*}s!_QvL^gU$KA3{(Xj| zeN@+&f=RBh!GEayGmpUiyZ7&*b|vUDWlb26!av*piB~-JRli)P97|Ozsr^IhUI|6~ zx#P=aDR=({%G}3mk<%wCk@vNRX^DOn$}4I>fHY!#O3DzkFN@6k;J~ z2Mkc9FpUZ$3i;7q9>qEp6M?#9(_2-i{XsCltIQ~dT zqp;5)YpG~is1z;j+5euYRP+PR;K9(tZ~m0DMv?o1JVH}b6r`MPq?(8>n>LX*A`lvl zGWTzDzkK}5)l|NXdPY@UEa-%Vy#fq$1Na3S6eduPQI7~(Oz(Y>>RbEY#3qbj=R!*c$&PCoNX9A->)e8o6y2PxU*m1pJ%Ya4o3_^6FySzD2kI0`Kj{z$KY z6>h~{!0#u4u{U#DA|UZI{C5Xsf;?yv+8em8Io0L+pSHOtvFEETWf&HAQ@Hvxah!oK zgd^kn6w>Mxw^2yVqmIVb&%Sp5%h&==3?)Cl+ zp7Cx)ia@A&b9Ul{`aI5Am+pTPvyAelLjBBBwsThx)N8{K#W*Ukk%e6Lswq&Q?Hjkz z9xH__jA-o^x~|<#IoaxtWGw$D@r=?OY=br6E&RZxX?ddohrBgyuXE}5RlKomH;ywd zN`-T#!sb^eAm{9h>opl3SiJ1km=vH#f!$F0PG@z?f3d>%PMq{bKD$4eQf<}aT27QH zvBP?4+O6h~G6Q!$8jHSa=6;dmXX>vdR@y5q8&Cl^Vg=eR2DmX+5feu;u809zO{sWJ zntO~N?9sXY29_t4TV7!_T9*NiWLYK~d9*6*oUkwAC3qEX3op1X%yVNvhW7hSE_r8X zIzKV1N96ugX0JFvSk5BPyOnIYGt*b#NL6=9-8rs7ZgV~_(_5Uy&kjX7LbI}%ty&zo zS!P`8!dVB8O|AamMVt z+(AL9*13@f4qcTa4wrn<(=E9r5j zCRfa1tTn3TaIyCtXYnqo-mJls!0Mt zI+4q{zU&Pe0v1{?^BgbrP_dF^xM2*!P8OLu}wZ#M%HU?n;y{ zC*+2`$K7`~0YNiHjRQ&M(tOYBiQMhQLbjb781Oaz>+rGqK2LICgrOJtTybTr`05bP zmDf{Q8kXt9*LHfE7v`LE&->z|&sQ>8i(^`1reo7>i@eoeS6sQExVSd&TUe~g9xQ#a ztm3axRX4#U29MNc=R>G}67Wa2JQ|3u~p%SGt8()lU{>$>NkHnI-Om#jLPl(ZUimEuv)QMvK%hf>^}zn$KTA zC!DI?UeU|idnR$-w_91#U+PA7{+gARha)6Og=3O*+EZ>egbwiWSuUVCr0n9k#rSYT#uG^ubxzeh_J_piQu2?uFp z`edz5snCuG;D_HtWyxy?5^K-RurVQ%6Th(#fly4!hkG*aPI%* zEio=c+=2~hZUcG5^OKeeG`J`B*3es)UbDy@N0Y=B$Ah0`Jf6x&{Ib_*-O)_T0UJqL zKK^*mm(r`ghpW_Zs6AQSe@<>k;#`}2rMu8Cp1~g{VyS6+M(%-;m)SDT;(k*0vs{z( zy=0a^zSGUNN`8MR!I?GdzH~OnD;f9VeJ^-yAaNFAJkGOasf4Gd>$V_+Q>MtoZ!%h0z4MocZ%Z z0wW^LbR!RyUOUGu(GS%cuyy?=rvx?O^vWw|BWQ2jtO05C>){qX!U6wRu#QpywczcSmHL@yicV)1i;RT8oZOsJD0Vy3riDZk!cwO{E=YP2Zz7KFxhE*M zH{DrE+mNb9J?CkqyR*IV*uMJe*}hbpC_S*TD30iXcXBru%hQ{bAh6bS@RtP+m?%w5 zZy`_PdHLl5OAT0esxMYw3<*$?Oi5YFEMP+10_+-aCF4`*=uUH&Ql-1nFEo3W*C$qv zA&0yIqnBBPJh{@DPm@@5i3=g}>*aPG8DW+;sF1dT0gRG{m7~(Mpl0?vicKO-mcv`vTFOtDssFsvi?n8 zZ5~AZSYsB!%&h;U9mXJqy3o;#m9B1JYr?XHnEB30*-ndECqnd_Cg7AZZiWO}k)^UIOdB0%Tb1%{f{ zuZQp;$wkyuO4aX(@>SZNW{}TIBWs>PM-YQ(4G56rTA>rEedjpM`=)clU!v$y(7BGB z=p1cOGa81#HIRTR5zkuSwQOYdW>*SbvteY-3j!zoXxHyoetjF6nzLin1_bx0OkvGP z>1k6k&;fvZjKin{^&8H~XCNDoGXcEFYNIo$U6MlMT0vn{h{DY%gdyfa2|Ja`rDRh0 zh@Ay2{#POw(NMfGptZFxf_L@=53h`@dD=PkN|83zK+Wo1 z-~t->h5~@3J=iLA|VJThbg*$}7CXLA-Sr)}@7749=2^yj}+bqos zzFe9sA!x(M>Nf-vLU29k&bXv04IC#mI*(w3Yz!@uP`KPVW}HwLpm|D1Q@Sio`cAP< znImhPdC19~-=;70=||Lc?l62RS1ibVCHciTx0(YtMKs@PTw^egg?T^;5Lt_6`phXa zJ(-?Nkxl^-7ttx*>d@i5lU(g9l(X&J|Jt5yr}IE)$F}}1m#zR|T{nmH;_}Pcnfe0;ViMZFC)RZ1lMvPvP?ulc(?5F z=DJZ80BdV9!VdJi^XXJ}S>HG`7_Kh3U_JvDaKIrz^+ZrfBIS#iqK(VLSdNi8lGcJ{ zokfk*xLO#E_0mEQvntt+1id=k@nu44OaG-bXCE+9Q9-K66|KdRr2(PA5L9bE7QQWo(w{D|0!Wd_GNm~&8dzY0%x{97fLVAHhT5|=m3WsF zhl}mN5`cG8%`y|FDoQd62Cs^-IzZGx)*EiPUptpw0bsf_bQJ+&ufRP9Cvv0nRKfNF zMVK6^-Yz4SK7j2wgq2D)%-ySlhTMBRb*ko%*oH@dXJp98a}eMpWH!cPX3lJE5@z@n zG1}w=Jk~V8ZN_S_OuxurrD<23V~^Fh9942RQp_2nrk@`J4Tkh0YGuT#CEX+bi~@D= zPE~H)q=B;_-XsxE5i8{Du2Tk~G*_|wTP$DVKxT-aOfuM0Po-b1&dXq(3+88VodK&3 zj60U9oGb3PTh*g0UOuvK#nCmJjz0I4d-S>Of7rSG>kZEzd41E7w|Bco)^9)h%I>dM zZ1=wK!~J^0ilZ++^Ywf z)Olp{$L`n9uQ>YZd+yO??;U;d?XNey?jBu5zULl0x@M18gZqc=FCW?d^3hkHqK-f8 zT<0EnZ-64H;^=elxksK{arC9?(N|WuN4CFo^yQC_u6_9r1KauW%#l~u`!r6kJ}tb5 zX^a)aAGTLLTBy&ZB>qn}NOq5IsUCglsUuH4&mZp54Qp%)HJy9(^_P!sB>BptJ9kT6 zHA3TvI&tFHFYi9Gu6p$K6<@#bj9ERqm(U)4rF!*|HP2iVw&z%$gIZqxSgjp~TopQMGe{^9j?smR|CQZW1E*^O(gKsY{%1bwEmEWw(M_yM6qc{9I{K_?x^d}~ z@^z{bEc(h9(_})x9>qK_#fyodk!M#~xK30X@_zGUUv;PXD?2@4ppcC(*D55e zwb;{MV(AKc)rbmwviaGYiUxX=;Fy0M>f6^E<0>ZuReX`$rmhFde;p3?s9|`bGgK9 zZGZC;^P4i)(Kh%7i^S7ypD$-dw4Cir^TnH7%x0POw5Z|c^{G}d#R_vm(E{{@o`z+d zeeQH74BN_*XmTIbaw?9ggu{Dgu%!0$<;Ax27aT;#1Q}DDoNQ*%z&fd^jP}cMPFjoY z6P@q>V4kifXp>K}WT%a5XUYL*#f;8rYMD9a?W|%`&XRwotT9L4nqHDgFCkYiiwisw z!h)FOwxwm^Br~|OJ%O3zOmA5hF0k_29QTz)k|`HPWhuTAYF0^pzMP5qN{*uQ z606xV`M-JT^W`b$zPVB1b|4DqXh?)vtu7rpdU2j)lzd%96(_+fuWE@TO{l@Yaj7Op z=6ihM!#^{EI#n*h4#%z>%sVbn6RKnd+stA?WG1Iv8TE@c%rBmUu^u44INW+ z>_HG1au1MhXJ8Y-87&-_*T!WnqE5stqH<0<-7A$BEHQaAla?i+isD54+<5bRPGZVs zdMF3RDxB8VR*^zk*3!pBdMxTvT;lXil#|Q$mO!)+44AwHYbnQN;#j4Th)3t_b37{% zF#)tR3|9W;g>2cG|G-QzW5AsjcobBkk7g^n#z}&BsmBmAt5qZgdY9Vdxsu}oSlc3D~(jP zYG~`BH7Vzmb0K^epWuNSNk6nli`wc;?>B$=pG7>|r7VPX=;@l2wjFxh&&!8ZRJBS( zv5!ht8;N+8r{M3d@1ouR!>r zzDmj|SO1%^#?*Q|dA^PQ4y}^^EFXGTM7AG`~W~kt}f76320V9E_{nj-$Ei=c=?|2vx1WL@O6bPKt76!_6=?O|G9hf=&G(O z-FJ_7tLny%``(V5W5;cR<-|^$*hy^T7UH(zE=}E32_%D%kcfnE;8x{sf$5AfnATtn z$QHekL?a1=f%{5$yjO4B@h+r_0LdTkC>5|h#vAp<9pg3sz43nETx;*M_c?p3!6a4p zjX2_*z1Ny+&ToEmu66ca&B<+5!8NyHiMKkRqrpYj;eN152@(mmpK1#(xSCsgaD+H! zT6CT4RI|agw@G>@9RAQ#CzEr*V-3T22)n)@X-|1=PZ7c2dNu7n(>aN%cV$_mDlj}B zlZ8(~yHoRoMGPlCp930sF{VICf+EN5#g}tVZeuk*;onJ|%@+SMQ5{Xb7)Fz-V9Zl; z5%~tPZilQV_oDh6Vxfy*uIxX#3vae@&4qua537PdKVJ-Sxh{ArY;!`DX5@aX+F>X` z;%vJLCpVR%JdR-(8q%+;A{G!`5%lP*t8biYs|vpMu=DdyTHHcNxG?pt#JVcUCPJn|o!t>!8S%k)1^Y#!J{&+7;Kp^e;SOijeibG;I;(t! z%=Aq{i&8#^v?7`Oo5<*vR>j_VKD&$8akf#QP@#vrN|F0BlMDqC3Fh+a#IF+Asox|w z-0N;;(VXN)+k2>rO*A|=`XO|~-Kr#v%ClRh@xeF73oqXz?k6C8M~I$2>&LzsHd?;@ zql7H)&s6W4AvB7KoDP>Q?H+NXuYqk0iTF*%qB2IStmUaKa9+ferdC@h-Ec>8!lZ}s z?>A~~Ba4pS4wsscnt^Q$hFFVO%cNvK3)Tbo_Z!`o%)j830P9V{nFs+#T#X7H{tuPZKS?H?~(e}nxtJR4W#W0tZlrDz#{AA0y@NRT9W4ad8(s#^BhZ&sUfp3Ca0 zpmtI&_9LNEG9XwAEY=QeBZOeK3kSDZgLYSc?{@Rp3 zGVBA}aKyC9{7UEd#YK;itH_VFOf6?4?BMEapKqPfOxBT~$Vt;nr3uDo#C0pLH2}Y8 zC3qX}uwS4&10bSRX(Br)WMsM)1Q8=HA(4&?)vd~jP8Pgc|) zcSeGDvW|VMmSB4f!hn-sv}W6g$%5@6 z9X`BQJpv+d!qnKSx8D&lM$uMLg0))AGnrCb-x}QiolN{AlB>GeTaGF(y}!Z91x;+# zp`+BBSTWdMPhj$}*=bQtY^Qx!72JDY8QGG}#KDxNINNx$Mn2+2T*xi?W=%@urbewK zW$E=4t-ZeCh8O4=W^o=yws+6}asr>y=(aM5hDwsgdN-uf>U0ZiJ1SyooE1gSs3q-* zkj1oD-2Pix8Ru+UwlKJ9MY8L9Z${H9opQ#ek#_4AL_i5@_`V&$`6x~?o&~WTMi5jlqZ@d5r4O2;_=L&rA6`;d#V-MQQpSXIIIt1TJHff$1EZ{YNUFdPk$Buo&3^_*nV zEixOCwg0_8pn_W3bUZhrdRSxsjhy(PIg6>Z)le|F?3%nP!PwU^TZn7Fd_|!vc+Sl9;eDS7mvPWp?ASs#@d}oq85^QH; z2y-_72O6jI-DD9WC`phZBIw%NjxINa79b+uTRJg@UD!o5Wh9|)`NNqVaM+3SW13Im zGu9F9IW$lfav4gQ$P7uOhA1KskvNzDE#U@CcE^%%en;WhT9BIymTQ6dAizTvaRz}x zS@iJK+@njvP5-*Q3iNjVjtXf*eZD&B{uq>F?=f-q=OYRqrRhB4aO?m+-7AZe{CKxZ;V26Ay@d z71=E6TL_N4K*3kaE-$MG3NxP>Q;yVLJn>=97R9ej+0n_naW4LKjCk#S96-wL{FgfLC{N*)2!c z^G)#J8Ou-=Bb?w%mz2j^aLMJ*vy8cQYN2{y%aL8|6H#4rWLI#(g)g~{TKFNv4YpHx zs&-%tQ?l!36~?ieV;Vcz3A{0dPd4x{gC!`1Ndq4@PSm5X#;LXS{4QwHs*z+$m|QoD z{W^JOUB^9|;r76m>V_k`KG`sp^#l{Ok>wLM;blw;+(PTjNlf~hTHSJFSE?Z%r_8LL zhSKiVkzH&f$~Lgm>zY}>&9nQfuF7scc=)mG8!We|onFsAptYZDK+4qGSuH$zpXFWz zRp@&86;8?>7~d3Q7(8UZ;PXvL0L2eT_6*SOJQc#nJ@aU7LtQgZtayYoS%`BuW?^F8 z8H??*K(}#G%b!3CyBRn(k@$}ay_gZyxJ$M!-@ZiqXX~An+J@e$#ITmZ;*^v#n ziY*BWbt-JNc`U>e8h2;Vc%FE+oFW=FKFvHXQE$>BQVi(-+v^xM8au9hV_@uD_Qd5t7STsE^Ug2zLjgw@f3n7%i_F$5 zEww>7KV0P>6#1ikOJ}3HCx(r+Y_v6l18;e{tMfq9ry*;OJ@s5Nu2mJh_|vB` zdm5+uPCxRV$z)OQWzUikl6g0?G>i z_`Sv>PYg}qWMJnLg5N>xKwLXR(AaU{(Qd6zj(eHJEw4_58Jz0Q%y!=6^Lv4p(AW`Jx}!-! zyb5NQFaHKxi#OOi@CBv<@g80UZ5fBnvoEmrI-V9pzR(U~HZO>`w|+IpL>7k!PmMFh zXiBSXc-2}>AT!LuT{icI8`v5vFG zn|c3XE%RCS4b@8US3iGI3B(r6@KOjzPz5T>KYD#nK=AHf)-w84-!Tz`OGSp0&wPSg z#yNZWjg{x0;L^*+a$o@GaNvzvXv~zUCibFrP)5pW>Jnq1B!iMq0K{ldqKOO&Zo8dH zKT$G~HKoRFix&Bp2_{X!51)1r5>5=JaH8~VF#tp>0BL0=iR_P-s%S5W7oqh;Lz!_k z=(s{0@aLYBiE40Y3JXp636WyJYi!U)3^-fTDn>d9`JucfR5ek*x>>8|ONLP`5hp?T zZn!25A*)_kHp0t$MO9wCh^IK5KF7rdi#0S=0tNLW$e&0uRIKo0sT%e&q^*I%>2R6Z z3W97%96M+T8-DDk(Us%LqWPf^QmlLZ-TOJzF!c%cm|=8$Od7MbX51_TFM26=E*rM7 zS7}XAx#(1uh^b7P$R|Au*!=>K5epl_^E?W^CNCI*C!fmA--=A=9woM+Q%+Uz?6c2A z0h5X}XOJCB%%1bVN z%mqGF;%5M>jjGvqBU+BeZ%=+7xRKul7eq;z+*`x81!Gwl$Xu0#7B}4BXH}(t!#VcV zwy^WFiAcq-Uya4x@jo0`;F2^!#km$fO*d*vE!kRGTB~&|F|$>_Hf~_-kjw?Ktg7HU z-}OBdPpeuvIR*jEOtr#)ji6RN9jsF;FB4U-xI&h-Xj^WIHrKVburiM`DK6u(9oVGH zwlJ$HsH(ClS4?#*Sl2|+R`!i7VN$R(93fD}?y}D?AJWN*Q!ObBq}?ky}@7ng(y)|$5x|J1p?ql zhMUGb#EIy}pL5+q}vk6q^$+ zi>9wKEcELkrvn}6w9Ke$Xl1fG>meC)65y!GluLm{=o1o9f-c~P5s_P&g#rao*vBbz zeY1j!@k?IJJoBuXRS9-J`&4#Xb1hHmEk~nul}D*PX^0S)3-= zEYCe`b;b~4`PnruTvldZq6HRI)XTC-3@~!VH1WQwo|&YSX{<$?YR!w}%al)cw4nKs zF6Nw0s%xA%g-L`jG6$Sl;Psl~hL0!lgO<$8Ov{=htMQWdJetr1RF6OHl_H6?FcY(J zk^#>~0J&<=l+>jwt!Zr{!RhNI-#+GhDMxaztW z%qdkC5mhDV;AC*uJ6e*7^W>(gd-(9mrUA}U1 z$#)-3h+KJy!Y~~nvzz8Om3#KXn5boHb@Oyv z5W~+l>yjDGM!&sS2e{1o{hC@W17v`kEpQAC{esbOp>g2DrUDOh-SfVIovirLXGUjb z5B#2B&kTNY`Xf{sBB&G(@U+dRRss6Qea$?GVv4>WdJSyn@gCk~7fOC&G3evM6@jXvqZ8J+hHNJ@nuoH=>ly)Bstx z1qTmoa%|;sO>HBuLU>^kJ+8?%_gnYB%tRH`)x%qXQD#t%Q&^bpfM^-m6F(XCI45#V zJd#2xzuRi)kKK=Jz4PO@b#3sN+fuPYjG$#;+#=&6i23c2tIkb+0Vnw(n?}J`Q*#`m z->ITWB;Q;Zyy90zs%3tjxMzYb6w8*Irl&olg5-LdkGXP{=ouZK96f{@t!yV2mm)IK z)=7_uz^~sYs~dQ+OdxR@9WU;0^e^Lbsr*g1h)Tccp$k9cS%0eM%`RH9yr?M+ijI7c zAAVRrT?*BTwpq~0RFSh0PYz8#bA5tFr7|Z<>xrvMF#3C9Y(`-h{Ps#lzq!(b{Y*L6 zT=Qf?gQQKoRIB7XM!5(EfNax$>P{rKEOf4TQA&_XJO*7(`|J+-jJegXz|IVqh#JG> zqH#|TETliwlb?Zhd;SCkfWP*amTL6;Nl#ZTm+3M)Uy&H{aJlfp)PoIV`+v{Nx?_`Dqhdni>Z7)F4{-m^H>$rgl;9w`UD} zT+c#3&IYau?)ci!q6@DvC~g_}xPhf!!Hu^FkBa8?9*{-Z?F}?n9em^7@hvQu(&RlR z?Qp(R`te>xZFVK*1yVADRTQD;Uv8q95%p~Cq{f+b0u8yo?`ARiPpik?IqNQafWxCT ze%(#2o~1GqTbQa=U0;t!rhc-kexSFeu6_)Ue+vVvcvi=*$gHnzm|4pckkq5M3KiJ& zD+oKnJ*8H71gapNw-Z zn_4@GP?Jf@4I>aOl(`isXJeybv&9y0F z3ZfYa@|ya}lEU>=1t|X31`j>)1iB^Zp07w#eUk1bVR}Kr>hc|<@R|no%rXD|JSOTv zHogQk4JCz=&5OFPG1qkHSfa<<)=*DQiRn*pYtD!k=n<_^SWkh&1ADOllFJ7cHZ$3w zai&X;#;D-&A7(32Ju8)(Q}{$g@%GnEl29IH1{YpDP6=$!EJkxK)m-5>)Vw=QdGh$! zvIY`DYlH7SIx3$e>JDs+9dh26pR}}V&53^LHm zzWA9zSssuzjoApED>uUWhH4;&GtHm8gCk%0>+A+ymM()eNvsN(dS@u`usf9uIHYVs zb_-{1658_{F4+w-(7&4L^9z`?zsnW_u|jPwi&dCmA6$Oj(RN!jv)dLtEJ|jE;DMhU z-NLMUmd+eoWYhFn7Q&iFEsJ12|66X-z82NkYDOmS?_=eF+e?Ji5n6G>e10bFyMsr}O9pXp?_V9=X)f5KC30H&!)h)qrIR_f)V2Wr|-0 z4HARuup`slq;qI~m!~5OEuByHj-D704)p=TY(I2t$+3mdalczo#kw#dmgFSNiwIQ3 zMsi7_yTy)LGIl@bo^p$!HR{-QqbdF@ugqcL7#n6k(WT zA|d3uR0r|D*)UURVQSB@H!z0~WxmKgwh&QkFC+e1-hc{kS*+sA6#v;du0-D8{3|M> z?butvRks~|*E3>1?XXHVN@N5Iz;*it3SZDAy9vt!@M(TTm;96zG=%&9gh2te>1CG3 z7LgU&=>nEGa^r(GBT<2p$}&dvz69Yh3iDXp$Rygm+2$W7k*dq2AJhneaD)kDL0j(^^|)q} zU2&bJ8x>G6-S=RjXhf`ABpc5ZfR1OD@0^>of_kqjq%dN3$=5176yL*BG~L%~-CxQ< zg#Fi_v}EFzREprUr84<6Nd(K|2~WbRvP}u9g8P4xm8uz~B!0MLCTRy>lod4I(4Yb9 zjr1V$MT04oau7XaFzLXi@ps!p?>d${u@eznMa|%qZlQK&Q_bsahpiWdyf9@|8>eu+ zUVC@azNY%ub&D-PIFhG&`eYVA>UA`4ZkRH`47%1|PUac0_ULG8UlCiVQh~00*kghcGVnV^okA@aPot@?i$Z3Q=X3KxT9Hhcz$MX1BJq) z&H?!lfBDPfTk3pMO}u1}wPx`rE_@vu>w+#C)fw_)h}vgB2c|k zUay`Boi4g)Jc0T;D~jtZ31H6484&@$8<-Q)P#cUNKZH4X78E$&k64_7`TaICAj&P@x1#wvV00pE|a}ns!+Hl+#G8( zovzKOP|}746)5ChE*@E)`puQpXAG|!+4+uHE44NctF^$QoFh9XQiTM`1T0=5PN;5Z znSO*BY*3t(+z1ABtOwvdPcu7sHBCR#rnwMI8{kxkPv+H5Wda4WyN>LrnRR5x1oojC z_rswSwfPfH+mXQcsB_aB9YEWI*uEThP)7HtYKr$8r$Wv0-Ujr4FyGcD#?rfN1uqLp6)0)|GV~3^pM#j(TIRU7}EeW{#>g-Uc3of~AVAZr~ zbfMD*HZgTc=L9td-@5+^PEMXS4H(%Pg)?f2UM3>(8X?7$`sRU-87+m^2729e0Un$_ zNkwW^v+a6A>va8kEF?=Y@0;T1-E5+lS9a&__=e7& z(z|+X@1C^irKn~wZN`(4I#J7sf+b1J4VpMvlWSPg$~>;#nii%8Y5Ey3)H2 zE`5|YyB*EIAy;c`!$A3QUg}S(o5)T%0!FT5%8(uvGzO0(_Y^9D8mVOSDQMVRqpDe2 z`GqP%%A@a~wf17OnBP)CJ$?}<zJ0p=F>~JJ&=;n;d0orUDdR!Rb@j??-gjp;UHV8|>P+(Bt0hkV_a90h8+D zOA3+R+?nKO$0DYRG=jP8WmEFkNQNx4U~7EHW`q)xkA zJM@{5(a10)4p+7TE=-o+;<(N6&P5kJ&n8RL>n3@BMaKb_+ds0HO`z@bCL^l3;o^$? zgL>L2thw+Se^Mb>@;s~M*|SJ-CPS2Nh{r~j+7WLR8KIPyT7h~Z-Bx~D`qGyo5714- zeoDqe0_|&W=UkE#ADmcz;=L0qPi!ch*mh#giLHFxeqv3s3a?sDtl-vrCpMmF4_vJk zCpxIP?!@-|T2()y)@p>l6G`99hc#+w-HD}z6I=Ma=EVC2?ypC-HC{Ne>comFU0Qu& zYav;Csje`m|HtTTQRjrLae7Fk3C%HKjMQ9xq8;;mlkZZ#BT{VLiM1@>oOog>cei5K z3Kd_*m!qg#oYzAzWK}Vx6ue%v*sK-oT*@`095Ax-4TY}}G(jfJ34!7q3?(#dmU z#V}2O`^6l2BM7DSacdhf3P-+&<;zasGCL*>V-?$!k}hfc&F8D_{yQ$LTqeQ2ViSKd zlMp+cOJ5`AN>NiHlv$wCMzmSUU$2Si0pw!NYKl-`UB1-o$2bRMHd>Gg9##|27Q8BM zO!YA5=o{SsGgorNKqOf6L1bBua8?|DRnp_EtR%G*WjCWNp&50(c8XP2wp=Qo8H={# z9_1pCA1b3%1(&mKQcTSR%AJ=rTuaVE^8e5+oqu_h6W%!yr|ICw;X5ecnvhrCArZIx zl#rv9Wqp^AFjp*5M^oA7z&oNkCqbEz)di(-cIsf(-8|%kbgJI_F4hlb>02tg%8XUYPM}l1G3oDNSBym1YAA zIjzB|oZ}=}{+Y6%0Mi!9pM`c+RWGt=h?h>hV`$(hBBzP?ikVp1tGTJQEt5GLC>JDN zue^u~E&8>X>F8J7HUyKa@#|~Vjci0%k4@SPG^d6po@Uu@P8G5AB%c>OS6mS_oa|(R z@49^{%G+bFCOq2;T)gSb)KtrAy+nk(;Ff*z5Ic6;bl&bZv9;SYY{*kyyCaOt#Nj!2 zJa@TXBfx>js5o61%L@?)g1`LBv6(!DGwf9sML~VtYt;bFBIS|r_sT2BTOjc6cRH^a zq5*yI?Qdt`k%^*(E$>=UmY?_Eb9*n98_g^7X-&=~dpfMO?Q(0`aG|Be0*Ck79Oylj zgRC=KOz}lp^W@g20B1bG3SSDZrXq!BAiO-|L?I4UNk_?_|G8nn@4GltpxLwh+N`N= zg6^;KmOh{E54a5~$}OI3hYmTDbNP4gy=93aj^i?Dcthv-0K^wv6w%;O@baL9vrx|>1>*D7=s1$flM6?993D?>TGEH~*-vPC=POFb z7P3;vovy`V_{$!*Bk^>I7psWesQKYX%Fm+n`^E9dhdnK{tZcZ0^TPGvMuUsF@ul-8 zhdf};{nkIL^W~;a<-MO<6zPr@D~#-zxjLs}#)*x2r~8?bV_5X5{ToWBUAi}Y%wPw8 z4n^~a`<2d(<0Qe?{gWU4O}K=-SM2YxT62p1Z(7~?R(Q?t!$nq|ite*Cv5T9E{d<#llaDJn6yk0vEzM}= zO_Ltmu&UVKXF^w6OFN7G^MecTFk@yH`w!Sf+QZcSrYkKO1l;Oh8{GNxvrwpDb@oJx zqt<-;Oxt{3tIvV~6jub{g0=<^KI-(EIx!AWX+b(VOvV(f39#5}R>cbJGfnV7w|zh` zTDb;kU+CENlHcsBN7Ft-fw-8X13$Wo{VUZ}{|YMt)FP05-ht}&VVxnoF#7D;mtTD? zL9$-X5_NW3vDwJ64@vuB3+x`KLeuDvSw=2Q=Ni4WyX z9DtWQ%oFWaE7^L653LCYq#RZ@*1PCy);?hZ4XKSyE;JSw`+-E(o89<#1xKfMnRcd; z;>A8B(N{>?MO0H2Yuv|?efIHaWssndw9hE$qtd>XIXG@>)b?HTpxHNkEXh#i33)Dh zvhnSZfGvyM)xsQ%}pbVmg=FG0oT8U$tg;)u3JRZQAGTX05yrcPr-Ax9iBkb^Isl+1;p#EC7scmbBZsy`EQav00Q_x4Dt-g*>OJ;nQQMWMTc-Kam(uO%?_)(s%->D=S6(F2vV1tl}~V+ zx&#Y1q>*l2lC;d3AGy2%UElVRcg6_Aq@84DF+vx{poNT~aRVXX`(opO`z%V?*W4(w zyB@Ms;KxSB^=ZmJ$L%L$_k+=8H49kZ#o|Ag^3+LK3wh(2TeiXy?vLju=ZOM(ls zve68Y1Qu(o^cNh&+>tsgDaw!RSm6dcv;<$AUXX$wmxgU96b(5{3G@?Rg7M+;n0t{3 z+~LQ@RupEJhR1e=4A0oY2D8fcVy0au=NdCCB%+drtaM}H`RJIfSkx%0;TZ4<$5nPUaJ_Q9A!R}6L z#ieKsrHj#E#63W|W}FEwc{=Y`kXO@(9xd2FBheKEe{or5Y73qScYg5!c z{?E#I*ilNX$#Ba}JxPDbO9`Z7pAPS(?|pBq&EL||4fcS*p2V@^E0bWDrKA~oJS$Ai z#z_on9uLfeRs%iUR&I} zTP3#4r^Hrn@WXF&m#Z+(BxF+9%V( zn}rRi*O3d2todp9e;ZDKi(VAp90AQ|VPOiJ=(%=ZSlU(oE;O7}(EdA2aomBZomL1} zfu69zV_e-F3Fx%jTe*RXl$u}M(#IE?M!I=30!o#a*cY0Rd?X{uStbEPDaCE*;6$oy z347WLZhSoUBQ1yzPOU8^Elqbkh^c5P5&oZ&Bu3!WhA;q+GY+T5bW}*{x1H}_(1B@&Wf59CB%iuLU_i>lvtvN}KaS&zUc5KD5qYaU#agzrHeX6Sp4; z-#&NoHbj55gP3=yqVAA=)az|`7?i`RRt9=6kZ#6|qo>OkR?#ZYUwv?xMan$u+$`|P9jX?@(o6dqjd2W>Bf>b=ElnQPd zJFMHNP%a>qbb}k7@}cDVT#cB_n;I;{%)uBS*%GzBSvM=p3g@*wlMKtUWaP(UXaiT4 zBS1qh%itpz&^T9TClN$}uT;wIcN}fqa1Zy$kZ3$%&xTb(T!y8-3Qd@(o?;DNYuo=(<}BfwR(8lp zb;2`PHqfFwI=P{i30BPdXMr$VpGM~#-N90V;72b-_1#Y!7CsI1vIBB~34E;$S{A|P zvPrPn|;j|04JR=zY%+PJL)YaL^ z6f7c*mF7n+Yv;_c=_$i>u+THD6RO$KyHc&%n&72Zhi+_mgIG6LJBj67C0$sej7{gA z&ngm+DF&ACWH;b()g1Ydr_z(-Dm4{=g@KPJd)GBIHBDs$f%=vLJB`k$p2BoVR(?0u zFp;pXrZy^975t*5%(^DF%b$>egdCD|P)lvKgcUe-WIA=2Hd<8}s|`G>;fFOmW1xrK zd1IYeH`>(10@X>Z=Q;n&uMG4w3lmZ1j?^mJh!31QgSuKT&HO87Vbo5o3LbsDOxrSY zl^oxIM{#*2PPH{v!NZS4VqjD?d;CW#PiHrZ2?Q?aXxWjt&a?-X@@V#h1DH$fvA}vTTu4h( zTiv>JrgnYjfyfLOYK;Rutpr;0F!4*UX&Gfy*Kai7eq?JGP`i$_F&fUh(V|tgXq-jo_2fI8J!v(Q*g{UkP%M zWFq8Ltx*-xVhqVJc*8HKOCSE@6|P}k>r2&5(;Jiq2^kKXH;kE0{fZV$RqDeDph5U% z_;$%E8xHLE?S*X1*IA_J+oQ+)N(^6{j58}A?K?;w-IqgwNWFv*I?PDlRRo6CE z*4mxzP7+c!m`FY#c)7c}(f{LQ@CAKcO^P|O6#i&%4y`PYM88`_!DVU9SF3SKP#O`g zjg2Pjok$RddR^n99}do0V|BQ()yh!^DX1U-+$Ziil`w3*eWno8Kzyqd8L+Hhi4cvz7uD6wKwBpaW~V;@+f2mo;E@O2d*xKYvzD0kRR zN>R(Tx3ns_>6=NGM{gVMj@^M7l--^He`#=uH^-F{POcObph0w48ax{AH77WFxxcPW z5MN6Tj6n^D)<$a$8D8r$X<|X#MoN<`8aUb1LFzUWjMt903Z#LTyiWx4GU2C^Pxka#8(ROAGCrxRHi2FIDf4kA$N&~^S%;!Gy{R) zh4ADMl%QRw6jjSu;cvXheXPQpWP>gC0h7=cJh>>8V=(ztN-Qx_u2g##YZPKsLK=pT zo;G9LY+3UPVs=K7XwjkAo*LY`#z-Z!Cu%!`GeF}u`wmBMPwY$wYa^Qo!w3uRZ#E-o z7szPZWj-Q`&k72F%27U2k=vOhv7pXMBvriD%SaE8q)xwbO=sE!S!q+9kW1~A$=czI z1&VR>z#M>dt`>7#G9lWWd;-kXkiifM=^GqpovK ze9vcC=MA(&lmnf=&Ug?G-)#H2Pg`6jpz#B8V&{#t(@c*#;-+Xer?(tw5}_PyaRhM& z64$7Tp3Wwpm`a(3%emRbNdS^cyt#!~@s}pcILQq%8-FoOjB#Sni=s|7S3*tO75w5m z2$smt7~%Lt>Ce?dKK7;8CUcXfNE=c>jq*=2WpN3GV&qpdnfmKd;GqDojK;*-bc48wn@Rjg?9iavzY+3$`VclpRSLX6VKhhcgb}UE* zUS^-+2iy)a#Ugc)&tJUD2Up2867`9}cUmGZJ70@(#{UN(!_py~S zJ6`v)Q8IfibFcziD$hB3SXZn@POSJPQ2T(8YIDx?X8n29^I>RCuaY;OHTO5 zZAbU~y6e{;>KnT?3p^}1#Q*#O3a@()F z5*DVk$;79;t`q}_o}>LEp{X?X@dzq9S7QIseZT%tnnTl`Jepqgm7^b+ozZ~@aEdT? zNCa2jiIFb)VOrtXV(sM(F#BB0vV}UZTSf>9(JK=BQIM57q#=9Ik0vCb|bZ>S3)C(6Kfp zBhn}dL3uQfQ}~pgQ;g) zZYw1fON!tFw|qKqpfCgpt{OJtf(x%DJ*q#FnhaVCU|7(x$gnW@}nAz`+!Tn zF}Qxk;QB*@>qDkT53XM_xW0FA{k!)0ox$}V53XN3xPHUnhNXk+R}F4hHn{#B-azl9 zG==Q@yMyc34X*DST+cmCUZ;c;5q;3ace}pK%2W7|eWlg8c4hA1`U6rz(z&?YJ}e(x zzuM%ivchQ4W(}cSscB8)_dZNq-eC2dm?eW7RH?7LT z;MyOUu^CNS`MBj&6WsDX53YYQjb^smL&%B*UH*Uo6(Xa?D^T6pgX`ZGl-?yc2@fr| zhJggJcy+&Ah{OF?T)i&1VZ6Bw7akm3|DKgUYa5>SgH_Xm#@?{@q{ra;H_aWW2=Pz_ zU~w!T-oeiWT9%(S%ui^?Z8XKK4@_S~P^W~D!9F57C5V!uZtBscSo3K3fpuJGp}q^K zrN&vu>-X$4!G(?71ycegX^QudL4>W?myLTeyGYCLg^SNt%MpU?i~;SDDRf1Z;#!Hr z(FafCc&&Jm<(_NG01?&y-Fa~Zy2jsBa2El%-3db%f#Zd(Uug262^R@)7t~3v^Eob0 zLYQk6vD;;!E#?a>!zttet-TWRWSR|HqvhBL$Pki%$0C;&=f_rX-O80k+e$0o;Ce#^ z@Y9$nBLR?>T%uZKi3;G(hT<%a{zo${wml;yTO3e8>Dki$>I9fL%7IBm3t0ILP67@c z!5Y*gV-mWq3&1Nb^Jj|4rj4~a$C|_+y_OCPE5&t2&ms)J8P2izh*KG&(F^pkg9wY0 zy5q%0u3IyXAaH@4=7>0iPI2?893O?9)Cj{ix1p86=5&QY%AbSlcbiIUOi#f-La%$} z0QRG(TSO!X^JH3Kv(Weu_i30+TgdlhPc-MqN2U=VgX^&!#ZW_;)kraPmh|*bvEI4_ z8dHebXLy;+T_0FqjaSg=Ewg{IQH8(dG_mTwcad`Hlu=HO5ws8a9aBbzEUrQ;a5|eH z5kNNV5q6>xP@+Fp@OfWFZ*b{d>4Fd8f+h+D88cR~?( zO|RsdDbM>>AhTDtphWe9Q zHVs2SAM3Ku=N~sRC40Ce3Gd)J3^>dFTgDamB~c2=QMo^ryMimeA15yRfM3v(%&U&v z@)YESs!m;~!ClJuAzW~8h&3@`QaRF;${bnvPB79MPPiYJ*?y&1lrR!arMM|X?hiMb zy6D3P)TM+AyfX|<<*!s`mTgk@`XVxt~ zy=cuphl~G@kKa18aPenz4*ucbVTzrZzmUJ5Ze4Wx<0bzb&JJ#W;mquqI(z&#c>ix^v-Y zAHJX0g2_{XJb8tOkmpQw8Vn)HnOdgMEsvB5NHMvPgal#MBBXPev3?3(Qq%$F}&>8VN1QK#qkf4bz*ANDOi^X}WHS1$Ry{VkQe zr`|+=zAi-iANGZ(!$oHntUBGXmJiM`r@Pkz@R=1|XO`?8!ixy|Y{#O{+PXgNX@@NN95_99)29pfpYB|Hdf%Qi3wqD2nN8tOS8Q;` zIys-W?K`u4{^_~Be>kwp6;t(yjwAF@HXW~e^z(2H)@|w??OkYXaw*-{Du1- zTzq*(oCKF%>#tUZT5!>285b|T_Vkifrw^s)*g2gL<}8nT0DIBn@11`YZkFpwk7t%F zCH7qK2AFLTaJpmHnU$-9Kfn0XH`>pvTo98k_(3?Q*t??G+nW+w?3+{UTU+c4i+xM< zw|7^u@6Cd)_VyNg4;G5OYm2=H+-3W_mP@;ez5A?~{#iz0_tMLxEG_nKvm$-#5_MN_ zX@0SHC$k~PSThHUy|atG>xzB4Lz{dG`M?)GEi3l!;0~>5hGVg}tJsHFT4mK*Z-1oe zPE=46DBgRp*tguOJ1I%PlNLs8NpB<~0qsMteQ$RpnU?yaqC$q<{;z)6)IcY|0FqAA zN2L(5qS!YV%qS^w#lCmB%AFK)!FOj_#1{K7XiGZFno(<_2KJ4_PT37i2h472@D;c9 z&b9X2`11R3vBV0lW$X&=5`Cm2KBuyCb?-uh4=4d~2{PoT;I5zLVJI2Cs#rqXEQE3{ z#8Gy~{z??S1m-O!8jz?cJ=x~zfnx7o^RQ7%XbU%7xQ|*Gfr5Ay>re}*A)W4{b3ae_ z=H#hHUCebn&SVG8XOLM;9W^1obXBqU1JhDL0z=;~_QB|Wo{=t%-qXBV%XYh_Q^~n} zw;&vWs(k=~<$~0c)xJpAH}g0PzEIJ*1E#4W?7ilG519qFT$Ut2r6(dU2G@T#59O)_a`XKpy*N7j zS9uU5(DTyKNZ|yIxNJ`p)=GE;l_PU`5hcjD^^C}8ZcN*s`J{trghB{~Wh$SR!Jxd5 z+e1+I9Ye*LEP3y9jc+7AzEF9udCNnRp%jJkfhO#wA|f0bvC4vGwt?nyLN|@NA_@lU zs~qoGf$E%ylOigzx++}l!p?lBnA&1EgSO>8rKtX5d9aPZd7eb0${wnd=nt!`=@BO_ z^2=_cJ&2R%0UBJuU5rlglJ8}K?few?8PpXMSck5EeEKqHzM1c#C=`^TM-vL^A0f#; znO_QqKq*C<2e;&sFc~`*F}-wLAyyD20D(_S{Rrx&Iz!HP{oV-N>LRhXV)(=Ugn6}7 zCrQ@_`$ePPs4}b>&9lC3q1H2CUwjxIggYqOS^slxn>cMF=hSKvyUCWY86zS)`t!tB6g1P9Ok zCkqI!_h^oXO++kcmKzgCn8LW5sXxqBJi1%AG$F8Wc$o#870WC-X;2cZmYF-EIfc<& zyF;3BbNLNN-X>>$=;wPJYps|r4JuPC^M`K24`*(gbDy+ zWwDUya{E+WCTiZ{Uen&&fncU+?d1kI3lHWpX#(Uy&4*#0+-%q6v3F&oGvMf9N*{7K zTJ3$hhy7{;aDh}(nL2rF0ZXOtJGxxWMw9jouVMZ7U^VC*c2n%IU>;h4q;!(MG;=5A z(?e)}$fl+q(p*Gm>(CUb3ZDJDKQTwTQC%#VEu>ib^X;P>gbaF%q>yT4+Umf73o62J6s4H9mP%@Z**bGiuSDTlt77w3gBjsJIO4@bR-0DLCY5?m(!@H2 zTq0H~{1AsZdCtSlL|>+{DR>Vf6O+w0&12T&VTCm;8F7$HZ)TgD$(iAO)z^%~7M>6( zW}ez{dBzMlOxxYc=j&6EI%3X`d5Ub>V-)Xm&T+mxm-9}2$Wo8v7S?fZ{JS12(t6Vb%lUXU5yR~9_{vR#3xVTN}C$i=^ zI=JK}LypX@$;nJe*3{`Ft%I?XN3JVfLgZKRi2rLnfRe6t0x1Vnu$4~n)}!n33-#a? z&KIQelcmKskV7sbK|IlPb{bjFoI=J(FalOQ+qm<)w@w{8^@hIu?yZx1tsIx$IJxy`{VxfOxBv)vRz zmjae-LBH)3JT(tpu-dCsI5qcV*U2uc?~Ob)7klSngUW6D?Yxt_q>@S8g+^OX_E~!l zJd8U3@{|2k?L%z=ak7KT`xA#-{&pJ*C$ozOIoT%aVb1~@-d{kUT_$K(1lz6O1+^T& zk~M{V0liRMRpr}DZ^B?n#Z^efTr>V;Cstw0@7@ZYY?Svu5^CE;03n;DZL*;lL~*Df zwt($2_lyzPy{J;Dc@$Yz_-)tk-U6@dt4h{57mAkKe|tzg$l~XP*PJp+6^tCX?0M(O&Hhf4Sy7T0A+HFgVM$$YQ?F25tD0|T5vTJiK3Z9h9J=u>#@JmGX-khGE(f6@Xhf* zZI-1Li*UH>vRr;jd9*2)1TGUHde_OVu&|FnhtTsBUKN(Rgo5=THxIC)Y#wLkliQ;d zbIllwlvL+nNnC%ZO6*umis6%6f-hf@>4)(%A~$?tf|fG;DZ&z433w$(1Fc_q0uQ(( zr=0Tje8A$4DW=Pl)BYH0x*V0G;In^AlVw>p2cuZuQv9Z}tTVbi*?J$P>XdTsjftFF zLH$JN#}L`U@i_{LXoW-%@=~}4KKk@Y`b+kMafefp+Ksan-4VI=w_PVUtD`tK`Sj^u zju`kPrBgVTdbn)tONC2`b{JAB?Vju*@y3W>e~)E$m%_W%AJ8AsfiW65*-50+5fQG2 zy+bIt_!`x?`}mH+@$Td8zX^ZSc6{&gcK-iC@YL%jOxKSeI=<=nNBnI+-g$g$;rM=) zZ$I95d?$Yo>&xEbJC64r-~XHWy17k~BnN4|$2a}vjntqI5$(r6=Knp%_x)xzh26is zRx~`m^}*n_9~@sogS#oyfgqY5m4M*Z2a~KDrahEDXm)&5INo)^Oc%CQ9AISabYCK8DB@C_9cH6c#e*fLSbck8g>kK3MpteVBGwhN$jdYIUhbkID&L zlmB4wg!}bz7I+K%FM#ztvjzcP#ZiE_HMsSA$KNP5KUz<{8ZI9N$sEePziAr{9d?W< zn0+`w@b8zCkM|ai@4_9S9I(lJxAXWucpwk&eK7daC2&A4_NX5JDEQacv>&peIds`X z%y~`ALuHh)7F>J-?(@7>WbdL0L9tsQ|C_cTT-$bGwufBCuqX${e(H(Ky#&D_rVc3j#2n9?LkEjA?I2o>$o5~Xi_a8<>XDrdmk(uUrD6)nl^EkQCuFj zvhCoB<*vGt6=q1!ely)7wU4h|hK5-S?hgjze|7v#E@v5gn3_G@`-ny%m-3b$l?m=9YijFKrEaORz*;a*%uX@vXsQE&p_Y`up$3L}Pg>hezl+e;Jj` zTV;uRl+pZP@RhHPJa+^?3)f~dE3<<+7qMT-oTR}qZN;77`;D31fMSH~@B6F-tM(hs zdR@n81cj0Gr!KnomiGdc>HqGh|7jN<6R&!XA1)Auy~jI_@4(ORkA^-zFFZbNXl$b% zOg!p>worALEL;&Qc0qVj588cJbs8Lk^e-$&cMLB$&Bn9TzJj# zcL0GjFRfC2^ZhSpTeTy_{|xO!c%oMw06lZs>pLC{ZjW|9w{h+81BRpk16t zbORWrE#(spoYZ%ab+!Z-T%E}Y`qQyZXOo~3Bb`wvr`w`UV+O;OgW3Xo(kKl>B>L1{LKfjWV4wsqIY)p#WO;Nr%C3uE9jv&i*g{9fe4cD2t}!|W3X)zZ2=OkpdcSm5RE9rf6k*^bS+Xw znjxH4xP)>LfX_(cGwM4LYMOE|K{f0KNT55PeWSrwqT@g85@Nt(lspQ)G0S(9qm|*z z5hG9&lAt+wyvG;R!zG8!^pE%+g9Q|5NI`R8+oIsoZ(3DHQ3sT}>;302rH%^)U1cfr zKMaN)SuS;A)Z(fHg`75mj2jsOO@mlP4=qJQi!~uS7|u7Z@WBb|8f;tagteKe-dCBz z5hF%XoHp>F6X=@>?yAc~zl~ZBj?rZT5TFVELK3v)1GM%W3~v6*%(h08b)3;2XPO9p z68>-IP#S@!QubcyfwtK`Dho8F* zy<*pa1Yvt9eWj94&igKTkzX;0AP~Pn)#Xm&0Py+;+m?_SgZMlbBL^+`23-wlX3*0v zx;l7#z`So|`-4})|59O`Q@<2=XJN=YnfZN49{JSe8c(t)`FU7I-TCt`NT^DuxIn@k z3&AkB@HPuDin%}}EQGUD+xbt(1-Je*Gb4;9`yjK7-ch>wdH64hQHYOBr@~n{>%WIg z5iV$R`)4JC3}y)XL~bHHh?oNwEzUowEQxA&CPH+hH;aAT>(L zf2mzf7}v__k8H1i$B;;JswW_FE9?XSAuey+nYWFZ3AqL9bl#5uKS zhKM4-yyd|!+Q!=#*Q{&JeSRlllM@GQVM4SUi6E$Cah#~i1i2F6Lqt2JfWZkxBKGnX zeQ6k?sQ^|u5f0Y1@eM=SC30NI(5K`=>L3hPAeg4IGXge%!N-wpnI@q|DI86x^hZ2e zqMs9w6q-UYv^Px%mY;>EO(86B;2;T=DDiHh8%tS9Ri`nAx}yI*^it1;htGQWVc9}% z1yFoknOU5FV(wA~+z%PeoXgM2X!qv7Hbq?LNhmtsI-<%EXh#q_jyhf71cjWRJRvgm zr;w!T)Drb$$)7Us5Pk?QOI1+?c79h5cC9)3!xh*=H6KA#_90Z-6=Ge#R?072e){7u zxOuGK?4X^s{0nkcRKMBIqU}%L=smskZMW0GXNQ-vg@ZDP7H(g3nX8u^FKco1!FN7A zuSOzX;QDBH zhxP+n=)bc2%;HYh&}WC&v*6t6#|L&MsAx;dUVYE$rCl^paWhvDx6J$CN|t$lws%wT z&0mzPKeI4oAv@Z!+rsDV``vB}d`JzMoSlAWjMW>@>{;nHGe8@R`oq4r@dIXl7S8>w zZN;a14*cQ3rqf*qwAaGEPQTZ}#aCCVJHH=jgPR{q+_4q*KzeX_#wHx^ZPdO4?2KS4 zlxz?v7hnC^+kLE#Psnmw<3^QVx#0A^rDqoOQ7{L+;HC%UF1PoDr%{p*1?O1r9`*;> zx6i4d=F=o}Eo4AABnfYR`1F$PqJ-@_l71lW+Qz|1ke1n6TyTx^ivz(KtOfoDR|a2w z%I&+LJxbQ~pV{3`L$*!H+-x;ZJFqj5zVtpP^0Tf@u7xwJdm%WkbaePUTzF>DwrH~q zVJ?8&RtP9^@zptD6kPc*?)|Lu(CLo(L^pd)oZk7aHeo64gCSu60OztBx#IQ;_bc?? z?q-LHPd9A(e0AsNAG|AVF1s;N&~q-eRmOM2d2EqTq8P1e%Lhv_LwUEfXNK9~LdI{K z@m3pahqs-x}xW^H{SUoE`2^cRqUK!?A%)H zT3qbxD0Z&pLqY#^9`?sSV;{4<$@W_KZp8ZnM3d+RmTE3OGds zIwz)lW7;rCCcyW* zJng$(=o5L~VQ-AW%}y{XtHULoVp7yrl+TCt(_%~0B_KQ_ghe92_(sPSo&fH zlSfl1q{cK8d$=y#AFSzlM;eby0hz84> z4JL;Fmvw3C+$@1<s11aC5kfDu%vRGn^qqIg4<^Sui422_K9723VA#I=7V%V!QVhcg-($_Y}K# z7rVC>cafaBw-${y2)H@^%cC}Rn4}|mc8(bNeNBwzfQ0;8sFYT-~ z>$-~F7=bt%L=!|G=3cwq+aLw(TC#edfguSf1vvZ63bre_`H6f@ux$}F_y;wBlcs1{ zZE_U}80|pls^Wa!j}=k*K$<7O0_VuW$P>~v2Pd+7_dIJ!l~CFvi8}!VC&V5=S_c9t zTj?g;zP8x?k-=l-)Hcu{g2G^kNr$U~+g{Ga!8AWh!Q~l5I!DGx3(+%AG@7@gTQDK~ z7lYOjmI~V=3gUQRpd84^Q#b^IVHrfnYZC4dr-{S)u2Fz6KJ3QJTMQC}(gu8r0dv7~ zm}G(lMsfpAkmJooc2!?+19*ZeQ5BjV?z3SY@djbB5787_aRn#wR|d11{}yAqu}XTJHVmc18`NrgCPKnCdI^<7-T|Y zr-2jGJU7wcEc0+8Ke$BmNce6_hp0QXWCjoMlFtd^q6L{QnIDmeB5|ZB<|~;xyly$c z&EZw|S_Cg}Z6Fl&9glC23rF1_v9EI3_gAl%XV;;+jn$(O!K-nbM? z*kQRZ9$fmBAu>{MpDpH66KHkL-HHyxBU&q_%X*BzYx|Ckom|t2P>#8P!!7zhdd0FIBXq>dM2?W2ghR^P)fQa%)!dvLr^CYx zsiTCVpI!34#blljQMR2D!S&<(FvX2QP|R87LwKhJD*l94VNjEBX(&VG+f3%T)qcm0?V{$whxr~I6sVHFbZqnEPH^y zcVDq*esOP4aqrgR-ZjOZ#r7BT`K}uqial+`y(@!f!-H1jaH>=)+vkg#Tim-H(Mmmg z+fD2)Yl*)IUt8>%SKQkb73e7LrIFoMfWO>wYOU1uo`e2}iU}<4?Uw329~bv_Sb0}> zrG2*YksNJ>x~;f(nQHWqTK9UD)R3Bss>tL%vwd-T?3r(zEXz^^Je^eJb=rT2qAOgd zoe!=NMVT*Btpuc=GHWd3LtaE@T2EAo+r>jad>oEFrKexb(i* zvBPq$gvg!ITv%IpRm}AC-aV1({JIl))|o-;i+gb@F91q(?B#|vj1RU8wW=N>0i-{s9 zd&vG^G`0w-?FL(~Q$D!j*5T{-916;w!elz6M=5Hgc_l&z9I?oogKG{e`SX)KCZ;U6 zBr|&19{G`G4ICY%IHM4W&fv<b&w%?uJWBs^o16B)eelM|jUT>GEkr zp~zGhmJxMSn~{yg!U$InF)sA^3qKGJIW~;I))KR+K&n-=NHf>#mZGMoB8d+j=@;E@ zak{`!cE0^__+Mm_ z+#0!rT$L?0d-P#hcr*?BsDh9#>l3Y!U&L6tuGu39xF{4-3FfZqkz{OuI_r_aN()iU zjoR-a!b)Qy=L0B*>$VtMp%0%`BKT=oEXO*X{&rZ%!f&6{onL&2nY4fNneN5#w6{^L z-)s@E+2~cu&JLt303*XkkfI_~9ElicN2$X1-U@xfI8LK)CdblQZCh@1j3o5do96r_ z{n39Yxa|smU7$Y}zV8#{+fh!yU5RnbXky4mAX$r!Hf~7CdWgW%ZM1`6nWLXa!i~wH zloym8!ssB0c=@Y_U8+b?JofT~gq2ZO8)e`q0$u8fVAog(xrtu& zj~QAQ-C5jQo(dgzb|s8b7_zMQ|0(XqoZb71yAKt2Zz=BHTHL+4xO;bT&tm=EP3Nvl zhl{(r?GpF++-ILR6nAeg?ryg$)TcBeHdA4hed;LgnOEH1Rouf5@ZEFOgk*MDaqjWC zr>w2GU6PNq=&~ZTx52k(qCP6_nQ!VydPQq!E7AN_vrYlNuQX*kO)+U)75vAx`&{ho zUd=tqZnuivB}MnNnYw6+U8|`?A&lH<|!(es8x2S@BTg{gwkW_m*Zc54BXFa+nxsjjIMYzV;& ze_wLsbS?thv*CX=gt)&pzFe$uyT=r>7ML^C3I?hbK1F^I!lsM#L?a=Lg^OUAD?hBc zNOB1A_st~uX%1Gf0yoDdy%zqz(o7dR4Y5ud$J#g`aEr(U@!%7Nf8>-k9E>AU-w`{( zhSX51!ody;``hM+Yx21BjBCRyXporGhw&{M;B>UcI9$fxkvf%(p~jtCTqVaigrx&o zkC#={1&dr}G{d#Mt~veibP+YQ{oo1YAR9)?e(2iDr@e-byLT8pq@%Tjj2LpU2O8ib zXl;=%?d0j;tIrRuO(j$=b{tK>0zN~pJuz#7N5Z963H6O0>EX(d5LKG)JT0V26SPCK z7!vb>uRd_F3Qa6(^mnuA;{o8jx!cOLC_~s2ij9MJ8Tx!L5k3hl*urRPQvxnZF$e`2 zK8%3nvofMVEp?2-WwU!TI8TMxU5af4kJPw(8!TOySvWE(nk}Q_+V{f6!%+rf;xw1e zm$4%So|&xtLGC3^HUK1FDpRab9*X?mwtTZ7=0Yi*k~Gj|hh-%`$G#E5!L`vOzT)n6 zMlOYjDX=F?R+O3v8eYZ7g+rCv(-u4zejKF(Tp4xpVkh~iqzx^?r=$;184ySzrmw3| zN~DDFpN3ag+afBb9x8ddJ4n%(?=G_^bQRi$?NxUU%@L$hPTg6c6iW~jz#7b0e9?v* zR4Laail(=XFii0^&{^~=3Aq%_U(sq*u$tOTOV6yeM~_5?wy3Oah6rv%L5c(v2ymFi z=DSBF12aN1PsV_<&~T!xKP$_;ijvGExzdQ_07V;6F@+=xpcxbK6?TeL_O~o|-um2d zN>ks5J5fp~A$YyD$Xu&ixh@`QSMi|w=8^Rb!)R*(md8mv&>qp={U~u9bUid_ z7T1wG6mnI;O{qnrMwK)jMiA78*%Rx-V#mH>$ClzI%OM?I#SVItj=9B-&0H$#dq=Tj zYq8@nAGooA{@VStqB+z{ciA0tmHalL&h{d5HZf7ALVYgHGZlIhb~4dJS7~8> z#rcK_r8C6EXskq4GzxARm-71vYnQO}Y5;8TIP=$}7RG#-egc%13id0_Lw&^#eqZQ| zcZ4|&=rV!cF8~FQ0cQ0KaOZ6I9h0)%@W9`VNVQz@7+g{lzFtx-{4BcQ5d}L}k7H=?$hn40go9r3A+%?r-6*CKLQ)TF_=wr_Tg!pm3Z+FhC)} zr4keP;*luX9I2f$*f5lCbR6n6OuPuAKsN>WWO>~+ImcA?vX`I*mv>s#tyWcjNvYwm zKq87@)~vQM$=<DXpSK8alv2iSg*)RQv_6H0E%E7VE%vXy$5_; z)tUc&VQg$%g*z^IXrT*XdY7>cHW;j61L@L88cTylGsDct#@>_xLg+z+5?Y7|C4oSq z&_jz7XEz~LhU}(nb|VsOV3XY_+4S8c|L=3obMD+bb7v&T?!No(CxV~nKBu4OJm)#j zDfe8eb#wjR&p;$Cg3u5#H0l_>NK*Kjv4=+(AL7E;@<6Im2*XuE+lTRq!3t*UA$h74 z1E1Nxe5s0|-Dv56G9gqPiBRly0ia8x?Xy z&(@W`LoTAetUW~*zT5`*E!sj^BVt++{RvVVqg=f5d~cx0*}V zZmjscH{qm+$no>u+(R@y6I+ITTbZa1_`ElDNqztM<^Vg1SgT%gFeaEZ1_Y{v{)3i7 zP(*F{13^h%Oc6neo(;f7WB<-~g|!=XfqIZwmGJF-yjIP8AaIaxh7R)IbMY5HJN$V* z#Cio^rF@1Djb69?IzD6g)bQu!!-UV+P~M~&!ym)_5&38=Aui`T7sH<-&~p%15Luk& z>|@4*?U%p!S-vZH9j<&-l24oREkXJB63NWlV^3R%!?u_BMqn^W?o#I?ok15Z8DAGB zF)7Wn@|{RYclc2$w0z3@!s@7Fi)_1;?1}mz#=^Dy>eFNb4J3&0I2k zw^W}GmPR)H@f-iLa#eDp%%qBfBuft)0W!P~_UdYeyT(SY>=!_vhmU-u+Q_T z1(9$=eMME(HnVm`qX^&l^6D=CuP>&k%EQ|Lk9c3Q4l2U`v zN(1Hp!tfVF;@+%MT~Qp9zo>$;IGIu!RVkeTiD3XlE)X91bbKJ73~m8kD#HAz4K@7v zMsMK(^|KX$;ET!(nll#<-$O=ba102b?SYqj=ap_Kvk7qzck!@lr2x`^(%C3@_#(Y( z^-(G0RIt7hb={%SJ7z<+D@y`zSu>8M6|4YaD98E7DX_ry5 z?kKS6D8@&^ApFlWEED#l(z|Fq93dpK-pkhZjVg$-kr*qG+V z(j&&ms=CX0M~B|IsFo=NSrmAnoA5Pm;fm-YBfRKC>1clJR z9*})8rGld59q{&G-NZz9_Ptp-VV2AR(vW$LS&lvaNnK(v^G3VqV`r6iiX%&R-trPl zCRpv*?lwfNY5cu1-;r4;KXx6&n(eId%1RQhcZ}S3rKEMA%=0VPBABcbiy5VaWG28O z%13!}iv-4*<$Ea%&P*$#%S+;1(6hqGnli;rl4Svgs1eNZOBk%@!(00O3@3RDf;cP=C||;g@Bi&E&sGu_+q^&WFWSCdg5p6)BUSO68bjW6+n$*RPO_gOA z0bg5s>VIAW$_fG1Saam4tJkFLtl|5r?LM*Xf)*Le%w`ySBU-jnQfiJ}R@cZV=4+3@ zc(uOt&Hs6x2J4QK3gEUMu8}tL8Bs+-HLAqB0g5CdpW4EQG};jLCF=0I1X! z-v0Y9?q(y6V9d^}r-7n1o+sjWP8Cf!&s%bVWbd#_9uIuiLVg4GJM$E@Y;`BXlh z$;OMx^tJ~!W;0nY9$%HuXK|~Y_Iuh)D`m17l8z@YPImMa6Zvg-LuKle>CpH^eMu9e zP~3KRCZ2E=$#jxmvQSLMd$YaCOfk!aX46b5s8l}LneR3A*}BL&O0cq)^kfYKg?WFfWf(TsQE z$)@!A#7OY$+!+f`JrBUwn~rFc@sZJ#50r>Pihfd!^0NlH_MtGPrzA?!+a(7MzyQClP$y@owj z7{&@OH*LE+o$5?@Z+}MwhZ0%KAtRTDKk`!2UDV_#zP&!U~~~zCxwr z^%%UtepNY2pySdv`r^ezdpcP(l2Sy-Q<*|Bkru|*mA3;9@H?x>cy0c9OO~u_m$t0c zRZAZ#U191AA2x1#SY)Hl|Z{Z?rw<&tG3d-L5?SJW&t9KJ2Z8C^4&8wQt)t4=dJqWOL{8*{*z|7kSP{wD;`Us}qG(ypTv`6FSBmmf_>erRz*V zlleq@DqY-~?8%}AlL^s;;=;(2PsNj4(I#D4Pr%UvYgm*_DiCP-Yy7_!gQDUj(VJ@v{oZ(dYk5ZFHCpdb?9cQFCFaw5C5*f85GkDqA*XT8d?$35H3}4{W)+`lCZWUJA zx;A?A=B?7S`a=6t-sz{?hLom~;k*a_6#Hn-=&}cjL|bpA_?_@;D@EFUcRvSj@!~TQ z!p7({#LVyuQzOWfDP_6y7A`bpln!Q?CY%v&^uY^n{rWdhfqbfmwr)?l#_vv~;J%U5 zJ_c>8=|!GSKKUKUf{9j^%wl(mV*Uk#7@BTC~wywW>y`f}^`p z8Ma0dd^KD>(!LoSta>PgpoC~IqAkunSM(-wEuE_?nU^M&_T5@lC#*QrwYw8oKvcX= zmG;>ux~+mm_f9))oT5#SGhH#+l_le_bf0p{N(y`!?8GcV?>O}kDNl56Oce>+Lp4Pc zHG1dSG2OJ+m_j|4OeE7uF^)wl8XDG!@)3(!-4OM)XsVi`-q3KC$PNvWPGv>%5?)J7 zwKOAGeQ~VYA}S$6-D~$h;hSiIP~V#|W4&lay1i-kgg1Zws;%fqCJM&9q;*w?dx=C1 z!HjBL$C?v;rIhUvJs>;)h9(#_vq!F%tF)9sBULlMD_bl?m_E)6PhAQO{(i zE0vL13f50gKCuxqJYGzt8E3!ALM8Jlm;#@KH+`B5pLLmhPO`X3isj9jx9u+FlpCt! zW;%GnDJIWNa7$P%oX9Y8Qp9afi*{fZ7+u=9iNaBUCF{4{Ux(8(8rJ0)X?%|L^?I{r zZ@aN8mF|S~`DCgmLo@f~DdL(;rqIK5Q5@pEwD-10dkRHw>NHctc2l`t@5tj$&&pVh zP$V}R5l9xW;;Fe`&`=d=sRvA98@)-BT@!fASK9X4B%G7TCT9__F3ObYM1Eb_FzV5L z=O-y}oE8uGa8%&rH&GaEp=})GJLvFjH*R|#wiiXTIun?4Y38oM%7oMhgU|A4At|?- zCQr+SMuUxpYgD(BuJiOeIzF!TP>)xk*cw0jd> z93cxT6Tiv&O!qSKhaA%kMWo8OG4^B-mB#q$#KvudgiG|c!z!B8a4Em-Q7oA}O_)kc ze{?EhBW1&}P|Qk=|3*tgn-Y-eRH{n~AILsXD%;g5hA9rZrL$AyS4x!1Q0eElJxmQF z%d-({IW2ieW7aIq*>Bz843wWigOV^m( zI+Hmhkj0NA6AzthMI`8E*YQHt<$uuimm^Wq;pNVb}e`RN!tzWMY z=bpQsB@9`oyHIAQ*7}GiFfXjA875PWjy@Lk!~`ub3pT>vbh5(~H=ZrZT9^rhZa(Ea zVMk!S&gYY^aO#Y|BeW)4Zm-g{I#c!I_0djQndR3OJe}oJMzeZq zs%0#4j_-@5EN3EOc465rQxs&WBccOf+Lf1aR2S=Z!R}Yy8#q_?2Iem? zdT`q(MfZo+EWEXEb!*;*ZFlEWG&&3+!Nj&tZo9`U(RZ3PT(iarqr?k6O+vMjZ1iT# zTpGHrza73!! z%$Y68PBs?eIo2tq%Xw3#_}Mgi$DO1c7OhIxmBwZsZT8Bv!JXE&WO%$<*RouCd&MXa z<|v-yLG*S2DA)1A7!JR-Y$jFaw3nGSK){g{vb!EN)&``iNG~H&lpFtJw~f&4!Em zM6OH)TqCd*pn_vtq`=-rsJ{hdsKzEhNQBNj%gBCsQ^#ax)oTSebyKGnzs_9e`iL-{ zx}mmod(r4DD#Y%ft&wY4ggV6GaHGzfR~GT0kGJORU{*{W$Ihn?yBR(Ys@Z>&yWewq(u1$?8O%f&|)KwFTifCepNn8A+I3VAR+i*XT8`8bdzWnbDp@p0z62 z=)F7f-&kI=^VaCS?Op$MdB~`U+^B9a+oLN^4<_$S4aUi^%$cpKI{a^BI66I%maU-B zKBsgEFMbN&keAP(4_vw9=8wO6lYcB!mT1gZ)UUaX52gR4bgd}2pOmh%U#Wlnl51Xh z?oRpa`T^_hN9gT$%U{3anb$7A|COii=j-g|Q}iDT4ZZTMbCcc<^C|jQKX~`fM{nNo z@h4xqJCK88}cKNRS9gpq2W$=}!9+q#rS7q_q z1CQ*y;wln)^;6gEc=me9XF+4og=}_y?$VlkkO=NG?K`i!X6FMR|H~_SYUz&XnnqMJ z$a*SR{x1DJAA9w=&rlZqDE;-1Nlgu_De`NdzUH+nudt2unhE*ZJC; zyz0MU$KZ84Z~6R=!E1yA*WI+^>IbB{3y-qg-+A*>J8!)G_0m1BK6$$qqjb+JPhA~R zN{Kdm>CT7m@!KOJP*Cn{qeTRwU^cHP3E6j*FSwdOP?yGo&005|xu?E*+cP^Zzi;QY zSM2!A?a0@TrykvTfy*NrwOWYb-YZYvp;_GVnH^VMhw|8Yeg7-Z-?8K2TX$T43x%~pOcklh zD^EYYk9`<$`y`zp=Bddpm?IA`F zn={>gY{%HFYSpiio!FI{c&#vUm@I+iDB0Bv)81|-!8UtSGI-25+QlrG7R=EIHCW89 zWJS8d>OvA{Y05HF`Nqy3Y#Onw5NLYuj5F4=R7^&s!oek`DJgQY4dSzFiwz=jQmYtz zmVQdPsl5XaY^hb=LZ@FYkqYmuvuanphs8@~AnYhGZ=u~>L)I?E%$duLByTVcxjxbD z?YnQeTs4dDt+rnii);Y+#X$!nE?SPRdZJpov~;Pd5={tOi!hgSAu{o*!IDF5zjLxz z$g&sP70;%V-4cZqECX0f?~|5F;hO16a@>Mhnv>{GCt@u7W0|qpwrW+)CLmSQFUrCZ z?<>~o7&B+uK7K9&)ssjiGTyp%md6#^LOajqz6<+0{R*4X)6BJ0iEvgV^E6a|jig({ z>)sTA?0CH*Tyg zsc)u}7E?wl-uL8nc)u(!-DXQ--nG5V6!1|J<{eRa0avc6 z;Kgdnc+HFVNb-%|N$tUv#89TxgSShihP=r>_~JbhoyvVd5)fJvIMl8rNxiud;BhJD z^O8K-JWH0my}SJyHpdSdPbR#&y8SZmw7(g?;YHpRCMjW_B=zEr{L3rj@!_ZCaslC- z@Ps_58^sfXnvuUa!7R%A{EK(Ms2ilL(mqvTc#r=Ud5Ko)MbeHPQ|AufBFQMnr7fw> zE#9&3e(`o*v$gNmJ}0cK-B{6l;|+3nVX`C{-ouYeEy(M!?YA^~7nT0b3RS4mwp50x zHfy>0Aix9K0x>hZ@NYITGq~t>6oC`zgGETzV^UAc!TKWgfO#1k4s&IKNPK;PI=Lfc zk&8eC*=B^}FPEt4dk%lXl>hPVA0z|b78mj0E*K)%xBs7mPz9 ztuTxDAT3<;Vr88RG(Jbd*Kh$%xVzhythgyB*o###LfuK^TSQ}c&^zjaHzQ-VkSblK ztVT>3w4r zCXQT77ZIjQPls=Exq`?MO2w*E=}btuxlUkwN@&hohHn==LEW}r^3rXjOUE95Ql#d3 zO^NQk{Te=9buA5{D&6Q4xH~9a%9I5;3#dcWe%DBE#*y1zjIfMDH)!Uj(~qG&D=rp@ zkf;h3Jw7H2Tj6M^1O4SpwpUh3_cJ=^84-?4M3KW#6uGpjckrsQB*2WH=AtE4>8`Dw zrQuNjQf`isj>%_l)?&>nR3b##2!a__8;ifVVhwd6{9qvmaFRASdJ^1N3FygvqWuaNG9HVp2qmtWsgP z{RK0`U~M4dj2w)9(vl2C+MmqOiv?u#uo+)`hJ^;D=*q}1s?tHo$pr&K%`&Hh+=KG;J%nGtoY$T)_(6 zDdi|{kZ~+2x`8;|xiv*Ceg5`lFOqjZ&bB8_w4q!|Y&T~L-L#gl4?&4e6P6me;?Sos zE=>--a%TMPwh0l26HZto4O=rlbr7);zDwK7D>&_OXbzyu!I{+}r@Rz!QR<@9mbgrC zIfN2j7Mo759FOnl=1`868xcR-#@_Vl8xnacZDhTW;=Q}*ghT}UdZZkPL#E3MpO7xM zsf6?ESsEzaACy#c60(A)wsqQ#3`!?NOer+yHsyhB#BNqPqKiZ@gzTb7IW^)?&dy3{ zJsI6^zgn5t+GLDic&D5)R;+j;-XrqmQYY4x_(B4)9RcQFF@rvy?VWT| zlwxviovD_vaJA>oJBJ|WJa)%bc_Gv4zU%R~YkZgEJ{$8sz+=|SdtF|mx7jQ3 zyo{%$*UNv6UIO=|m+^`c7A~PVK(O@B9h2n!9+5y{C8-ck_o|i+kpG5|{-R zfxW>2pa~oYP6cbgTfy7Gd%%PViDEI&;qlIVVzcbAA|7l*X8Vd>EOv2knt$=Yu~1~Z z?(!y1>`bwKNxb%KHqBv8=^UIK$D>f(LiC9fc~3T*_jcVi)k!GA_K}Sz9e6R%YXJL#lfm0S29&_Zz++$-{0o>s zTkQ>w0_(s=a5=aaJPp1HehMZ|^t=V&NYDa$z$M@&@M-Wx@Llj*Fnu@AI}n@<-T~eV z?gm5PN8rz335|awSOeY(E&`W>+ra0*m%uCFk6`*__zjK&=YkX{fjhv{;3e=YuwZx3 zI{_rXRp3+LtKi4rk6_O!o_8X65BL!HEciAU1@op-UeE!q27})cM?*q4h&w;Ok--0DGJZ}ZK5NrmwgCX!Lm@|_$1qpBo_y~9eya0X< z8j!nX;B3$Xt_JsjA@I-Ok6_szp4Scf!RNvE!0*5kI@b!&2Hp?u0WW|ZVA5>QI~be; z3gCM15O@LX1XJdC-r-;a*b43f+rW>&e}ed2&szoB!DZl1@EjNcQ|5Wz(I5$K0bc>X z2m8%OcEBd^G4KNT4cL7F{0DJxI5+{E0a`!;ybs(7o(3<28GCx(NuU#42_6RD0KWk9 z7t)TP6I==&0RI3cpkxjOEuatF1U?Ub1ST%V51ay4f^)#TKo(pEZUA?H2f+*ARWNyp z=j{)U1Sf!1U@f=+ya)7xzX4Z(8^EpLHh~+#)8PBySD*n! z(+JK0-Qa!Te(){uGWa8yAE&>8)4@AH5!?hG122JJg4o`kHyi8&mVxs?FSrB@fXBes zz>mPs!7lsIE?^co5}XAt0BNulTn;`0z5-qc)AmJYgC1}*7y`TQM|*-c@DcDl_yyR1 zf9eaa0?&ZogG1ipdG7}O;92lfu;>8l4K4zAg0F&KgJ}m+U$6$G!FAwq@J;Yb5I=}^ z1l`~|@Cf(^@SmXZV9#p?XM%Tv&EO93Y49!Z6EN)%>I}{T?*dtHE%+FC1Uv`60e%VQ z9_o3=gLi_9!DZk&@KNwA7y-Wp`yU3+K^}Y>{22TJ?B0l80>^_@-~zx+4c->;5pWmy z40sBB8EglygNcWG-eS-M-T{i>!{8zCO)v`fYC^ArGr_w-9$X3T0ndSNgV({Iz@A5V z-Z9`jkOkL)Pk_h4i{RH__hsl(feRIXaQ|tGx#vL3p@|Dfv%X55Vui(q_Ve zHgG8z0AB$=0)GOFmeV)DyFd}#03HV40y{zMG{zgS7dRTc16%~Qf{%a)!SmoH@UI}Y zg0SEO@J>(w*Ms}O^Wgj7*I7HNgxld1)l~_gKvVJU{VWX zKIjAYf$xL4Z>1jK1K=_63$X9G=udDZ_&oR*FnvAc2B(8=a1Hn@cnSOxEZTrvgEnv} zco6&m#LlBVz~TIi6=c8-;90N}Ouhi#f_H+e!E;~~%y}ESAG{rG1_R)m z;16Kp+ZngPQQ%x~5x5O}0lW-$eTU~A0nP#!gU^7M!K8P>Pw*aa4fr(pKA7|_Y$|XL zNP?@u&EQ_}IM@ch0e%VgcsDW$I>A-o3GmNACU6IU6`&1V3qB8i2)tJ63HAqPfjqbs zJP&q&X>HU6yc1jst_L3lUjqLIrX{c+!0Dg^WWkl-9`G>uGT07A!0*AdcF$V~4hJWI zbHRn+O7JQ00(ccn>VVH+Z_o%%18c#%K?Ym`ZUzs5FMyZ8tKdICL#OAx1)K!V1@8eD zfh)jA!Gqvg@B;WA*a7|kCM3xd>)z*z?I-m@Hy}`@G|%{nAT0-1;>K5 zpc7=lR&Xu23ET}H0MCN2fbW2p!Oy`Tz@!v)1^a^|z{%h&umP~3WK!8Y(+Fak!wAHnWDjHjRp z91G3>?*hHxVsJUQ5!?h%Lo0nouFS%S^6fB<0N_KX6=Y?EMz}&LZgCcaK@*U~qihMTb&6tr%Y~uYQ zVr0(F^4`*n8S>%>&4S z?>T=CF*%`Jc3TGc{G*vI0&Qz5Vt}UYtv0I-Tn}-Ui>8&Tc-f zuUO1xR=TyOS+gW9;q&rbj_Z69nT{m&>(1u6%#L?((kr!fX3ivmB6m^wE)5Oc$pj5| zTDf^=%#hRq4s+&grgquQ%QG~JaMxCA?pz7C29~Z&6=cn;b9p+~o$zMQ&QW*XcT9@k z`W)}5QeVml#U*jc&eOK6Om0l{rHgD=$h$>bRLrM>97yj)%k$?#fkTuhp*gg;f@CY!SN?AhViwiFEw;%fNXl1F~?Tf9Y! zDxFk-*JaXMI9Xij%gc#!W{^fNq}aiW{chD*cZ4RLe>Dt~JWC0XCkV;zAF<@KP4v^<1O%XU+1NXNz=RKFw`Y zHkWgg1v>p&-kB6Gt+wOD(xnoktha158+3yVA8Z2F4zXUx7-WNe%wh|-n7fEmK+)kA|DU-B_jXz^XPP(Y{8|$!i zsRR^RlYkM7V(_yCSzjsS)2G||os+cZbIHwNVFGPTNCZA z?O8_C-qr$p&Yi8DiF{9MH)@!3`jG)rRvXwbOP5B5;nnBvq7AX%eib2j`8reJ9clDl zAhZ4VuM;eg9JSR_7eqO?GP>I0nzRt)THYoNl$-BgQCm3d5;i`8JQ+wrUgV4%RWg9L z{KbZE!`OpS<{f%y*x3%ut%+R9Pt|hBrlOK7<&=`N27(9j3WUn`_NIze z!KC9cm+`ZX4rQ~PGQ|aBj;6YU{JXMMsa6)Tm$9z3m+SDdm}@di3bb`O^BSRSVh11W zGOrG1IT%RukVD27*e0!=iK>{St@bWUglen^ZyTNIi?*k21E=YU5Zx$c0oWu)poVg~ zh-g7)BLIOGRsER4Obd3$a&dLsiws~3tgmyxd}EPp zR;u4j?fk4vc;|D1unZBU_w*-=@tWQOlP)W6S`^-1GRC!tHXCpdKYsR-8bzG~NwAwmW zdvZo8nYW%=cAe77h*xcIzabqPXYY(km~3nH|LPT+*eQVusA5l`DsvFC!da8^JlK+TxJ z+}$WDG5a!p;-Mf19AHFWCfcmfrLp48fPPTvT5jjV53iR)ID*ZhR&~Q+jSL)gP;}zqpf*{R{YrjsV*VZwOSM{Rhq8&)$k-%i zd0pm!S~!tO2Ey8eS>+U?qnPE^;8wY%Gs!A^B1aEmp2iB_q)8Amc6igK@zlprXzMX~ zvP>FS0^cG#2Rvq(^mfUi$PN<8Cs?lMpg1l$?$FxI3jp4pdvb+RFC*y2zI3`Z%NxzD z5IMOPnYA7D!)ocuX1mf!S?HG)X89HcW4n5DKPe?>mHbjDT{jb|%ZY(hT2Dj8zEYo?(VuHnbN`_{-v1KFf% zhH}cqq_y9EHPUjSY+_OEC~{i69j)(}?HCRg;AT`iMg_Lzi)zPkXd5o79Zk4E&QWa; z2xAk9YDW{ude=;2tadbMjM_WGD#N?14Cu+r%}Iqhj9rMZ=apm`D_gxSZNHcg+boGe}p znM?O^p=^?=ma*=#8#gk6O|jyJvIuw=WS^on;JepeL0?|HqTZds0PORXQx_c=^fc8% z0Tx@kI(lWdF|#qt{$o1JQZ17Mv+>x`gG+B`uPr+VyRp8|o|$aXd_T#An>saXHZhGB zV~;G)UAiRN-bJlt38S4gfe8~f6T$rClDxHK6t!Ky6@La1lr>AsqQ3*q*Z`>02v-wH zMhrKP3PzG;_*R+gRm3$GznKG~kL9epTV6EFxptzfKH(DfvJh;lp?1G!W}G`@d&}mg z29x;8(l0_{)_z+}IdyQ1^lUW~nqY~IL%F=ZXa=XLWp5ci7?KR1Dq`k&p(N|(lV*+G z)-%Wkoud{y@=3buGYVJ`v>`$cG z&=9`(LDPJgpmR%WKG}tZz_rJny2Wdn5_5qrKyR@7jn=KN*iG`XvmxDuxv8I4$fuPp z9=1M${+syRjI4=?<-qqth+Ys`b@7=&i^+g~5t9Myn~oXqPG(G843VBzCT<(~CQh(w zl!?7Ey9I0tY6_0YFd1XK8pS-u*Qr?EuU zuuEl61z^Gwkms@S2SWL*feAKBETL98vxV1r~iYt*cyaha4akS5=Q4yqSL z#m{b_dj}jaj<6=x0}mWeNK@uhPpunN`cs&9=GIrbZD(uyme$@vm**SEk+oLCzg6qd z*jO(+7uebk#>7AT@Nq|A2xBYVtItwDi*d9V8+yFy+leOakV7|CQjR#Het{~Yj3XN> zji#;9ovrqCQhi48vZT>TM&H?T)n`;i1XHRLPpnsyIvvKu9wWbi*+Pxj|I2&zW5|>Q z{oA@xK0MZG>r}r(RmL#Is^9v3nVt+A-K{A;0Fh+RqaFiT5#ie$d~wK?=CH%Y9eg}R zvD#-`ecNdn(Ny*OwhKAl0vLglWb5~0lWbWy=gd(~gs0>FRNYN4%@GCLlzZ)^QL6nI z?l}hLc7qukQL@fbWnjj-Ng1ox8A&oWYLLEMD1h58wgHUQ=5P4~6JmS~n7_ujlzli3 zl=$vukPVuZDDq^htZnG-jvJvhj9F8$&uDtqKGarmE2qZtGJygGv72Y^Jb|^ks=}Cq zaIR=I!dU0A0`;}C2RBA;X7k5w2ASd3vK#Bioa1b@L-6KQv6~KUtx7p>P%~7B8}9sC z*-&JqsIyb{hQ+SpLI_SFaa!5v!ZncJ6-p(c{eKw7mE*qJ(0`{e_ zpfniLN0xqCZbLvAfIEj}v2Di zDz>hn;%Eq>+gcR2Fvm5EjjdcP;yQv{#x(1UNrTQ{%j>E1;m75)DcHdpOKnIvUU7y)V%VQf( zn#BB_TRr4}u|6S793Z!@q5?QKXXk=u&fy<^KpTbJwN`d=J7-RWpUi62Svn7MPkHR6q+as^+F z`?1B*7nlVLG^iYxr|OxFDbBT+&OEz*7&T(N1D zB@1Eef(3TIB;nmyljBTd#}+tJ_A0Am_4MP3-qkUecRHA;(BU**q>A)Y#aCXrF!HD= zz%U!t$f~rtPl|$KZ_O+nUpk#AOQ@ta;nK@@~=nW~`hZA`gnC7(&89ot=sZWX}1xB^quT-|d|8_mtE z{R~kH2&P#$L2!9LpgWag^sp{f6=nEwGUTciU<1B;>|tZds=jM_ms&{5RV?Ch(R`cb z2ykCcR_Rbmyl5c0u!Bx63zqZeR|U~Aec{3yKB6_2F0JM14A2D&szOMPDdc48RB4q? z-un>aZ};7WG8I!Fm&Dw;;*;lW3>LLne6^uw%&_kMl5sGJNtf z!nA3!M$K9u7C(!J>>RPUi;33G5hb-zLT+|opzQ+TF!fTEF5HsE##A{inLf%oYrrW( z-%a&0&IR1;+=bQY>C=O*g>Xz6W8qIIra#8`vBOkS07j&=rO z3LSKo*Qi1P&Ej!IiZVq{R0fpG-YauK)l1tLMg(#Zl`lmPI9Ywn)F{F=WW%DAWxR+A zRvv;1l?8Ddhx6xGM5HfsN{e@M*w+h|XCq3hTkMV2jp;-edcVS#VpiTwGgOp9wh79msHmD7Bk7QP?iotY`Isf( z$|UU^Scl09Q82TEifqJyRAH>hMtnAL9O;H?^ag$`IC3iCDO|RQiAPSA;&tU zs^q1AETp0hoVzm!tCO>90t*&|@?~;Vl<)URkt$l-s8i8g71eOd28L-B!k+7EXK2O@ z3uPiYzbbjekgv-jpA~IkE&;13ioYUKk)0ip7~4YG={O}TmzCme)^6komzfMz6q8p^ z%*&zS#0nI>GF!WjzANQL^9)bWk1lE%mXV}&3+DcDVCd^3xu+> z_FhF5irF5nPOIRkvGgkxOJ8QJPRnZ(7z51oMb`%;b#t? zlN)V!-8GZ-cHI@$&zRw-?pB(D4opG1TG%$0chl$-3l|1FS^T5HH!xPNFD80rwqEwM z>R$%qvKtZ=45F5J$c-huwX%daXHGd99nWRIXi?c2Qz4n!6wJS&q3mmAD^xop53^^N z!}#_-@>h1X>tE$%ueoz8{j6aUETWB*;h-AgUm4tA=bJv=p5iFz@~`kl#+3p?ICDcO zz9p@($P8fCEaz0VcPOm2_*%JzGnEc6_3W`n$gexgNxZppLvBuER=WFwzj(2RcOhjy z!1Ae{J=k~OO7Gsp#ioC=U&5V-GBqo(5?B?=Y+TD?;>8@>NaRJBqQa#4bO~$BOP5x9 zBG*i_Wv`xdJzM0IUsMQg4P|S13x-FfuTFHS4ez99`Z#rn%J!LKM>d(_7=y%TLfE~P zc-+WbE_#Kx&J8u|vZtCWGVO@-c}HsKD60LSurclD5pV;%P3(cDsb`@*}*@QQ_y#YbWw~ z4l40Zcc28$PxWvuPh<6j>!s^-#uztm*auQga({3|+4=Y;i))&VoG>Y~7L%Vnv<#~} zGiL_fnLk$4#NS?!&RS$F5!*tM* zzO<&YHn>?kZ~pv>pzdH&MfD|u8I{9w8tA9tT9y|w!%XpqE~+9IcgS)>iY-srM7x;# zb!Fj4tT`+ryS(WpdorXjiT3B(bLLd~o7wih`&K%K7yhiOsSf3z`thxT0((>yX}N6| z6@6pTRh5HMGOTf>g>3QrvqXDjj!PCQUAq_`D;%xt=>GKFxlz7bste~@!?mFtF5`*@ zlb`73;1a(X%*;`|dGi7x%t|MdEs-r(DigK58mEfZmCE?q#d$s17f3Ex4~@5QVZh&C zeN#`@{5aWEj%HqS2&@{1)^Qgsu&+Uge?HmE#rkPAgAjA;WzuKg zSzl=gJNr`0{URnK*X825B&aSM_(MktWjNjm$`)xCJUW(c?Z>x$;e zke7W#IlUQae|XZ~5rB#0%HKhvj+kL8L87gxJLr!wUoFb$t>Pm4bV#^0>Jxc-l}7q^OCN42UUSse$b@cbsptV zR#%kMsW?1uk3Ml~mEB!#enGsPq;Ue@-M-~g*Te3*spdz*Tkeag>1*zdQD385yNoTl z((KKd3uokXu$**q2XM`jgyE_!mA-8j@-|gcUbm*@5*$5HUptg}KTHmWR2&{R#XFR~f6$=ab*?+6D-ueaC?fJ#(j!o<9mSoxK!ICZM*VWMU!H>JDD} zV39ytA#m_ZBqGT?j?;!XyMtZINi*49Zjw2h`vcZ6q20i``vvUPuOSFypRKJiGy+9n zX()pw%o%1q`sLCKCAB=AUXft3($r*9(J+PX>}JVqJt9)<=qna3;Mn_F$t~?!-Zp7L zH=yF!y)jW_w(YVt!Y1e1Bah(1#{#lV|6QKToyH!ty}7KRVZ9#zZftF}PV?qfIyJ5} zoZf4%Dvy=Cp<~%|8gHE(b(AoN^f~7y=RX?#@Fsyqq>=ehV~e|bsL|Zu^~R&wdzB75 ztX6KCk6*AxVW)S*5#tW;-y3!O@ozXzqq`5Rv2omSH<*)}#~ky2s-pJ>B3Pk|$4w`xl8NhNb?7Czj0LVmhck&(bH*x^GViLhsR*GQJnXQ_Y$C(? z!dG3-%J9nfMyK8UhK&yBr+mNxW0i!IO>-T7_&7tpv9wJyk1K5n>8HKVK6OiD#pBRJ z#|{(_l0yy|M{r+Ms(V3@)ka_rJg{DZMiDwSU8^0|vUY4LzLG76l}sZU?4uL)l?v|? z)CqBcxev3^%B(46bzij=VUNY!4=eq-W|HMFjjMfI5>q0&1nbSw^W{;OP1cNp_0Gwa zMpu6=d9;$L=2o?)EAy$kR~f%*4lP<#S)CwnB9e*b%E1R$CR2wW5rJ!SV)A6n9cwpD znR1#De$!`{F7@>Qc2$K{WbQv*v?vfli&xfXix=1OHIlRc{?Xp@!orI36^P7hs>7}3 zJ`ulB#iB*9YlL#G%CxOUi1n5=h-r0zIy{~~zmg|vh4KnY4IgWSHrhnbHFt%2M;GvewJK`;HOCH0gf()e03Vb#22n7_400+AIl$w+a^(<#C5La#XuHG;PV+=u{OO6Klqdu)V}mN7zB9AN%YR<=hyaf=r%l*dR)3+BEmL zRxb1=8?mzSS!Z7)nmTnumYGoA_TJrgvt^{qXkmSUmR?!ev8v4@+xZ)N)?>PEJ-zD3?1by=oP z$}9cSX6C6^*tFX#XgI5rw0F(>2lE5B;^-ANV}-Q|>uN=H;PRC?I)Sed#3nOwVtblO zVZ_SeIaZJocIBa6R-0sPKz1LZZbOlaGwkArE`zbmqDi<{TxS=sVE%8QKhR+M=4$!27^QO!;mE9rp(%bh1?sVd*g8oOJrWUj|P3JaA}r>fKD1Z!=x zW^pl87j-eOV{lSHvYI@(E1&AzB-2bzH?ZK%!CjV%TH9GQ>a^E)gxu``e-nPuBHf&0 zVIK{d)N?QPEg)96BYnB%g&xSnm)&-IH$^zM`Itn#=)Uh905Ol zVp)(lQZ`S!IDE_(Jvp1AS1e4LByMs@olQzMLK9HBZ|^&}R~qG_`Bqma8;K+XPUb8S z?HqLTcbCJl&FQvq>}*kP&@5e1vo)172V9M-V;0rp zZF;kbNm$>N*LiZhD2})nWV1-m7yHk;wl5ht?|=wTpI&xll~{Iw%+92!VQs>hGp!Q> ztis41k_p5)yR7VP7{Z>klKmn>8sV8WOEx(S<7L;#>~PSnI16YRpBGKd$4T6}G_O@! zdb3&jpD-aKFBfy)52LHG;pMIjbL%eG_9WVklk^>Prh2v9&ogUF3&V;T7iV zBe)A;g1{yoH%K8V3gt7V&a`Qp^NE~cjI0%hUvw5`m|8h)5ge=BeffH|o9P(Vz~I<~ zQ6Rz!bBHyEe#JF=dLq^v39gsZ-7Fy&ol6Ti>ZzdvJ!k)|{FC{k{NyrIlZU2-|pX>VV*(mk(O*RqNMld_R3QcHz) z+s$UnPOMc~?BC`@dL~Y^2NX>34f!q0%_ceDF}k?O;Ty9Lywbe03a6yz$W7YrH?K1< z%ri9awi_PnSDqzbKf1WMZapf4-*aVepKY~G>ys?TF4s4kX3wTn>yt&k)tj#G${FnP?)xfpctg~rZ1m~IIczqyw|m~EEtuOggqX6T z&1fZJ5hmN3*jn(bD&YweBx91b zipvd7?#)fBUsu>ysO8gD@_MRuM1~EM;0)!OGDY|yb!j?+wr0Q4(Omr|cbyZ0698)T zpn%LvM~<92HAh1@3gsC-{4{Z*d$&kl0j#>M3%$arCvJk!+oQx@h5zAK1TjLw4tksh z=cvO_@>VbUu;MB%B;QyHu^4QSipkNB@_A{K@#M);7d12J%ZB~#l!Tm8V$gKglF5m- zK%wmslS)T(*kspT8@zjWF`qs6_%z*L|Na+pV3%E2dmo%$ZlfR4UPryjaxNy`ae&WV zdO2_{_!M{zOd#DjXaipcBj7*5f?dfEw170Y65I=hzz@Oiz?>N0VWIIscaz_p;kgTeZzPrHz9!ydSapYx6K zgYD)o=qJw-4|Z4iHRB?Fu-W`Y#e=;y{a~y4)A**GB9+U$X&;a>OL>meXG!}geU?a) zFDy5I!F=Pmh#&FIU(iq7#19smzsh`%4&-%AAg^QfS;`~vh5hoU`D?j%r5~7b?-9rE zczu>UPSEEDo=?8%3qLY&TonJ3i-Km?iJw|$4&UMG{VoxyM&RyV1CYTZ|fEEb3EH8!q1gu-#UK# z)$!ZEj^A7A_#IHk@4z~K2dSUbi9gdkx-=TH<4vX+} z?c5mQ=khzej$cz9za#4SEvw^qWF0?e7f9LoGyHSqJleWN^6Z#8e#h4F6I(+5qVhZ5 zdPVx3P{;4Y2tR3fY4?-r_?=wG@018X$Cp#<_%+w@TVBWSv^st(>iDg!eaN4qrKuXC^b9dEkh30E1Wl6HAJ zclmX0?$`M_y4G)HxTv&h#dYp34fiYV_5OnXE{)1xi9a4U7p7KtR}L3$tX~&C>Ngly z{blW-fk~Z{+fg2zjS!VYEw?}ag@2N+jNz5Z#BmcFsnWd`-K=3nuh$AA?rr$z#t0+f zN`&bjBisP~gMlzZJP!wGNk{%ha2t(q7eA4e1|ZM%{^Epb3WRG8JlBgC^lKqb8_0oD zMEri-1|r-CBivlNLlJ(%5pFL0NQB=gZX$>-%$xa@MTUCuWW4DE{KlH>ueV8QvA4zl zZ=$DihyG7{lDJ?dR(BD^D>>;85S!uDIgx;aF*jYmVi_&6~ z3H=MD->UR)lx|V_w@Qm$DB&j|cl^f0h7^4$i(`n98OQ7CL${_w(5kZ6F6qpdSo?K`;b{ z!3Y=yuKpf7y`pU!jI_hD8JINWsHb}CeRF8fJ?WH z=Nu@3elP$A!4Mb*F5C#uqd;^;1Be6J-)IIdObgF#0XoNX3G{=3fV+ergdPIJU?ku- z%CiTfWp5-7nm{vX0d2tLmE*ajbU(iXU=R#}VK4$lfj5z~KpZrIX5i9rzp}UDo}+%- z0{%IkOQ0VNfI%<>B;GK;BVZJGyIHpee&ay)XPQ9^Xaf>H$8QPrg8_9DcljHH9s#^&U)^R_kc7dmMLF`ubmwqSt->q~;=}#)1Rr)cdb4ow0^hHW8^iHL>D*dd|?^Ak*((hOLM@oM{>3>kVq_p&R;lJ`R_I0H% zRsRnueVNi%EB!&Ghm^it>8~oS@nYXq`bzbGRcTEprgn~ZjrxC1{jXK}Q%Y+)#*{DK zht>Z%^}k+ewX=*~qh2xPvv;HVD<8d^lvcaayIE=FlXr{K$_MYGN^3nmm7AE>%ezhe zwI1H>N^3d2k14I?@KnxYnveH!_1AQ~0j1S0^;9ln8qWKK`s=TEkJ9(qU+;dUA5>c9 zIQFp8>K=PU=}&8TwM)H+lzvM6HD2r)rL~=6UsPJtiG5k=N9}LyD@s46^w*SrQt59i zt@*@WRQmJk|MyC3KZ|`&X)QDQFjdd7aD^jFpY$4aXni2ak&%7@qwmDYY2`@YiOu)ndFlvceF z+phGt)L(x+%i76kvA8CAT2X92_LHp||-(o5Up4KDwfck4aV=8x^ z@-?P%?(Nj{v>$k{Dy{v@oMn*y`4LS|+aad?*!!u5ze@dort}Au{#T_-O8=YE?^F8c zN^e$L>>0_gPw8JOy-DeRS6cO|_ba8}ul~PQ`ZA?|uk^J_|3T?~rT;@|)id6IDy@3N z`=io#X!t)VJ)rcTmA+SLZx>sB?Wf)@N^3v!c2!#YjW! zFV#DK{}R0<{YTCY?aK3mK;|Gv@mu~AZDarH^&bgQS+^G4+CUDJKtC7&gJ1{@gAp(a z93MnCG=Mm00?xge=N8Zga-anI!2lQpLtq$4_!0db7y`pU!j14d3cTIO6Np=!-zLxuT0k4f0r4yG+Ybi7pt^~>{0%`5gAp(ayh)@9 z;=s+#Wd79#Y>euEbNH1&e;|zXmn4w>u@w0bdZW@CmF`mdJxX^geSy*`rO#FRLZ#1E zx<~2Ll};<&taPu^$0?mr`e>!IN*|cJs3ZO6S#o52XuAPgT08^hBlAj)_GdTK|+)XwnKE{UmK;Hg~^({bGUfX3Hx+bb#Ep!r{-^cJCy#g(xRtC zUevCO9ijgH>ffdGjY_vGt#(taRcW;wWA9X2=S{J9D6Mu?>^!A!)%4aYeVfv6Ra))R z*f~n8-5Oh?^j#W$mC_$q`ZT2nls;MMyOlmk=}#zqywdk5eXP>=D}AKWpH#X@X&G1G zTkKG!)$WTOqVz-R{}!bmR(gM>-TZ8c(vPVBLZ#JijLlQ}G4-FV^pi?YSK7_bCM&IW zW=z-Zy{9$2oKKeaenx4vOFcI~Q#;q6pQ&B!J+I+^XMepfDy??6_a&wOUH!kT^e>eD zTcv-c^xrA{Tcy9EwA$(3SCv*f+Uy=dn)bbXZtDrPwIbw(mzuAV5LWtZdCeZrI#uFW2KK#`X@@Cp!6$BpQ7|m zrB^8Zs?ujD{hHEeDedNK>y-Yf`fpJBXG*_K>3>!FT}rFn6>C#k^-!!+Y1JFCZl&FP zEvdB1K`f!PwtMW|O1t^m+m%*59cxiqgXa+5y4dg%x^n(E~2!_Bg7y+ZeSrbxs8Mop<^qF&S=2`gP26CVT`oRDg z1VdmLNca)`mFH2OyJ&93OtzI0OFttG=mo4@@nHbr*w(melP$A z!4Mb*BVZJG6G;oiK@)IkxZh^nT0k4f1^i1q_k)3e+aS+FU>J;mQQ+-n(`?{34w^u- zy0!4z26CVT`oRE@ya)Lm0>fZL-Nb#AXKxZ^264~?nn4R_136Fv{XoJG@H+^Glpf}H zM4w0XR|b{_!2iBInngB*-U#@O6_xH%`frr(R{Bz3P-LK&bO5dpTW~FaZ`eLP> z{rO&{o&EU%rJenGnbOYw{E*Vl{=8c0+co`bl>V5~A5r=)r9Y~)vp;WBdO-a@ru5xP z4=DW!rSDey9;NSB`hKOKQ2LWfKdrR0KVMh+)9U}4(hn)UQ|X75-l4R!KYyaMvp;{V z^rISnMCr$r{*lto{`{fR&i?#?($4<;zS2)?{O>C5?9YEt+S#AqQTjOz|B}+q{@kwg z7uEk;N`Fb|Zz}y|rN5!{-zxoerTYxplI z{SBqRsPs3L{({oZ{(N3(XMaAc^mjD;lS==+(vKxvsWqY?Ahy-cJ}NIN;`Y@W~H4yd%Mz}{f&KG>0Ok* zSLt1qen9C7NCY)WRq4l-p04!gm7byWh5U*=EH=}w z@I>^O*n3CuTmBQRWB&+N^H1!OzyAH-424{#u~hKn|2ZKNtXmU6exMmC{b%{#t3LZ>P|AB)-$Pzf*swZ~vgQ)3^Vr^lO^_pOkj` zRyw7m=k)C^N;`cUQ`+g@ zRody-KWlnUzy48ar(gd=X{TR*ue8&zzg61l*WW1Z^y|MX?b+YhFO+ur_2)`E{ray; zJAL>wXnF5NWHAPsK;6G-b$rFIo`0RF|CL^%zh9#=u0Aq0g!T9Mb88@I90*^UK?`UD zIZy)qU;qq)AutR^z$lP5X#jE11e!q$XahM=0{vhB41ysr3`W2x5Ls^kanJ;sK?`UD zIZy)qU;qq)A>exbFwfFYW|EG`_1QcN-JtYZrT0+!ETv~DeWud0m0qLt9Hmz)Jy+>7 zl%A*b=}OO6dX>@(lwPUyo=UG!dZE&%DZNPP@NZN}sIsUP_;&^iriyR64Ho z2}Y;r9VbAF1?#N-tCTAf*pi`e3CS zl|Dr2!<0T$=|h!1OzA_EZdCeUr4Lv7Af=m>K2Yf+ls-V|WlFzA=_8fiU+JTi-cRYH zmEKqBW0c-U>0_1NTj}GJjw^k<(o2;-LFv7eK2hl^)k=thdh37 zgikXFU+eF`s=WV`=}28%8wsCI(tefUS?H6M&hjkw!2*6oP8e4FKjELqn{#jB`7aq~ zCErsu-$gtN-K_LNo?SU6$}@0(t{l$&zoHz=HQznSM9OiR(!vKR$J=%@OWxi`aF_c3 ze+jbx>)&5F@K+A}l>>j}!2gdqAmi8|hA=~m8CPVV^e-7t^931$TRhQSCJ1s;Y(1Binr&s~XAO?%_Kxi7H^ zG=ml(@1*8H3G{;jFbIagFc<-&KrY&o^C)r91e!q$XahM=0{vhB41ysr3`W2xkTs|V z5C=`58MJ^lkOL*q4+g*>7y`p!1dIZ2I`KgqG=XN&0@^?hlt4ci0E1u%41*Cc3OptY z4ImDhKr?6oZ6F6q|Bt=50C%g(+qcuEE!IMcOM&3trnnPaN+GyIs07~F$91a}DT@IC9~eoEMHIdtZQ{@;GHb6wAzeP^w0zb)&|PUt8lrL0txs!~(x zN<&G^p!t=wl2NisPRT0;rKpsYvQkm1N=>ON4JC+uN=YjjC9C9=yi!n#N=Ydz6{V`w zl)BPT65Tbwl2$TGR>>)OrJxj*l2TSGN>!;Tb)}&sX4L#jTFEF`C8y+-f>KmUN?EBW zRi&oXm4=d-N%JddC8K1OoRU`xN>M2(Wu>B2m6}pl8cJej&99`DjFMGyN?s`_MWv*a zm5NeTYD!&cDB&M8Oetw4qhytwl2-~!Q7I{9rJ_`ono?I9N@7;cucVcXl2vj_UMVO= zrKFUVic(c-N?mCviP<#2l2$TGR>>)OrJxj*l2TSGN>!;Tb)}(%4{IqUtz?v}l2h_Z zK`AOFrL0txs!~(xN<&HLLr+Qxw}Q2GKiA*n7~NL`uLF;O*M-N!>%sfN>%#-#4dC$a z$A;x?7-`=K-j((~@NV$N@Lq6Vct3cPNdHaY;k4)Aq3~w#Ab4~50C)>{A9zc+AG{Sj z4&E9rz}vth;cem3@OJQ6czbw%cn5eGyd%6jyc0YM-WlE#-US{E=i$BKe((UeKfDJ# z0G?jsayVWC;ThmT@U-+F3{MB|3eO1-f#-sU!ad;d{cAYi7J!Gr^TWg8`QQ<78XgJH z3y*^5feY~5@a}N!thD( zBJj!ZqVOs3V(_W(;_zv(&$rXzC1^hbUJ^bNUIji2UKKtYUJX76UL8IcUIRW4&cbDQ zP569xE%*X>ZTLcX9rz-6TlivlJNO^)_V6X}4)CS$j__shLGb19!SEIEA@G&(q3~7k zVer-P;qW!^5pV@Q622Bb3ce0L8onMr2EGA47QPWa4!#LK9=;ha!MDICz_-FD!nZ}{ zza2h__B-H{;XC0|;D5rW!gs-^!BzNl_-@$O+rQv5Xuk(O6TTNd3%(CN8@?Yt2YvuP z7k&^v4}J)K9DW#n0)7MzpAWUd@58ghAHZ|KAHs{kAHj>lADh|#PvFI9 z{}f&v{tR9MZoo^zpTnEMU%;EgU&33!U%^|#U&Fq?e*$wF-_s-)g8BVTazU8i3njZYmy=*WlHFk5Pd*FtesU=oPfe}_^Edw{w}uyhw}BUgi||75f$+j`8OEEE7s7Z` z@*Ws(O5O|OP02^$C7OSe)FH7X{21*V_vABhPugFAd%-Wl8TeJWH~b#FG`tDt<1%nx zcv(37f1rf%XgRnKyga-SyaK!-ydt~-%z2tzALcww`hKtq{nw*?Rd`((4@|BDukQZM zzX?1rxi;-t+Sh{Dgx7@Eg0t}2u#fjTu#X4VQF0CXa~&mDhq;cDtHE4H$yH&lqvR?u z*HLn1nCmFH63lg!ToL9vN^)K#xQ>!5(9U&~Tps2+nsEJc9ZfiYxQ>#`(Vy!kxh%|e zlUxSox=Hqixo(mfnCm9l3*MIc^@O*Bmx8y4r-65Xr-pZgpKAV1>;z9m`_6C|co(=c zoQFHX{oo|rAGS{nfIHGY5bgjEf)nsy*vDsA_}AvQxwcqsfcyc_%zJPiI39uEHi zkAT02N5bF1qu_7h0{jiUJNz{~8vY6%1AhsRg};Eu!Jor>z}%M-d%_Lc_kurz_l7@( z_kllw_l3`b_k%x%_lG}%4}d>}$HO1MT*t}xVeZ?>f58XQ|8DqTxC$Qv-vu8E{}Vn8 zz7swiz5_l2z8yXiz70MKz7;+iz6Cx8z8O9iz6m}Kz7akiz5y=5*TW~k*TE;k*TN^k z75HTM8Tb_V8u(QBYWOtxD)@BxO85-;3iwR;a+u?uybL~@_DkV&;7j0h;eWvA!5712 z_#*gxnDZoY0lYBn7s8xZZU3KO;rR&XU4rE%IWH5eH_3UMV7ro>*9o>e`3}oxzmi-B z3HCe5b&{YiNv@*=bxU%cC8%qX>o7sxlU%0>j!Tm3xb6GKu>D-;3667eceaP~Ajy3q z!FiG#MLXwFawN=omK*_d9wvvwoTtfQFz0b{H<er!jHkrz>mXA!%x6V!Zo-z{3M)#pMrgTKMnVy zo%fSH#o_z<@I7ky$~HVV4BzQ4tLg9>(69M-QvWx6?Uq(DN><4!d8MEfm6B3cDoRzU zDRrfxB((07l2$TGR>>)OrJxj*l2TSGN>!;Tb)}(9&fguz>xwH7S0JuHT!Fv70vd`Y zd|!VGbj-Wom(-UdDy-WEO{-VQzp-X1<1-T^)p z-VrXrJHaQyJHto9yTC;_4<7;dgO7vz!$*tT^O1r5f+$S-E2XY!C8K1OoRU`xN>M2( zWu>B2m6}pl8cIUjlv2`4M#(DSIOdgtQdCMxS*a*hrKZ%ChVs{68SxV13d9wND-c&; za#o<#M=oc)vX5K=+edDJ?ISn9_K~Y#`$!qKkGS1Fav|;Zk&9vb$n~&&g?ISnC_L19R`^dSl zedHgoedH3@K5`vwAGs3Fv;Wt^_K~Y$`^Yuo_IzY;zaR>e{z|E9TFEF`C8y+-f>KmU zN?EBWRi&oXm4=egHm8)dl2NisIF5OxpcIvoQdTNTRjDa;rJ+pDYbIV-T!FX(aRuTE z{Ph)R^^qqSuk0g_!}gK8VEf2DuzloF*goN;r;rrJxj*l2TSGN>!;Tb)}*F^;br`#JB=+1>y?C z6_}hAX!VgV7_aOjpTqW%*I@g|Td;lPW!OIQDr_HdyM5$++U+AB!1j^1Vf)A%uzke+ z?ISPIp40dgeB>k8KJqSXA9)?NkGuohN8W_(BVWSykxyXzNCUQyd=1-2UV-f+b=W@g zEo>io54Mkd1KUSFgzY1r!Fl%oQ`kQ86>J~*SlphEjO-soVbWhIbxkW7C9C9=yi!n# zN=Ydz6{V`wl)BPT658gJl2$TGRtd*3uN0J`Qc}uFMX4$^rLHuT$$8Dh>xwH7S0JuH zT!Fv70!_L1-DZy)JG zyM3e+Y#(ud`^b#6=QKVAABlcnGd1n@kzZJ!ePk-y?IQ`;KGGGokNm{^_K_KAw~us$ z?IYjO-#!xkzUEij?ITI%w~zctyM1I@+U+CV;XM1_4YrSThV3IMaeF>8a8MA1Nq?o( zHLYZntddjmNPkaNXq!_?TFEF`B^<}RQc#LYNhvE8rK;4Fy3$bo z`YR(|VqAf^0&xZ63QW!lwEDG8b$gnH#o`ED763W`^w}3&Qphx7$a0({3MG z0Je|J0^3J=!uApOw~zFqJ*V+0_{hAlpN}jK+ehYv?ITOU_K^&1ADIWXk1Pz^M|!~a zktJaJ$gHq^Bn|ud$YQX4WOmp-G8=3kSp>F^%n#?;|3zW@$b7JUWDaqAKGJV+5QRy9 zrPMX8WR$FuQ}RkdDJmtUtW=b$Qd8i0&xZY`UBvb5(kJ_R3H6Sj}^f$bw3!1j?%Vf)C+uzh4B*gmoXY#&({ zwvVg=+ebEr?IUZ$_K_@XA6X5yk8A?lN7jJtBdf!C_J38_KC%vMAK6gco{#k3HHgBb zzf$U&Rx(Of$tiiIpcIvoQdTNTRjDa;rJ*FW%_$|VWR$EDj$>XaC`F~Dl$DB7RccCI zX()gFl@Tv7u0ULYxB_tnCT9g&ePk!bEBii0&xZY`Uy=!&I+{p$YqRI_L0+J`^XuvedI#eK5{l}A2}7akDLeFN6N5$ z?IR`FK5_zVA2|uOk6Z!UN6v-w?ElHIedILQK5~(`Js%ko`^e=iFHP}8OBhSM2kveQ2c@wseybjw(9)s;8Z^8DF zM`8QO8?b%k8Q4DZGHf4t1-6eo0^3KP5Vz+eV}^w|`^cxTeWYXOw(mg__K`1Xw~u@R+edze?IUitk91&p_L1-CZy)&_wvT)T z+eh5rKJpFiIgL-@`u`VEf32uzlof*go^<$lS1fWO~>>(gU`S%mmv<=7sGev%vO|>0tZF!mxd0HrPHg zGi)DO0Je`z1=~mFfbAo5!S<0kVf)B5uzh5H*gmolY#&(=wvWsJ+egx{eWW{VAL$0$ zM`ncWBeTQyk!fN3$ULxpBn8_?riSe!^TGC!S;g)7$e`ij!NsJ%QtFykGD=p-DS4%! z6qS-vRw_zWsVQ}(p(Nx`DJ89Bl&lhtV_qpJMWv*am5NeTYD!&cC=)%o<2U09#1)7u z5LaM|sX(ibtiyO^AL#|#M^=OFBTK{fkyT;)$da&qWEI#xvLJ~b4z`c&VEf4Suzh4}*gmp8Y#(ud`^bj0 z+edbQ?ISzE_K_THAK8@eGwdT9(QY5v0Je{80ozA5hwURf!uFAEVf)B>uzjR2Y#-Sf zwvX%r+efy9?IZnR`^aXnePm0=AC~hwUT#!uFA&uzh3{Y#-SNwvP;g z?IU}@_L2Qy`^f&{_IzYa>?2dmbsTSKT!FX(aRsLI3bgvjA&gh{kwano$dRypwwVf)Cruzloo*gkR+Y#%up zwvQYS+ec1>?IVZ5_K~w;`^XWnedHk6K5{Hi0#i%{T7BdW#w+{CZLodhX4pP*9c&*Nm~8&{H};W> zX}6DD1lvb0gY6?%!1j>}Y#+HEwvXHd+egZOHTn^huu7T|%H^BChOJV!Sov?jm0LRBZa)H|0 z^O1fd!VgU+{gqPJw31P>N>0fu1*NEzl(JG$s!C0%D-9)~-@K%hw31P>N;r;rrJxj* zl2TSGN>!;Tb)}(9F&A9Cp>YM`3d9wND=^UtwED<>j9>PV2VwijZedGz)KJp@L zA9)tGkK6^@NA7{`BTvHikw;OoWzZCh-iPfYU%`3y|2x<|@&#-k z`CQzdj|>|XL}AijDRoUN86~Ual)O?&NSF|QPq zqEb@IN=2zEHKndJlqu$di#If`KwN>i0&xW^2oJ~A_GADI!hkGQ{mBuRTt<5TdFuCRS%R@grB1M9bs zbfeuq(jB&sOb^>frh)Av3D`c8g6$(eu|E6AEVSE4ri1MxQ^EF;8DRU!)UbV|3!G>F ze`bC5k&d+6N2V3G=Od$IADQSi6TcZ(Ag(}Mfw%&HeFa*5WPZjg`$%utKGFlWkMxA? zBa6WHk=bGUh}-QW3(;;L$-wrJ#bEo$az3g$kMQV zWKMB=KGJV=cyKZ4uavr`m5h>Aa!Ot)C`F~Dl$DB7RccCIX($OfR7y!J86~TPM2(Wu>B2m6}pl8p>aPWyDL2D-c&8u0ULY$ytF`AL+w*Wgl4;wvTKI+ecP|?IY{J z_L0qD`-t1^BYkPNk8B3pN7jPvBP+r75%;%`tU`NE<5PG(vNCKRSs%8KtPR^o)`jgO zE5i1XHDUY6MzDQkJ=i|70c;=H1h$X7m~1|OvX5*?yM1H}*gmp4Y#-SewvVg;=h^=? zVEafGwvXh*?fJ;y*hePkr5LX(u0ULYxB~yx6=?O5Eg7%uBfG%%k=YuG+A2)2*(gY6?jVf)As*gi5CwvXgt`^avvePj%5AL$R8 zB=(X2>U%@H^Kk{@3d9wdoE2#Gks}$e>?3=__K|&I`^f&VedIvcK5{5*A91^VgK5`gr9~lSRN234!$U$mv&qv0@J~BBk#duwD z1>y?C75J~NK&y{j#rS0(xeT_C`~$X+Tm;)k&WG(IXT$c9GhqA3>9Bp|WY|7(B5WTy z1-6fz3fo7{gY6?1!uFAiVf)C{uzlom*gkS5Y#+G*wvSv2+ec1=?IUNw_K_=K`^dSl zeWU{0M=pWwBPYQ2k&|Hi$T_fmy?C6_}hA zX!VgB8L#Xkx5D<3`(gXYON4JD!9yrh)0l2NisIF5OxpcIvoQdTNTRjDa;rJ+pDYbIV-T!FX(aRuTE{Ph)R z^^vz2uk0i5!S<0CVf)CFuzlnW*go9kBk$6l z)A*$QN_OVIceRhaNxOaI9oRndGHf4t9k!3uVf)BSuzln;*go<;Y#(_FwvTjS`|Kmn z(QY4k9=4A>3)@Fth3zA6!+G}qBiKGtgY6?9h}-j#L9vhg^%q>c#JB=+1>y?C6_{uR zT7Bdz#w+{CFR*>2%T&$(9>hNKJ?-|9FJSw~r?7p*?e>wWS)P65JNny4euV8KKg0GB z_qUI9WO??HsbKp^2iQLHIm@$;OhdbU?^5`$$sUo{tP28y;Lt`YWZbX(gj%m7J1S z3QAEaDP^UiRF#@iR~kw}4wX{UN=C^l;W*}%f>KmUN?EBWRi&oXm4-6WlRJJhu0ULY zxB_tnrkDz}`pA5YSN4&4VEf4Iuzh5H*gi57Y#*5(wvV{oJ~B7$_L1pe`^ZADePlt{ zKH~oNkr`>vX?zOLM^dnTWLDTd(hatc%naK{W`XS^U19sk0z}*gi5BY#*6c+@6mNk9}l{xsKxvjVlmWAg;ia zUV&C0S)TFAKC%*QA6XZ+kE{XPM^=FCBP+x9ku_oa$Xc*{WJTCM(i66iECbs|+}}R3 z3hnlh3~V1+6t<5n1=~l~hV3J(!S<2GVf)C^uzjRAY#&(;wvQ|c+ea3I?IY{J_K_uE z`^f6BeIyIpM^=UHBkRHTkzTNUWLa^0K2nH%WJ;l_IwukK_Tf_E|ZDIS!MzDQk0Bj!_4BJOGgY6^h!}gJ_VEf1x zuzh3$*glen?ISyi+w+kjckMYVratLf6 z84ue>#=-WHVX%E<6l@>a9k!3`0ozCRg6$*w!1j@YVf%>t+eZ$fJ*V+0d|$IKY#-SZ zwvP;j?IZic_K_lN9~lALM@GZ;ks+{sWH@XeDZuuTU19skfv|mKENmYc1KURqh3zA| z!Fl$7By1nq8@7)eAa2h`M#nxf(Q77tGp;~ffw%&31^)U9wED=2j92!NBVhZ;@vwd5 zOxQkh0c;<+7`Bg`1KUSVhwUS$!S<1pVf)CDuzloc*gkSBY#%uVwvU_v+ea>f?IR`F zK5`OlA2}bkkDLwLM-GGSBNxK=XOQUw^^HON=WJS0JuHT!D#Jpw&mNW4yAD+ymQ3Zinq7|A6fym%{du zDr_HdyM5#q+U+AZ!uFBNVf)DSuzke+?IU;4ZXfw4Y#+G|wvXHm+efa2?ISnA_K_=K z`^aUmedJcyK5{i|ANdz-AGraxk5pj$$R)6SPuUFH$D`l~UKVl2NisPRT0;rKpsYvQkm1N=>ON4JDyxIw>WsWR$EDj$>XaC`F~D zl$DB7RccCIX($stx#KtE3d9wND-c&;im5=WkG#xyWgmG6wvW67+ed1!edK=FKJo-? zA9)eBkGu)nNA82|BhSM2kyl~+$m_6u8Ciamj<~oiyG_F8gfw%%wdIeg2K<`$z+}k9-5$M}CFvBk#lZk*{F;h}-QW zpU`d}`53m3`~urYzJ~21?r$IYiFW(Q&#-;uGuS@zE^Ht99=4Bs1lvcxfbAn+!uF9* zVf)CBuzlnM*go&$P&NSF|QPqqEb@I zN=2zEHKndJlqvl>jJH3oKwN>i0{`t52;nH{!|bb;+7Gr;x{_qUI9raj00Ob6RXW`XS^v%>a~X<_@w9I$<4 zM%X?w6>J|#!}gJ>Vf)CuuzjQlY#&L%_K~?^`$$LFJ~A_GADIo#v;XtJ_K_rPADL6! zo{x-)edNFW_7LxXT!FX(aRnw@1vDg0@R3y*uk0hs!S<0QVf)A;uzh4D*gmopY#(vE zePm(U?IZKU_K_uE`^f6BeZ>9kBTLh6A6XT)k1Pw@M;3tXBP+u8kzTNUWI@XaC`F~Dl$DB7 zRccCIX(*HJf{9lYS0JuHT!FX(e@g{4Bu(&vjwA)8Epxr*w7tXW) zyVBo2G7`3rY^46}`N;558?PBuVNzcybxbQ6C9C9=yi!n#N=Ydz6{V`wl)BPT658gJ zl2$TGRtd*3uN0J`Qc}uFMX4$^rLHuTzvbeH7aCU}u0ULYxB`={0veJg_{f%wXZDe; zVf)C=uzjRIY#$j8+ebEq?IUitj|`#RJ~9}#kL&{5M|OhkBkpe>*_QU4#wSfCbFh76 z2iQI`2)2)G1=~kN?OS%StT6Dyi!n#N=Ydz6{V`wl)BPTCffxQuPClST!FX(aRvUC3TQ~0;3H#_ z&F3HXkrA+cWISvi*%!8t4210?Lty)e+wCK}(rzEw4YrT$1=~mVgY6^kZyy;>drsq% z_A5CQwvP;g?IQ=k_K|&H`^X5!Z~MqN+U+9+*gi56wvUX4?IUAh`^f&VePkGHAK4wY zkBoxtBYVR3k->1D{ofn5j|_nABYTM3^O61|*IFm2!lb@Z>X=qCN><4!d8MEfm6B3c zDoRzUDRrfxB(%*bC9PzXtP+l6UMVO=rKFUVic(c-N?mCvf6K)YFEp+|T!FX(aRnw@ z1zLS%AI4w%$Qal@vM+2OIT*H&jDqbWN5b|Ix7$Y!qTN1n1Z*GKAGVK-gzY2lZy(v6 z_MFBiO(u_m?IYu0`^aIiePnOgKC%~VA2}4Zj~oKqN5;eUkv(Ah$N{i@WKY;WvL9?8 zDZuuTB5WTS3)@Eyg!AnG(Xf5waM(UFTHKzG3>v%cxN>0fu1*NEz zl(JG$s!C0%D-9)~ZB8j^C8K1Oa2)eWK`AOFrL0txs!~(xN<*1!7figOxB_tn;tIqS z_**KVA!)+%k@Fa@>?0-EK5`6fAGs8^kDLJ8N6v)pBW|~k{DXG;$SJUWBxwPjrK4~&}JZvAi5Vnt;3fo6chwUS0!S<0$VEf2Luzlnl*gkRwY#%udwvSv4 z+ec1i z0#jB6G$c*%kyjb7>?3v9KJqARA9)_Ok30w4M{2Nr#O?Nx7ihPSyaC%s9)#^9FT(Z_ z_qUI{LVHf*lO~f-!S<0SVEf2puzloh*go;$lln@jV_L~5StY0B zm4Z@KN=jL&C{?AV)Rl&k&^D)(w31P>N;r;rrJxj*l2TSGN>!;Tb)}(9Syx@WwQ&XF z3d9wND-f-KhNKBT@*U%qedJTvK9ZQGZJbZoN4}-qKJp=KA8Ek$5x3h%zNg(j@(FAo z`31I*dJ{Py=Bl`^5pifYR zNqwc%F|A~jtddjmNPkaNXq!_?TFEF`B^<}RQc#LYNhvE8rK;4F zy3$ah=XK0+1>y?C6^JV^WmP~!(gYuwj`7q!G7W4WnFF?ubc5|9bHnzLnPK~g+wCLs z&~6{;0ozBWg6$(S!S)gNw~wS~&uM(pekIeeeWWvNADI=lkIVwwM`nQSBh$k6k?CRk z$h@$9q$_M6nGv>+%mv#=zD+iL&pt9W?e>v5Vf#oI*gn!7&a?lWVEf4Iuzh4UaeF>8 zX6VMTk4#yYbG)^21>y?C6_{cx(CQ-#F<#k6mVoUeE5r7Y-mraS1=v0^A8a3SyM1I~ z+U+At!S<0=Vf)C^uzke+?IXQtw~x#Z+eem%?IRi3KC(D$A6X5ykE{sWN0x={Ba6cJ zkwswp$V#w%WI5PAvJ7k=Sq!$1tPa~p7J%&|Jz@LEg0OvL71%zqq_{mF88NJH>?2d` zl^t(*T!FX(aRsKV3bgvj=8RYNk!@l7$Xc*{q%UkA*%Y>qYz5m#+-@J)jCT9T`mlW@ z3)@H5gY6^kZy(v7cKgVduzh4**gmoWY#-SewvTKC+eg-c?IV3)`^YA+eIy6lN7jbz zBRjzMkxG}}KOfnKcKgU0uzh3;*gmo$Y#-SgwvTKF+eg+Ex920{M(1K5nX)eDcx&Sd z#1)7uFvV7&)kpG-SN4$suzh40Y#$j8+edbX?IUAg`-t1^BYV?sAK44GkBo-xBL&z# z;{NuLU1_(E>;l_Ic7p9ABVhYTf7m{<8*CpL2ir&XfbAnAVf)Bn*gmo|Y#$i{+eb#h zem=4%Y#$j5+ee1N_K|+DePj@9AK4MMj|>#I=OaV*UbAobX~(3#QtFsiGD=p-DS4%! z6qS-vRw_zWsVQ}(p(OMjQ%XrI86~TPM2(Wu>B2m6}pl8p;%V0md61S0JuH zT!FX(Z53$sk&_s&>?6m+_K_oD`^e$2edIvcJ~AG*kGS1FvJdU{k^Nx%$U(4ue?ISnA_K}-m`^d%O_IzZYA!~0E9$if8E2WNUC8K1OoRU`xN>M2( zWu>B2m6}pl8cISAl~U45M#(DSIOdgtQdCMxS*a*hrKZ%ChB8?$mUty`1>y?C6^JYF zw^g9kM;>6jvX49j+edDL?IU-?_L2Kx`^bZ^eZ=kdkvnO(kK7B}M;?LgBhSG05%;%` zJVAR-<5PG(avy9TxeKy?C6^JX) zT7gy{`IPa>KJqebA9)+LkGv1tM_z>OBd@^r5x3h%KA_z`@)2ww`53m3yb0S!+}}R( zEbaD@Phk7VyRdzv4%?5t$N<1A`Ag(}Mfw%&HUjYvn>0$fGugq^B`31I*d=1-2zK8829ax@yWCqwi z@+JN4Bj3UHk#Au8$hWY4B*F6RBh$e4k#6Gld}PG%*hl`pD=%JhT!FX(aRuTEv{sBlC;}L z7KZI3Gs5Rx4M~1@okwLJ1 zy?C6^JYFw^g9kNBS~e*+;g8?IWAR_K_W6`^W&; zK9Ym&BW|~k>`J?RWEf$bwZ!}gJ( zuzh4l*gmoqY#-SYwvTKF+eZe%_K_j5ePlD(KC%gHAK4hTk8BFtNBYC|k-@NiWRSRB z9~s#<{_ku4wkt1Qa9n}70&xZ63baM2(Wu>B2m6}pl8cIU{jdDs!D;XuLgyWc33QAEaDP^Ui zRF#@iR~ky|IUP^O6^JVkS0JvylvjaPA328c%06;DY#%uhwvU_w+eglX?IY*H_7S(+ zM=qeEiZ$q%d}^&4VgT>MNy=X(gj%m7J1S3QAEaDP^UiRF#@iR~kw}+niF;N=C^l;W*}% zf>KmUN?EBWRi&oXm4-6qU3u{q#}$Yx5LY0sKx+kBePrXQe*fS5_Ji#s17Z6}U)Vmf z9c&-j6t<7_f$bxMVEf4Cuzh4_*gmo)Y#-SMwvX%p=QKVAAK4JLkL(27NBYC|ksNFv z*#x$a>;l_IwukK_Tf_E|ZDIS!MzDQk0Bj!_4BJOGgY6^h!}gJ_VEf1xaGw3&0Je|h zVf)CA;`V%G*Wv4K5maGPUnzA=D;XuLM=PDJvDFs??Oa(ohoG=9H3FGD=nn z$1$%Il%i5n%1TA4DmA69G?dnJI-ZUz5LY0sKwN<-uL7+;auuJS{e0v)*gn#Q@ytGQ zC++r;TVVUh<*% z!1j?&EZ;to6u0LigT}=^GUZ*-@fODwh$|3RV9KmOtB*X+_+=k?47QKl3)@HTg6$&@ z!1j^nVf%>N?IRD^RkY&I<7!mfw%%wTm@QvBSG3zl-h=HUAHw#LS77_do3MT46WBiTI&2^L z7`BhR58FpRh3z9>!uFB3VEf2Nuzlov*gjH+?IUl%_K^l`A9)wHk9-5$N4^!e=Ocs0 zY!&;+6n90(8yr_4u0ULYDYF8tKGI>j-~WCj3EM}a-`8}Z-9GXw2DvImgU(;W`OM@Q^EF;>0tZF4=m3<@{71V zA1RE@Z5e*rF{!VVI;NG3l2vj_UMVO=rKFUVic(c-N?mCv34O&GG$(U@m9wbh$|3RAg+Kb(CQ;;#xFk~SqQd|EDZbk$n3CvWNz3# z(i66ixZOT75AF7m#bEo$;;?;WN!UK({`QgiXwPYU(tagph3z9t!1j?@VEf2Suzh5H z*gi5FY#&(=wvY6J?IUx-_K^i(`^e0&eI)vO)&lF&A%l(dpjvPw9P zd8MEfm6B3cDoRzUDRrfx_Aa!Ot)C`F~Dl$DB7RccCIX($OfMM_C486~Ual)O?+S_|RGGa{M?Sd*y>MNy=X(gj%m7J1S3QAEa zDP^UiRF#@iR~kw}+niF;N=C^l;W*}%f>KmUN?EBWRi&oXm4@Q;IsO}0Ag(}Mfw%%w zW(8V(WJAU;`^Yx1ePjdJKC%;RAL$F*N4A9RBW|~keBZe_{@O=2p}&1(XV^YswvV{K zePjpv=QKVAAK41FkMx1(&G`=APw`bw!|TFEF`C8y+- zf>KmUN?EBWRi&oXm4=egHm8)dl2NisIF5OxpcIvoQdTNTRjDa;rJ+ojS6{rj)d(aZnuw|M!S9FXxKh-CTt%$6t<7JzkTEc z+U+Ap!1j^DVf)C5uzlnx*gkR=Y#%AX_K^c%`^YJ zBgeq@kwakn$Z@cJAa!Ot)D84v~nl342rJ_`ono?I9N;uD-?b!CWbB9cmpEIj5 zv_Eg=x!nuq>6`5@nt%TF*U^6TbohqnH8bGq67hMDboGs16~ zng4BbxjFwkX4dzvdC8`CrYG@ubke?r{LxE`pXl)j$D*LNqT=K7M}I@TCL9myHQ{(@ z<)MAT@!)&L|M+-ho6CE(S&uH6GtXElEdMq0H;e8V&ey~w)~B21O(eF}+!KGbSD!zs zNA&&4U7xW34eib!U9W$*vlA)7#P&bBe}Bfm+y6zI$L|l%56+hf=SSCO{|VRYFOln2 z8yNPtJc;|;Jl?g5mY}`;2&HMSy|pdu?}YnBvAKQipO0nDp;xDEJBDjjU-kdtYhuSE zuimZe|Fh}e9goRyz5e<6SZ?m`f4KjDw!hK#-|c@Uaz3gtv`@HS{RiX6pY1Q-BK*h4 zJGwuA#{aMPw`22Llm9pSyJ+P2M#rQ7;C>T4ON(tgPr8INcR?jgIN?3L!g)~D-%$V1 zlvn;rZwkwOuQ~3`7|wyf@57pGTki)E{xH)2qX>W8(m!l}iRJv+_BZdVax{&*(O1~E z@Sg8ofy1kHd(GZnv$r?QAGW8UzmrnWKO5J>@}sZTdWQ9d<2<|mN?8&rOCqsw_@Cdl z!|&(x-v8#fhV_2Zta~b~C-A56iieG9+wZ*Io0RqWI1HJ{anK^##);PTg|Q~oHLt(_ z&ho#S#N~(a>_1ul9~oIVX06+=+w*_0{6AXy|Ey0~emD25og}6Y8*I|9_5l z@Biv6oKF|c@!RouP{-zfbN%TfRbm5WTV;r{mvW0zSEkmoGfH?4P*g5eYRY%Y%(_N1 z%EroA`ouJ(Lxd4U~b(F-ldbDRrfxgx_**tc+DkN?BP{CvQ#(|IT{&x6H!t zRl_r)OO@H>*e5F&DK{vuDBmel>t?d5GEgZhCFK_7V$>_F1&O$_+}_ zS#>Owb(AfYla-5|7g>> z7}|6I+Rg#Zp4d^#((!8ZqMex5+im?is^6ws{-5XxLj&RNBPhznSZP!D`#kH-AHLs2Cp`MF3r#pAhwG_6!3-jpq zrF-;m*Ykwq`UlrsI2W#H_D_Xtbc^Qt+Wd%XvF+G~bxg%NLceR8^R!*R&#=CowZG3b zr#tJSOuW!C9p<09Wg9(zcP)$gJ1(JZnJ~Y$cf$Odo}2B`Ej_VDbGkzpUAI~4vzX=$ z>zGFCm_xM-=d`zLR&7^ko0c~Haa-Fu=U{nDs^6H7&DzbM=+ZXNbn3jCmKSR7^KLq^ z&%17#4$JPUelu%Yr;=XH^L7R;&*yL_O?&=7I&ZtFkI&m)T9(h-o|@ioqfV%lbNM`ro-`rfX;2GdI^g(Q9UUZO1&3?P$GbI{daB9ahq`YcRFuaSf-{ zw6ER&^qQGL+cB$_6RIETlM<&}xVw0^7M@W&zc`#H9!pl^9GXdOv$yn}S-fBi&ms=z znAbI{cwv_1b8a^6YuJw2TH1V`Ek)bxYU`o-{_NbEL;a%XU{}rO`c1Ftu&z1PFU#_N z*5~LVP)1km-_9be%}5b;&8tSwb+AeVY)<@wsCcCwT1hp`_3Z{_temLRr+qk za_3dsT51dXGmf^felK%9`lZ!xP4&|sUxyubP+NQR%%{#_-@G03i+66}1;k+=+#dX} zha4ts%PMS3AFX4~=6y3YpWY8OTS)!pRX_dF?@ZgS{kD6T_iaPX!#$?${V>nM>KxtA zwbjr2xvr)|zeUt9>}RNz&x`G8TQsb&WqTKEW4)tyC)~3&7ISXS9X^k>-ZQ^y9^aH6 z)BgH(%k($R>CRz?`Zf1wZY}cH{>^FKx{GTJXqg^3VLFiw+q}5u3v~>2o3I@k_kE45 zsO5)#OVBTjHxusJnttBv*Ypc5(=WD6C!6<^j^Um?ZF9Q2^jO~5yl+ZA+UmC?>(C#) z+S)p1^p|^T$KIN5T~^qxrI;t^ervs4|IVtv$J8w~f3~^*ZQC-@@l^{7%k9Z>!`QcM zb6-02Rh_&J4R^oQL4&}Aea9_&Y5ty^kG?j;Ipb?H+#ADsGOQW zuaoFG*S|S-wVe}JHm5s>bMLB_>CfpC-Vf{R&HD7w#rxH99j(j9JNSXOBkbc#E!**O z%XI7ZjcL}j!^}F4W1G`$KGC{;Vckn>-K(o6T5Q|4EF<2a<(gPlyv`(?i_6h3ENH?x zi^ndnwmvP(TtU3HSbrvb1_|r;{w}Y5I! z9jl1jyUs%0!@5_cpZ@%|Z#oeE{M5Sbt1{1O|HeFC&+3{-hBSU9EpUDOu>3i79WBjtTGPugozb+e+qOQ-YTo6T z-d59L-C^G4)n^5!!#1zTbohL$&r@xE!e`r+nGWYw*uF6DEQ#sHhx&)D8IuMg7-cdOJ;LnO;HDYcieFHmt?;{F+{y>BTjz>#}W`OKW;vrkB<9dQ2~>>Ghk_ zZS~xM_lN2I4VfOH=|0Wr&Ju#e#=O6gwxKW68)`b-8^iX8`_fiSuc-I8W;*zfopc`c z*_QX0*8AHry^N-}Z%()Ue!!m{0S)3nds-kSEgyOiejxx0g=eeSNHJ`+24JE@P)-Oif!xx2omeeQ;H)aUNZE$41H zrzdvq?x=Zv?q)RYb9XasgU{UsHSKeE2~GRlT}IPBcbC(&&)vl|J+X6lxZd}?XCBH?gm%)xf?!D`P^MX@B7?cQq%wGxf|Tt=kE5J_PN_# z>x!PcS)IE{^_fTK{`{QR3yFR1&ZlXgy9;RA=WgqLcV4~kdu@2$!u_@F+U5S*c5m}N zHQbwgPhDL7eO~@=@2NijrqO=-{P-*HZGUt>^D%Dk{uHhInyPzvh35(PHply*H~Rfk z^Yj0biLT?HVY;h63w=eO;Nf5Mes_&!;r_E0%L>lv`Il;${{q$Ho#s4k_d72u>h6B_ zutkUFvxl`OvfQ36%f0wNT<$truAj^4TAA?dSJy|Fp76Y9UDhA!683XF@#;EX%WNqJ0c~H~N!xg?m_g z>*^C(*TyU_9Dnm6(Rljd`WL?`XnjtoB~v0$5QA=Xm^@ycGz?K72N{6pBY=P&BvOb z;q(cod0mF@Yr=f`qwDdvYq+&vI8W}?$v!FPi9YVP`wHhtTFEH;DaR;hD_1IaD32XL=}0Dyu5tyT2Wk;mUr> zG0NG>mC7B;qslAF$I4Gicpe*`YlUYB;WJdY-gi`nEBh(OC}%5IDt9Q4Dz7LXE0g!g z|9flmc``?b-#$0{JW;9J?$bUW%;7t`&_CSkPHR5@>JaY#d?xGok(o9@wZdbQ(2 z9Y^R~YIUHn?zZpyTGrk6eP0WQ@B7j%9KOGssfEM$baS_G_&#pN77pLL^=RSn{n{)o z9KJ`Jw}r#8p1Fm?_hR$3aQOafh8F%+oN8goSE73hhv#PD`%QKG!)qzjq4m41Kf2~Z zzwq7G4K3Gn_>O75mi2}2dcJLG58vZ_)5769m#{w!}k~0 zwQyJQ8!a5ZN0`55d&2Yl1zI>fSO1}dw7;!Z{hI#{IwPi&&*$M;qYvHk(T9!XW)0Xw1;Qiue5Lv@jWdZo^RjV z!t;plYvFmtx3_Rw{B#S?CqA)-!*l7YTR1$IKD~v*bLlf$I6QwovxUR6kRk!|IKee(waYv8(Af%& zqD$#d|1AiqQDRfoOMiQ4^4GvQ_{%T9Y~#(~jW^!7jW>s{yY9L+-lEC+UBqLGhda8}Lp?~=PB+S2UlY3l#`Q>fx+eO;9kMIukU#ZWlZT)wI z$BY@%#yi1Y-p-NsU7Fm%>(4iN?n^Jdv~B)=a2R#M_VsUaQa=+3bxRC@!_PUUN?M}tHDU%kJD z-$s^|ic(d=@8jx9L(v1!MEH^=tz?v}l2h_ZK`AOFrL0txs!~(xN<&HLx^DZKmUN?EBWRi&oXm4=d# zoTiktl2NisPRT0;rKpsYvQkm1N=>ON4J8r2r&H2OM#(BUC9f2eqEb@IN=2zEHKndJ zl!U&>48ILbD;XuLM=PDJvDFs??Oa(on+9FQufFjFMGyN?s`_MWv*am5NeT zYD!&cDB(xJDJ89Bl&q3d@=8G|DkY_?RFtYxQ|d}X2_NiIN?OS%StTrXu#S!XCeP9_ z4!moGheUX2gm;VZum}&2@Q4VHjPR%k7b3iSghxksOoYcqcwB_{i13~f-Ydd;M|htI z?;GL$BD{Zu4~TI1;<5F36eE0Kgb#}F!4W;Ugk^WQ323@X--ICc?)? z__zokAK_AjPl)h|5k4uxCr9{{2%j3^(;|F&liQx9gzMvs2%j0@vm$(UgwKiaxe-1u z!sQ5`AK?okd|`wyitxn|{zrr_iSVTnzAVC*NBD{eUm4-6B7Aj(uZeIa!q-Olx(Ht% z;Ts}+V}x&t@XZmvCBnBxcovPVIxi-iAGbx?Z;$XD5xz6R|BUcm5w1q~?g;-Y!uLe@ z-U#0p;qYv)b${-Uv_BBx2P6DYgddLZBN2Wy!jDDx@d!T=;aY^BjPO$temcU>MEKbV zKNsQWBm6>yUySfe5q>$suSEFO2)`EL*CSky@EZ|+Gs160`0WV46XACw{9c6LkMIW( z{xHHHMfl?ge-hzOBm7x}8xj6I!e2!A%LsoJ;jbh7O@zOV@OKgZKEgjl_{RwU6ycvE z{7Zy?jc`J4+1`I8au6zSh7(%!j+!{_-Ob^p-Er9}9= z|5v`+zMs&xc-bdw;s38chpBFfF3tTEWRGp?wB8OoyakK7u5sX&%pH_(&7lIbV|DBU0e*^w*y@o)Ok* z*Tyr!;Ui(_KQpYww(%_R4)Cn7FcI#3;T6Wj@S5}RX?73ebr|!ChG`^W1}%HFiv@~16#_1Bj@yvm-re{6JC^2F)4{c6N&nr9^?b5O_SG6!`y zx18+Qp<~BReGXXRpiH+e(=2}228VsytwV>-ofDa@dQX>`rb}|GPF-f|xYZVhsk?Su zd(GanW@Zj8Q+4guchtC%WBUyqncjNnpgntc%S;#EpSEkKZMN8S>E1JDQUQ})rx`wK zK)>NbMvWPpnP;|cy)&7md#{vPA+z+-%Wpqhw`GHpv5zO=J!{ zvg3gVCQiQOhgqKc`s^>idV9@9i+8Tvv-0TU%N%y)R6{Pl>CV#P$Gms+si(~P*>a7C zH(Bb$B^uW+vgvXcpM2J5L#E#>G1buF*|UB;zVoq_ou8U(p3R=#d!Dm4{U1`Ki-KhcEEq_tPxZ`|J1C?K#zz=O4N0s@qR< z-zqD0)Y0p3p^BB6Uges5h7KKm?bIpRu~VaUlXXav+SVP;o?-o)mw2W!_Z4q0vHo%M zueIfRZy)lnL3^xr$gwj#-0_K*uB|RV@A3VCIL-d|bCT4&U^fMdn{+wS|x9zW6V*^~hFwJ~hkOE)S0D zckhi`Z}{N77v1>ib(L*;-8NHgiF7UhJp^6F(mO;I=#Ne9mW=zc!%z$TOaQ`{Cj5F4$q*O0SRJ7iv`6`eElxaQ*tzrfzChcM`9FVv zeJQV*>yzGM=&tFtbWIFPFS~TEPlt}PCH?SMUoDM1;;y@OZ(DZF)*&ICxamOcW@62e z14oY*B=^Ect_lR(h{q6OI7Tb5- zE!SLX!%f!fwf4H3Z`pJ6EwnkmpMANT`~S16e#SUn-#3R_@^7zegukDCi}j*&FZ|8r zOMa|h4Q{Eq!zTUq`e37$x%;lU$%gB#yTz70`?7>^b8fzpy%kl(N6n16RIoA%#r(15XPj~X~=K(rcb>^}GEU(UWrV#i(jwSC?5 z+rG?ln7$Yo-fzs9L1TIj9JE)Mapq94si$u1v)4V}jXGZAz-21=Y;7aBXYGC7A_?ts zuQ7$;<3DZK?mPG4%W8VLj=JEb*@75l_6VA@byT6N$MJVeIqk z>kI$q63342H(=1Pp<`Q@8eQV!cWk!m8TyiA>?Imgez(MFu3aQCYV@wX`fG3)u=fBR zoZ*9d?X_HHrCw_f8a+1GZ|soG2koKpV$kTmgT{>Mx2tMU7(J?>wxNT5+l%P>*6s1) zVVlmW-{ah^-yi&LecwO$@2+o`frI{Nm95v}PkW#7>pQB`GrH3)?|LP|wRpi>izG(3 zoqfYcjqcU2|Cn8NDU2REqTlGfcNsfqud%xf96F|7|KWpn88veF-v3`~=K&VQ)$Z{H z3mRj`7A#n?AT}&m5X6EFEB3hG!Y;6~?5?{DYAm0zN29SsMNMLlU1Lu)c4I`1v1{zH z7c_qMO78paGCD8LoHH}reeOSx_db{Z@4WBnXXfnc6Kocn-e_?*Bd>y)rsx8+X`%Di`#JQ zxTk^O+w!C0w!16#g^rM9v+AAZc&pi}k8xQulP{C%3F-4@2)4AiJMJm4l_;(!<}Ygf z@AfPBCkn>C%nvq`I_Vx?qr)%=+e6I+qupFHCD_wq3^Do`o6BWO(mQPyv(eo|+>IqD zB*<=!#}44BM33YA#w+Xsrl~-2x5h6YsKJ=6DJF;0#2|SmTKc~P0t%*r%nt^1>7g2u zJ7Wya*$}X*(8am}rwNH<(i>GAUdqakn6vCP08n8Bbp5SD zkczH3;NYVD!gv!-Xe}}{(0IY64SzemIJ5;6?KTVk<=|8V)#%{O6L{8*qO(E~ud43F zgY2vzrtpHmI$+}c=-z#hNe z_@w}&fyMeLhS_2DsUWa`H+l96EE?G2Jla@{!2Eo-^mz*zL{ZpN9Ih6pX}z^<2=Aj$2^#L(z%-=fZ0IJt0T{ zKC6?sJq-$vqJRTMIe_;=--l)<0hnlhH0^URN70qT-QubMvLSpEQ@$fUQ9{9&TZ^iD zVJRNLVlp^{ou*N0$MD%@^V{>e;EFj2PdYpwY)j|LC^EO&97zU?ly!jub%N$Vy`owP z&N{TtT}hF(6AB-jpf}jf??dpkCfQU?i@Y^{AK*~559Y0+7U`~aSyH#?fq@Tzf}*5a zRe2=XlA2w5QFP1(wySWiSG$3NqP=~1b!{Zspqk%1a;p}$GEhZQW2u20RJ={93A~6Y zdJWg?D7wHYSetA3QHEs8J*VBsq9Xu-iU4^&*wO~n;b4+X)?|GW90l57#~WvXCA_CW zvxlugE!#K7^KDeiOdLL5+45!Ay4eECh8Q(%%K-;VTX(TJR;IicH-@47SXhVak?SaqRjwZsoo0>CpmWyf>>e7$~v87L@P zEwx8zAu*~YPmSN^=mCSGsCV$iDfnbm`fyXI77WVsh?ILax5L}oP(ab4ZR?ksP>ir{ zE!w`JGOW~4w62DZR>%^s4;ZuS#Poa3{DFd^3G^DLg~SM|!-HwF|Au-((V&J+P>52v zWSBO8dh07dLD8UgOw>YR1ohL*Nq_8y(G*2DpD(^x%12dZE?*LF1;s z00KpqioR16W86cJ+K#0&5hFqVhM2?ZuTN9YyDVb=7tN0!62wCR2HsWb6BM z@jFo*dG*W62)&0KVr$36qDG-S6IW8|^`@_SEc$+QWVzOHdLxi^mr4XObwA48b zCs(NEBsaOXvJs;9kIb-w{;;xfzw;$I@Snc4;@&*~q3H2>vz;1Y?#Ya?;t(TSllUh7 zmMtWsy@_)gMwpk6Xk;>IudC);QXr2`hoTFe!l%^Hc)1L@bI|`aY#2~~- z?c0}XX(2I!y4$_~LkD0`6t$?4Iuv&pDV6iT4Wj{rqFp;BToZ~BR^*CrCI&#aMp0JH zcIsICVdVCN-UsIa2St1K)^6HZjKH?_`RYm?xblXoL}t!)pUc2tr4wVbCBjSSiBjvE z`Mvjy=;N!?p{fzbY8H9N*aQ>2hnl$^ld`?M^V;MirD1OZqAyh+8p*R27Rpk-F&A46 zJPQ{VP&5HIzL)p47~sl5g2^G}m>$tL>KvpK^ECjInV>{gk$`EO&pdDdtW zZ<|z{618+aETBCnxD`adG-siy2;smdb&t$suzn966za zNvXRW<|CZ&G6*cznS@vQ)_%1c0zlEnM)&?uKyVrG1lq`fP))Ljuc^mO~) zTvZ%i%6eTf3>L2d!V6}h^X=RdkTVqB7ED{n!f3e^F=F7e&H{^$*9R79 zW4WV~K4&e~HGkTl5EP0Ama$kd%)Kq;UyA5&eiD2hI4Bxet)<#njKE69{WItSfKW8B zxE~e6ggqSR0mG9Y6RXWIodaQba4$ zUc(JYJBl91rtVf`ExI;9UyqSZRkUBdCHQM4DB1__>{E+$51X>2lf^D?-3wKYq9pqP z9!cG$hz#$O6MqH@iuU&D2epx8gYxy-d>p?}3{{b|wAF_=DCuLNh;|uk8$(^7=mO`_ zQLdrz_5)suVOPeFqYXI+LU~aUq}&sab1>R2MJ!8Mc6BI#P%R12bRt_o*{V4kGIV_h zXaOjC8rJ@#5~6}j5p8Te3kdHk(br5Lol=RA4WsP6Ba3}t976?=#8o`YVaQ*Km^AQc z*;p_{(SqA9Dl%1YpP+Q*h4t{eMp1N}taXjU;9ZLNy3K{Oe$YWsbSMeBrNUZ45Hknw z8+;P7j-r#{jXNyT|HGw-g7>(9Y+s7-y|0epX{D0KPODc{I4WeS4r!+))434wjzW6l zBCZJ9ngvLkP_smx;mWoRe`+iR|2?*N0x4%|}V1zNL`#%R;LAp@%%i9*fC|WI*^D6-; zzZ9|i$pu#=P*Aj5_7%`VVpPkDhNb=r1`LX#EQOS!gm->8M_5mnb{im|=+Kt4h$a*x zte;{(se1rILeaYVwx~juczwWlMe$vZA@_d=3W_FhTQMypMo{}NU%m1TU{Exu>m?MT z6fPOgzM8pW5>QYysFS6%kQhOYyLhw8E*K9`bo05(kA+fsDPq}=cYALK1d1*dFO*h{ z!3Hj~RNQpnE9ofimr-mlt{iDh&kE;)_doga+g}L_3X1)=k_N2s3Y6!(NB&JuF}59vwt1CoV;SKN|17Gk@DPYL zrqKbaxJm;R16z_ncUH{?kP%`_-!ZnR9I%=K)gZ*z)tE%yrHC3i{=F+42h&Fhb8E^N ztGX2Nxbp6^*I|W*qK}qN)n@x^xUmrOB5s!sj+;=eNS6E>XoT@zj};^7tHxuRWDCh? z4C0)IkudLsX=E~JA&&wsEQN%k=qjXEYjreUF26aJkvIh?D7p%%-$4tB5!61z!KC?s zK~YrMuIfuk&iiyUU{G`!T&|ZU6eFxvBXil`00%``KK<3PgtdwMXkV$xo+-g_ zH3&s}cDzv=ixJqd;!VB}fS^zm_Huw?nD|?-J>O(3z3O_fyxPu607A7Q{cE&cBaGMd z#Yj4g6iUe!QejT%Fp@e{Ba=ZZ(RAX5eUMNT9Y!jCsgB0WW#r?6B@O`vMf-M}@mffX zpc3=EZhjpwD2j4SR)^vaBT=nGO=*BZ(XPF9h9(pvtn$IGDK(*6qbTd<9Ca-IFfwbB zy^aYuDB81=7ieQK0;{*VUkLtu0jd(|+0B;8z&JM+Ox^=q_ROc#q3Df;sq5q&xi=Qf zRT55ACdcY*CDdt;&BT8wbE5SqLe0>IgrflKBl`nRl7o zXM~wQaU}jFjDDBwfBAqniaw><(kYAg;OzY3#zxbNzXc9mg7|e&#o^yB8GmkL7Xd|2 zBS&{tg>ui(j2j=TcQ@Qt81jY+BlU8oIoN}TQ+~sw?)u=ZwSj=5$Lyc?QcGbhsFF%IOcHWON6Z_&xfmsPOxlz<{F4Bn zgFuJA$^g9j=&*9~$f1xW6df-&^;1UR-ZE*@b&*pDf_9uq{kaG=*Gxi-@2M+*=qBr_ zULA;+wLfcrwl@!C3>8i~jnSZ#q@s`NUbTEC3_bMu#Hko9I9_=5r!{{d{AvyDK23}~ zo{F%}HyXd#A2Nudlf-tD8VoO-Gsk<4J_oggqMNLy@l1}E%O>{7o`(fk7-<@V6Ewoy z@kt-n1Ri~|SUCKrp=~lNr@7A*_}5K(Z5aL4eFzCfLwh_xBa9K+e+ITZl@25n4Xueq zIZfDtbDq|Z@;$XrI z#bhbHcCs<#?XH4gj-qpY)F4#=PY@FKPJZxP9XT|ox!#Y%J;y!%5GI#YCL@KP@ zRACuJgQ6W~)z_+-?r}~wc^B5rygC=!7mA`bPUoW3T@e}AEN@ISU{JJguAQk7B^%cK zJr}zjh7(j2Jy|iO@>tTBMD{sXmB-(KM%0kg2Lcir| z8M1-2ODXXB$|vyslc1_3cc)kJAo5p5u2u+LoCc04TJ#)SmANXoW>M^HSjY=F_D0de zp7MKn5Z+~xTHSg*+?5kvY6HE^=v0g9Gcp z9Yt$n+c7>t;e8RW@HxW-2t5V){kTeqr?E<27|B&AM=K#&^zD|DC-@Zcra*f0A+8MC zuf0$4{gquAIcQCIB*Z|gqwZ-wL*eRQ458H#cSa?IRUPA9;Th1XP;?zW{VboN`qs$K z$F)ko0~D$S$n(L4((`kgag6XT%u7wF081DYo$z~~XYw@M8)>^Py2dWxpy=N4@)d0? zMqqyzNNq3d=xH<0af=Cie?x))a~kcVsyGA&ZRU+`t79+%x$R~CMEGuDdJt#1qYR?( z?uZyf58{4*paH}PX;x~&RadR_uW(9Yr^&v892HExW-R zMdO%NR=K~pf~41~U)=BbK*$%Jk~Wp&a#UR==@-&r%^ipa6#?>maNTv<}42=1RTrSARGSK?M?I^BQa)Y-Mm2IzFCO2qkLU0G*4 z{2Us5JFP|Xx14M1_E&enSA3w#6UV4N3`aclka`a?dii1h22eOu6=Iir0>duZ$|&N0 ziarVc14dSqKk*#5PR=tHeyzk|kSgK$(C#a@!F+?FCvDTxW!(}C)_9ZM;B*eMIV68= zTmB8Vx#fanmZYlQa9i`|lJ3E{q6USLBwQ=c0cg1J(>TL>MHG-wtqILlLo1EVFO|Nr@{qsRH2GJ$sut=3SUOK)g>_F+ z2@@8Q@)v(*?J?MX0}v{Vw8gYh8expkUe^t9u7U22qO@nYPKTnM ze9JyfC`MQ}D^KfC2RJCo>hq^c7I#3&b7N!GrochbKK|gmHWnkW;DbNgdqDq2QP|hF zRKoZJir2|QPhJ2BMZ0+GCmLal&}tVd61}COPKTl^$$9Wap5$j?-=E5vtg((EcFC3G z+v5d}RPlvXB&aeO4QEx7v*X+;+B^5voOxy7M_fSFiDm8(h9&n>(LiU>hk-RQgf21Ls?t7dJP zF$er4eW)SjBec}HvwwX28T@<>h|+R<)y*nONq}fy?@?MSjS<{0 zJFROD!H>+LDDH716*#5)>Q~c;PRIvKITRgQDnx3=@j8MSN{5ztpJx-QFtc=MDeBZr zW$?=M_M7lMG*J{CT3U}%%j0FV%e#fk5}>D}Xm4-zy*3sju=I@6{r5vqC<-gIRV|D= zwB&r$Nw*lHLeb9N=!8ZXBeV{$3nux%?hZw1&C}J=_(My*R`A%^ zx%;|6V+41m@bn9vE9i76x~Pnq z*mGw6fv3VhNFrROB*l%p`nJP%!JOXVTQgs=xopuJEX?!#Jmmi^6hDGgYrBO~?(VB0 zp1BNultI)%-B;Po?qB$2R>$in5048#`nt?mn6brY>YmX+F;F(dLWP(85f9=047Ec$ z*q+6FA~TqW!@D#Vtb<7QoJ$p2%NG05XT9!3La_(Khy!PfnI9Y%sw|W8e*Xe}g3V$6 z!e)iBo;_*?Hor8yZ6<(ryf8Ny->sXf<1ncqR+oH?!DM!~F}NlrnFj&EeER z8%OL0N#iWrvw&~`67Mh#k*eJ5an(w;%(U?% zHvZcrY-|pES4_(2-Tr!ya0vMo`U_nZegA6~qs-IntfyV>cSj_;__p*zGX-ZlXxHAU z%vm;x0|({!vYlk1_wV9bdrq<7SIDK((RIQ88-g<}bgw0i@IkuH{THIq+GUUbt2BekPK$pYl)H zkjh|>%crU&krfZ|?d4q09CoA$DdfY%kc4DL#@*BsM z>pd9Eamt{3?xsgond@ySkS>Gd2(u$*`ioBiVuX6FNb-{RxEMmJ6ABDdMv~-6(;@%E zn3rHQ6%t*681^{HG=v#Xs$JO9Dm^<5KHb5O&d5_v@%%8edYs^-jJprsme(I5cR}6J zebVaFY-6*_BHxa;2fi!i4Wn!rjQq5`MbF9Fx_3(0$n>6GBvsz!&SM=*LlV+K^z5ns z1-7xg=a3mwhN0(05Uu^47v(*%Gt0EuV#R*%dKt_{LI&tU((f|ckUcu=p7wHf3{=)s z=nJ&6!mmpErkGtrU}&|$m?Pf?R`!}4(Ex1yp$*Vc?cOzowtDxzM{a;fJDc_c4m%|Q zLR-VYn;!$*Rv+4e^u*v9kJBekd5$aVpTL-&@?E*bH8#h>D-9BJxv!&sSe4Au(m`_K z9j>XvU^LsLT#vWi?(2kNE{7!3Hu3!K$F6ppJ=w1RkOcY0+rD43bF;zs9JGnbWTaW2 z{;{v3A-CD>Hf@f87x9*ryM(>l*06ble1L4b(w#xS`gTuf)+=27T-RXK)`WSY=WLl#CmLK zPJLaA*(yn>dOP>-Loo4Nga?-8NKSlT%M#?q^Vye%7slW09SQYE8?WEL5@znqekg8& z+3J!?!r!9~`P~B7oKQ?U>aKyj<0*)zf!1;#hT@oGh&NeX@Lf4Bm)RQcl=58k`G!uN zp_DpkxbUzj^Mkvcv)(eE7L!A=c!s;zZf*su{a{7=R!lBAD~HKo9HMua;^7{R$zd`| z74f_Ak5VdwZ)xbW{z3`iUt7L3U{1p`go;RR%(jCq50!lpfCWpf&d4MXea_T(1h>UZJ!E7;i|6#WUdl1uUbReoV?E`(O$yO zrR~NMZ2|=DPaJ#Hly-#kGkvVgM6o99^~8fvAC*2@@}}02b`u64y)!vB*5q`?C0nHG zr|X8j`EEm2$3RwTF;@gj8?%Pp_21?yFc#9dABtLm1bws-af|ir%inJ@W!Ad+L%o|# z1+PE|yFBrm(OAk42HPa3-o3t&3ikQqo-H?k4Q_&IV~lA=?BZ-Tuz~^HZZb$t3K5nq ze^&<=Jc6K4lcGY2Qv%Ec;1rKbHyCZDN_BFq@2I6v1z}JH^Z;U0bK(V$kEOfDiHU}- z3E&W!SEnmR(ljZ8IJg_FL?jW{E0po zvO$NNyuC#>tockFioXzvyMH$5BeGC9iHY54fvkN+ZmgN>zqdykYe8B9VHl-7d|p4X zg>WkB-aW?*u}Q8b9PhsFSOLs%#-?UI{bkK!VPQ+N{XQ@6|3RmRIK9WrVHi{^(KG~3 zx*evVm_%pi_FmrN-_&^j=kSl>@BbHUy{RGxmjmWx2@hEO!>9AtC!6Cj7JjcOo$!ui zdcYbeb70S0NgIqw($kfp`FR&MLwwHxUP;dUV0kJTJQ1On@S_c`ge(hv&;P$MJ>gWp tv$=IB*xQOss>HZWY{?E-_XHUn&e+cFbHU~fVBRIXzXI~?W=-LL`#&Ol;EVtO diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs deleted file mode 100644 index f263f350b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs +++ /dev/null @@ -1,17 +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 page will route into relevant download url based on User-Agent --}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js deleted file mode 100644 index 5cbfb3c70..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js +++ /dev/null @@ -1,39 +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("mdm.page.enrollments.default"); - var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; - - var parser = new UAParser(); - var userAgent = request.getHeader("User-Agent"); - parser.setUA(userAgent); - parser.getResult(); - var os = parser.getOS(); - var platform = os.name; - - if (platform == "Android") { - response.sendRedirect(context.app.context + "/enrollments/android/download-agent"); - } else if (platform == "iOS") { - response.sendRedirect(context.app.context + "/enrollments/ios/download-agent"); - } else if (platform == "Windows Phone") { - response.sendRedirect(context.app.context + "/enrollments/windows/invoke-agent"); - } else { - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json deleted file mode 100644 index 25b719866..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollment", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs deleted file mode 100644 index 94e4604ef..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs +++ /dev/null @@ -1,33 +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. --}} - -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="Device Enrollment"}} -{{#zone "headerTitle"}} - Unintentional Request -{{/zone}} -{{#zone "content"}} -

    - [1] You have tried making a request call intended to be made by a different Platform.
    - [2] You have tried accessing enrollment steps out of order.
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json deleted file mode 100644 index ba7b6802b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/error/unintentional-request", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs deleted file mode 100644 index 3251535bb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs +++ /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. --}} - -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Certificate Download Failure"}} -{{#zone "headerTitle"}} - iOS Certificate Download Failure -{{/zone}} -{{#zone "content"}} -
    -

    Possible Causes :

    -
    - [1] Network Issue.
    - [2] Bad Request Call to Server.
    - [3] Internal Server Error.
    -
    -
    - Redirect -
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json deleted file mode 100644 index a2a10b89d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/error/ios/certificate-download-failure", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs deleted file mode 100644 index c4a0944ad..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs +++ /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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "iOS" - currentPage = "download-agent" - nextPage = "login-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Install Certificate and Agent"}} -{{#zone "headerTitle"}} - iOS Enrollment -{{/zone}} -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Install Certificate and Agent, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Install Certificate and Agent" - currentStepIndex = 0 - }} -
    -
    - If you have not already enrolled this device with {{companyName}}, - Install following EMM Certificate and Agent to continue. - -
    - Also note : EMM certificate should be first installed on the device for a - successful installation of the agent. - -
    -
    -
    -
    -
    -
    -
    - For evaluation purposes, you can skip the agent installation and proceed with enrollment.
    - This results unavailability of Operations such as Send Notification, Get Location, Ring and - Enterprise Wipe. -

    - Skip Agent Installer -
    -
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js deleted file mode 100644 index cdc1d7695..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js +++ /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. - */ - -function onRequest(context) { - var log = new Log("asset-download-agent-ios-unit"); - log.debug("calling asset-download-agent-ios-unit backend js"); - - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var viewModel = {}; - // setting iOS certificate download URL - viewModel.emmCertificateDownloadURL = context.app.context + "/enrollment/ios/download-certificate"; - // setting iOS agent download URL - viewModel.agentDownloadURL = "itms-services://?action=download-manifest&url=" + - mdmProps["httpsURL"] + context.app.context + "/enrollment/ios/download-agent"; - var companyProps = session.get("COMPANY_DETAILS"); - if (!companyProps) { - viewModel.companyName = mdmProps.generalConfig.companyName; - } else { - viewModel.companyName = companyProps.companyName; - } - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json deleted file mode 100644 index ee5e8ebae..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/ios/download-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt deleted file mode 100644 index d6e6df93e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -Add the iOS-agent with the name "ios-agent.ipa" into this folder. \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs deleted file mode 100644 index 796ff5a96..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs +++ /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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "iOS" - currentPage = "license-agent" - lastPage = "login-agent" - nextPage = "thank-you-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Accept End User License Agreement"}} - -{{#zone "headerTitle"}} - iOS Enrollment -{{/zone}} - -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Install Certificate and Agent, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Accept End User License Agreement" - currentStepIndex = 2 - }} - {{ - unit "mdm.unit.enrollments.license-box" - platform = "ios" - languageCode = "en_US" - licenseAcceptActionURL = iosLicenseAcceptURL - }} -{{/zone}} - -{{#zone "topJs"}} - -{{/zone}} - -{{#zone "bottomJs"}} - {{js "/js/enrollment-completion-checker-ios.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js deleted file mode 100644 index 6193ae753..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js +++ /dev/null @@ -1,24 +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 = {}; - // setting iOS license download URL - viewModel.iosLicenseAcceptURL = context.app.context + "/enrollment/ios/enroll"; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json deleted file mode 100644 index eaf1ab577..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/ios/license-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js deleted file mode 100644 index 169fdbdd3..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js +++ /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. - */ - -$(document).ready(function () { - var iOSCheckUrl = contextPath + "/enrollment/ios/check"; - setInterval(function () { - $.post(iOSCheckUrl, function (data, status) { - var parsedData = JSON.parse(data); - var deviceId = parsedData["deviceID"]; - var refreshToken = parsedData["refreshToken"]; - var accessToken = parsedData["accessToken"]; - var clientCredentials = parsedData["clientCredentials"]; - if (deviceId) { - window.location = contextPath + "/enrollments/ios/thank-you-agent?device-id=" + encodeURI(deviceId) + - "&accessToken=" + encodeURI(accessToken) + "&refreshToken=" + encodeURI(refreshToken) - + "&clientCredentials=" + encodeURI(clientCredentials); - } - }); - }, 1000); -}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs deleted file mode 100644 index a185d5f1f..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "iOS" - currentPage = "login-agent" - lastPage = "download-agent" - nextPage = "license-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Login to Enterprise Mobility Manager"}} -{{#zone "headerTitle"}} - iOS Enrollment -{{/zone}} -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Install Certificate and Agent, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Login to Enterprise Mobility Manager" - currentStepIndex = 1 - }} - {{ - unit "mdm.unit.enrollments.login-box" - loginActionURL = iosLoginActionURL - }} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js deleted file mode 100644 index 7ffe438b5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js +++ /dev/null @@ -1,24 +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 = {}; - // setting iOS login URL - viewModel.iosLoginActionURL = context.app.context + "/enrollment/ios/login"; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json deleted file mode 100644 index 26572e27a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/ios/login-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js deleted file mode 100644 index 5d53d804b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js +++ /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. - */ - -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -$(document).ready(function () { - setTimeout(function () { - var deviceID = getParameterByName("device-id"); - var accessToken = getParameterByName("accessToken"); - var refreshToken = getParameterByName("refreshToken"); - var clientCredentials = getParameterByName("clientCredentials"); -// window.location.href = "wso2agent://" + deviceID; - window.location.href = "wso2agent://" + deviceID + "?accessToken=" + - accessToken +"&refreshToken=" + refreshToken + "&clientCredentials=" + clientCredentials; - }, 1000); -}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs deleted file mode 100644 index 5bc7a1ae5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs +++ /dev/null @@ -1,52 +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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "iOS" - currentPage = "thank-you-agent" - lastPage = "license-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Success Note"}} -{{#zone "headerTitle"}} - iOS Enrollment -{{/zone}} -{{#zone "content"}} -
    -

    DEVICE ADDED

    -
    - You have successfully enrolled your iOS device with {{companyName}}. -
    -
    - Device Owner : {{deviceOwner}} -
    -
    - Changes related to your company device policy will usually be applied - on your phone with in the next couple of minutes. -
    -
    - Thank You. -
    - {{companyName}} -{{/zone}} - -{{#zone "bottomJs"}} - {{js "/js/enrollment-success-note-ios.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js deleted file mode 100644 index 90be52949..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js +++ /dev/null @@ -1,31 +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 mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - viewModel.deviceOwner = session.get("enrolledUser"); - viewModel.serverURL = mdmProps["httpsURL"] + context.app.context; - var companyProps = session.get("COMPANY_DETAILS"); - if (!companyProps) { - viewModel.companyName = mdmProps.generalConfig.companyName; - } else { - viewModel.companyName = companyProps.companyName; - } - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json deleted file mode 100644 index adfc78e7e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/ios/thank-you-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs deleted file mode 100644 index 18375a801..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs +++ /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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "Windows Phone" - currentPage = "invoke-agent" - nextPage = "login-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Start Workplace"}} -{{#zone "headerTitle"}} - Windows Phone Enrollment -{{/zone}} -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Start Workplace, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Start Workplace" - currentStepIndex = 0 - }} - Start the Workplace app to continue device enrollment. -
    -
    - Setting up a Workplace account with WSO2 Enterprise Mobility Manager - will offer you company policies, certificates and apps that help you connect - to your business. -
    -
    -
    - -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json deleted file mode 100644 index 2c1154779..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/windows/invoke-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs deleted file mode 100644 index e51813f42..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs +++ /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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "Windows Phone" - currentPage = "license-agent" - lastPage = "login-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Accept End User License Agreement"}} -{{#zone "headerTitle"}} - Windows Phone Enrollment -{{/zone}} -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Start Workplace, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Accept End User License Agreement" - currentStepIndex = 2 - }} - {{ - unit "mdm.unit.enrollments.license-box" - platform = "windows" - languageCode = "en_US" - licenseAcceptActionURL = windowsLicenseAcceptURL - }} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js deleted file mode 100644 index 01da95f27..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js +++ /dev/null @@ -1,24 +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 = {}; - // setting iOS license download URL - viewModel.windowsLicenseAcceptURL = context.app.context + "/enrollment/windows/enroll"; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json deleted file mode 100644 index 574c45a01..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/windows/license-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs deleted file mode 100644 index 458c63acc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.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. --}} - -{{!-- defining controlled access parameters --}} -{{#zone "accessControl"}} - {{ - unit "mdm.unit.enrollments.access-control" - allowedPlatform = "Windows Phone" - currentPage = "login-agent" - lastPage = "invoke-agent" - nextPage = "license-agent" - }} -{{/zone}} -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Login to Enterprise Mobility Manager"}} -{{#zone "headerTitle"}} - Windows Phone Enrollment -{{/zone}} -{{#zone "content"}} - {{ - unit "mdm.unit.wizard-stepper" - steps = "Start Workplace, - Login to Enterprise Mobility Manager, - Accept End User License Agreement" - currentStep = "Login to Enterprise Mobility Manager" - currentStepIndex = 1 - }} - {{ - unit "mdm.unit.enrollments.login-box" - loginActionURL = windowsLoginActionURL - }} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js deleted file mode 100644 index f25943ecc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js +++ /dev/null @@ -1,50 +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("agent-to-web-context-mapper-windows-unit backend js"); - log.debug("calling agent-to-web-context-mapper-windows-unit"); - - var viewModel = {}; - if (!(session.get("email") && session.get("windowsWorkplaceAppID"))) { - // if both email and windowsWorkplaceAppID session values are not set - // this means either shifting to the page from agent or directly accessing the page out-of-order - - // checking if user is actually shifting to the page from agent - // login_hint passes the user email value entered in Windows workplace app - var userEmail = request.getParameter("login_hint"); - // appru passes app ID of the Windows workplace app - var windowsWorkplaceAppID = request.getParameter("appru"); - if (!userEmail || !windowsWorkplaceAppID) { - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else { - /* allowing to skip first step of windows enrollment by - setting session.put("lastAccessedPage", "invoke-agent")... - This update was proposed to overcome following problem: - First step of enrollment and second step of enrollment being linked with two sessions as - first step is initiated by Internet explorer and the second by an internal web-view */ - session.put("lastAccessedPage", "invoke-agent"); - session.put("email", userEmail); - session.put("windowsWorkplaceAppID", windowsWorkplaceAppID); - } - } - - // setting windows login URL - viewModel.windowsLoginActionURL = context.app.context + "/enrollment/windows/login"; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json deleted file mode 100644 index 433caeb46..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/enrollments/windows/login-agent", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs deleted file mode 100644 index 2c5ac1084..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs +++ /dev/null @@ -1,32 +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. --}} - -{{!-- Inputting content into defined zones in enrollment layout --}} -{{unit "mdm.unit.ui.title" pageTitle="Page Error"}} -{{#zone "headerTitle"}} - 404 - Resource Not Found -{{/zone}} -{{#zone "content"}} -
    -

    Possible Causes :

    -
    - You are seen this page since the resource you are trying to access is not available.
    - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json deleted file mode 100644 index 8bfc51281..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/error/404", - "layout": "mdm.layout.enrollment", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json deleted file mode 100644 index 4f2dd893d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/", - "isAnonymous": true, - "extends": "mdm.page.error" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs deleted file mode 100644 index ea9d56cae..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs +++ /dev/null @@ -1,15 +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. --}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js deleted file mode 100644 index 58d161f3e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js +++ /dev/null @@ -1,79 +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("enrollment-access-control-unit backend js"); - log.debug("calling enrollment-access-control-unit"); - - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; - - var parser = new UAParser(); - var userAgent = request.getHeader("User-Agent"); - parser.setUA(userAgent); - parser.getResult(); - var userAgentPlatform = parser.getOS()["name"]; - - if (userAgentPlatform != context.unit.params["allowedPlatform"]) { - // if userAgentPlatform is not allowed - log.error("platform not allowed"); - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else { - var lastPage = context.unit.params["lastPage"]; - var nextPage = context.unit.params["nextPage"]; - var currentPage = context.unit.params["currentPage"]; - // if userAgentPlatform is allowed, - // restricting unordered intermediate page access - if (lastPage && currentPage && nextPage) { - // meaning it's not first page, but a middle page - if (!session.get("lastAccessedPage")) { - // meaning a middle page is accessed at first - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else if (!(session.get("lastAccessedPage") == currentPage) && - !(session.get("lastAccessedPage") == lastPage) && - !(session.get("lastAccessedPage") == nextPage)) { - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else if (currentPage) { - // if currentPage is set, update lastAccessedPage as currentPage - session.put("lastAccessedPage", currentPage); - } - } else if (lastPage && currentPage && !nextPage) { - // meaning it's not first page, not a middle page, but the last page in wizard - if (!session.get("lastAccessedPage")) { - // this means the last page is accessed at first - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else if (!(session.get("lastAccessedPage") == currentPage) && - !(session.get("lastAccessedPage") == lastPage)) { - response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); - } else if (currentPage) { - // if currentPage is set, update lastAccessedPage as currentPage - session.put("lastAccessedPage", currentPage); - } - } else if (currentPage) { - // meaning it's the first page - // if currentPage is set, update lastAccessedPage as currentPage - session.put("lastAccessedPage", currentPage); - } - } - - if (log.isDebugEnabled()) { - log.debug("last-accessed-page = " + session.get("lastAccessedPage") + - " : " + "session-id = " + session.getId()); - } - return context; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json deleted file mode 100644 index f2f22da9a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs deleted file mode 100644 index e8a202e6d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs +++ /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. --}} - -
    -
    -
    - Please read the following end user license agreement carefully. - In order to complete device enrollment, you must accept these terms. -

    -
    -

    {{companyName}} License Agreement

    -

    {{license}}

    -
    -
    -
    - -
    -{{#zone "bottomJs"}} - {{js "/js/license-box.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js deleted file mode 100644 index 921c34ba7..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js +++ /dev/null @@ -1,41 +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("license-box-agent-unit"); - log.debug("calling license-box-agent-unit backend js"); - - var viewModel = {}; - var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - - var license = deviceModule.getLicense(context.unit.params["platform"], context.unit.params["languageCode"]); - if (license) { - viewModel.license = license; - } else { - viewModel.license = "ERROR: Unable to retrieve License Text."; - } - - var companyProps = session.get("COMPANY_DETAILS"); - if (!companyProps) { - viewModel.companyName = mdmProps.generalConfig.companyName; - } else { - viewModel.companyName = companyProps.companyName; - } - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json deleted file mode 100644 index 7769b28fb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js deleted file mode 100644 index 3a9497885..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js +++ /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. - */ - -$(document).ready(function () { - var license = $("#license-text").text(); - $("#license-text").html(license); -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs deleted file mode 100644 index 9560b933e..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs +++ /dev/null @@ -1,74 +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. --}} - - -{{#zone "bottomJs"}} - {{js "/js/login-box.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js deleted file mode 100644 index e1f8bf3b4..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js +++ /dev/null @@ -1,30 +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) { - context.handlebars.registerHelper("excludes", function (lvalue, rvalue, options) { - if (arguments.length < 3) { - throw new Error("Handlebars Helper equal needs 2 parameters"); - } - if (lvalue.indexOf(rvalue) > -1) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json deleted file mode 100644 index 9c7b7aa6d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js deleted file mode 100644 index cbdff9394..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js +++ /dev/null @@ -1,86 +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. - */ - -/** - * This method will return query parameter value given its name - * @param name Query parameter name - * @returns {string} Query parameter value - */ -var getParameterByName = function (name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -}; - -var errorMsgWrapper = "#enrollment-error-msg"; -var errorMsg = errorMsgWrapper + " span"; - -/** - * This method will execute on login form submission and validate input. - * @returns {boolean} - */ -var validate = function () { - var username = $("input#username").val(); - var password = $("input#password").val(); - - if (!username && !password) { - $(errorMsg).text("Both username and password are empty. You cannot proceed."); - if ($(errorMsgWrapper).hasClass("hidden")) { - $(errorMsgWrapper).removeClass("hidden"); - } - return false; - } else if (!username && password) { - $(errorMsg).text("Username should not be empty."); - if ($(errorMsgWrapper).hasClass("hidden")) { - $(errorMsgWrapper).removeClass("hidden"); - } - return false; - } else if (username && !password) { - $(errorMsg).text("Password should not be empty."); - if ($(errorMsgWrapper).hasClass("hidden")) { - $(errorMsgWrapper).removeClass("hidden"); - } - return false; - } else { - return true; - } -}; - -$(document).ready(function () { - var error = getParameterByName("error"); - if (error == "auth-failed") { - var defaultMessage = "Please provide a correct username and password to continue."; - var customMessage = getParameterByName("message"); - if (customMessage) { - $(errorMsg).text("Authentication failed. " + customMessage); - } else { - $(errorMsg).text("Authentication failed. " + defaultMessage); - } - $(errorMsgWrapper).removeClass("hidden"); - } else if (error == "unexpected") { - $(errorMsg).text("An unexpected error occured. Please try again."); - $(errorMsgWrapper).removeClass("hidden"); - } -}); - -$(".btn-download-agent").click(function () { - $(".form-login-box").submit(); -}); - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs deleted file mode 100644 index 00dbfdafe..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs +++ /dev/null @@ -1,24 +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 "contentTitle"}} -
    -
    - {{@unit.params.pageHeader}} -
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs deleted file mode 100644 index 02f29a345..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs +++ /dev/null @@ -1,24 +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"}} - - -

    Enterprise Mobility Manager

    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json deleted file mode 100644 index 359f3d131..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends": "uuf.unit.header.logo" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs deleted file mode 100644 index 5fc7ac3bc..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs +++ /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. -}} -{{#zone "userMenu-items"}} -
  • - Logout -
  • -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json deleted file mode 100644 index 0fa59af73..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "extends" : "uuf.unit.header.user-menu" -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs deleted file mode 100644 index 07aec34c2..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs +++ /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. -}} -{{#zone "navMenu-icon"}} - - - -{{/zone}} - -{{#zone "navMenu-items"}} - {{#if permissions.VIEW_DASHBOARD}} -
  • - - - Admin Dashboard - -
  • - {{/if}} - {{#if permissions.LIST_DEVICES_ADMIN}} -
  • - - - Device Management - -
  • - {{else}} - {{#if permissions.LIST_OWN_DEVICES}} -
  • - - - Device Management - -
  • - {{/if}} - {{/if}} - {{#if permissions.LIST_GROUPS}} -
  • - - - Group Management - -
  • - {{/if}} -
  • User Management -
      - {{#if permissions.LIST_USERS}} -
    • Users
    • - {{/if}} - - {{#if permissions.LIST_ROLES}} -
    • Roles
    • - {{/if}} -
    -
  • - {{#if permissions.LIST_POLICIES}} -
  • Policy Management
  • - {{/if}} -
  • Configuration Management - -
  • -{{/zone}} - -{{#zone "navbarCollapsableRightItems"}} - -{{/zone}} -{{#zone "sidePanes"}} - -{{/zone}} -{{#zone "bottomJs"}} - - {{js "js/nav-menu.js"}} -{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js deleted file mode 100644 index ebf967e07..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js +++ /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. - */ - -function onRequest(context) { - context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { - if (arguments.length < 3) { - throw new Error("Handlebars Helper equal needs 2 parameters"); - } - if (lvalue != rvalue) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; - var constants = require("/app/modules/constants.js"); - var uiPermissions = userModule.getUIPermissions(); - context["permissions"] = uiPermissions; - - var links = { - "user-mgt": [], - "role-mgt": [], - "policy-mgt": [], - "device-mgt": [] - }; - - // following context.link value comes here based on the value passed at the point - // where units are attached to a page zone. - // eg: {{unit "appbar" pageLink="users" title="User Management"}} - context["currentActions"] = links[context["pageLink"]]; - context["enrollmentURL"] = mdmProps["generalConfig"]["host"] + mdmProps["enrollmentDir"]; - var isAuthorizedForNotifications = - userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/notifications/view"); - var currentUser = session.get(constants["USER_SESSION_KEY"]); - context["isAuthorizedForNotifications"] = isAuthorizedForNotifications; - context["currentUser"] = currentUser; - context["appContext"] = context.app.context; - - return context; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json deleted file mode 100644 index c469d0751..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "1.0.0", - "index": 30, - "pushedUris": [ - "/", - "/{+any}" - ] -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js deleted file mode 100644 index 2a169909b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js +++ /dev/null @@ -1,47 +0,0 @@ -//--------------------------------------------------------------------- -// QRCode for JavaScript -// -// Copyright (c) 2009 Kazuhiko Arase -// -// URL: http://www.d-project.com/ -// -// Licensed under the MIT license: -// http://www.opensource.org/licenses/mit-license.php -// -// The word "QR Code" is registered trademark of -// DENSO WAVE INCORPORATED -// http://www.denso-wave.com/qrcode/faqpatent-e.html -// -//--------------------------------------------------------------------- - -//--------------------------------------------------------------------- -// QR8bitByte -//--------------------------------------------------------------------- -(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;da||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]= - 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c= - j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount- - b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0g;g++)if(null==this.modules[b][i-g]){var n=!1;f>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a, - c),b=new t,e=0;e8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d= - 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+ -a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;dc)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+ -a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256), - LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d - this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b>>7-a%8&1)},put:function(a,c){for(var d=0;d>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1, - correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e").css("height",b+"px").appendTo(c);for(i=0;i").css("width", - d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js deleted file mode 100644 index 4d5a32481..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js +++ /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. - */ - -var modalPopup = ".modal"; -var modalPopupContainer = modalPopup + " .modal-content"; -var modalPopupContent = modalPopup + " .modal-content"; -var body = "body"; - -var emmAdminBasePath = "/api/device-mgt/v1.0"; - -/* - * set popup maximum height function. - */ -function setPopupMaxHeight() { - var maxHeight = "max-height"; - var marginTop = "margin-top"; - var body = "body"; - $(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30))); - $(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2))); -} - -/* - * show popup function. - */ -function showPopup() { - $(modalPopup).modal('show'); - setPopupMaxHeight(); -} - -/* - * hide popup function. - */ -function hidePopup() { - $(modalPopupContent).html(""); - $(modalPopupContent).removeClass("operation-data"); - $(modalPopup).modal('hide'); -} - -var updateNotificationCount = function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var responsePayload = JSON.parse(data); - var newNotificationsCount = responsePayload.count; - if (newNotificationsCount > 0) { - $("#notification-bubble").html(newNotificationsCount); - } -// } else { -// $("#notification-bubble").html("Error"); -// } - } -}; - -function loadNotificationsPanel() { - if ("true" == $("#right-sidebar").attr("is-authorized")) { - var serviceURL = emmAdminBasePath + "/notifications?status=NEW"; - invokerUtil.get(serviceURL, updateNotificationCount, hideNotificationCount); - loadNewNotifications(); - } else { - $("#notification-bubble-wrapper").remove(); - } -} - -function hideNotificationCount(jqXHR) { - if (jqXHR.status == 404) { - // this means "no new notifications to show" - $("#notification-bubble").hide(); - } else { - $("#notification-bubble").html("Error"); - } -} - -function loadNewNotifications() { - var messageSideBar = ".sidebar-messages"; - if ($("#right-sidebar").attr("is-authorized") == "true") { - var notifications = $("#notifications"); - var currentUser = notifications.data("currentUser"); - - $.template("notification-listing", notifications.attr("src"), function (template) { - var serviceURL = emmAdminBasePath + "/notifications?status=NEW"; - - var successCallback = function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var viewModel = {}; - var responsePayload = JSON.parse(data); - - if (responsePayload.notifications) { - viewModel.notifications = responsePayload.notifications; - if (responsePayload.count > 0) { - $(messageSideBar).html(template(viewModel)); - } else { - $(messageSideBar).html("

    No new notifications found...

    "); - } - } else { - $(messageSideBar).html("

    Unexpected error occurred while loading new notifications.

    "); - } - } - }; - var errorCallback = function (jqXHR) { - if (jqXHR.status = 500) { - $(messageSideBar).html("

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

    "); - } - }; - invokerUtil.get(serviceURL, successCallback, errorCallback); - }); - } else { - $(messageSideBar).html("

    You are not authorized to view 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'); - } -}; - -$(document).ready(function () { - loadNotificationsPanel(); - $.sidebar_toggle(); - - $("#right-sidebar").on("click", ".new-notification", function () { - var notificationId = $(this).data("id"); - var redirectUrl = $(this).data("url"); - var markAsReadNotificationsAPI = "/mdm-admin/notifications/" + notificationId + "/CHECKED"; - var messageSideBar = ".sidebar-messages"; - - invokerUtil.put( - markAsReadNotificationsAPI, - null, - function (data) { - data = JSON.parse(data); - if (data.statusCode == responseCodes["ACCEPTED"]) { - location.href = redirectUrl; - } - }, function () { - var content = "
  • Warning

    " + - "

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

  • "; - $(messageSideBar).html(content); - } - ); - }); - - if (typeof $.fn.collapse == 'function') { - $('.navbar-collapse.tiles').on('shown.bs.collapse', function () { - $(this).collapse_nav_sub(); - }); - } -}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs deleted file mode 100644 index 82edfc498..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{#each notifications}} -
  • -

    - - - Device Type : {{deviceIdentifier.type}} - -

    -

    {{description}}

    -
  • -{{/each}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json deleted file mode 100644 index bcab0a4d3..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "extends": "uuf.unit.navbar.notifications", - "disabled": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json deleted file mode 100644 index 2fba2db14..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "extends": "uuf.unit.navbar.popover", - "disabled": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json deleted file mode 100644 index 3c39b5235..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "extends": "uuf.unit.navbar.toggle-menu.left", - "disabled": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json deleted file mode 100644 index e8a79dae6..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "extends": "uuf.unit.navbar.toggle-menu.right", - "disabled": true -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css deleted file mode 100644 index cc768351b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css +++ /dev/null @@ -1,366 +0,0 @@ - -/* Regular */ -@font-face { - font-family: 'Open Sans'; - - src: url('../fonts/OpenSans-Regular-webfont.eot'); - src: url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('../fonts/OpenSans-Regular-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: normal; - -} - -/* Italic */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-Italic-webfont.eot'); - src: url('../fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Italic-webfont.woff') format('woff'), - url('../fonts/OpenSans-Italic-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: italic; - -} - -/* Light */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-Light-webfont.eot'); - src: url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Light-webfont.woff') format('woff'), - url('../fonts/OpenSans-Light-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); - font-weight: 200; - font-style: normal; - -} - -/* Light Italic */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-LightItalic-webfont.eot'); - src: url('../fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-LightItalic-webfont.woff') format('woff'), - url('../fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); - font-weight: 200; - font-style: italic; - -} - -/* Semibold */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-Semibold-webfont.eot'); - src: url('../fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Semibold-webfont.woff') format('woff'), - url('../fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); - font-weight: 500; - font-style: normal; - -} - -/* Semibold Italic */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-SemiboldItalic-webfont.eot'); - src: url('../fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), - url('../fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); - font-weight: 500; - font-style: italic; - -} - -/* Bold */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-Bold-webfont.eot'); - src: url('../fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Bold-webfont.woff') format('woff'), - url('../fonts/OpenSans-Bold-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: normal; - -} - -/* Bold Italic */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-BoldItalic-webfont.eot'); - src: url('../fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), - url('../fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: italic; - -} - -/* Extra Bold */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-ExtraBold-webfont.eot'); - src: url('../fonts/OpenSans-ExtraBold-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-ExtraBold-webfont.woff') format('woff'), - url('../fonts/OpenSans-ExtraBold-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-ExtraBold-webfont.svg#OpenSansExtrabold') format('svg'); - font-weight: 900; - font-style: normal; - -} - -/* Extra Bold Italic */ -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/OpenSans-ExtraBoldItalic-webfont.eot'); - src: url('../fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-ExtraBoldItalic-webfont.woff') format('woff'), - url('../fonts/OpenSans-ExtraBoldItalic-webfont.ttf') format('truetype'), - url('../fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSansExtraboldItalic') format('svg'); - font-weight: 900; - font-style: italic; - -} - -html { - position: relative; - min-height: 100%; - margin:0; - padding:0; - height: 100%; -} - -body { - font-family:'Open Sans'; - background:#fff; - font-weight: 100; - color: #444444; - font-size: 14px; - margin:0; - padding:0; - /*height: 100%;*/ -} - -.container { - position: relative; - padding-bottom: 20px; - min-height: 100%; -} - -.wr-content { - padding-left:33px; - padding-right:33px; -} - -/* application top level header */ -h2.app-title { - font-weight:400; - font-size:17px; - margin:0; - padding:3px 0 0 0; - color:#fafafa; - text-transform: uppercase; -} - -.wr-global-header { - background:#11375B; -} - -.app-logo { - height:50px; - padding:12px 10px; -} - -.app-logo a { - text-decoration: none; -} - -.app-logo img { - float:left; - margin-right:10px; -} - -@media (max-width: 768px) { - .app-logo { - padding: 16px 10px; - } - .app-logo img { - width: 50px; - height: auto; - margin-right:10px; - } - h2.app-title { - font-size: 15px; - } -} - -@media (max-width: 570px) { - h2.app-title:after { - content: "EMM"; - } - h2.app-title span { - display: none; - } -} - -.wr-app-bar { - background:#526A84; - height:53px; -} - -header { - height:50px; -} - -#nav.affix { - position: fixed; - top: 0; - width: 100%; - z-index:100000; -} - -.auth-user { - display:none; -} - -.wr-auth-container { - padding-right:0; -} - -.auth-img { - float: left; - display:inline-block; - height:50px; - padding:8px 10px; - font-size: 14px; - color:#fff; - text-decoration: none; -} - -.auth-img:hover { - background:#526A84; -} - -.wr-auth.open .auth-img { - background: #526A84; -} - - -/* sticky footer styles */ -.footer { - height: 40px; - background-color: #222; - color:#fff; - font-weight: 500; - font-size:12px; - letter-spacing: 1px; - position:absolute; - width: 100%; - bottom: 0; -} - -.footer p { - margin: 0; -} - -/* misc */ -br.c-both { - clear:both; -} - -.wr-input-control .helper { - font-weight:100; -} - -.wr-input-control .cus-col-25 { - float:left; - width:25%; -} - -.wr-input-control .cus-col-50 { - float:left; - width:60%; -} - -.wr-input-control .cus-col-70 { - float:left; - width:70%; -} - -.wr-input-control .cus-col-50 input { - width:100%; -} - -.wr-input-control .cus-col-70 input { - width:95%; -} - -.wr-input-control .cus-col-25 input { - width:65%; -} - -/*.wr-input-control .cus-col-50 span, .wr-input-control .cus-col-25 span {*/ - /*padding-left:20px;*/ -/*}*/ - -/* wizard */ -.wr-wizard { - -} - -.itm-wiz-current .wiz-no { - border:1px solid #444; - color:#fff; - background:#444; -} - -.itm-wiz { - font-weight:100; -} - -.itm-wiz div { - display:inline-block; - float:left; -} - -.wiz-no { - width:50px; - height:50px; - font-size:33px; - font-weight: 100; - border-radius: 80px; - border:1px solid #ccc; - color:#fff; - padding:0 12px 10px; - display:inline-block; - text-align: center; - background:#ccc; - margin-right: 10px; -} - -.wiz-lbl { - width:190px; - font-size:17px; -} - -.wiz-lbl > span { - padding-top:0; - display:inline-block; -} - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css deleted file mode 100644 index b455f24b9..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css +++ /dev/null @@ -1,137 +0,0 @@ -/* forms */ -.input-control { - margin-bottom:20px; -} - -.input-control input, .input-control textarea { - border: 1px #999 solid; - width: 100%; - height: 100%; - padding: 6px 10px; - z-index: 1; - -webkit-appearance: none; -} - -.input-control input:focus, .input-control textarea:focus { - border-color: #555; - box-shadow: 0 0px 0px rgba(229, 103, 23, 0.075) inset, 0 0 0px rgba(229, 103, 23, 0.6); - outline: 0 none -} - -.input-control file { - border: 1px #d9d9d9 solid !important; - width: 100%; - height: 100%; - padding: 8px 15px; - z-index: 1; - -webkit-appearance: none; -} - -.input-label { - font-weight:100; - font-size:18px; - color:#555; -} - -.input-label { - font-weight:400; - font-size:14px; - color:#555; -} - -.help-tip { - font-size:14px; - padding:0px 10px; - color:#666; -} - -.wr-notification { - background:#ff5353; - padding:10px 20px; -} - -.form-val-error { - font-size:13px; - color:#ff2353; - font-weight:400; - display:inline-block; - padding-top:3px; -} - -.wr-validation-summary { - padding: 15px 0px 10px 0; - border-top: 1px solid #ffe8e8; - border-bottom: 1px solid #ffe8e8; - background: #fff4f4; - text-align: center; - display:block; - margin-bottom:15px; -} - -span.wr-validation-summary p { - font-size:17px; - font-weight:400; -} - -/* button group */ -.wr-buttons { - margin-top:20px; -} - -/* text content */ -.wr-head h2 { - font-weight:400; - margin-bottom:20px; -} - -.wr-text p { - font-size:24px; - font-weight:100; - color:#555; -} - -a.btn-download-agent { - display:block; - padding:15px 20px; - background:#11375B; - color:#fff; - font-size:18px; - font-weight:100; - text-align: center; - text-decoration: none; -} - -a.btn-download-agent:hover { - background:#16436D; -} - -.wr-agreement { - padding:15px; - border:1px solid #f0f0f0; - background:#fafafa; - height:320px; - overflow-y:auto; -} - -.wr-agreement p { - font-weight:400; - margin-bottom:20px; - font-size:14px; -} - -h3 { - font-weight:400; - margin-bottom:20px; - font-size:18px; -} - -h4 { - font-weight:700; - margin-bottom:20px; - font-size:15px; - text-transform: uppercase; -} - -.itm-wiz { - margin-top: 20px; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css deleted file mode 100644 index a3e2fe3ff..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css +++ /dev/null @@ -1,567 +0,0 @@ -body { - overflow-x: hidden; - -ms-overflow-x: hidden; -} - -a { - color: #526A84; -} - -textarea { width: 100%; } - -h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { - font-weight: 300; -} - -h1, .h1 { - font-size: 32px; -} - -.well { - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -/* asset type switcher */ -.wr-asset-type-switcher .popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 451px; - padding: 1px; - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; - font-size: 14px; - font-weight: 400; - line-height: 1.42857143; - text-align: left; - white-space: normal; - background-color: #232323; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 0 solid #232323; - border: 0 solid rgba(0,0,0,.2); - border-radius: 0; - -webkit-box-shadow: 0 0 0 rgba(0,0,0,.2); - box-shadow: 0 0 0 rgba(0,0,0,.2); - padding-bottom:8px; -} - -.wr-asset-type-switcher .popover.bottom>.arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #232323; -} - -.wr-asset-type-switcher .popover>.arrow { - border-width: 11px; -} - -.wr-asset-type-switcher .popover.bottom>.arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #232323; -} - -.wr-asset-type-switcher .popover>.arrow, .popover>.arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.wr-asset-type-switcher .popover-content { - padding: 6px 6px; -} - -.wr-asset-type-switcher .arrow { - left:25px !important; -} - -.wr-asset-type-switcher .popover { - left:10px !important; -} - - -/* sorting */ -.dropdown-menu { - position: absolute; - top: 40px; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 10px 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: transparent; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 0 solid #ccc; - border: 0 solid rgba(0,0,0,.15); - border-radius: 0; - -webkit-box-shadow: 0 0 0 rgba(0,0,0,.175); - box-shadow: 0 0 0 rgba(0,0,0,.175); - -} - -.dropdown-menu-content { - background-color: #e4e4e4; - padding:10px 20px; - color:#fff; -} - -.dropdown-menu-content a { - color:#333; - cursor:pointer; - display:block; -} - -.wr-auth .cu-arrow { - width: 0; - height: 0; - border-left: 8px solid transparent; - border-right: 8px solid transparent; - border-bottom: 8px solid #e4e4e4; - left:87%; - position:relative; -} - -/* filter */ -.dropdown-menu { - position: absolute; - top: 40px; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 5px 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: transparent; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 0 solid #ccc; - border: 0 solid rgba(0,0,0,.15); - border-radius: 0; - -webkit-box-shadow: 0 0px 0px rgba(0,0,0,.175); - box-shadow: 0 0 0 rgba(0,0,0,.175); - -} - -.dropdown-menu-content { - background-color: #e4e4e4; - padding:5px; - color:#fff; -} - -.dropdown-menu-content a { - color: #11375B; - padding: 8px 10px; - cursor:pointer; - display:block; -} - -.dropdown-menu-content a:hover { - color:#fff; - background: #11375B; -} - - -/* category selection */ -a.ctrl-filter-category { - display:inline-block; - background:#237bd5; - border:1px solid #237bd5; - color:#fff; - text-decoration:none; - padding:7px 10px 7px 20px; - width:230px; - font-size:18px; - font-weight:100; -} - -a.ctrl-filter-category:hover { - background:#666; - color:#e4e4e4; - text-decoration: none; - border:1px solid #666; -} - -.wr-filter-category .dropdown-menu { - border:0px solid #237bd5; - background:#237bd5; - top:53px; - left:20px; - width:230px; - padding-top:0; - padding-bottom:0; - color:#fff; - font-size:17px; -} - -.wr-filter-category .dropdown-menu li a { - padding-top:7px; - padding-bottom:7px; - font-weight:100; - color:#fff; -} - -.wr-filter-category .dropdown-menu li a:hover { - background:#61a3e6; -} - -.ctrl-filter-category .glyphicon { - font-size:13px; - font-weight:100; - margin-left:33px; -} - - - -/* panel */ -.panel-group .panel { - margin-bottom: 0; - border-radius: 0; -} - -.panel { - margin-bottom: 0; - background-color: transparent; - border: 0 solid #e4e4e4; - border-radius: 0; - -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .05); - box-shadow: 0 0 0 rgba(0, 0, 0, .05); -} - -.panel-default > .panel-heading { - background-color: #999; - border-color: #e4e4e4; -} - -.cu-acc-head-title { - font-weight:400; - font-size:22px; -} - -.cu-acc-head-title:hover { - text-decoration: none; -} - -.panel-title a { - text-decoration: none; -} - -.panel-heading { - padding: 0 0 0 15px; - border-bottom: 0 solid transparent; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.panel-title table, .panel-body table { - width:100%; - border: 1px solid #c8c8c8; -} - -.panel-title a { - color:#fff; -} - -.cu-acc-head-created { - font-weight:200; - font-size:16px; -} - -.cu-acc-head-workflow { - font-weight:200; - font-size:16px; -} - -.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 0 solid #e4e4e4; -} - -.panel-body { - padding: 10px; - background:#f9f9f9; -} - -/* input */ -.form-control { - width: 100%; - background-color: #fff; - background-image: none; - border: 1px solid #999; - border-radius: 0; - -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, .075); - box-shadow: inset 0 0 0 rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} - -.form-control:focus { - border-color: #555; - outline: 0; - -webkit-box-shadow: inset 0 0 0 rgba(0,0,0,.075), 0 0 0 rgba(102, 175, 233, .6); - box-shadow: inset 0 0 0 rgba(0,0,0,.075), 0 0 0 rgba(102, 175, 233, .6); -} - -.form-control.modal-input, .form-control.modal-input:focus { - border: 1px solid #fff; -} - - -/* progress bar */ -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #e4e4e4; - border-radius: 0; - -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, .1); - box-shadow: inset 0 0 0 rgba(0, 0, 0, .1); -} - -.progress-bar { - background-color: #6c5c76; -} - -.t-data-file { - padding-right:20px; -} - -/* tabs */ -.nav-tabs { - border-bottom: 1px solid #6c5c76; -} - -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 0; - color:#6c5c76; -} - -.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #6c5c76; - border-top:1px solid #6c5c76; - border-bottom-color: transparent; -} - -.nav-tabs > li > a:hover { - border-color: #6c5c76 #6c5c76 #6c5c76; -} -.nav > li > a:hover, .nav > li > a:focus { - text-decoration: none; - background-color: #6c5c76; - color:#fff; -} - -/* nav pills */ -.wr-tabs-grphs .nav-pills > li.active > a, .wr-tabs-grphs .nav-pills > li.active > a:hover, .wr-tabs-grphs .nav-pills > li.active > a:focus { - color: #fff; - background-color: #888; -} - -.wr-tabs-grphs .nav-pills > li > a { - border-radius: 0; -} - -.wr-tabs-grphs { - border-bottom:1px solid #e4e4e4; - padding-bottom:10px; -} - -/* buttons */ -.btn-group { - margin: 30px 0; -} - -.btn-primary { - color: #fff; - background-color: #11375b; - border-color: #11375b; -} - -.btn-primary:hover, .btn-primary:focus, .btn-primary.focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #526A84; - border-color: #526A84; -} - -.btn { - display: inline-block; - padding: 8px 20px; - margin-bottom: 0; - font-size: 16px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 0; - transition: background 0.2s; -} - -.col-centered { - float: none; - margin: 0 auto; -} - -b, strong { - font-weight: 500; -} - -.form-horizontal .control-label { - font-weight: 500; -} - -.form-horizontal .control-value { - padding-top: 7px; - margin-bottom: 0; -} - -.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { - border-top: none; -} - -.panel-default > .panel-heading { - background: transparent; - padding: 0; -} - -.panel-title a { - color: #333333; - padding:15px 0; - display: inline-block; -} - -.panel-body { - background: transparent; - padding: 0; -} - -.list-group-item:first-child, .list-group-item:last-child { border-radius: 0; } - -.row.no-gutter { - margin-right: 0; - margin-left: 0; -} - -.row.no-gutter > [class*='col-']:not(:first-child), .row.no-gutter > [class*='col-']:not(:last-child) { - padding-right: 0; - padding-left: 0; -} - -.table tr.row.no-gutter > td { - border-top: none; - padding: 0; -} - -.table thead th { - font-weight: 200; - text-transform: none; -} - -select.select2 { - height:0 !important; - overflow: hidden; - padding: 0; - margin: 0; - border: none; - outline: none; -} - -.select2-container { - width: 100% !important; -} - -.select2-container--default .select2-selection--multiple, .select2-container--default .select2-selection--single { - border-radius: 0; - height: 34px; - border: 1px solid #999; -} - -.select2-container .select2-search--inline .select2-search__field { - margin-top: 0; - padding: 0; -} -.select2-container--default .select2-selection--multiple .select2-selection__rendered { - padding: 5px 8px; -} - -.select2-container--default .select2-selection--single .select2-selection__rendered { - line-height: 34px; -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice { - margin-bottom: 0; - margin-top: 0; - color: #ffffff; - background: #526A84; - font-size: 11px; - display: inline-block; - cursor: pointer; - padding: 3px 6px; - border-radius: 0; - border: none; -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - color: #ffffff; - font-weight: 500; - font-size: 11px; -} - -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #ffffff; -} -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #526A84; -} - -.select2-dropdown { - z-index: 10000; -} - -.ui-autocomplete { - max-height: 400px; - overflow-y: auto; - overflow-x: hidden; -} -* html .ui-autocomplete { - height: 400px; -} - -.qr-code canvas{ - border: 2px solid white; -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d4a1c47770fd38b715d6f8e119869fed1f4d8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30858 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

    Ceu_Z(Fs(Qh0@@*3OSQd0Q?oY2~#ME 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 1557f6807..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,251 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf deleted file mode 100644 index 7ab5d85bfdd1886b621b98b46e5a9d3609f2429c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30680 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 I0Ex{hY^xD?4gdfE diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot deleted file mode 100644 index ad6518076e32b52ad56d50ccb0e48d8a093b7efb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34166 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 - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf deleted file mode 100644 index 6a30fa9dd37f5da9f303e421c1e9d52f45bd3433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33960 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index 46778a21796d14b21754178d21ded6431905dbee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21940 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�b|3(OkNIB1U?gr{-Bgaj?f>vWKZ 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 z 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg deleted file mode 100644 index c3d6642a2..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg +++ /dev/null @@ -1,251 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 2011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf deleted file mode 100644 index dacc5bbb58035bc5203e206454b92cd3250843fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30404 zcmc(Id3Y36*7v>D)mysL=`{=4y3<(*+0%p&5W*Tl*kZsKLPVCZ$|AA}h=>d#n}{MR zYDC6i7-g`kX;BdnK~Y?Waa0_192^;Sa2!QkMj@$uzjLb-qT_t;`#j$tA3W7nb!)r# z+;h)4_jk^@VVp7M#E;BaRn@pr*Ka@GgE4MLY09u6L#uc)GvK^C&i!M?7M1S$;NfR+ zUXAlfQ|C^;@tLMM58!+cwu@7jEb_;mb6&-m;bB}aoPOhsxp9%A-{SlY#-wR8CNI1Z z z2e}8{fO7@!e0I+Ksgp1K^Zf{8^Jn7wf1Nw|<{Kq9KhM|#s-J(}5N#_(eO!mLkp=`vPZFo`O335&L4? zCxg1TvUXm=$MTz{6Vm(AU;HtCufLl=&7a}V_80m4_=otf_b>AA4P<=8F3auhc+$^y z;)%M>Cz#*qPxPlmpQ!lB6TH2>{apL8_O0y;+DB=u?O$zQe01`omp*#&qoW@k{^;OG z;g5dz(aw+V_~@pO`kp=EKW{uAtt~$DzyHTg(XPNFoTy7%*MDfYK{lGq7Hf>n9_xs6 zy4)VGFFqkLsatYNYFfHKkP*zx%FgMY+aoW(ps=X8q%_pCtXFyOiavd>>es(=z`#L+ z!QI2Ehu4f4IcoHn+NScw?2dKoH{Sa|%ddAmzWX=7{oRvK z?EU>y`xJHm(~$$uK6B{#!$;Un&C_O`z4@^lZ}`WO+3e08Y$0PamWoQwxrOaHxO(b5 zI+?rjqbawqz5n=2@BR5NAD(&tIrieqfB)>`bD#f{E&JfF>{pxCY~HZt?yYy-x1DW! z_>qT>op^NtW3Mb1uK_m*4&asC%ky}M58>^^o6V+zYx zm}i92qqae*Su$Q>!OBF%l-JO2yeL~a-v5rmJ%xz{3eWeyuh{bn6e)j1UBl4e_&|YT z$e)$yR|eEJ1e5{e3luq@9t{Ko%NssSesg>>?rUgE{@3{AU_deEH7Hd}#)}K%$K!p* z{Me?(0>zZCX7D@lb^o1BP00$wYs~p-rYIWFS!Bs~yZjYJ1&TG_zmh)k65j7u3|Yg2 zenrl%QCMxmhG`on`{|%}av(51d4o8s)6eLGF?#Ks$<6>iV$1jcNi@fv?=Mo!c})#| z|FB@yP&GNY!M`CWJ{MG2U4t?JccOjtS!KX9I>9pz z@uhyJ69a){|LF}N10EWVx?K~k8|sJK;_`$3)6tIy{S70=CI=KgzF`9zG(5N==-)7W zLvS+HgqlOYR39gGgB#u8q6W}``)3V6MT1qr$+IVQZ3#W<$wwnLtRu43GzT}B6@P8R zRmn$j#hbsM4d4R?4dNr7b+V~U{L;oi^HhghjI7=WR!uK*;OozD|r#w$YSKY zFgM`XERMNiDN@+!h#bQ#a-JePRU^-f7{r-s<$0{QB;*RXvI4HaK0{4gx^#2foyG%~ zYG%rx;v04CpGlJVMjRV~Z{WR3Y*EB)VexVvSDZzP;j}8noL400{!}T(k*CV`^NNfw zhSV7QdDX@9RLS6StLE5>3Z^o%%dJQi#U-AAAzzkAX$Okt%$PoF z?v$xF8V|IN)^<&pHf=)Vv}q)PmKk;%o{hG3WV9Y~C}OaPMwv=Q&7!BG#fH-nDTX=F zV#%qR(PEQ0qZX@X2^HcpDx_D0qcY2QbFTI!4~w1gK-&e$*>-{GEwL=5>tbOxBoKT;dA&w%h4Ql3v#&ry7sC`ovk-7axjb99K<{K$Hd!k;B)Se_1SToQ~bKbua|!5o&<3Zo=Ox?;ho7H?@8%+Pb%HB zKds}=bSgIta7qShxzk0YA!SkcvwzBfZqzGff%2d$04@p9<_efYK6H{Nh%GBr9?atI z^e=gOHMiI7#?SCiw11|3qy4o;`*!%AVcK`q{Houi@8;{YJzVB%wH35!t$Q?W8Omte zL;YIYzFwYba^&mLwa(6#3$b@FuzdFlHK`kz&K9VsP%>SLyF&4~ zRjY-@L?972q*f?4*M4U8rDY~mC&m& z_65tbb6oLqsI*sE&qAJ4DDm2N-Z}NkYfInSQ#-I|(Tukay!*zf4_;ryoinZ(Q?Yiz zs)vV3KH2-5gYoOv*{;>jP0Yy-0&o{o#Y%Bp|Acuw6K^9J=QIJI75IIRS6bvMHe4-$dUXo>q&5NXqGsWsZ z?TW;SW3KcR5(%v80m%iOf3UB-FBBdY&9fSfIKFb zl3by7PXYasDwIN3I6bQy%9(1-bGi4YWOOeCF;!nWPE2+;!-=3}r_jmr#tX_3RXsdl z@1izSv7_{p4<8^f0i!2azMY77YO9#WXaNB{`LLa zfBE{yKQ5f!ym;aCnU}YcJmrU|_=B&1JhgE8;^yYXu!99vb>^2ro zAiAdDM-7_Khb^F|T4FpOC7J4naP>QtTo6+=Lh2fe)LiWRf=sF{=DeVh-zcQ4lIv1( zKo@s7B?xX39Oj5i%my8p8ce`Fi4{tT>uF}R`Ev4f>Nv9sd07V;%n7~9118DL133;U zm{G`eqLk;DJl=%IaPaedPQFRoMR7E)~0z{ z`$?ll)cVI4mE@H|t3mej4~6W{&?SGToQIz2l=Gz4qVimq(yQp2(^1?0r4H*+Gk|pK%#`d3n!**Jgqu-Eiq;Skpg%j^~IVE$T7wyW+dDX_d zwrtQ2-FnBb`Ww&g*1Bt-;D5=^z5ER9Oe;V0Yts1zQa?Fh@}dPSnH!-yvphzR(Z;hp z1qHk*hZkk@<}B^RDXn$O3hlxl4BzwMG(Jh&IZZp`(>~w8leN$8R1V>0gc9W>_*je;76hY1Zm>ej+l!Q#(~49YvFiFqE)82_=(5#}J7cVL z7{jc2YOLM`Fef_xSMx9{Q@K1?FIiL%>Qyrt z6|h%eRDivOvNpncP|QMA_d@R^Nal*vzBXR(m^?;1w}D?fBSBk(St#C@$Ja}fq!%%& zGU$CE_<7nm%n=pei5Tq6206I3xzD&y;UZ|zl`F7@r7@gJb!Z5WG+Rn!MY4pmFo zI-mmB#ss5=Hod9k9YX~sO#R%MQ)kbeH1($4P0h_sjnkT`PBHCY7}i2|V*Z%G13X3w z@W!^YUgOzI0en=V@h{Je%GMz)Y^8x8C!ZIBRQ1WIJk%0CYlpJY1*K|&Vo8chLe**@ zdFP7*f09Ggx&$DG8@lixna;f!NF91g9kkYbU`4PD=;hs16rC3su_9g}YKo!pUxh5fS=Jp;A(j z4$17J3i1AuF0IT33wAuc;I6YP@*3~^M#{bX0iX8Z#H^aZLpP6?|2FN~!sh1|*59-F z;rC;-gCN+for}j6Rty?5O4PXuebt0I=di_0s6JJOh$g+KdgSwwSbJ7dEXIHd)$d-U zI8Q6)QZ)rFaHdcToOYNKPN$jyn&pCKDVR2^>3-@yIScJz6^h-Z@(i>hR==QlT&gbx z=SglQ9<3^OrSYhy&*QF;U$n?<=#N5KSOc=lD+e;Nt0uiN?)IhqH_UHr;sxVJY})?# zqHi8K$EDqm@Oj!{?Qcs?_T|+jMZ-s5H88+)cl7B!ky~nqL|X1Vo^LAD-g)Em3^W(K z8AKmJb)oM)Y>LjCVF|5`#MrD-ET$4L@lCo>$gVH2E_p!&csDjkG^#pD4~=Ke@qnewM0R2^47Z8b zelTX+1_p$#>gXUp}OJ&+8_Pn;5J%$l5b6#u*l$-t?Vz zNvARK)B^BS0%X<#7WUCdNXGaVBf)AuABpq(WYj#4Y917#AQ9u=4yB*yRMXG^H%`gk zOoU;i+Azyf(p+ks4|}&eEL%-z2UGpYxX92HCC;VTD-OO5sTLZ_oUCMn;DUe; zf^xK+-qxng;NQ!0`LOes%jCKAE(03^dXX(k^eSLCcTfyQyOsJnk4&XPolGE+iR`4H zPODU+6%O4_#ZJZD!KvMgNU*9!L_U+KfZ9C>YtfqQ_mSynPeoxI=$8ljJ?V({H`gf5hsN>-!d6FWp){D0fI+ zai6|4Hp@VVxyF})h-R|+QN7^+$CClBWi0Mg%WMiKM zs)wyM2l0BkOO1yzQB3YIB$MEpcn6vfZb@+|t_mfiQ^oXTAzj5}VDbTpR30SrFuQ|m zh?~l|?`!CrZ0#;>)*V&#_3wNdW6v2mukOfczN)Hv;H2?G23~DA@(uTD4{OhAW3}62 zc!l$+!_@;aw7=I)o;YayZ4=So5)(REUICq)0Q)!`2gZr`ghIZep`$vI#1AyH;ubqn zkuV3lDrna)DeHMNrp}%-dHVbgrEOR+p}BcNn3->p`|zxi|?r+v*&a=Z2|wfQICD|cn#gT88M zPTMxaH({RB3aOi`nf4NGSo>#&PcRmfU>jV=glbR|%;zDdBB@alWfQnTvzGmU!7Z@8 zVASP+@w}J}KW&p@6HDuYdrG%nqK)1Ed?G zvkx<-#+}o-A9>taZNV+G%Ct9Yr(Zp6WWW1gTR^m(KM8+0!i46jqOa@Pr<*>&T&#=@WDkMnr0TNu*=wjMQlKBXixhh(QlX#t zOO?u^NK$lGJBWr^q=#-J_iz#;M0)9Gy_{+gXF6)54h98+y$}T7l^&>t} z3qlxgB@o;$rMN<=Akm{#x*`_l3-%x~!460v5!ut787P(AFmE`9T~5%1-?E;hkN^>w zy~0Ld!3yA;Y~1}G9Ch# z#sPT|xTRtU3BxjCvM>&@Wg^|+EF$<2y1@dn#G>IPPz;0{dIC8BI~<&UD8=z}T5YwK zRr4?}uZ*vZv6dMRT^hpO+Lu!Og<7pV^f`Ugz*+!g$gmIMAV<>K3`i2vv`$D&vS`$F z)A>kZLL96bC<1&Mpd5^DCx&)nDH&}Z^q3uIDPrOc(*gLJYV<& zwgBqp5oQfDlVB$+*%aj?Xn#W?xX9#l1|Y~?CTRbePx66h{`Kc&SMR!Ra|<6h`9RY% zpJ`8Pk4o>I;|2B*h18`qE>>sE}F++ z;DDr75Yg(S*^_ES1wmJ)x?mD^l1ofoKqt@#glgfJ_$0nco2%VBx*@XX(OnCT2eb#Y zz1lt6B0l7;_f8%IJmb-! zeBWXe-?z~BV{{@w6JPljrr7#STD5^1IvP)N7W&>KEsMTKU(?QO$J;)L_P=ow`oA05 zKZL`n)c->BgX9s9H<2{Ihb+cq@jc>POdbh~kB>PYb_rP71z4G&Hr3SyQHyt}W>}11 z8UiKbD^xG>IJ1LktS*?0Kqht8!Tgeh4G9w;%`(f&sKRmp+{3r=IUBy4u(IXw?+-uu zSVN6=Sz4;KYj0@#v@OzEK80`S*yY-6(erE>_jcY_dRz{_QS(gfm z5lDZGprU~oT%U>C&?>1^u{p_t1U*$V7)qa(i%t_H1QFq}d!29A7HVZcgg%ziF4aim z+V<*vBjw?H1{UbjX9O1zr_$V(HXSaYH{wkM8Mc5x+XL0Q#ia06wJuk<*)8BWgKePs zS%>e$!o#dfN^6uRrVv*gqNW(>AcPu6pCdb3pjkQ}^(rS=Gr-MM`LqdeV=7vRzpM?? z&MpQu*7m)PA8lLEdPXX$(h`WbXe>41d&UmQjJf^!=$zlwL6@*Wj1q$p90b=&C(pL< zjYO2o>$Ml7?=q+3U0(KBl)h$19C=N|(3FfJ)W#>?>4oLwh5rKFXu=^dV4C27qHuw;+;b(w@LG{vX!v!`M(+;~XsX-j#VVZb?VnMgh)gn1~37AWY)9y3at(ecGCfxe7Tu-O&*VUx<2q!K($QaLv=;6%a8?}J7Uxt=XsreI z5Dm*X>NXn6_@uT=ZJ%2`aGF^@yhFP0 zQjKi-=C(G>m?Y8_#_x@9G8^-;4t$A_79lOXG??N=ow|q!Lbnp4azQl+_2$Jy;Fs_v z(iwz8_-FFDyoq1OXKLHEUu%1`t$ZiX*}nDOd$jj3fsW;Ispcf7>x%Q6^=28xfC1|WXXDH{$zpO=K2}& zj9{>wvK&9-zd*s4_%zL{X`KI8I>!B8o5qK7{OdwZT?gy((~UW|E-fHIb#jtbqtlS& zrd`NQq9NS1Drl(25eZ?0%c!exOS!?4zz@KaQA5V%g(H9q!s@omS!vu4{0VJ<_F8kz zsnqz z!c8kY9Ntp3JF3(TsHS2g(YarCCuE9=f?M?g=mTVyiEF@W5?uRvoX=0!+-}8-s&+y( z!XJhydH^O)R8Q${Ga2S`$-JrETb>Ze#L18g~J9eZ<+Jj$FsCk6MJ>f8`5~q@ojg$y*QWnmt#)KWRlNj)`x{nXrC_J zn1x_40cArOz|sjDO~gz_DEqLzEOK#`vYvx7o>i`)pkF$X=96_q4jROs)IO-oJjH_V zLJM0?N33?10#KdwuF8mqWb^?%xAAZgm3v^X^Fy!nH<^1lU*`w4fK~*pllV>F-zT#R*QucT}}`epF(Q9_+vG zn>ZBP@Q(c^BOKzu(JT-$`)x7g@U}Vk+ikJB=i3+W#X*8|e|&<^lXtNHv2PZNC*cB5 z>XzuC&NWk{N6>_^UlB$bc5Hyd924tJFq&+3Up&I3I&_h~=l}Q1P*_}7R4EmT)1`Wn zp&meJyjNueSrWxPL~)=Dw09@;N(S8nFzn&CGX&E4%13*7V+W_M=JQti2iao#?BXk7 zMHg&}$&0aM25-{}&?~`j?w-ykE|hZH-dn3ZUO%6^rL)j+E4zPLJMhI_ZP4h%i-@>0 zlDxKIMC%g9qDvUqXv7jaBS@sqWT-J%A!L4d$Oy3lQ2#{h%@1&k#*b?y{GwK_ozp&* zzK~wiuHrAXCA5Y3Nv&Lbhxo1*-?5P0WA5ZT13qFE_$_Iv7zhcI9#PUIw8Ryl)`QXc zzDuoqua>Ueq#J&%YujFyiu88$!?;!Oek&`~+o75}P*)f{WT*>kTzCiJ*-&K~OEhT; zm64SIh|<+hTGqB*9@n-`TK}zK4X^yB^%k;wB(_-FBh7>_(2UymV+3&mfFT@4A{++Q z2TEYJvsf_&AxNa-4AT%aiK!B~Q!Lc0_)^dn^6|y|n*#^nbKGMt*Dk%RnX{-bOz*1=9#x_qh)E%YN{-gUe3~K`OnOydba5Ca9OkRD zqe7^a+`aF%nhfheb$d_%tP6Sz^C(G73ZQcBZY72~yJxRT zK+1417zEtq3giR@z>`IYPCsro)wF(fc*89(EI7dn-~UScdW2=nfa$O-E1xW(uTdBEe zfJ3Zlq@1jr{Jwfy;~{u4&x#j;8H9p}w#JirU^Jmcgb%CMIMT|5Cll0=*5PD`f*>#* zLIh8d$D85^a)M@$u8*8Ffn3MeIUE)DUH{yf4~|z(85K(GUq7;bXwAKKBTZgyXXTED z(b{X;mzZn6l3d(-zLd9d+2-}!b<=W;fqJwn6@BQ#NDF%)CscugQ)}Qo>0;fINeho5 zrn7`)TU}vhg40KI1XYsUrdOa4%x47>QqOzww3qiS9Cq`->t~+a+j9Rq+UMHeq!QkZ z_o~;Gv0b=lKX`NsO%iK7hlO{1=X zPu$CUk8E7KmKXi_#g<=h;P&7DYQvHh>DyOrCE2OB^I_23i}44v!%bATVaSMPCSl0< zEN+VY(c^%)l2W9?`2v5R8^i~sX>rkn*cWxx3UdUgu9z5?yTI{&#sdPAszeb>*)DbhYG%H#$7iMlD*lAOTI zoEcV|(pfy4pyOm=Cv}7eK1)_gy2?ayFri5CQE-Fm1^wen!(Jctk=G4F&F7^<9~o+i z)Bq=O4~DJXg#imk3G8LiyR2Lfm`N}baZ|bO!YpWc=C#oqo5ocSEy(@)Yi*gK`sgIj zM=vF&wRy|?r)eLwK5M9k{OHhC~Z za0&KKqQgk@_R4DN-SlUbt<>S^Mq7ER_ zRHKAF0BQuX^#%w^HcCHt*c*?)nhM3?f>eO^=qa3Lz4Tw=(tyv508kj@IRqp1<$mG8 z*4=120*J^g9ncPDcw2jp>eJLPt@ZQt2QvA_hx}T5du5hm;>bfVXCBpF{93!rYi3@1 z*ON0RKUjI~ieI-K;kk+#3$l;fg+^o_WpEEg>~sd*Rflj~yxQ zJFIs>R$oKYzWREF_?xqJuno=#S$R!VQpSdK0qG(E>AE5y^|>=5{YXG!7&}0~SSSOU zKKn=(8maAYw~=tPQnW%;Ao`*L5tDcz4kQCz5Q0v3?;X>Rysa%=H)(>&`{DMZ4b>mK zjELOXe}C+Gjbia6whBM#rZVWhSn@~3ka!`d6uEZi|I z@Zbb9W)A4Rl&|~XWbw+ZPxLD7az7z2yPu5b#wG~utN-dOCnm(id-}mTo>P)g@Z{X@rluD^IpgF}ZCT}z z#&O!sR}F3&C(qq9y6(QJF@N|ISaIgUg*zTca5VOhAJm*z#tYi!WfYlB{bB3UGIFwX z;(TZma6Sqdg0>@cPlw{r5Xe*nd8wSDVhH%^Qtz%c78Na37an>`TQ;zIY6B`)Tl@YA z8YBxAwj4!`bp7-q>SKpx2h5Aci0U*&^^X8}Z_$_A}F@ydFKK)aC^XR4tBStngj+QF8kB9Ek{;k4fILZ6- zxO*Oa@Sd&PXjq|+>mc{vL>)cMPsoU!>IgtYX9yD*LQMrXup+JmL|r{Zxl+X=;*H5! zfn*O<7hDjQDSCy1pfJ>_;t3Q8LS;&-aI5kTf?}*EP>_dig~4wa?@Q|18uL2dzuZ0d z=%LeRU#P!xu-iR)+=wAV#?%irXkOF!yC2tH)h@scd%2=!X{uHs=iGDq>ih0lwPG2y zrylKTL3`XRjZMOgjrdw3zK%f?()A{Q+^9dv2Ed+*#R;B0PjB{5K~5re}SkJxzv z%rK8eC=0=$f-TIDAp4n7T#cGI388XKL=b95?oUZ?M?X&dT>s$*~i}T{m%;ZrkkK^y6>&yBWXwHSf)B+ish;rfB=>=-4(qfi}2UU!9My49`fc zg`LGmoxr_LACdo9)Fi=xFEUFl?QnHFDV1uct@fi0>0C?!R$!IGlX+{%)Pt0o*cn4HNgy7%mpRy1V5ul0H&?!++PSPOf5b~J9!7S#r- zMc7qgqlot+pi5ZaUid=L&E)P9)|3bt^@{K?FBw*(Dy?2{tmGo*wULs9bqE`g6h<^z zq^y$bJ~)^H!bF6>+f}x28f?RO?ep1V=8f4h>E(Tf>PJ_6c~1L48#XUTJC~9A;;S6g zS^^zF*s9_Q1aB0=l=+w$j5E>&A;i9@% z_UtF^B&E#}kHO4Ecy|g}2oy@Lcz~yoOtHA4c$(|9h#M2}V?=S9q7s%AmhA}`c4!>o zNg=|KXdi|03`IOBnGJy?zPc&jY%=tm#g$2gc9SW^)y$V^C$)*UrFl&yu7%n(d9F6< zqis!G0-{s$;fj&xhVuQF@0C)1y+-@Ta1Dqb>Iq}Qh#WiiQ!I&kIHXg(0 zYP($`RQWGdU2!Mi5LRI zOeoSVdpEk3rY6j#%8;DJCCD?O_7llz4ld%HKn00EeAHpISe!5OE!u$k%dd^DD;v^t zbe{maVM(ZZXisU=}iuNwiub;NZPzL-b$ZkLc7(wa~6*Sudej(zY=>sq({HF<| zNPx_Bl!g=hWWFX~3aTWRhW#SA)=vYGtcnCbY9Vk%iWiJWaH_&xI&2XGGb+mV1V;44 zbl&BVd@$n7J_I+oC@IB-sXd9{ehb%3`SAGo%IpQJZo9EZ)##W1GWia^3$dtIYa2II zYUd5U{A}&(1sT zunaMQE=t64Av83Vbdrl^gcPSUXinXYx2;-`)35QRzf8G(;ru(M{N<%Va;PWw&ROEM zyO%BCaXEQD15c>juu;2uy!Liu?GKwa4WNFmmK<_F!*twHhtuI)L1eMSXB&rD3fJ%Upte&}Z=<@MvZYW*Zd)A}FR*qXUYaYCv zNpq4j%Li0wpUq9n01%7(KMiVJUJZLUj`h;@I_biWn|H&^>9e%3A>2CJ=xS`9Hhuyk-Z)zgd0mY@OeUm? z;u|R9&WaQx5s_sV$Al^fUn;%{Un-{O1Z5_4Bw>XU5(S%k!Ppe|nLyzTc66c(2dXy- zoo5FGWEJq0tj~);sGjay&I+sr=YBrPA69=-g*)fL^O_1w4Qy^rg(v*m+^&DQ=o zY5OR|!dDda9oc&djWG%K-6dddipT|9&ftGi)4_tUPz0`w(D$U%krcfrQV{QsxHp@g zZ7RavlMwkQd3`(qnUM%8g?NG4q}bd~o6OeOI425$Yyl~HI@aNY8ACT^xzr@!2#8yH znn@;$m7YZF$`hz<1%8}D2)-4S$&BSbp1E`TP-X^Kvb zCF{2|9P6OojYX&trt4uxES)*Pu!^&k_*so5{V#zUi~_jyq*?N8gnU6CZGp02S%@|Z zzx(Km&`0+jzj*PYw(a}xzdr(BtcCy3*8AnN{O3+nE+R#Gu_qYf>LZzYYaPf>je=9< zG)f}{dK9FQFe#^wL=`yIQgBAReg$4SBzU_b+4{xoqDZoS1R$d~XkjGT>!;+&0+(v& z0dy)G)3awR4o_NUZgCm-K}{}&`C_A?4U%Q1fnY)MSR-S+TjcsH8Fmz-8 zIh$7x;K7FZx#OnvF$4!JFPeV$`j+|+yBF5vRc8#_HF?yst0r#0Pp$tpf54<3{faB6 zESVpw?NfABMSZScr{!7syqsVP!WK$kMU;J{_(BwV14NQ`9YK8^(J>$iV%eiH&K(E} z>Ykm|B_8%{)95kRT{mWQ6F=KjTYKGgwO3Ctt{pM-uiJnI9QW`8mCLy3A zd3x{W2?0&fuehd`qwd)_%OeLxQ#({}yw4ehtD zo#KrrTC{&X^ayvgJi?uiKB9fK*S%h{A93u*k%_=t^pVuFuW+d zfkb^8DKHPL4pq(&Vu7Yg2$F!GiQ<@|P9&m)IR`cx!lqq8gvx>(eyG2Gf#uhf?p~pjECKS-EP3KXX*y zc$10RTf=INIdT!=(P2;{BHd`^#^|nwujPr_1@6@TaS&o7S^F3FXrD;10nXj0{YHEI zUjDbvL(q<5&A)_g(}0OUs3T$>5E6+(hNO0`Am&Uy9X0#Fi*!LI^{0oO(G-jV*}u~+ zQg&h6c0LjB{C~>>lz%cF@-ZTQ{ohAKMwu7`8Twc$%b@y|H(AVvkOkUZ9B@BeW7x|uCmm~VFi@(=U7Vw#5yUF`K`FkZ+DSc@O2>Fyu2&0fl zddxkXI1x`&{s?=Jv`bX}09@>lIAj3|IL|I3>XOKfBi!pWi-D!C2htaEeT3*vvdSrY zr%v5FW%85L@cZScUcE+*=-qpS+=zl{PfVG-XX=zaQ%XmTF6nvo)l|o7*a!WLIl@kE zjv~C2REyb*O)U7JSWCmQ2>g*9u;h#~v5FDOUql7MFo5=r)p_BHZ2%CZi){eDr->Zw z>uAI!7wk_%Kn#Lb+m&Qn%I1*vb|&0Dz-N-4!JJX5k-mgYn!p;Fh-!;^=@3d9u|+8f zINx(Rx?V=uBuq|IEb8nLAxs`rUk@y|k%59qvkz#UhhPKpYU}BjLhw-bC19H}k*oo? zcE8%E7TxtwxAKYi^9gMe-y1h@AQV#7@cy^nSXg)M^|$`*)Vt#vGx{`$dR9sm(naKA zWKm8$MX*IM#tINf0j61F%%_RLadAl%245te!rzeA2>AH`rV^IvsJTU@5 ziw5m`DZUKOU?8VW{kUSXmISbr75ef(Dg@U{Z>k?sODq&q=2c;5{fB}#F2ilbb z?E*K);4#;YgXy5}`+)sCXB)3sK47v}bH zYz%|XDjHUSbq;7aSioiYC2Yb7`H5)R7zCKtBQ z@2;j+G~c^&(U-As zmLaE}fPA>iVA@hQm|ZHPe9oxdYS6hZr#yrpa@|sG96O+A-Jt5%t&?iD-*V?DO-n8c zgyJ@)=G-u9?wV8@?-dyDGcj+mVI+x=K@qptsZuFi3-%?31dn0P*!}1Wt;Id3PHmQJ)f0dC-M*7= zK5^|ed-tI}BVm)|cGx84R-Og#OP0PH32Wp6A~x1&E1}FhFiBGB_#6V3C)}r{CTr>U zUO8k~VGU_;W|Q%NGlzX@_^j<2?Eh{^z|wgpw&MAY>sjLZBDp+z9bsi1*OAfA%%hDb z>3O*b*R$DTI4jL~%NlS7))UfN+;pYuBKG!T6w<$u}XeSkkx_*`Q_S~AvX z9Sf|E6@$5>5|4$kFsn_3c<+WxN`ZEf9~LNVtetc~Y$7ZTy8uJ%WbnX2OMoIdXyFQv zrbC$FD+gA${jEzm z^_gBin?*oVta}5J+2w~JW0?mcEy2poR-VI`9e_*1a|j9Kj%T%hX%{2hVmNzP`;Ob5 zfp_-8b4cg?=6P<1sDU*)v;AJ<_lWTHK-y%G&yMT^H5EN`C8a@MRseAuh0rR9QQWgnab}SGFW>r+^cf?R>UAv_DK1X zn^qpyR#E~<-mg}!JjU;OXq>bvrS^)oe(}GkEpX zHG*+;KO+TEO0lH~Lc7A

    4+Rk{^nEe&B3hh;m1Nn#!_qKJ?m8a#`NhlUXiEb(GA4 zf3OFUFYq$r-a;L*CSp-3H4W2|Vt};d0TByusUg^cA*WiPk1r)a-UJHYp>?(>7dav) zXLajN9UE{d_%*}ziIJyx$w~wiL0YI=g;MMao4pA564ge&1y$RD4L)eyPKo-U(dU$t zff!dYBLGH0*5hcNfPllk-TPMc?OrnUcS}D#d*_n_N`5o2-^kSJYi^ygX~cl36aFfX ze6RJDaK&{a`V?k55_)7^|L`sQB1suMm{wYplagIjFnD3@@<~0%8AVuS`NY z#v$rs&VtU*Mm&2jwnxu}QPM()w$=oHH^ z>aKKaMLCc1_2g zFiY**b}WB;?bzDJ2E)YY0cud+zEQp;pM>5{hOcIBRBuCsi^Z}!L#;c41u1qJ%9~at zKv0$N<##CWfKc8k!~#*}odzYN#u4J7t8TFb$Nx%oBN#WTyX$!$p0aZ8uswsH)n3s) zSvhmu6JrkXrFI_3EWByf*5s0#X2j?ra5?j5&1^yT_`b40&3{G`8sT7G4`{q@WC>Ir&+8B(U}W@V9c;pgzHl-gaA-Fj$XfkXA zv|MrmE9#Q-j_K!r4`N-<*LB1KlO1fX0(KY=dadcQYMYl#O03$ZySA;A=Rj7!AEpno z-e@g?7&3iy@+ClQCFqo+m2-fKI>hp54lIu*=$L|qDOH0P6r;##5fmmop-6s<0U!dL zk%*Wol#^J5pv#;Leh$CB&`G&VxbSCU$?ideA51e0!89PEjpS!qBN-1?XfJAy@tvzz zZ62Aiq;ln27@0GWf@1BQvsvu?Za(?V5AviR61ri{1sacEm{&u8)B2|cG{Z@vnIwF4 zSUH5U21E?6A*AMGgwnB^g%w4*+mo;&aHM-waqH_+rGQ@$gAXS+JmIRF+Jo3vz>wYD zVU~jB-zroypnsiBgc05AXIdA*@*T}2-z3mSqfoo`6pi}veGh$ij$5Mow&}>)FSp)* zS%ju;87V?j$B&Xe*A=clK3A>MF8rWt+M>+$>#szrZZngj#rVWO*uG>F>$dM~Rv_jl zj{|iqLLOEuA{+>nvxHOuT{?>NwFqRg4{g*@0>VVbWDt&2^W#JB&*tkV?$X9BUO5y% z=0K&-`dz8T({IRwk2*_!*U-;&3Ui(WU^-W@BpA+w6$(^ItZ&iWfvA=+$gBm zB~t--|8?McU~jCN8C}j+Wll(gIOLhaenzNW6w_2?TdD5#x1EkwR)ncwIfE|`9-BmI zsEVghF&9!$tnB?!F(bLv`{Tj$?;ihNq?F3e{YIHqY6kR+oKuf;zsuvqshfV`K|8Kz3?|^?>cxxdjs%#%A?$%kMt*+qBHI(&FDfh20d;7DDafi6V_&W0-?wXuR4NLVn^IbNGLL#yqpjGhV}7{(+I!zw$ zm}6B^H#ir|Oi+hlg;QkgdYeb__`&Jg6UZxF_XOguzb4t8h4*|R-lMOV+T}fxzSb;W zqRLp@9Q+_&=Aq?MvxcPc`naZR@N_>O6R+KK9Ai4V_NvS#D4-W`iM3b|de z%9Z{Bc%V9ttYGNq=o z5UsR+qKHmPgBnA~D8AiwiM_7jCtZ&_*T$7p9x$) zfQTi1#29ry5JC-!-zhW*C^!*84@Kw_gU}`L0Plj2Ksx`^cfl1F(O-AvU08(xjrtGY zK^K1k;~Lhql;#5WF)$WDOqMoU`kEKEVdWRGsDZ>%r5Zyza-n08O@Mp|LYNWjtC&LM zWhE~O0^(zAG+U3ckPjG(IEV#Qqf5jgnDM`?p(<9)vRzp@HBRVP0MmL%SPmlo%1!1} z*gZKbS8D%yAuqW6rb#KJ^@0=}xT6kq!gSMs^zz zaiFz?KPXA~s|I>?Q%WOdlPL3rqAo4PgOPz~zns&EW>Zr!1M!rGQ*)?IsVU^hOZ5TD z%@Hw-IRxcmno1FXsW~u|;}eo7c>z`sUqzb0&<*3?Om*b*HyHSDad@#ZXsM3z>1FzHluoqh2bPF232!tkl3!l;gTx4UH_}b_jA7{$ z2)2kr_l#juA=W&)`O6u?Nbq58qj;=U;ltWSFFc+1?{TyB{>Qgi%|?@=w4Id#*xu3t{A^nhzk5gzP2yVbUK-8i!B6-n&zI-Zc!16f z$n!66rA^q6fX0k-O=a+hjWl4~U^X(mv%JZaj`A@-FSk68`?KjjTpcd1n%PLx!yV6A zp1^ZIzdnYpi@NZn9k)B&$F7gN>N}Qhp~}(UlM@b+=yUxa+F;q- zwudom8Lp49Jg>JZdX;ux%6sT+VyOi zbe7d%E0;&I0(l+EmcbXhk>yFXtlqF5B0yo)*v4Tiz*dDVh;3r@cr^Ayu$9sM(j-cSQHIajk_l$_H7<!= zNyII*vKnI+TZeDfV_z>{MB7HAJ!hEL*u>UJJJ>4ef%XTCRXE> zGlm!O{1CR(u#c7D+FE>%nX6e6eETu--`X|V!AcBESwFb&*I++L(6WQ}3R?{tO-I=z z>@9SU%-C%CEq2!Q0BbT7uoB}!RwJGP?WqiPzhs!iDyhs+!unyWq_!9*iTX?@dh=E7 zyHQ?Y2#V)Nnpd@dYhFzo8;d`qlO^a*wEx*=-rD{>^#%H2hvtMrb3puXt3pA$MszXOp$vV|b)&uzeT_Zdwcfmk%{0G<`-n&0Wsl2~Fn2qNbv#}` z|E+?l5#38T=4Y{0>KpqCdz8T!#l(1^F@X*JRs;U1!Ep3q%cAjO&|sHp7+Xt4U(}c` zP~YI)Ay$KJBs-*yrgx*SC?35WvB+7FLCp9WD=?m81=ccbCA1CzJZt*@CGf57lzK`Z z8x|S18BQ3!ms8|P@}2S?`A_o4#!}-%(;cRd&Ew3=&6?#VOW5+Q)nd)J4zTWt zX^Pn%(`u`-{mOR2)@q+=-)TQ$zZlyiwl?-Phubm5@pzmit}gCa+_%nBXS1u1Yo4pc z^@f|do$hM)B=;@uot}8l?VeY?S9$ODe(c-pyA)pOP-UwA^F>sQv9Ej^2gMxQV*mhrVU8@G(9u@CI40aDgI6P zdvXndMS&9;-7@B7{5>cK8-qK8uVuP3`)A&fxi|Ar<{O!R$*Re!&zh1oFKc<$9a;Be zy`S}I*2OF>J0?3mJ0rU=yH9pi_MYrW_R;J&vj3d@_v{Nf?wmVv?#XG%c_QaP&av+H z?ss+H(S3LKaQ7qKU+aE4_qN7>#*rMHxBLhq9P`4a2L8G%s9 zkmwv+JQc&zHHfPgWMkk+w&Kp2*z{wLIGvf%V+qI0qsIp1=q?Pxyb~nR+~P6W*qO$B#M{Vk_=^y5nmFzwqoh&~X-?^>=>L zk2*{iB{M{A>D|-{oi0;A2|vze;@l7ajb2Y`(E|K+g;}`wCR~|=Yr}r>G|{54Lua>7 zryQGK`1d8shzAVd1|#O(v=S3mb`>)#`YSMTSUbRl{`N3Jf8#O#Pej~8H=uhdSc@nP z(F}g%WoBT8lnEb9Hmv0CESL2Ve<`W}-!Bq>?C^y7Rway-reAd*Fniw*=y_+dxO2n{=m+IdT+BovbWe%;JFKI zD?82JVeg_({>lCYq{<30 zqTg?2x3Sgu>zH5SZ$!O^`Mt`X$0+%boxvhZRwQlO5cd;{_=Py`!9{7HJ@SE>P zyv{T1B^F^%vzM^~$CEss9bqr9L+}nK@+7ti0bI%Wn~SMD&AfQttm5K<#nJr`eLtu) zx(`M7Wzl^F?MsV`#r@cqM9;Vthx#-8QvYZZhO zj!-PM4Jzk%jaRGa??Nh0{83479S&|ApNc=?*wg@g(mzx&=I%_w*C2Nfv!L2BlWqq8h4};BlLO=s{*()y_Ig?6|@9LdWTN#hdqk E0HNKzPXGV_ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff deleted file mode 100644 index de4f8e77e890aa401db7bf258ec31b02ee184053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19972 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot deleted file mode 100644 index e4f4ab0db8c0172efd8c0b6e49c9db1d916a19b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33758 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 PPAX@+o>LdMx{3Y+lZLfZ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg deleted file mode 100644 index a699015a3..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg +++ /dev/null @@ -1,251 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf deleted file mode 100644 index 7e636eb4c051bfed4971d912387eb4554ee47cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33532 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 z 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff deleted file mode 100644 index f81b21618a3a5665123072c94044839f6871023c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21824 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
    shdk2P8wb?1{b!eg6-^b1nNU z!W?=CbLfFt#sB1R8UJ3?d7niuVHQ5Kx1IKd@Ba{OQ)As6dg6+iy)cU~GisRSWBL&fb8ko<9eHWu^l`*~1cDOp_=Or0IV9s<@QunEvYhkZ!v%Jq z_j3cu$amz(yvb?R9`ml#3t8mzAZCIX628~$B4u{<4ClXg{NBv!D)YY?z0P}+2i%d4 zdSV5V*U{fS2NmrAc-muNU@(HhEQV=}4NMkHUzppNmoQ&rVPnx^$zz$qvW4Xy%R5#l z)*jXyYyoWh*u~ge*jI6wam?d*!>Pt;#Tmz0#CeBn71tB)9PS-F0z64PYj|0BD|lD& ze&NgDo5yd%KZF0BK!Ct9K?T7M!6QO;LODXGg#HK{2qy@y5q=kGwoBbjy+?hU z`X3E7jS`I+8Y?t*Xq?it(e%&^(M-_H(X7yH(LAGhL-UE|2hBfP99kk;3R*f^7Fu0e z)3g?8t<&12bxiA$))(y@?F#J{?Frg*v{&e8>DV!Z009610PX-y00jU&00aO60096302TlM0RRDc00RI4c-n=K zJ8r^27=%CbQqrVIm2wXdtblTZBp@mZqVzVHhh*7_Llj8OQD|s61t-ZdqRg(>hyn>& zzcu@NW_CQl6;tX2jccILlsMp4rxMpNY&@=W!`9;lkL*2ea>uX7Egtyu_&^qfJhNb? zS!#Yrn8D1>{9W309RT`sok=x9iQ{w-&Y%*4NMyI)Jq<7Se_~1)Ug`Py-w!2fc?JWEU{@YSn zc-n2zM{HAJ48ZZf)3j;Ry?5Drz4wwdEjytJd+$x5O&dlFDPd2sr$9*DK&%TO_7w8~ zh`q!{f-_qj3Rig5`?z7r`pG_6mW>VmG@2PA#Q)-lnSzZN?8Fj>gLo2fl1LKCq>xG) z>12>e7TM&GOCI?YP)HHQl+cXkw4f!eXiXd1(vJ3Ypd+2=Oc%P+4GkRw7j8V1;-!po zy3>Q6^rAO?=!*|O{iq;7kp2u{AcGjp5QZ|0;f!D;qZrK?#xjoaOkg6Dn9LNWGL7lX zpi*ocW<49Y&R#yTk)3Q~A4fSNF>K{M>)0c9iDiexv6)+Z6bJh`#xENA%^^;3pSzr7 zCbQT@6%VQA9uIiRBOddF&*t@B@Qml2qK2RB<~1*QMJ-?X&K719W)Ab1OC1NOX94qx z&_I-hEMhTVSi&-vvYeHy;4%kU%_`QgmT%?(MWYwWkapiGJ=*KrPpl_ zL?iW0ML_Kn^jrIw8cLVa{TD|ipsxS`c-q^+_`h`nV=sgE29AJ;jf{+aksICEv?CNZ z2t;~s5D5Y@8X{#kuxZCcFl=B^aNWSH?XrPG!F3Z$7n3%a!w%$dq(C`rKn}Ytl*0<- zuxUX#oC>bH7+4s^86bSd4O~#ecz~+7{xNB9WOge9a=C$A9$7e-7o?4={yzg;gbyUb T%P0XCiQFKf4FJ+YH{}2T4(1!x diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot deleted file mode 100644 index c31595212fcbd4ff65267f36b92bb733e85f64ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34798 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 - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf deleted file mode 100644 index cb3fda65e9f6e05f49f7cd67ffa9c2850cfffc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34612 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 gw%zmJ)NB{r; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot deleted file mode 100644 index f17617e0396d6395a3fd3db07604c1754d2e7b1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29794 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index c7ae13a29..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf deleted file mode 100644 index b83078a6075d5d7800466c2981158fc721fd9419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29612 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

    5FqS%E< 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 E2guaj@Bjb+ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index ff882b6acaa0fb595bb7658ec36d663394de3fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19396 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 diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 95c6c619d305e4aec571cad1d0af35ce677d0236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34578 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 aEQu3y2~1#<>~m}~SW|k0tqYp4vHCyok7ken diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 535e68823..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf deleted file mode 100644 index 3162ff8eb1ecc63453f2c88a43e57fbbee5d5c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34368 zcmbrn33wD$x<6c}s(MR0onF(~)1A%&1QL=ai2(!1z6mh`hOk3G_C+Ab5|Moq5D-K~ zMMOkYtm*_rL=7q^GK!2Nj5>}uj+eYVqy z`_=*z1i_AjEC~Jj4ZnT-?pN9i0<&T?xqqL&{aCUf;e9*2_YJ!b$#W$JXUNi}xQ2f;i>wi3{do+%5>l zTkvYWd)AVv8Ozu7!26zpu;5SArcA85e)>q1AS_MB^`dDQu(gvfpA0rpTe&izhc9? zcp4Ez{{CAW0XMwEbfmwsj)FlD438RuxKWz^DqRq!ih@}bqa~wckVO&85x?sx_(tP9 z1XUsbwmW;{KE4~WF->y|Ys_233ZKB9q-$~y!!f+zEsod+{+G<(3BoscN8`zu1K=xk z#^+=}_dcP8<+D54z2X`1Q}Iu}D4*Mx=u7pb`?7p_zOKGLzVW_=z8C!ImxUX0OAEf~ z6ZYX7<*nZke0E>FFFE{;lAnD;XlZHrs^!g=?Je_LZr6n7e>8t{`RwJlFQ2+xfBCh` zCoYFBKX-ZG<#m_ux!moGGrk7H-@~)TWB&L5m@&K+_zENF(qG$uShpk_j3%=sD%u)j zi?utPF1IJn8=sJvl$?^9=JTfqGBUHW+qLhI)3H--Ug!LRV3)$8;#*3(cDuE-dyk&C z_391m?muAQput0KA3Ch;j`BN)j~IDZ#i+{BW5$jfKVhPC^!@_}pLzDV z=MTT|;!8&qwf1P;vEwhFeD$^0g?p-|O#kBEr{>N4TlEZK!=u6iLAZM{pX99N!l4r@ zC(ofbvuiF-TDA7!x8A<=$3K1k$)~Rfr%wO%%3r?v?{9=9pZ!@_^T6sYo3=f;ee15> z!b5u>f9%aO@6H#5cb4+o02_1+7$@8&+#!qCl> zMeI1ZyrOSll)sZAb(|jWQ+k$F_?4ccIw^8T`l>(RUs~~b()**5@VScSq<@S`3iuU6 zPKDC1dKAAfY838g=omAmvXf%$sHU?Gc)D-Hm@!F;fZLclsu_H!XX}u;qtoFl$?K$8 zI{IqpA#daUK1IqL81N}_)*wYFtJpMU(?lPg+>+$?k4oCa-<9j{=z&rC?CeQ)KOPd@ z(f5149BW5ko?^-wQ{nUV5A>Tj!&l*}nxx-?J{Lnz#-n|keEm1|n;6*S+Z5oB3n)T) zh0+tB#QNy5O3x|u2H&yqCzW1|_xqE47dHV6_|ibkZA5r(m>)hC+cDs~7=C!bS26g` zB)`H&Rcyk71_m|-e47St3QVM#&~oTV^Rd%5II#^5S^%9mf3W~eG|(?FamIwUE1|Et zI${x<))UwURRuPg6kl1ztx5H`;_g^0^khAI^?4=z=J}#lB3E|4Iw7s#1z%Q6my;;TvTOigCg5i1Itk*YlCWGIYQ_Bpu_LT^gH~g zq=C(8;*#d|hGW+UO_To%_bqGro;BgV79j@MA2QQ@rRauGH15k38{Mh^KpC0?+QxS%2w=PF~e4Dmkx^d=I`l`;3$HU1;ZfRKS@YqMM5YJ z>kN4k5`)2D$b_Ya%+Xey*9k1n6q8dcI+9Z|yg^kkHq^Sk@ktrpf;xlDFG=>)G`eKK zC8H%O2A7xud`!HkCd4)<33fG(u-ClC44Y<3ds5iPAg%@x0*4i8@hQ z@sBs@L`k&QiisvyPOZd`Mmpk7wUz`kPU7sfQE|~Y@z`r)JXU^h zx8nJ?aL=U3eUc;hNukfwrba%QM&nXXyC~60><(HgG4|YF{8M@+0>-Xlzsrw59nyZ2 zU!uQ&i~i_RxtZlG)-IV@@w&sg9f`+YUbGi&v0E7xm#)>W*V!)D&A?PhNc zV_VDE8Lcb*m1*}3(@NP}^oMcmmn3Xy*(m#scEJz%oyYDJl(al0IjG9U2Bm#LC{2#a zsqLATV#!fb3zV!p#T`_wxD<=M=$xlmE~@FV4YjH17ITi8Vrx*+?P?4##)eayUG0d| z1nft?z8~FpG;X79kd;)s5>v0F*cDs70dH#M)EHOJiSBzE594}tt%2SeYOVBwPu0ez z*Z@s89Zz)M+jx?H$U|=pwaN5C_elHsJu>xsWJT`L{^#G$qqiYEh&V{VXmdDAl+2P4 zhUv^xA{;fu*gTne`UbI{R@q>Ub$gQ2GPBx;2lY$XGA5{U8c0M)Dk)L29JS2iOvvz- zC|0N9AlfWUWkFZ2SlFeg2Me0wyr!&dDOCiu#%1m_hWC! z_4S4xLrX2q+O5MT^?LYt^!MM3K56{WDY@*wEnAz$nbt2HGP5Jmr$N}>(qQ=Ba8|HF zw@MW{3MIlzLMR4QTI-MLV9QZE8yiA4B2<|eUXrn)F3KGv$AInNG*HA(14gjHuAB`z zu+t8^8c%Ejr$)P)hSN?s?POPjIL*TTcf+d#Ohkz(QQ{q;C_8vbi5l$WaE5Fh0yqcM zlvwbysLlXmS|<#+9coq(9|{y<#35iL$)OtKO8`$-7blpV!!3f_Wx2raBzIh}pvVd6 z1=5Wo~(nT-=XqOXl*6 zBg+S@dUC+fvbAN>xP7eiW7^j*X&>%=xVeb9xm2}a;e*V)efF$v+E2|nbbZ?c{Q6@H z7qZ*`G<()|tqF8BwB;K^lHq+JP3RyL3Uh=|0&&6=V*3D}63kOAW*E3)7uY}?^D>I zfi)>}r@nlA+3F>Y+n;@B(%!YR&M(&X9oW#H70y2Q$ox??n^>RySE_p7zwGf-kE|N8 zsd|`}Klt2;f4}zQ@mUj2?pwTL#5DGgVRJW%@2}Z4YS*mM(>4(PF+r0KviG_CN!O)M zSoAPO<}y(92yVz7$knj4(I9DbA;Z5vO*<)`#rLCOyM!bzJgpptCPxGD9^#*NCkqOq z!|n=*(|%y`bglWuin1Nd#_kgPuo&%|=HuE4?JezVQp_=@mMZNeJB@o<>7GV@&zL+# zx~N)kPaD6dBsd*i#O$EcVHeq6#+pm|mF@Vq)`D+3#euBBJQhV4{5Wiw0Z179exM3Yp`p+70k3&A+Jt~7A!IzW#Kytt;UKS zjnd&*?D?fg8XzZm6;ppuMK+O z)?xI3G&Gev*;zaLv9glB+w!f@h;LbhyfzwEMAc%XOSNiQVP%UnE1=9x{i&RErw)CJ zx!MHWfbB1JJ+=tl#|mrHfauyR?RVdxEWJo{d`0S#6s3*KN%#_RkkDvp1Rfo%+9MWrW{s z64p?THAD%Eg^-L{DpF9_{KOzrqVp8_B3ELqVL830@mZ47HYm7?2@+beD`NeL?#mi8 zNb+K|)*wT33gLKDdSuNQ;Zi?2UuegQIf?AN@CGg z2dAW9G3yRF3prrQzRCMMep7ZFJ9XxTJJzgL9xtl9_~ILPz5TJaQoQV##&)Rh92q-r z&B}p04)2+B`Y*3*N8|}Kk7Dd?0_M?97%PObXdaTOArwzS5nEgr9hDUip%^V=o7?j# zrDL0+{*Z>Agl+CXvy-y0exXE(a;PjF{5#sIrl#T5=?J+!&=$CMK*9@i&H;z!Cp7u) zjB{?I$&<>6ffLVu;f2#5hn`sEnRDUVikfHD{NW$o^VG|Ks9Uu0{wq&TPz$GwtbKa> z-U)9!eb3U>gL@Bt=E41cNtNSYUcc_lr1rp7FW}n8a2hz^6kZWR7QzB^FeG9@zy>g3 zi-`5eP|j7s)BsDT04kn~t9WL6gX#{W#uJTabkwlel~|yL*{(?SwX#`)f@Y$lVu2QI ziN#wh9Zz(>uQAB=wHQ8Vqhko?HxWm%l?b8O7#pyLy)4P5D69U4>sLA+iP3-~BN8bl z`-5x4nf^pp9Dq!7OY^HQF^fmLRyLum`MlVBSXr*zs|Q;!L27I=R%lz;f(kaDEqiA4 zVC-uJr&+R3?$Kp3-`5!0SG(L$=dvWk01hr9-(cHe{tx)Z0*7~HS1by=@ju4BE`}t2*q+=WPCJ*Q7-!FKB<%nuos{oLTwxI}beBK4089p}8sLcj`a1EA6nShq0EC(B%?< zr89((m#{PiSjts53$PT50;z6xS`DxiW@{oejYK4C)+cP@;oq}?pDpX= z967u}dt;!vPyK?YYVZB?j^|&i+J67M=SHu)|BfB=IFlw+ z*B|)y?E}Xaoxg9#<2~js#-9BE++7X+WfY(@5KrKOA0{c51ud4W~`t<9E&aS$5;iX4HAKm@f)d_kp zbw99t_KE}G|Dvz}>ka@8b|`V7^9sAzUbn@xS-D!AR$)RMaK`j zCykPi1Pb<88tAeVz#B zL{x*~-qLp^JqHx`A^5hOgZ^_E^Du+AW($fVPqotHIrpry@h1`kRc#hLM+U^8aYzwG z=;mVzxk?mxcHoctgTk881np0w<*)UpF<~P!%1QER(1PG9WF8AdzqF(23&}4Y7{o5! ztXtkTG{EDVo3Ecx-Qoy<6sjbq#H*4huEXB}>7lomi%T7*pELlK25#JOsK za0#A+_=~C+o*F}e;swK1;b0H>}1{9UzC zc5kMRX000p+c_*RZK5eq3}Yvv1{{Vum!H$eI^xACPrkh7nGxfIo-xLh8Plro>9&5s z=0n|XxvhUuU&EaIuFq{>adC0!`0*1`*6bQMeA$}8vzAYxwbir?FzzvgU?=y3uR0VY zxmlE_=9?R6f2~2a6bfH@fzmrqO~hG;JXI!bwLfPhx!|_By6V>zbktQ>57J;Ar`gpk zESE&ZFiQ2mqpEC>gxY#TXG-BTV0@)e1j|&5waqDF2m5d%vqF`9L z&^ct$1IJK7u?Li#A!c%pRqO)Wx3QY5>?J0?#*&_#cY6M$`Et?YmGjoz_g_1ft{R@* zx7Wyr?ppQ3;s4gw{(%*-`12qC{?l{XxkK#hI|fd9veVFB1Lwayl{GOptNm`fcI8N| z_Qf-EMopZ$W943LTNmy019$YlW9LsR_BO8jL|gKMc3FG9yt4cmR`Q22Q$h!s-&_4L zXl^@n+K&t;f!#J?Nmx^qWOy0LQLBi-I-^-&F;GW>s!=AiBkL=o=)wpi2VwozfA7*k z4n;RAqUb77&~Kw;XfPH!N`evv;EM)JR9LnP;F$of6~YE4fh!>SEzA$I+{WfgMZM2X z@2d&gmk2s z+)$SgPqSAO2$#~~cDqR4fZ7zR8;&*ul;1#DAKTTqmun~K-q{a8l=9i^iJv&Sd+X%SpS5!85+>(&w_0a73SWX0bqLCI|pRzBrGreD`fAy>mE zQ?aefUO!uRpk{@3<+`S@k!L@tdqrzx2Uk=PT18GB*@53daGNK|A;oHQShd+bFH{D?9f_Gc;pzLNt#3Q&iN0N_it zFu$Fxkak7^(qZkyC%|_l2eN|&8O}nxKS03DXNk=JnYOCsqYHmwcf6uyd|)`HeFB-M zjlWR&8k=#2H3D{oHw!SwXkmJIh894KQvYP?Kfej;w4Y>gNwwWp60ss;sTH1*tq6P zBc|lv$QL$9`jP<`kzg$ zmSz@#XWMDfq~3NnA6O@L^)$b;k!JMJ_-2GJIj$K>fomy&9ixd9vcT_Fm}gKRov6BJF~c z?cV*-n{YAxO$;y#JNoymcH?q=m$c>Ief?veXsc`CvA5x%4_nSpSFhv6!AdN(vigwbcRd~}BlOEnO>W(!Ij_0pR1dbEk zpKN@W!zJ2YD@BVi`^@m-n+?P?>4-blM$x!bE6Fz*C+!=LYQP!bm#}kFH;dOcR%z#| z9&R@8G8}7OEN;9$NIc(684DcWnTB;qLXR*$we?$Yf1xU2qEdMJm?->)e4foUhTJ?sbEJ4U!m_xZtd23Lp*;HZpzbqLA9(Lf#>nDqRf$FKIJ zd)naTRt)t3k75QQ5LPmN44ZwV9ShiWR!sZ|jt?$jwUf~$Wgq9W!s*(XK;6Tg%QR(- z`=5sQuXj59lwDsd{Ke#hToI;iGi-64dPGAIej2zWVZd3jN7mNuBJU)h+mWkIePi^6 zN8>ZKk`)_J8%@U$j%_S%36_c!P4lLsK5s?_6vYy0i!f~q3osMkqbJsihc-3$WeetN zhhK*s*4$}{SlRqU(+iUOk><7f+@+zIyFut1o;#q(rw&2P6l0#kE)sI7rtoYdEQ#3_ zp&lp)AA+O`k}j6`48U~=J+v>x*!qvl`i{fR z5e@wSTW*9SY+K_B3`Y~rTg(Xbg>bwHU7=30M8|U8pUZk$n24ZXv@JXkVHT}@_p{U@o@dtPLZ&5)I)+hunkdklxmqdD&mO}R7V@-1Bx9~4#`EX#<1?u z?Y%!XKXG>D_BWcYYA=6eIQGg*nzi|$cUZ%qPJcd^gjUo zkJ_vsI%)ga5c$`jZv*=ncmUQ$s3Rsq9av4B)yDM`E3GGvuO|l3kFl#xtV0IQc*D?t z;i~y2o!|qCryj094-o+!0e!2@6DD-k8AF(5AtbX|v3j`CJY=g8%KPE#H=3MYSP(zk zkvw+feCVuu?nl~ds~>6l@Ke4m+MZ*LY0c^_lvW~s{Kg5M)yRZQ=+joER7qB6f-jrzjg-yh7L0*fW{V?xTX8xO z38w%y1Q}e^xnefCvbe3St1@IRdMT96MO^07ubjM;-hb|p-HWULuzK?TyL`Q#ANKUA zNoyZn+->z=AFFt-c=nhVca+}MuUCg5N_BPZiJ`d-s3% zWrg8b)1Xftn!7>nh#(r@?{5XcL@~Bhp}P=DrTumX^{JWdG&Q88fV*I7wYUg7QI2U) zQVPg#B&b3v%tG0k0JD%k)NA4obvZroOtYXUNC7FUuoyCh1-`AylSSi*5iB&l)MZTV z!9JMvoc7wYLx)B)b5g(N?-3)r@zXOS|MG&guxW?( zI85_xSpqoLa5!d#xp*X!V&H(}(Npe`M(P;ND}eZyi>p);TQ5$~zMt_u`)YCX$1G*0 z*4!v+;_>FK;yumz%?aYc=1L9|q5<-Gn<-{zBA6J1y4zb|1QQ-xC757exFk0M0}*2- zQaJVL_s4V$gq~xrr=6qt-Lb1BG^z?_v#z{`HCX{B0-076yQ5dG4{~5)^N@3Ns_Lxh zThzR9)^sReP3NWjrZLUmihjO#E##Z0c)Uf(4RcjfL^6O8QOuQxSi$ds$E-w^DP@hK z2!UeVQSUcd+!&V)L}yqU`CiGU#a{`#m%ZrHj%hEjL2m7&@p|P? zuZ{*UxB#J-fM;^MLn7FVIzB1@h@PjQGC1)7d13=1Qe47zNBy7v^#IKxVt0TF0vAR$ z0Zf?Q?N;OAzq!>Yil;3>gU%t>_tS}ho^#pS9 z%>}vDy$bF(T0JX|By@R&WI1GBv0Mf%$}b$!Ihhg_4B3fmd%(5LBESmQgN#=-l_mxk z+D-igE(bLVdlvDb?Q8siV@@)FF zvaicK8HazcPP=k<)s#`{mO)*n4q5*0{cO@{HubH~-n(&%Ik)a%EB9<${$bNy!)gW| z&BsH4025 zBP>t%H(n&L$htj1wh}RsRgJv~F150Yj7ujSLpa_94Rjl!mWeVqfS5|JT&6Md-x(Zk z^52OL1z<{or{9)}_W%|AB_TtUgL83M0-}lHicpVul2>-X#9(~M*P zP{R`TTz`1}j(B77y!)pDN|UCJ4sGjabT>b+Z0}BO<2mh#`s$e%Smnx{2U(w|_iS7C zM~&k!;gGZuI213GhW(J_f8`j%BZ0d25gMTGeYD2`FWn^yg1LgpMQf0CHWuDi3Wge? z2$815eUMpGcV2&H-OS{fb61|P-nqX2lKu-HKXR6BImPZ!b1L&5)&Bg_6VE65$CP|d z^U-m7FZPdgY*@FHOQJ-FaoQc3Su)}B&vb31Y^c%LN_cQ6RW}Oa8)`Rah%a7^*7wg! z7>!TB#eJgt>sKdoyoP_kWVK)mWB4(ijv<`4*~s`3Xsbe<2`Q`b#9)B&CVs~E)2d^< zJDD&(+5uxvu{c#@0&Qoqn|!rK^3~o%{2~|F3R1Fw`1aN?AkcnW(-Z%dFI!hn){X)3 zU%UalKRc>+%YbDwIo6+Ilg@qCOC0;tH_WMh%2sNh)O>Vf_u+&k%bO@fwQ7mcV$JXRy9c2KV3qGhQ9v@kU_ z9`Cs$FOpm+`vZEcMBi)|aFyrjOx^m^?t3<9uV}CPjSp>J^WXzdzWC;{e9>^%z|~)} z%}3dgx0g;o`g+HrXI>mQuJ31TGqd%+3ne_P#j7EY!I*~KhYv4Bz$y^lCf5iL(xw3e zxK1AfQnnC#i$h!kA>0HA3SVC9o+;S;+DiM3wer^9wta{8 zq?IMjtT}MUjmoEXx`+;>mP49b9wHA%)?_ifNk0f7lojQuxmb2Aaj;$n83J!ORUG0G}4>Tr^UCE%~d|c1ZQ!{`B{dJ}iRK zO-M4f%k9<+c%^3az$GW}D%b6Un|{6|8XR8~umPd~IIep=`S2YGPpatM~S>l~wd8 zU&1O^{qWq0kEZV5cJ8k=d-pxQiN!9OQL$#=yeVTh4Ep4oNgeK3HY{Uv#oQA!Jj0@s z=XIU^)&z^ctbO}Db97q6yywR}xMj+uU8_cnw#IhaECuH+9Q5dzX$wZ~03M^32lW%+ zV@bl7x)ch<+LOo^O<1eO(LU)8nIvpP($54CqH=01M&X)*qXRiLt%*0?A8vd`=Vjb+ zhwpJ&^sgVt4~NaNlLrLfLq0jK)k;Yun+*JzNXHP4H@6Of7zCDuWAMxwY>o)3v$~t_ zbb*DO2573PUBoNW9bz4d1$!3ocYr-P)9Qht029Ro!o1^Ek0?OwY2)b&bzx0bLFNeyqW8 z9=erH7!{V|YxchUc%4dayQhPTsGKfMv$Bllf`ThzT*O^l{x(n{&QqrVU`Z0OFP0)S_Y+KYlC@u=GMOz(r_kHp|Zdjh# z<}&4l*TivD`UW@}BRn0pSuErUq9uh(anu-0AFiLUdej;M*xUF@TRemJ z5Z=lBXr*Ha$2NF}2tDu)8IO`oiX#bB{Y=L<$RI*ZC`Zv)JyqS{gkxDWRvmW84`G8Q z9PB5H6Kk|A)_#U|?fo*NyXgn*V{wv})4W^EJE?66(;>TtHA-YRfi5Y_FJik$$is-l zOyK{G#7uTJZg0Cdp7klJOw<)P9t#YzA#CV4Eo5~6^bO%F69&L1KMwLYM>rj(caP6c z^iCKXG7*;8f@&60Ba$JiI_fMMM2;MH4qWIi&^@8Es6KFGB*8=dRHHD#C_QgN=hrIv z6dhm)ox-^EaN|Lp^!;`vy&m6F(h!SDO9xE(kwa8uz$FR!Y^u*sxSxfyIC6%<1?h39 zwq(MxEWo)=lB1%-DWtAon4-NA!ZzNdY%zSQ)A)cZWqxDXxw$j$k&L&0SiNYq!Lg@m zSHj34kN>mt?5R5w9-VP=RiH}l@%#Drth;~Z+GPt;ipMk$6%XBe%k3kye|*_|UEE)j zd2D^-K`oQRlJicklb#L3(i#&VfhF0XgrRzFqOP9C1CU70Y6D2}MS*crh=|xJC9p@x zPq%0gyK7~eKwmISsE5(@xJ|7TPw4BVV+hAKhzqPmn9t_b#a-mA6~>f$0^I-#6G~o; zfT@dkqztDg=QQxh{1$_}Ql4o%(6nk*TjnVD`25@Z?`^{v|9OxzMv>?4iO>sTkj)hF z^CPcO*Vtj;FeQoOR@l!^=~krNCF9jie*S2l*62mXL&WtQQRTRaQA}>NNS(-}9oHVO zJH74N{^M`l%@S9fUbJK5@-x+J=NoKj-6wCH)}E{T?1FaqG1jT>(Swg`pJDIBmM@^U zBw>Co*raa?H|?%44MA+dPmfzcN&5cyDiY_82o@b1jkYapPwmQ6Nl(~m;IpobkrX#}-u?9~% z#uN;=F*9B)$Ab-w2OEfU=oW^@oyvHu0oa%@=!w3YcBJ*4^w6}^PYr&yB(UNBg%70P zHRPW0ojy=sES{NLuwX`qp51OKTRranrvoV!J!gz4?$y72k2}VcKKMLP4{Mp<@{M@R z&;wdcbr|ztT2U}3mXs*sEC!NYEU21cX2lnTM7-r{j_0Bp{WG?z5`il5h#h;8A!3%1 zA!30rvVdJOgyp>4cqV)j5N;(_#I<}^4^dBLhaDNtTOzIBHQ#o8VsSA`b!uO)kGrqW z@F{&K&q`S-ecRj7+#=l3yms` zr$oaaYH0|8Kl~yz0b~m2G}RyZk-T#}R2>dYi1mUZ zLimf3ga%M(n-IjbDYFty#^6x4dusEc`ErkD|1+Z&Y!N@daSAYmKi_Z!b4a9G5318s z96>A>UX=oU8YYC%BLap&H-Y0f5$qbZC^(~#aorwVq6zbXi+0=81N#fPK*X_vTCND-FH~dPX+<6W`+*Ui4`QdAJn-dhrsmASkCB z=X#DoJc`gRs%9V)lr~cQ>+62xDFik>e}Za8h(3(SGh_Uy(?)DW;U)h9Qg|^%Cn8AX zjkbx9K%eyQRkrTF%p+ChK{+~S8yj^{Vo|-hB8O7@B zKdzX1D`v@Bz5;AkVBQwgy6QO*rij*n6!>4oClpDqakv?sNQsrq&0jjioz7;XSm_ub z9k}z(rfI{8hji0UN@?)rw-YWS>zP7nAUkr$!0*Is*XRMLyU4zXim!%HTsD>0#idzt zYLnu!VI!r34Ab*eSi)2;#BHRR|NNW~+ooht)KE=;0|zQv29m2X4Dj5b>O3|9mCLp9 zbfoc28V}*vM*hnsAzY_IW)#)FEE{aG@d+83B;V*C`_%}Sb=m2_Qzu-TdQ44?qk<*o z;6p&&Vv0I;XWf_yDb{fG=#@#ajC;X60bgO49t_rRH_v^m;zyD0SK0 zeFn$p#SEU}ZV~LaI7R!=Nwe9;^-D&InImu4j;veal$}%hcbWHP*PPN@M!wUjUsGk~ zlL8Y5XrlOnF@eVzTJ0793MOwj#=uaTC=RI7M6>tb4ID==A-1AmKXQcU;M1l3@L(fy z@~EN-DukL&`vDWgdQnY7*}5amicNsHidYq;AAUDYhdz(ls@Z^k7SxFMuJR;Xn;x}| zWM*?PCZ}X&>tKxlw(ST9Y$DZ$Q+}nQ3(-WG$G*|l|OfJ?M-Xvj?Ner^|9U?BTn+bDOx@up!& zai2lA+@`PlI^stuJTLT;5Q10+T?JcXaq)?EUwxkHLfxrspi?TTwUQF5XNRIv0sbbk zs;Cb|C?S!EIw1}n5>PS(Q(85`q>iMIzIwHc%PDwV<-{-nn-YwifN?z0{q)t<_&_wd zWRvIvAslZ~vY;eEg^*40NrYn@n+#M{21^T05i2mtMV@KMYO6zyf?7dQ2@6RY7&nn- z1FeAxa#f=`B9~oX@%7e>%B+P`QfAIs^}*s@>sD;6e!AV*PHP?#D~_|S^|2vE&aTYc zqy1SuaPZbKUEjNufXE+fX@YO>kl`J~=^qdCQY8OiZ$eh0H7biVnglD=55=L35bkN! zkU+T_X?YZ@=lpF=>!pdkc(;jZ(WWc%3dfs%I|XNI)@t8#c-cG0Y5>t0M7$R2TO z(@F|9iT`#FkA7|slgrt-SC0=Jo>;JJhxS6b_QRK>cuZOp&a3 z@^GN;h+8XQ`3cCmfuew%8wxKVLPH#0O~&TcdYBh|PD+$?N3CeIyXiCTsKam zxQfm0j-w0cCSi%uKQ6=e5RGPx5;yjO?!3ib6ZsvnK(f$G*~O$ldc!VZPKoDxte9R? zJ$-fQ%ArG7mad+*_`aztOIHjUWZSoB(bEIh48G@Sxv(c)>%MZvlJ#R&bYC%~Y-RTq zlU7vE{Bq$_`xgveHS~Z^GY7HvpM$r?32*387Ru3xqJ1Z+kA5zmC~Ulld<|Yd>WV8U zsFMve7((73oEX$nM3rI*AG{F_0jdC3pJ3Qg3kkxIH{IWT#7Tzd8|u0OWnA9R2jRJw z>R|&Sd4{^Qh#smqb=zz0ZmKwS(UHdEXk2<(MCN6z-4z#M&>$cRZx95ZZ8i?IQ;hFX{OX7g&^CJDtr+o!Z;oruSt2;ja&oih2IS*&(kF*S=tWK@@vI zP95ZO%7i>~o|hzDM0&Ldb4Z_z6t zPq$Dlk;elJ-uC*u7pz^93gKqb=`m+mW$894oh|%WvC_6uX~+J0&uL=5`%!F z0>+#12osT0B=d_f5T-9``(U2&-~(b5Q}dn}wCjlx%O9J+d1cRGV_sbN^nGcY?pyx& zn2qzs=Kr*G!po~3zcYXS>bt8KY+JlBI5{bM`lRj^U2a=7Zp!}rwAsA|E$P#>tZ3}* z-A0#o89ctn>3e&w9l3spabUPOy$FpOUm|&eb zTIh^kM$Q605`G&=-!i~Yj)qD|Hc(^TJTVw3anqTc+3Hqi-?Yyt>X2T{D)d*w$o#H7 zJ9q8Dk3ue1q8we;z zu!jAYNZa6NT%Pj84JlR+W1~(#2F9Bn!2Vh42Du@4>V|IR7Qty{8B2inI+m=ANQOovKd{qGZ%V@DT!=$zNTm^vf2LDQ{W&IYS8~f zmSp7KcaBtf!ptF^M3AZ72a@lpyMu!=qG?p7?jB$p#0b&dBjBi!)>omWhh}9D(*15n z|BZJ4Kl*Rn-r9dd7IuRk7KQ1d6DVTuZ%{;C$6PDL<2$0yP{&-FQAZzir}hPP{z87i zPpa0hD5Mj#uG|7@DnxbHnRth)?6&k$fNnxZt?pzwhYGKiOo!3|&4!#xd+cUzN4WSw zGXlR<==fhz49p9?3eJUueDG~@O69QKgzpiG`JMLcdt-h@F;9N9?TKOi{&DX|hvto) zdU}rd*?BhZt#`xZa+ZyH{}<%a{HQc<`O31TK5a3ZhN_g~V@JKfWiA_IbjxYRMcfAB z_M`=QR#d**nrFqR)O}2$xV6aWo;Z>4s!>{rekJGNPw`Su66%nndJr_XO*SFVx|-uvQ<_bz?@`K6=ozkgKa>eaLc5!Eb$Y?NnX4Y8D;0StpzhgTw# zqX)&vilrbV8#rp((1XUnJB}I9j)qq&*e;R~r9^BqqW(7eSPa_OC{YC=TMWIk0iQ|S zqKJVaRC+mcYtxz)RMs46TvJsgE<*DWZN?MFV}u# z`yAq+GA34UzoXlbA>AvBDvM{lGWCn0oPKAECE_X6=4YcLX2?r(aAFRbC?m!TB~Q{+ z+Hr-+Z)>QH^_$3Mg+AGyCKYj{QiBmc1U(vzq#&b8Z!kj5p@_;;BgosP!AN*l+w>Qi zox8lpy?chFDliSVST2(!9Mz3K*9~j+jr8vJbx!v^2{lg}g_37KE=g9eE zM%CJOLu{SLH4PMmW`$7G zgC6)2#6G>A>$EZW@ksd-Pw?0vZ?9L1aL<;n5K|cd-%S!lR4BVIJ_vX7=w5$yIti5%-M2I@O#> z1`q>NB_s==W(r3xI~XzqRD&1rMl=PbKYE?F>UhSho%@0d_Q7VoYCp;L4lO!eiMS_l`Fq_R(G7_4s7=-L-{vP2|rfCw|CZBv)IdF zeba_`;PDX?^U-D^dFmXrnOMDe%d=S{o}c>U%VK*p7DFqM%C(o~mrfWrK4ry@JE+sd zjGC&E`6bWEM{ns37Zo~EZ-;U5k!gW53w>&6t-S^Gv)0Gu(l+DOLPca;`mW9RnKqvv zY4Wz-=Ut(!_4AD;SL^r;M7F~B$8&|&@poGOF6=>Udoyx8$gdg;J8M@sH&qCtQ&710 z9DqiiFARR0-AX+d5IwOWdJ=K!giF$$zbZ-BL$^-Q zqr-}$1g9(1cVx=^+@=qZA~7}flvxIp|G=mdN`44H%e1b{&nhy7A9hmTY3-U1F|BqZ`ZsUeu@HTiAE ztA#C5%86O!J|I%jsOiM=V_!oR{ z_4~|diD%`Y6I7M({szQn9uDi}HpJSwf*6PLH?+x@$b;i04-PgoCXrkB*&WJYmzA$6?Al1eir7nFp~w1A3yJhl8xK@XmxBzAFWn9)`ty{ z)B0*Jvw^*}kXF~54b)!g&3Mg}gx-T8!y&_U=&tFAY)uz*)hH7rNh&t)wXCM%o!(!% z6K`i3?&So{QH{lp=HfM;%5h*XwRapdS=@1qH`-BRou~vL=9h{<{mV?U#>QEaI&uc+ zg_BY5{{`hsDj) zU+5y6=P&+TJJbAr)w^utHzSU8AUfssdVKG03GZDUhxsqZtC{$l<7b4|+lGzo- zoZ#c9K<}&h{cq*>uWtE{(-H9j`W*wS;1)LO_6)iJMKq6)o8%9)u)63NfyjwB2=wSS z7nCoM3(wEcbyKKZoV2KsHTA%FqVcp&T0g7Z2Qg7zmYa@frw|?ECf-NBOw~;(gOrz! z^gxgcG$!Pwqm7_S__*p1;UYQoX3j>+B7{B#G8tk9-|l z8mnm?JPX}euNI>as|dx81|yt^_{Un$xEAebkGz6JUpAzz5^x-~ncZ2P$m6ASM%*0U zOC*A#*O78-iIPZ(plArCB$p^bM=08x!Yv#Id_$q3)34j>JVn~eEixcx#QM>_m@qgZ zjn+(h9;tSvu=}uzIF?_=`fl7iYU#|reY#B;{&C&5(Vfr`&B=$)+ruKX~<>Lnd|&4$kVaW&GhYx6RJT-MW16tfH>d`<9Fu z(ZAoA;(ld&9=ZPHo{e7OLsYk9^aI!W0H=&XZ-^Gc-Y>xvxZDhbSFgGVKVr$`tyJgJ;kAJq2Tj!!5|Vv=@JT`KOsPmI z)Ns01NapR6)e^MKsxzDHMO3toUPG#d7jf#9KHLpx(#_}AA`k>Wxel0(@ERq8g?%O6 zCEZyfW)el}^&wk+*fZl^TU57Rfz2PyyANH6-_15}eyHzC;04b(be|NC)Xwv-{`MaK)NhT|i$ zcnKf>*@`dH(Kh4NAKo0_&}RJ1dpF0oalF&-Gvi%-d@%4Y7{TfnQas@a!e~6WPAU+`k#GQ(=f^?;;`)z~t3Q-VoZV@0FC-H0u9|(@ zqJBswetPtrF+OqZpk>GX~hBO_8EsMsknS?;kM~dP-5|&>)GX+0peE!kXNh? z8%R0EQ-%_4@H{`h-xd0Phxh51o_=t|BYM~+WrQm6&~` zsuZDIy@G;9QB~?DRmaJX>2wU?{3hR5(!q~;1%>QHsy|79kbb87V~@sd$HqcKCi#KO9pY{Qq&-FWBl1a+unn&2i6ZB2K8kJvZICt0@htYE+Dy z)7JN0bHrB!o8<>%)6)P(6BZfIAhefm+K&MbD$ zuwz=oLA2d5v14C&!p6Lj5~Z@xc*kmpiao6@1yFe3U*m4%<_F;CFQI&2>IJ9x^}cUe zVf`j5sCI&WQ(RD&@1VYLYCh>V`mbD|LXec2F2H4~2=0d0E*Y?l7H3K-PcFG6J#dP?&SPA>*T6G6K5{sZYX$@_w5TG>ZHKkOJu%$k=-DtZwg+9i-bkGg>|+Ta}%JU;lOZ^<$A$$34cuR@XjnCPjH!^g}`9K2~K) z;iSHpx@#YD(-WY+m?n0zPi6Xyt*Dj6+v~K6T5(_8Z$z!c{Kb_Ovlmp1om1AU zL9u4(1%ZyV92Lr#fvNaDmH?FMJ1 zmu7Y98Yh1?Yf*C7jM9G9bFvb>86}v*|Lu1W{x83w@PGJjFZQFfjK_|{eIaiCc0)L4 zlbZ1KLSG06|HTI4g?-qMrt<&K@APpRo9wOMSt*@jU%&=8gU9jxp&XAkzc?Yc{ly6v zHCo0GP6SrA-#v0*uNCd)OP8vcanTIzyQO&k&3hp~nD)93DA?v+H-EiCH2}MzSVEY9 ziACBsucSN5IlG2Sr)Dt6(zxl`jrmwt%U#RFlogOmmRXuP(B-(Bdt91S0G@6avmKv z=;y$Qo5o^haHx=O{U4sA0|znNUp|L^)5HHOpfLG2z|#g!V#`MDnpnu;E`vx~~I2)2=OMvGcsN6SG)M4L{*>_nK%GS4ijZ8wlvq zZQ;LDf~X|@TnS$I4`JZvK@h5p20ufQ5rOb#`1{&@vxk(enX^kgym8O4VKoP!ll5)+ zRz5E%h*>zU3W!iR*cC449TGKlV2J20V@*7U5{Jw%v{}LJB|Q=v?zE!keT?J@A8&r# zHqV2;pNa3EBf*Ekra$+yygYiaG+& z4}h5wkBaoA+upcIx8%{1j(*zfKm0lbC9qp9IG*Ufp>YgX{9@=Weiy=aQ`tk!k`21V zG5(VfdQq0HO`wj3N`qAvt2>R!_hq8Y)=a;XeqyB1!>*64S?gGxU!Jdh!vdul(NR;S zydmOk&94sl`s)EKYg@YgKESsOJ-3&w^s4r#HrO-*`F_ z85RA9>fjNnGaC2+ehrP9FgQUCsC~-hKdVFKPu>Dv_LK*tl}bg};d@`xGY9ikmJj{sU&<#fF2DMhl5s#Up@p17qHsj~+He9m zV1iV`YAI5Ra4`A$u>c8stLF?Ek%EDqng!(hN7)dyShJxN%19e;K;lIReI#&dq^t|1 z(GeQPLn@;Pl`4qvyKg)(Iu^QiZIspNA;k!*h0R9+Wu(;L_XBZKjFcKF;B_1kqdptS zYHB|JqGqIQ{A$qWM%gfJ=+I^alJR$;dA~TWIgf2U-~6;V5kGH3G=YEUNnc91j2~O{ z)6W{}KWzw}iyj(=5d4_km`w(zFMjs!pozi7cxge27>G~d9dYQ4dDoV2soX0!`{GP3DN<6ZbTK3Pbgl!TYj zrXxPkE?7ibHT`2f?RvisZ+svlyB+-|tbXCA#lxcttoxm(#}P^_s0)f;6Jtc(0hK&UPe7XP?TTETY>QQ zAF!8<@I$8>)4)lGKqin!YT$QdN6~m5A0H+b|9spy4&zzE-@haKY6x<&!=E=UZZkei zUcvb>@F(HX;thG*+oq{IX zglVF!rAnSJG~n8P_EyV5aS`;ruaS?mvSlyEHp|o4B)n$huNZ$`{8ixZF#dkPA6;93 z&rfAvx17WIM*JPZ-(e|DIBYyA)X0IB?Q%$%DsLAK8~Wk(|J8LZKv7j;_`i?6%OZ~j zmdC2dl01ang}V#O!$&2_Mv2BK5fEd5fD7?*4Sb}biDhc^aB3XJVXSc+Gqcqu+squT zd}NKU4CtXXIa6t7j$@AFINZK-_bxF#xbyS>|GDS+|L4r!bIyPMW2GkHYiiOh0AGQ0 zw*ePM4vO^%-$hN*I%?C^;Ju%Ai_8DU!d*%gzM&(!YVwKs^trTyt_fc#%Y~zKMD!>( zd9!kyUqfes%fxtc3(3mEVh4PEwV})&DixLjgBG^o-smDFUNkB@#idlreaB$rvfvBQ z(h!xfaO{cIi>s6$#C259U#Ajb8kuUS6TG++nf6bYA5mk#c#w39Z&PGy%+Lo@Jh6=XjLVXyNzQ6{v} z4TSaJ{X9UM*a5qy&B`U+3>t#GPjlN97Cyqi1iOtIN`~Fm8r%)x0z3%WlPY&6`+tDs zQ8qGNFg=U~RS!%T8t6)>I;aPxi?M)uT>!t4>0&IXx`56^_eenQO!of(sR%lNE|?z1 zLO>5eeW>zp8r1{S#aLi{tby!I7h{3xLfokQz%a{C`h|8&eyUgN)q(lr0OocbT($5a zMiAVx2QmLN#>w{poCRWlZ$RQ!0XJg|VLSvu7@{Km9?TQ0v_^$bm96|zTEjpHQC<+t z7-wgxn5E^-Q~^kZrzi)@8@h5qZe_X=+JoN=64$DIP!gjRNh$+WD-ueyX-_9^4qwK1 z3Mqn5I3wHc#Ljt~u0?lP5~Wt@y1qhxQhzO^C1lVr-cV*}Fg$1I4-E-D zKh6m=D(`OidX~jZ58?mYY_YwmNMf z-JM>WzBB#Sl!7T+ryR?u$k>wcX2x)4L1u5}&P;#iiOgYZk#(-M+S+9GTA#6QfH=Zz z3APlQY@2Q?v6b6uZLPK|wp(`I9$_DEPqRDi<@WRTAMID|x3k17W7dl7tn8`T?(BKl z3$k0XyX6+STYgsVll$cz@;>>Hd{Q2ClsL*AwT@QDGDolDWycw3sk74A;Oum+bgs`y z%W>w^=3L2LnY%vspo@3S`k$xXwc0h{^1IHtZs(=smF4y3`SY&j$K|Ktap$+>ufTJw zptayk!NtNug(nLK3x6tPx7ri^f%}1UG#fX{v%BtjibG!`+;$tdb3O!C9H2x4VtN4q zn!}lUuSWBfK)o8xJo9YTXc0YUmqzOlXHcUhSa)30=o8e=#bL*QnjEyOojC(a>z)mR>cT5yKZg7pU(YwR-FHOhhVENDvyo<%tE-3aah&|aiw|5<*` zpxUt`@(98jL0M=%!rS3-x^ztL52+=$B4i;vj5fk{s!2`v)PJP2{BOz%r1T=^K$#ZQ zHA}5;uu0Mt^<6r4H>Z6S~ zvG*2j$5;Ob`j*zxW=`aE^dcw0YVuRM$mwYS{rFG#Tf0SX(mPn`KTdnlCl=y%ng;p; zay&sN=`?)_--M^=GNktvoq?a!chL*4(<|ur=jm%`2lJa5;2m1N4o7HH^P(z1sQ$v$J%Y@cZ!h}BhzKFL~BiSIj0u}`qh z@`YH650J=35f7J9;PsZ`eIb1sBZ1M^Ym5$zl&>*{Kr&-6Stwo_O0}2cz=XyI7!I~0-Y?aT1jn%&ZFk?$A diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index f6e97d5afd5fe6aaa8d357af39256b24ae6e5f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22444 zcmY&eV{j&2uzq7}V{hz@ZQHhO+u7L8#l*<8 zvPwTTj6Yy`8?1sh`yqe0|9lC5Knza~x?^VTkNB{6AbYxrZQ0Q-}7 z{s%i4EUXXK`ffjY6?cC8e*XtxWS}z}eQRR?;J*}r?;pD}3O1osJ6lI506_VN0=oQ( zd7~dSer)Gp{Nt-~^Fy}(@PD>sVO8AL4E6N%i~s=%nXkdW-*?W$SWNZzm&X%e)HM<_ zG}zHI*fTLPG%?mUFmUhbdD!yjC-~>@&kquc35y$;iHU)U;!|HU`i-n_wtHe6E~lrL zfe>$4Yq|+u;HL%f;ezY=zxaB3CVqOD;3D9NZXgHr0k71s=za}AfxxjOJ#xc0*|V|q zskH&881pnmoX}d(gwP7m4$uWr9`AY4QoKuxpiUUVl!P;3zO7R6iX#>%btEsK7u(P$cxVyc+fPwxE5*8X9 zAR#U+Fg7|oKt)MPR90GCU}kD;aCUlpfP;;Sl$M&DprNj;u(rCqz{SbT(AL`A;O6S= z@b>!r009mR5ESU|BO=VtGc?%WL;i)iw#L~`Hl5n+HXCm&nNqFQX)(F>c+O(A(cwJa zguDKHvDF@vOHRUk?=#pJaDi^D4vSll5sry5H{M${UaGHFTTai8Ffdi=9lNl=@p%(> z&U&@c>268Z-!L%J5HrBN{+>qxtez#mpY<}?b-yIr2CK+tO@%; z%soblh^+Mz(XcRj9JYCP$Ml*o9m-(wxle1335v|ihWT!`S6wmwiFau~H!6xB~=Vqns5GvY!w2 z_kkviK~gX%aD|dyV1PJ8K!)A5j+a7?Cq9VYHhylZMZePD{(zaTWO5#-Yr;fvT{DEv z2TAm1lXfT`o~JICMI>k?S`AtcI4)LRxhr?bkv0OTb>WKAZwdt`_*`GvrOw)IJezZnOW&H@ko%?bbB93HsT<6J$(* zfT6?_2K@AOi3B1M>8T09jdVc+Ac0o-K|w*~`H_C4oC63+J`g%Ql5ig~KRQ2ppDrys zUq%ln+37ITvAk`bobkGI`hCBbY;m!kMP*Ica9ngUS0IwXlsrd+Z^vy1H%D4V-?7B2b7mMeu^ftVivbm zgc0Rjs9rmLfs-75H9VKn&JYQbGRK9)>9f;cmO)`-OXW=IKO zYsAPkv}coid1FB+lQMxlHWq4il=){=X{oWMK~ubBW~273yIhx;w_zY@dqIN-h4+g4o0WKo&W?;g&gE$EwGEl#nMDdBCdJ>Wq*pz(X)N@$n=XSmX~l2B zv6_k^#n=^t8|DGYctwLJOv94thz2fN`XjKd%#KFmaqXFYTrl2LfD;?(_Cnrm@ z!3889#a2iwlnK@`pYHq=AQR_f-1FA_Lx2`5>&Z=JRc`?8O)0o%85|iPX4vD(ihYXb zV6eF@7{#mCvtZjT#_AD|eb&>d<8~eFg#{L2%#C2i)cRxs2}66Yq+mJpi!$Nafd)Y{!r|F* zW!ihp(L-S>3G^LT|m6U)SKvR)0J7=gc=J%AYgaZg|CAwqfHs0mzRUn`nufIj43C5 zv}`t<&yPJWxUHwfeY@YMOFznq>v@FS|3Wyy#houM zu|}C;DvQ_O&aS{Ymg#?s@Rtr+)MTB*V=BiqMK<0c!oIj`~i_Sl$cV}9sr6gj0HI|bW; z9T#U)+`Pa_?=bnB-1K!l~LGCETm9j4q>>{T#L6(UrvE zn8X?OK7PIzFXphKufC7DDVdrm?-?uNN(6x%iUxlzNy(=yO@fW=>Nuc~o3wL1kn$vl|0TuOK zmk4V&$8=eROFpNMyK}GQ`roB}?Qg_%CNqip@VZQmVqkFD zSpH7@uHqEoc~DNCQFmX7wwr~SZ=dpJ1sjdf1l|*;6?u(p->rV#?I%;QLPEu`-tS<_ zM5VxtrF_5mFa6ACKC#ty8?W{CJi{WivS3hR0Cns^W+4 zt2?}xJ+mpsTWm8DPSIXJ1r1HBwOEYC{c#y(zYb{*W9jhT<)IzZAwN&}hT`qu4GFv* z+5AM0B~uwTCgWWhCD`nGP_>3kGO(=r$)L0_$1M$J!e&K!cd zb@*Ulad)T%v+wx?>X9$JWXC*c&pORfAp9BLcX|`D|7NFMXS!dF&Ap)?_910+-E3I; znq_of?M6&Tr$mscuyS>~AHOtb`|jkTHb1ss{vCe$Adwbxvz|OtMCJgle)F&TbSCqM z&^mDb#X^XVA)p^^x&aVa8R>Nc1spTXvIZ6^f+9{&{?6*1rS@c6aw|Ga9K#X`F@jj4 zV4?@cM?8&!l*yRfTMW88LrzB780Mj#>{ zK=8aS`-`ehUU&wiUxs@%TlanJA1Crs#v$1T6)k#wf8|fRP#-i!$21gu$$S+%)PhW$ z0%1rp>$M8)%#{*f49^zynPE6F0;d4W@pT-{lxsovkwe9b#DmZfuU0yg;)ns`9NlOl zhO}nZA;EF8Q=u-Q*0#~qR2k)ih~&{GfEE)c(|`U$r3A*no*?!TGhB4h%H4&+cHMb) z8cB)pXekqAqOwJxf3W@cuGJstyLES$-k6S`^*ML4h_GF2>|*K>OX_&^?PmEgrgM1G z0#zJy(eZQ=bA8Fp@O=?a)9x{;0dRD|baMrpNDEB`G6q)s(2MV@;cLXQE42@$btVTP zUyj%0n^Sp;IUrdiu`Ak;hN_Fw;q?luZJO6Hw_PK$TxO`CU$i1036BD zOJG_88q3*Z30x(jo0hl>i+#Zn%ojM?^Cxe$&@fPhW!erxJ`B}W@wLAfs#mILmI=r@ z-|_mNK)2i6&55gLG|kI>vY>5-e6+5Y-srzK&gRLJ4*S=O6w8)>N;b0d*VtJ$-Vb}| zW2|vhDX*?9*H?`7HeX#suh~5Z0q&(MoG*PBLi?L#SAV0EaEoe;S)`I!`N;F+67 zfSS@aH9&#c+cpeH-8mnGruIbdY&7UbZM}Hzl(zuxJ1_EBgh1e&&xfpWCq&AV=vz}J z(1#=7O&_rOPmP?*@pRQpF?*lCeg$$G$?1Zf{`bOHssVUd04@Bhuy<^5JHpby=m0?k+3VH8PdM*@ar$K;X+1bn zt>LceG=gkz^G^{9sk-<`AjuuMgA2fml(u3+a|$r4@KEh?>~pun|TN2#wQms?|%nMyJd-ULRbn4 zp3nL`p(~hW=&M_}pi!Kqiu&Tb4dC;c@c@$sDk~^wL#jGNSkqF?w2f*U9@F3O+1#S2 zV!t~;gaah&Vu$a!M9pvM2WHl=EjN(QH3S-Y5^Z3Pz`= zc-T$*aB_`)>RXcJSJPqcA&~>bL#5A0)nN+42fpzlz8RD>+xzNuH(P$js%&?+;mCk# zJM1~9(UfI^8P(%Va5f7SIs!AfZa3Zil_#0CdXwVnf;9W<32xxkiih**RPtgr6$~xa zHo2|xqEaW{_!pgtfg3*D%Q;UVb2BF0WpUen&n8QqoM3ndV)*Ww$Shw8>W-Kg8kiAh zLsuT(a&CNw`Mz({pkEaQv=a&Pj%ETtZ!lCeON{h4Pch@aygwYVX?$8Ra>!D^uCWLh z=6<65JQ1{~t{!86zvSCt{)n{Q;4m7i*tJ8S32eT!ZN_#Pp~J9oMw3d zcd7Hv{v7u-kl>@C0nm%ijL?om_22GO`K&nvi+l8bw;(&LCA+oOG@O`(1g{FebqV2D z^*boRaB5bnCE!H`1Bd|oVgp3JsdAzM205Ga3$#EWvC?(%5~y`1niU+D&`(P0dy46~`&dVY>An z>*+#71DHpU7h}pRPmvin6SM{bSWgwl&}|(&rzHg+a@M1R>UfwLE!dJI(Sw4VI%rSZ zRA_}w4^drc4kN~X=Io6ABoOY5plmD5)`;PKtNxbQK9)_Ds;iOKL0`*Au)UP7-uDnA zR0we5E;jd%R<3CX)|p|X;!C7AWxTi8~x&~d!eVQ zqc%^X>*{_yZXa2rKl1L|Dy5RrdOL_utidM+5*dY~6_X9kFx z(rYqpcmBHchTRY4VWH$>(m5t9IjSx#Qkq(1hhj9HMhl_YomVN_nG*e-wU__Td&zDJI?oQ-#BZ zmddL-0Zmq31~d!LY@|m#^7X%K5y-|+kzLf(EZ{L3V(AHlh~tG zbe8(yr7tmq-&AHHjvLHHjabTGE$M@_rNEBk(GkkV>kqn<_Gs8p^Sz^|uwO959$Akn z-&AozxWCMSlM`M@bx6H%668p&Nhx$489(TZAyQ>czzOz%-J;XI3V4e7ZEITVKjaz0 z#7Gf{60k2=nuo@2^sb|; z5i{<9q>|V{N21W&+P*#hT#LW*cJf!*b7Gy_y3S6$$6(t(Ue8-DM5Lwg#fA2h;1g zLcEV{l?Y@Sfe>cQkgm7bh&J) z`c@p9u1pYtth4} z)u^zz9No|hobO6*VnAI)gO}s>=d*AH?|z63%LJOqXR<%gp++T_7#3$9`hkoq73C8E zQusijV^LnK;u$eNa`*QW85iSJ0=rM7cLLE)O?{3Up)+ePCC)jDnh^pbbwL@nB;v(= zf3aAG3MAb@1)L4Z+k*xZ&u+}Or-_O_t=U0OgeD_rTL9c>JUBucio0#nYZ(o&))`ZiH;cNJxtU3IUIh_^ky zXIFcbESO^ms*OD4Cro@M1v}*hGc{U@sVWHu{25T5@(X!4Vf;Hbw+d=82Q{zPM?@|e zIEo2^KgD+AU*z_Cq4+l7MxLW>uheQzPu@ZiCeL=6*!yah|sl>L{o%wA150yhQQrd)x{HB>s z!=e)T325TwT_Bi!eS-vz`Xj^XmF=$=}LX ztDbqZ)bwa06sThn<7ya)q)@y{8L;@vjtpQTad~bHehjF$8leZJTQpSzkw59!JgUyB zq#W2KlOaz{2M*#}Y}Lj*DG^oFCYI%L;FH3izy&d+rce-kx-)CL@WHflK z2S(OKl*4oorU(;BSxSC3Mbv`AnPk9g>NDu2>XbQI&K76V9hO*)^@SY_-Kzcu(yh)cQ*QObXZ^UWgGP|~<8w!~!7AL^m{nMa<) z#=GZ(lWlDBaRm5ZLFORg?eTLNi;WIn@$Tj>Ui+l`y6ml9jq&=(fzQ8jp1-VCKDut_ zXRzOzerZ|y&)xYdwPk^~ef8Pxb(R&tA`?>@m+=b+HsD?`)3nWzj2)ZIKqTrrL<3_X z^waa)^+QqL5vAtm;kIErynpklyEI*+`At(twiM@`ql6A zDHe)nXk}hN235T4Bi^q#wrQY2`*!<~lE|uy!!jWSHwr?;tLpF2 z`6lqF3x9X7(M;aWrSh2=n`0GaM4|b2W@sHIn8*7Q5aId!yeaQ~_7Wjm52zuW`=v#ef$J?s4>{=&+9wu!R-cwX4#nbjEN|&w8b2B?u=pJh_rWH}^0b%e;s4pN2t8_W4x__Gh2ls?m%cYyvKX3Q{DSJ1B%(2Xja~WZ zh-HhaE_$pXJ9rckgN3Udion`Pd=jjB&XOp3yg`6z#44_|@7r_!tqa5qom*8~p+qBx z9aj=v)~gj4k+|A$y}PmCUPRumr&~YjrjwOc7x7VkSP{g!c2IGCKG01ekBwC!PyrPH zQiETVT(slCuTF%WM*~OBQ8}mA2y_xPL1NB%@-MewV>NleR&R?3~SGjjyLE(*^v z3O(Q>L%N61>|kP`><}`?e#c}2CPHL^(7S={;NCOv^=7j5)!91&4~=HaIOJD*=hVj+ zFJz$r$xa+#wOWE<6a|_S;}1}&^^TGrNl$r3k*c=Y>MW)GO)k^zg~NT6ZHNCI_@7OaS*l0iD=l)c-$obA7ic+>)ef9Qs09^$H@dDMBBGfp2N))W-?~k~?w1}QcKDvv-IJdVJhkKum$k)lNN>1raPPY&U^H5}` z1+Lv6H*Zj9Yb}9))@#jg$tqpps`2Yo`TxOMzpIO(a_4k2jB5Tz`86AQpHWB4WUCoX(0wNum8>uTk?D$t%yob|FDU{s&V7RN*8#Po26Qj>IlL{v3^XXINJ75F_mdkST@N+7l#|T~ zh|+L+YmG;0@&59*ky(f|M)UJVbQM|2G#1O%)wW7Ya2gyY+vVJOr+z4pkPKDDo5Z_g z)ogcm3c8{TDpW%v+3TQJ!N||Jf0Bf0%vn!Dp2>ON%u7u@1!>k3fq|uMq^8vGjmK0e z6K5alvH5ZB(saJI+HI_7_%oW3bbnP`qK!=*-xQsmW>4&avkXN>v>Ao$bQw#)l;|6b^yir zPCD;-F21%|p>vyM8hRu<31ZZJIvmpZ^lwX~Jz+S!f0M0_QM()9ISdkE?ZP{nm1RI& zbhAwrS9_0wGNB#nL5_9ucT>x*cm-#mHw2OM$XB;>N5(*N=^0DfV53e0Kqt)q!f=R* z9z1@8^v_wjvYWC8sjl0VT61%L2eC|APHG0;+do(3c{-`D?x-(`o!?|O8f&GoRW%?9Y@`c7|1b3Ol4voV5hpz*Qv>sGe`uBDiSMGkO=!bMZ5)Mju1cCdKmMv+%h>sSf7eBWc4y`1?ZmHW9I_isJ@&; zZqK3x?3O*A7LIs>2EG*?>(ei_1D*mV9cI@<-#-IPicXAVr*W^yhY~0PSD~4dJ=RSb znuXa2JfMbS2csAW3pi~vT=@cz+whzaE^IJq^lvkpc4w4|r$OBcLAR*xME=MbSPCL7 z*-^d;;#{5G<%8WAp$Ysm*vR!DSpIc#rs75=lZE9ghzpi9_DExI7;PqW_Y@&{4!~}| zp7w-XgX`jwzrVPX-Lr>|W6+&~f^9zv!gG~U^s!7s%raTm=X9kw;mL~Qe)%o4-IZJ5 z^1e7)gWc$9pw^O#=UZQ(m=g_dT7%bOskU@$_b737)3k$g3!~&>rM5>;#y0EoE_Iki zDx=2wbz~OJGv(3C?5QKXct|QsvlHy_Os*muz@9ACwdghLBFgZV7iVdl&2tnh9vmjt z#Sg?zhjMLHMZrp{&Sn_K%AIZIPN0KMQr>p5osv?PaL9)M$x&hDR_QM*vRPm_O#JhL zk3qKLGy&of-DP*X7Boy|b-%^z@ifY;o*)#%a2vSmc$TsZmw}5p%p85HtzO@D z2u4zJ29$$uy_5-NWlZEc?B2;9EHK+Lldeu`o^h`Uu)yT@6OAkNPn~@+L0P3^qQqu@ z5K>c$A;O5g41-`7q>cX8Im=L7Vo&||=b_C@3N3&uS+0hf1t;A?f|3@m}eB&)}BVHMK<4uJ;tk?+zO;{RBg8Z&5RZpGKhu?;84=m|QHiZ*}bA!Cz==rZ`%+y;Y>E`MNG+s=4FP8sDYFC_{O z4O*&fd*sB95tpi+mO6gTkO%0dElPr_Ni1BbCDw1YbQOlusvlnKq>1>8B6240kL%CJf+8BXQpmz{_t zpxV2Mic*A|z02%{N!?t>tCG!RHEyTn?zXAa2Ikw+(%}>c%fC9^+4ntXAt{v_OstJg zQbrif-@TeP_@y8B>m$rIvffW|%rx(bR=*N5VH2{J%*<;^h0McP$Q?@lrI+;0gOW*3 zg%cGhqh??b3fPB3UCbU9YcLhD)tVav&j(!Lwn&3y`$e7)8)8JW4n<(O)lXKJwV$X* z4vnn%!EIC=2!sA>OFQpZLn|~Lodi7?EVHt=J-<7=?UO%wT#P~B#UR7@Zj6Bvi9Wot z_k*b*rZ_rwJz>r`7L6w!et+f0YLWC;MRTte<0Ic$A-SujRG{LEG8D!npb zTOC0x@z!QPt%*7w`{p*3I+h(k5$w1&sFO^dpRt+&mJ3#|Pv24}&-_~-%~)dgNrTHs zbRm+Xf2Si?ou$_1W0sp;l$bc%z^j5l8?MqAz`UDGNdp}+N|N#$TUrwZFHGAPavIx$4Z?UOVC z8vw_Ss7O`p)32c-J7`VV80S$d<0xcMrx-d(m{?#Cc@&pf*6-bWC^lu3fL^tz=#8lb zwxl|OorZNYl6>=nijn1c-LR%j23zLgx}KeA z59YCxO^G>Fl_)+$pUhk z*Jag>0Ej8om1nZz=3C;~<%TWv@S0vxS}fKPh$e7+A^!>R8W?lEs-@}DBkz|3(Uy^0QXcluO! zXS1|as+ebtYS3x(+Q3BG*wm{)^%7&d3h#6$N~`7h(;a?GN>%m_y!X8MMCpjqQ4BXU z6W5R#27b)Wmnc`jU9H=Ip2zNXqv`1fMABAb`b|`wAJq9%+`b zDW@WIV4mvz*y6ml%H#reZw_(DkX^a#pVa%ZDrITij7U84-*U*=IvhBGWSL5mW-)|&gQ)lPeazg9b&re%P z@|rD{*?AG1<`%Z$8Ysq-HfEUe){C?CB*Aj@Hqhk({!J6#b?)kqF;Y|=qJ>$Y>Yfvj=)+JoB624r`8vfg*egBh*+zhnf#+w8?#Fh(ef?|1)a{v z9gZP)Q6Z+y@L30_hLKp>6%Mx>bk#3->sA)~826P#k}bFT95{%;7As38w>f7~cuRyR zRCNd*6Y4$|+~QJcT#vSVPU$~S$(=1tt2*x}*wi8JjfbTq{;Kgb4#Z1XtNjg4j8Dq1 zHwHpZGcY~SI~Lft5Fq0bw%oBjD8)bAvDHeQSnK5B{rVs-Ig~7Q&V8QyD*KqR(peLo z&S+!eaD27-9+l0=#$1@O%ge70p%~Gar4sqU5IR9gri7j0D%y$ti^hVf%s3rq9WC&* z+${uLEQ~EAnD1|vX%p( zQm6JFz|cQ4J)k)<&%w~COheYy9X72%GqQ||i!Aa_N=P8(VBfrGLNw|{a+J{XzBa>K zaLe^ZD*>2d`mhP0DhQj;a;Ai_PLyj35l+B{S0;Pwo->PsT|Ua4^b~DIAB4+w#qkBQ zohTBjmL zd9Z1Ll{Eqr^4@l27?`rNrdb39C#@Cs95B0;@?s*{7S;PB}ClmTTSpLy(`ZfKe!BN;{GZubl z+#gIsrAzPL8!tXSmZGAx;xe86{Slkg%ze`#w}D;#sKw&E`;T7I^AD~@YsK*#l;nAl zH|KRLx1+5lk5zS>$y4u!FIe58=$1-8b!xtTxCt7|uQO)#S=FM&m^N==;iv$3?EXBY zX0KivVWX|+kDVAoP(NT;9)JB1O|jo09s94R^G{y=W^KDg$svnOR#K>7*oXskS95*t zwR;QuW_E5hEelbiR?qsJ-&iI(Yq&PswoR(N->^XXgnl}eWSbCXE%|q)2@dEBULlSP z2XZn;a}FtYIx!TT=6VB~g0Bk6-*z4+nna1!=6-fsx-*LJsabP@T>9?fAMWDheO5-| zMzk8G$}S_AQUy8nZ%a!{U%zTk0yYjqg`@N-K4S8+QDQYmHGWOSXsA$lE!0uc##S63 zR`tkhD<89+&{hx#5S1fyl_UgSqQrry*vnF1UX*dP&SlocA}H`*b67bTxtuKFVwNT_ zUdTe#)s)9pujx}v^)F;Dh<9GOiih1Mt3_LcHVzXpIZ91_%vm;O+b~Tp&`4Q1DfBX; zu4iGkzMQh3r##~E93{C=(~A2VjqYh1E=}TTx;^IJR?}=do9p-Ld@fYN|wZQblGd1^iqn=*}VX-A)36OzQ> z9}%aEi0?_N@*G8dVzh#;^Wxu4PuI(>2we4wa4YL~{(&}DPI0n9quM4AKe9iJ3>!ek zf-^H47-P+#`u;&{te>1G;S(|zy>@d2#lwQ5}S1mWMF7A%}4R<@_wZEbt{k`y>Bd&<{KqqH&2#mKN z34tVSFTv^{?9=`o9M&}#o2jK6S{S;HiITe!?|O@eQldq zit%-UC#>eZ(!z;IwtvTy*xa}|@)sn>x=z$Ru zZ4)Wy%IEZjY}pJcA$?|xBdb;J+2nqx-Q*6K^6-(SX>M1k-Lb(-+>r6z<@o4c@!fw~ z`N9TXg+JHtYQk&l314wfK%HG--wwEanKE!}apZX_aRk>ZjuwvcH*g`y>0X6C1*RhI zhGa$UYdg1sDIbg0r4`oBsOm?P4UY}^yR6Wpc&0>3(ozuJ;=sYF9aUoj*{*c);oD%) z(;=7nef2xW0b5ufZ!`J>Pn*75QRl;M!d7LXKHJ8_PX7+>{V%Y;Kd&{(Q@1n0Gv{!z2iNkJrPHE1#F$ zc1x8Cx!O5}9=JR@kRiR{57=O=MF}IPhm)NNH54?bNM>u14Mk8{XO9DIh&N>UFoU7s zTym?%U1lnT4+Bc*^@^7%@Q=u|rBa)o;$+5QmP++-tL8KUJC)9|EqNt>F@5i`HHF!!x*m7nlux?LYL=!sH@p`%9wZGGMJI3fejX}zX=X~Fr>UG+QxP#Qkj6m97_;+s~Y zQI=;jCi#OcR7uMsk6Pbdw9e}2ZxtFZ8`vBQyVvg?Q1_eUc=|OnFm_LzLB;}qxhv=- zV9G}_m{I!NBpk?-m3GWzDQgz%npgwysK5qucIua{iaqcXnr^669>USd>cOh@tU0| zT=ZeBea7|u$lS>ba5%i)t1Sn4jXlSzvDL(8AD_&ve~A@DSnJHv?ERoq4iCu)VuYYj za!l!GIieF%abfT_0`H0G8>X(|5GOouWjofjZ{C=T)k)%L4VmM}^e`|vtP#y#NzKlc zLOtHH^sv-k6WljBS^ON(gHx?*i*79FJeVl5;MVj!_&StS5=Ip0iXwp2SqSgQvWQ!2 zW)=V?sLRKT`5nDyA2hOioMUlnrzHup*t94k5Pb{v1r_%fq-eSY&b;(iG zd+h)TXs7dW)2$+2g_qYJ2qTp%eA=A%%8dWKEowmhcIN#}M{Ds>RVgov%QUxZG+ukc z=p|q$A%L8RqR^{UQ?`CF1wg~Otht+L-QefKy9_hcgkO;4q+Z4FN8P=n<`d=B5R;%y z(@7Mk^}u%HX~gp8O_dLQfFNENsY3^Lxw!WHzJ=S4JA~RJ3BdZ9gpA<}7jQ1=T)g_s zYrOo^Inq&mW+51Zy=tICG!kM-dGw$yx zbAk&AL}Sxrop5l1WQ@x)wZC|~^bv)k4}MLSiI$7h4PRI+))pHo_@vbypQ zwWm0nmt^#g%U%*FTS z)%;7Z@0O>wCQpOxZ^@rqZK_avU%vRVcwcA&)c`v$5Lw>_98Mr({b@Ewm8nCpW6wpy z<7V@D*y#zo^?GoBw(Z&L39vp7KLniJpqSeD`ws*Zf>}a&%tr0rf-w)V|a@d{n_q? zJN-AGlhn?WNOVCOnGj;AoM~2C?>t9N69OHxQtgsFUq6neSa-YOe*ys){^-4q8gANt zihLH=?vJ&9Kz@m9cgNbNl6PS)DEW%^=M|wAFgjR%M(Q_Gy^-e9uLjZzdV7DRkq+&z zG$=><)4@Xe0Od70q@NO28vD^9%Ip1Th3b1)-xk*G*Ifhbnh7&Kg{aUdTWHoc0KjQY z6QcV|cVXLEYI`|#L`VcPnvZS*ze9H+p=OZL}lVU9ySoPMC%pTv6U)_ZgEr zGXdx?%_&y5-6-|5-K;oKK<6XwVMUpq;oLs0f-`shmO01ifKR?$wQAtzE~S%SSFS&I zVb%IUc|pGWw0BnjY1f#w(~cdW;;vwl?clans;BZ_7w#{9E%c|^ZzxZnsku!jEx<^wzL%a&QnH#brGl?)| zAPBwpJDVH2`hx~FA*ZJ{jtwn!u`G14NiKCZ~88-Vxjwef6?$j7IOJ^Lh%B(RvK(>=&1>|jJJ|bJ zGJb47dxzXd+wV);_^RjEmrW|WWILpsCILg=KEUO!pC_}d+F%wak1!nL;$mT6Fo%^F z;S1xU>@Jw9)v0S4a!!_0$}N+9xOcQcUxuJg_LRe`iFw8QI2)~rDH;8lSG6lz(5blL zbOT9Y+b7Fq<>)TbJ4(zf?&6e%b=o?)B>Fg!SyUGW-hV_pRSk||4^^iqUYVPeFjpN>$^Wft9M-K0|ss64G z6UHq1U=H_QSE~Q{_JIrjLPvc}C!U;B+jQ*gqFD{Ehq^r1&?$XfcE*EKK2kQWJbrZh z$`Mbz^+|c%+JnmPZdtu{(47}?{uK|_I>G!8R51-*808DTp7Gsal^_2V;}`yLTzlOo z?d@yh+E0Dh-oA_SNkE zYWq~>?O4s!P%%i-Nj_#dtD9>ZSj3-g!d9SeuC3-3<5nO^VCUk_+J+3wN3(kTscP+e zUJ!SkOVXF!Fwfn%TwQKqg9nUcmKF~d)?KW zx1ai{z1_y{ueN_+i2FRFx!OMU@2bq$PfbFB@Dz*L`vFg3dXZ>uj&3mM1GCkvI?sgj zl8uG!y|C=vMa+w)Z8+F1>Qi*a&i3!*D)Wo*$dPQR;ka^YrWXx`LaxpK6P1XY;DI zPyG*TSM$5r=f|k`IZWE~nne$wolMM1XM2An#MP6c7s(TfW#~FthOV|76Ji{6RhZ+d zN_V!r5np8BiB?d&p;nc8SXC)IW_nm{sVCkEm&wXY8?n4JQ>&m*&s2Y$hn1Lm)e=+L zo&c{YpaRkuluf{kW@j|LnbZHT{AMmd!}mQZgja!M-h^@CZ|cosvdR+dBLZ{PF9A7`+m##A?cDW&SRFHLmlh2=9j z=|=N?QsR_O*Og0?zxcF&S8AU*{D{)Lk1GJP;mFrs&6pQ4Q7Y%(ZN#E8*-t7DF_{6f zOx!MvAVJcVlwrOv?gb|W)P3J_G<;(U$z1^7lomA>I&oh(xlkYbm5VG312x@XGO!{T zf6t;@7Fb4t$(ayvcPeB`#E11_iDi=08BR#c!e6-PQV1+(?R2AB(U|U61*F>VGQ?LQ zWJhaCu^eGTQ`*39m$AyyH#78)uV3}pqtC86meJ?0n{KF4;0p^m;qE~zzEO)6wmq`) z39L8Gxs}zMKC*J@rW-03eAG5@#NU`)Q0*Oe%-)&W_66Fi^tkXj|CSgac9O?_U%(iO zx%Sy+QYhf@hk~3e96_{wF;&+-=uK}Bho+~;`#0qD_TQIRIB<07qou;&w z_13LrbA!OQT%qtK|Gqex#jSc1EnEeblg#VdqgJ+?N3D3{ucB7;zeKIL!UZ*>X3QNm zc4lSYvRel9E4j6wZuh9!wPVK2nLM_v@8B}{gE7|#Ukak`BuT(M=vh{QIfPpTv8ua} zY%sC{9JMeUGrA>rnaq2&eJ!Y3Jj768NJWJ#6-Q5N+>@(1_8Hl&Q(l>CXwtnyJKUC& zS)S9SyHEIX`uvpcS>*%kX67XMv&shlfBhYV|DV3wm;S;pV&C=u`nz%8=!W zbNCCjRGdFm`RSn>?$uel7x^#0ULosP0<}TSH;iuIybSLsn%vErEbjN`%POQVyeiH&$quvw>$!1-%ELe()!o(*x0W_u;1fa+cHM`bqE{#T?kwJwo+J$MUSwbgoynjMEegy z$kbjI{Yi+B9y43B11|iDkzy~sR$af!xuUSDQ2Bud%d^a;NqoUju21BR!QX#BnC5KC zbSwe-R<`}1;{Yq=kXa<0$$mXSXl}?z%``Azq^398nQuJPWX+S*AF7iQiyB28Yw)O> zFu00X?Nc`USsg5Y@)xnPr=)CL+Imz@c2TWmHaQs|yGuhQrNPpWi)dL{0%jp%a%v!k z2{>nQrQ@J3?ST8xJ#^eR`xX{YT6;|Sx{99mD&5kI^q5B(6_)0%Tejic-?`MPiSw$c zlV;RZ4g1$$swOO`y7ZT_all@rEt$>nA?|zKF}Cke0*;o&ZH(;KK1AGmD4H`Q8uP*i zo4W{o|B31rYqsXFPGm_LJX{o6s)mSJ7dq9bPOvervR(b%H|O4Pb=*Afe6OHgmUC%XTTZ2pEXo}+ECp?Ll+j)Ne^lx;W7eToEKu-Xml-#?xZ2* zhvXiB`nnXc{WQ?Yg>_%aMUn%rriB>nNG)PDh+&^UE2L&JhjY6XGosvDAeY~KvyBqA z*~YP+t6T15fH~xl5}M==M%+Q-H(PL&I2wEV6&mgkV-~hfufTlAHgc;LUgJ2$bG*|Bhny!-4;~ zn+N?$eVcGs`Mq-!gIAnaS~E92)U||t`mz%IZ(Dt+Co>k|o*yr4a@VlyZ2J$emqf5N z)5LU;q(ea`pcOjgC!)0%u=e3x>5c8;IB3ry|M&^z?oeSqiMB6@YacEwCFK7Cs$-~! z0001Z+GAj3U|?XBoMqmj|1O^2<|~6d2LlM4W?S+fM*lPX$HX4QUd+J6zyZWS003Y9 z3{C)e+GAj3VBqNeyMlp%eceC9f9C8#3@Hqv49MU;0Ghf7761Tv+HI3TNK{c2hW~r- zdCyi7BFL;lLR?4-32`BA2D2e71{V^8v>0S~ErvlP28lt2!G#PVB1D8lM2HL`;>th* z5ebnH7coSM3lR}QA|xc_-TwO~a}XbV{O6r>?|bK+|6Tcvb@0*^(hR8INa|gjc^w#( z05AMz%y@V4NX;VDjRkYHMibWZ}RCA6t^A+n}3d_=sEq@*-X4{UNO{_~`Pj$?G(nai2lhT5I(`p|`P8~^> z@0`GZ$x|7dx5((YZIPRHLGl<--yGqwS+2!?6$zJ@5q?|2?#m?7`X>^m2QeLBl(npx zK;VsH+`P7{=9O(Xd3&HY(IbIQ=uKPY_fPzry)gd6{?4g8WS(o{=77EA)DM3Fv%17t z4WpN}0%!k_xtDrc4Vx@}Mb9bGixRSu(|s~)54>JfIqx0y-nx9Kr}2^dTfHq5y%ltk z`fLmgfMsS6*j!oK#XW#>gbkr(tz`or4XufdPggM7`0dTKsg z!ueicks-M%V@1(Z| zPN)UyQ`UGME-+QZ8we}wXcb_oj!y9mz^J|V&+Vjxl= zGD&2O$R*Jj(Jx{)VmHKX#1BX;kaUpjko+W-A~i$WPWp_DjLbG!57|E1FLDubJLG=J zN6GidzfcfUIHGV*u}pCr5PnkXQx;P0QISxwQn{uorn*YaL@h$CL2aJ8n|gx!3iWRq z78-Ljj%kKz&d^+>c|*%Wt3_*t)())`S~s+vwEeWBw9~YUwCl9HfI-2dBcY?BW1wTB z09Z$=?Ce@>1XMe z8Dtrh88jL68O$?U`& z^drr3pRi6hZIk-R%sXV^RrSTjx{;}y`lxi$tXrMhOvxeJQJA6BqlS3sZ3)!GnmON zW>Y364ziI=TxBmG*vw9Lu#dwWk_fi*mJRF?vqaJ$QEcS~@5MqRNBBuIzc|1#?sA*s z%waCODCa&E+~FRNdB8&+@iFwhXFTC4C#d8HyLriTUQoqnzOs#Z_?gc_7EnzSH7sTk z0cr`dgrzLw6U$l23Rba()m&shb*yC_>-oYrF7b+!oZ>RCdB+=xmKd>0ti(yYBuJtp zNwTC!s-#Ier#ZuUE^w2xoZ}W-I4T)j<2qL)Q?ewRddZPo$&-93kU~qa+OKIYO<5Y& zZ76L@hq9zaL(?>+t~8W3rCsSz7Ac*|V&&g`uCTh=tLs*uzcLu8C@-t63XcqLSclSS zH+zDCnwG|+?(w?+sVfboO=Nc@ z4Hm|VNvvFerL8uW(z%a^l`(F@72!jMv3uvf+}tPau0U_30&`opls2L*8L#IMhzgP& z9v6`Th#lvhQ7{WM6Oc87)VGXrltl9XqHWD+0oerSj z$fXcd=QH80R-TXnGQ2DL$l$2xA^oMI+s}E_B`S&f#5s5WB*segR!orbLNP@q*+>Bi K{{n-nR8IimBgcmT diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 545b7c15e54a1399b315ebc761936289283eeb90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29934 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 - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf deleted file mode 100644 index a5b2378e5c2f3c0614d06c1d6696e8c6e31c84d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29744 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 E8i2eEj{pDw diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot deleted file mode 100644 index acc32c425dd91d5d9012d14c634bcc3e6f00724f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30350 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 QB~JV{Yh%e!)sxNs4|ZBi%m4rY diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg deleted file mode 100644 index 9eaa0b710..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg +++ /dev/null @@ -1,251 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 2011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf deleted file mode 100644 index a5b9691c1f329bff2acd569b3c82da44d96bb1a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30156 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 GO#cAXOHe%k diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg deleted file mode 100644 index 316b8186d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg +++ /dev/null @@ -1,251 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Digitized data copyright 20102011 Google Corporation -Foundry : Ascender Corporation -Foundry URL : httpwwwascendercorpcom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf deleted file mode 100644 index 61d58bfa37b1f2b143527d72084130a59a5eb053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34644 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 AZU6uP diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff deleted file mode 100644 index 611b39028f17d21ffed411076b8457c66dda9199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22332 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 span { - padding-top:0px; - display:inline-block; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs deleted file mode 100644 index 439dd43de..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs +++ /dev/null @@ -1,66 +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/wizard-stepper.css"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js deleted file mode 100644 index ea88f0013..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js +++ /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. - */ - -function onRequest (context) { - var log = new Log("wizard-stepper-unit"); - log.debug("Calling wizard-stepper-unit backend js"); - - context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { - if (arguments.length < 3) - throw new Error("Handlebars Helper equal needs 2 parameters"); - if( lvalue!=rvalue ) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - context.handlebars.registerHelper('unequal', function (lvalue, rvalue, options) { - if (arguments.length < 3) - throw new Error("Handlebars Helper equal needs 2 parameters"); - if ( lvalue == rvalue ) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - //TODO: remove these logical calculations from helpers as it violates the vision of handlebars - context.handlebars.registerHelper("math", function (lvalue, operator, rvalue) { - if (arguments.length < 4) - throw new Error("Handlebars Helper math needs 3 parameters"); - - lvalue = parseFloat(lvalue); - rvalue = parseFloat(rvalue); - - return { - "+": lvalue + rvalue, - "-": lvalue - rvalue, - "*": lvalue * rvalue, - "/": lvalue / rvalue, - "%": lvalue % rvalue - }[operator]; - }); - - var viewModel = {}; - // converting the comma-separated list of steps in a string format in to an array - var wizardSteps; - if (context.unit.params.steps) { - wizardSteps = context.unit.params.steps.split(","); - } - viewModel.steps = wizardSteps; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json deleted file mode 100644 index f2f22da9a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.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/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf deleted file mode 100644 index 8107ef943..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf +++ /dev/null @@ -1,97 +0,0 @@ -{ - "displayName": "EMM Web Agent", - "logLevel": "error", - "initScripts": ["/app/modules/init.js"], - "urlMappings": [ - { - "url": "/enrollment", - "path": "/lib/pages.jag" - }, - { - "url": "/enrollment/windows/login", - "path": "/app/modules/enrollments/windows/agent-controller.jag" - }, - { - "url": "/enrollment/windows/enroll", - "path": "/app/modules/enrollments/windows/agent-enroll.jag" - }, - { - "url": "/enrollment/ios/download-certificate", - "path": "/app/modules/enrollments/ios/certificate.jag" - }, - { - "url": "/enrollment/ios/download-agent", - "path": "/app/modules/enrollments/ios/agent.jag" - }, - { - "url": "/enrollment/ios/login", - "path": "/app/modules/enrollments/ios/agent-controller.jag" - }, - { - "url": "/enrollment/ios/enroll", - "path": "/app/modules/enrollments/ios/agent-enroll.jag" - }, - { - "url": "/enrollment/ios/check", - "path": "/app/modules/enrollments/ios/agent-check.jag" - }, - { - "url": "/api/invoker/*", - "path": "/api/invoker-api.jag" - }, - { - "url": "/uuf/login", - "path": "/lib/modules/auth/login.jag" - }, - { - "url": "/uuf/logout", - "path": "/lib/modules/auth/logout.jag" - }, - { - "url": "/uuf/sso/acs", - "path": "/lib/modules/auth/acs.jag" - }, - { - "url": "/public/*", - "path": "/lib/static-files.jag" - }, - { - "url": "/unit/*", - "path": "/lib/units.jag" - }, - { - "url": "/*", - "path": "/lib/pages.jag" - } - ], - "securityConstraints": [ - { - "securityConstraint": { - "webResourceCollection": { - "name": "EMM-WEB-AGENT", - "urlPatterns": [ - "/*" - ] - }, - "userDataConstraint": { - "transportGuarantee": "CONFIDENTIAL" - } - } - }, - { - "securityConstraint": { - "webResourceCollection": { - "name": "EMM-WEB-AGENT-http", - "urlPatterns": [ - "/public/*", - "/enrollments/windows/*", - "/enrollment/windows/*" - ] - }, - "userDataConstraint": { - "transportGuarantee": "NONE" - } - } - } - ] -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/pom.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/pom.xml deleted file mode 100644 index a75356353..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - mobile-base-plugin - org.wso2.carbon.devicemgt-plugins - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile.url.printer - bundle - WSO2 Carbon - Startup Handler That Prints MDM End-User Web-App URL - WSO2 Carbon - Startup Handler That Prints MDM End-User Web-App URL - http://wso2.org - - - - - org.apache.felix - maven-scr-plugin - - - org.apache.felix - maven-bundle-plugin - 1.4.0 - true - - - ${project.artifactId} - ${project.artifactId} - ${carbon.devicemgt.plugins.version} - Bundle Containing The Startup Handler That Prints MDM End-User Web-App URL - org.wso2.carbon.device.mgt.mobile.url.printer.internal - - org.osgi.framework, - org.osgi.service.component, - org.apache.commons.logging, - org.apache.axis2.*;version="${axis2.osgi.version.range}", - org.wso2.carbon.core, - org.wso2.carbon.utils.*, - - - !org.wso2.carbon.device.mgt.mobile.url.printer.internal, - org.wso2.carbon.device.mgt.mobile.url.printer, - - - - - - - - - - org.eclipse.osgi - org.eclipse.osgi - - - org.eclipse.osgi - org.eclipse.osgi.services - - - org.wso2.carbon - org.wso2.carbon.core - - - org.wso2.carbon - org.wso2.carbon.logging - - - org.wso2.carbon - org.wso2.carbon.utils - - - org.apache.axis2.wso2 - axis2 - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/URLPrinterStartupHandler.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/URLPrinterStartupHandler.java deleted file mode 100644 index 80aa39805..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/URLPrinterStartupHandler.java +++ /dev/null @@ -1,64 +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. - * - */ -package org.wso2.carbon.device.mgt.mobile.url.printer; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.mobile.url.printer.internal.URLPrinterDataHolder; -import org.wso2.carbon.utils.CarbonUtils; -import org.wso2.carbon.utils.ConfigurationContextService; -import org.wso2.carbon.utils.NetworkUtils; - -public class URLPrinterStartupHandler implements ServerStartupObserver { - - private static final Log log = LogFactory.getLog(URLPrinterStartupHandler.class); - - @Override - public void completingServerStartup() { - - } - - @Override - public void completedServerStartup() { - log.info("EMM Console URL : " + this.getEmmUrl()); - } - - private String getEmmUrl() { - // Hostname - String hostName = "localhost"; - try { - hostName = NetworkUtils.getMgtHostName(); - } catch (Exception ignored) { - } - // HTTPS port - String mgtConsoleTransport = CarbonUtils.getManagementTransport(); - ConfigurationContextService configContextService = - URLPrinterDataHolder.getInstance().getConfigurationContextService(); - int port = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport); - int httpsProxyPort = - CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(), - mgtConsoleTransport); - if (httpsProxyPort > 0) { - port = httpsProxyPort; - } - return "https://" + hostName + ":" + port + "/emm"; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterDataHolder.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterDataHolder.java deleted file mode 100644 index 0dd8a459d..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterDataHolder.java +++ /dev/null @@ -1,42 +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. - * - */ -package org.wso2.carbon.device.mgt.mobile.url.printer.internal; - -import org.wso2.carbon.utils.ConfigurationContextService; - -public class URLPrinterDataHolder { - - private ConfigurationContextService configurationContextService; - private static URLPrinterDataHolder thisInstance = new URLPrinterDataHolder(); - - private URLPrinterDataHolder() {} - - public static URLPrinterDataHolder getInstance() { - return thisInstance; - } - - public ConfigurationContextService getConfigurationContextService() { - return configurationContextService; - } - - public void setConfigurationContextService(ConfigurationContextService configurationContextService) { - this.configurationContextService = configurationContextService; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterStartupHandlerServiceComponent.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterStartupHandlerServiceComponent.java deleted file mode 100644 index 88a2b2dae..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.url.printer/src/main/java/org/wso2/carbon/device/mgt/mobile/url/printer/internal/URLPrinterStartupHandlerServiceComponent.java +++ /dev/null @@ -1,73 +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. - * - */ -package org.wso2.carbon.device.mgt.mobile.url.printer.internal; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.osgi.framework.BundleContext; -import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.device.mgt.mobile.url.printer.URLPrinterStartupHandler; -import org.wso2.carbon.utils.ConfigurationContextService; - -/** - * @scr.component name="org.wso2.carbon.device.mgt.mobile.url.printer.URLPrinterStartupHandlerServiceComponent" - * immediate="true" - * @scr.reference name="config.context.service" - * interface="org.wso2.carbon.utils.ConfigurationContextService" - * cardinality="0..1" - * policy="dynamic" - * bind="setConfigurationContextService" - * unbind="unsetConfigurationContextService" - */ -public class URLPrinterStartupHandlerServiceComponent { - - private static final Log log = LogFactory.getLog(URLPrinterStartupHandlerServiceComponent.class); - - @SuppressWarnings("unused") - protected void activate(ComponentContext componentContext) { - try { - BundleContext bundleContext = componentContext.getBundleContext(); - /* Registering URL printer start-up handler */ - bundleContext.registerService(ServerStartupObserver.class, new URLPrinterStartupHandler(), null); - } catch (Throwable e) { - log.error("Error occurred while activating URL printer server start-up handler service component", e); - } - } - - @SuppressWarnings("unused") - protected void deactivate(ComponentContext componentContext) { - //do nothing - } - - protected void setConfigurationContextService(ConfigurationContextService configurationContextService) { - if (log.isDebugEnabled()) { - log.debug("Setting ConfigurationContextService"); - } - URLPrinterDataHolder.getInstance().setConfigurationContextService(configurationContextService); - } - - protected void unsetConfigurationContextService(ConfigurationContextService configurationContextService) { - if (log.isDebugEnabled()) { - log.debug("Un-setting ConfigurationContextService"); - } - URLPrinterDataHolder.getInstance().setConfigurationContextService(null); - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/pom.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/pom.xml deleted file mode 100644 index 3f88f298a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/pom.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - mobile-base-plugin - org.wso2.carbon.devicemgt-plugins - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile - bundle - WSO2 Carbon - Mobile Device Management Impl - WSO2 Carbon - Mobile Device Management Implementation - http://wso2.org - - - - - org.apache.felix - maven-scr-plugin - - - org.apache.felix - maven-bundle-plugin - 1.4.0 - true - - - ${project.artifactId} - ${project.artifactId} - ${carbon.devicemgt.plugins.version} - Device Management Mobile Impl Bundle - org.wso2.carbon.device.mgt.mobile.internal - - org.osgi.framework, - org.osgi.service.component, - org.apache.commons.logging, - javax.xml.bind.*, - javax.naming, - javax.sql, - javax.xml.parsers; version=0.0.0, - org.w3c.dom, - org.wso2.carbon.context, - org.wso2.carbon.utils.*, - org.wso2.carbon.device.mgt.common.*, - org.wso2.carbon.ndatasource.core, - org.wso2.carbon.policy.mgt.common.*, - org.wso2.carbon.registry.core, - org.wso2.carbon.registry.core.service, - org.wso2.carbon.registry.core.session, - org.wso2.carbon.registry.api, - org.wso2.carbon.device.mgt.extensions.license.mgt.registry, - com.google.gson.* - - - !org.wso2.carbon.device.mgt.mobile.internal, - !org.wso2.carbon.device.mgt.mobile.impl, - org.wso2.carbon.device.mgt.mobile.*, - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18 - - - file:src/test/resources/log4j.properties - - - - src/test/resources/testng.xml - - - - - - - - - org.eclipse.osgi - org.eclipse.osgi - - - org.eclipse.osgi - org.eclipse.osgi.services - - - org.wso2.carbon - org.wso2.carbon.core - - - org.wso2.carbon - org.wso2.carbon.logging - - - org.wso2.carbon - org.wso2.carbon.utils - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.common - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.extensions - - - org.wso2.carbon - org.wso2.carbon.ndatasource.core - - - org.wso2.carbon.devicemgt - org.wso2.carbon.policy.mgt.common - - - org.wso2.carbon.devicemgt - org.wso2.carbon.policy.mgt.core - - - org.wso2.carbon - org.wso2.carbon.registry.api - - - org.wso2.carbon - org.wso2.carbon.registry.core - - - org.testng - testng - - - org.apache.tomcat.wso2 - jdbc-pool - - - com.h2database.wso2 - h2-database-engine - test - - - com.google.code.gson - gson - - - com.google.android.gcm - gcm-server - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/AbstractMobileOperationManager.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/AbstractMobileOperationManager.java deleted file mode 100644 index e0058b6bd..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/AbstractMobileOperationManager.java +++ /dev/null @@ -1,42 +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. - */ - -package org.wso2.carbon.device.mgt.mobile; - -import org.wso2.carbon.device.mgt.common.*; -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.common.operation.mgt.OperationManager; - -import java.util.List; - -public abstract class AbstractMobileOperationManager implements OperationManager { - - @Override - public List getOperations(DeviceIdentifier deviceIdentifier) throws OperationManagementException { - return null; - } - - @Override - public Activity addOperation(Operation operation, List devices) throws - OperationManagementException { - return null; - } - -} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceNotAvailableException.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceNotAvailableException.java deleted file mode 100644 index 5a9e5b8f4..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceNotAvailableException.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * * - * * Copyright (c) 2015, 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. - * - */ -package org.wso2.carbon.device.mgt.mobile; - -public class DataSourceNotAvailableException extends RuntimeException { - - private String message; - private static final long serialVersionUID = 2021891706072918866L; - - public DataSourceNotAvailableException(String message, Exception nestedException) { - super(message, nestedException); - setErrorMessage(message); - } - - public DataSourceNotAvailableException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public DataSourceNotAvailableException(String message) { - super(message); - setErrorMessage(message); - } - - public DataSourceNotAvailableException(Throwable cause) { - super(cause); - } - - public String getMessage() { - return message; - } - - public void setErrorMessage(String errorMessage) { - this.message = errorMessage; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobilePluginConstants.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobilePluginConstants.java deleted file mode 100644 index 67e793fa5..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobilePluginConstants.java +++ /dev/null @@ -1,29 +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. - */ -package org.wso2.carbon.device.mgt.mobile.common; - -public class MobilePluginConstants { - public static final String MOBILE_DB_SCRIPTS_FOLDER = "cdm"; - public static final String MOBILE_CONFIG_REGISTRY_ROOT = "/_system/config"; - - public static final String MEDIA_TYPE_XML = "application/xml"; - public static final String CHARSET_UTF8 = "UTF8"; - public static final String LANGUAGE_CODE_ENGLISH_US = "en_US"; - public static final String LANGUAGE_CODE_ENGLISH_UK = "en_UK"; - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementDataHolder.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementDataHolder.java deleted file mode 100644 index 6444afd90..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementDataHolder.java +++ /dev/null @@ -1,58 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.internal; - -import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; -import org.wso2.carbon.registry.core.service.RegistryService; - -/** - * DataHolder class of Mobile plugins component. - */ -public class MobileDeviceManagementDataHolder { - - private RegistryService registryService; - private DeviceManagementService androidDeviceManagementService; - - private static MobileDeviceManagementDataHolder thisInstance = new MobileDeviceManagementDataHolder(); - - private MobileDeviceManagementDataHolder() { - } - - public static MobileDeviceManagementDataHolder getInstance() { - return thisInstance; - } - - public RegistryService getRegistryService() { - return registryService; - } - - public void setRegistryService(RegistryService registryService) { - this.registryService = registryService; - } - - public DeviceManagementService getAndroidDeviceManagementService() { - return androidDeviceManagementService; - } - - public void setAndroidDeviceManagementService( - DeviceManagementService androidDeviceManagementService) { - this.androidDeviceManagementService = androidDeviceManagementService; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementServiceComponent.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementServiceComponent.java deleted file mode 100644 index 5b7f85931..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/internal/MobileDeviceManagementServiceComponent.java +++ /dev/null @@ -1,143 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.internal; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.config.MobileDeviceConfigurationManager; -import org.wso2.carbon.device.mgt.mobile.config.MobileDeviceManagementConfig; -import org.wso2.carbon.device.mgt.mobile.config.datasource.MobileDataSourceConfig; -import org.wso2.carbon.device.mgt.mobile.dao.AbstractMobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.ndatasource.core.DataSourceService; -import org.wso2.carbon.registry.core.service.RegistryService; - -import java.util.Map; - -/** - * @scr.component name="org.wso2.carbon.device.mgt.mobile.impl.internal.MobileDeviceManagementServiceComponent" - * immediate="true" - * @scr.reference name="org.wso2.carbon.ndatasource" - * interface="org.wso2.carbon.ndatasource.core.DataSourceService" - * cardinality="1..1" - * policy="dynamic" - * bind="setDataSourceService" - * unbind="unsetDataSourceService" - * @scr.reference name="registry.service" - * interface="org.wso2.carbon.registry.core.service.RegistryService" cardinality="0..1" - * policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService" - *

    - * Adding reference to API Manager Configuration service is an unavoidable hack to get rid of NPEs thrown while - * initializing APIMgtDAOs attempting to register APIs programmatically. APIMgtDAO needs to be proper cleaned up - * to avoid as an ideal fix - */ -public class MobileDeviceManagementServiceComponent { - - private ServiceRegistration gcmServiceRegRef; - - private static final Log log = LogFactory.getLog(MobileDeviceManagementServiceComponent.class); - - protected void activate(ComponentContext ctx) { - - if (log.isDebugEnabled()) { - log.debug("Activating Mobile Device Management Service Component"); - } - try { - BundleContext bundleContext = ctx.getBundleContext(); - - /* Initialize the data source configuration */ - MobileDeviceConfigurationManager.getInstance().initConfig(); - MobileDeviceManagementConfig config = MobileDeviceConfigurationManager.getInstance() - .getMobileDeviceManagementConfig(); - Map dsConfigMap = - config.getMobileDeviceMgtRepository().getMobileDataSourceConfigMap(); - - AbstractMobileDeviceManagementDAOFactory.init(dsConfigMap); - - String setupOption = System.getProperty("setup"); - if (setupOption != null) { - if (log.isDebugEnabled()) { - log.debug( - "-Dsetup is enabled. Mobile Device management repository schema initialization is about " + - "to begin"); - } - try { - for (String pluginType : dsConfigMap.keySet()) { - MobileDeviceManagementDAOUtil - .setupMobileDeviceManagementSchema(AbstractMobileDeviceManagementDAOFactory.getDataSourceMap - ().get(pluginType), pluginType); - } - } catch (MobileDeviceMgtPluginException e) { - log.error("Exception occurred while initializing mobile device management database schema", e); - } - } - - if (log.isDebugEnabled()) { - log.debug("Mobile Device Management Service Component has been successfully activated"); - } - } catch (Throwable e) { - log.error("Error occurred while activating Mobile Device Management Service Component", e); - } - } - - protected void deactivate(ComponentContext ctx) { - if (log.isDebugEnabled()) { - log.debug("De-activating Mobile Device Management Service Component"); - } - try { - if (gcmServiceRegRef != null) { - gcmServiceRegRef.unregister(); - } - if (log.isDebugEnabled()) { - log.debug( - "Mobile Device Management Service Component has been successfully de-activated"); - } - } catch (Throwable e) { - log.error("Error occurred while de-activating Mobile Device Management bundle", e); - } - } - - protected void setDataSourceService(DataSourceService dataSourceService) { - /* This is to avoid mobile device management component getting initialized before the underlying datasources - are registered */ - if (log.isDebugEnabled()) { - log.debug("Data source service set to mobile service component"); - } - } - - protected void unsetDataSourceService(DataSourceService dataSourceService) { - //do nothing - } - - protected void setRegistryService(RegistryService registryService) { - if (log.isDebugEnabled()) { - log.debug("RegistryService acquired"); - } - MobileDeviceManagementDataHolder.getInstance().setRegistryService(registryService); - } - - protected void unsetRegistryService(RegistryService registryService) { - MobileDeviceManagementDataHolder.getInstance().setRegistryService(null); - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/MobileDeviceManagementConfigTests.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/MobileDeviceManagementConfigTests.java deleted file mode 100644 index 461de8a1a..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/MobileDeviceManagementConfigTests.java +++ /dev/null @@ -1,141 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.device.mgt.mobile.config.MobileDeviceManagementConfig; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.File; - -/** - * Class for holding unit-tests related to MobileDeviceManagementConfig class. - */ - -public class MobileDeviceManagementConfigTests { - - private static final Log log = LogFactory.getLog(MobileDeviceManagementConfigTests.class); - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_MGT_REPOSITORY = - "./src/test/resources/config/malformed-mobile-config-no-mgt-repo.xml"; - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_DS_CONFIG = - "./src/test/resources/config/malformed-mobile-config-no-ds-config.xml"; - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_JNDI_CONFIG = - "./src/test/resources/config/malformed-mobile-config-no-jndi-config.xml"; - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_APIS_CONFIG = - "./src/test/resources/config/malformed-mobile-config-no-apis-config.xml"; - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_API_CONFIG = - "./src/test/resources/config/malformed-mobile-config-no-api-config.xml"; - private static final String MALFORMED_TEST_CONFIG_LOCATION_NO_API_PUBLISHER_CONFIG = - "./src/test/resources/config/malformed-mobile-config-no-api-publisher-config.xml"; - private static final String TEST_CONFIG_SCHEMA_LOCATION = - "./src/test/resources/config/schema/MobileDeviceManagementConfigSchema.xsd"; - - private Schema schema; - - @BeforeClass - private void initSchema() { - File deviceManagementSchemaConfig = - new File(MobileDeviceManagementConfigTests.TEST_CONFIG_SCHEMA_LOCATION); - SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - try { - schema = factory.newSchema(deviceManagementSchemaConfig); - } catch (SAXException e) { - Assert.fail("Invalid schema found", e); - } - } - - @Test - public void testMandateManagementRepositoryElement() { - File malformedConfig = - new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_MGT_REPOSITORY); - this.validateMalformedConfig(malformedConfig); - } - - @Test - public void testMandateDataSourceConfigurationElement() { - File malformedConfig = new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_DS_CONFIG); - this.validateMalformedConfig(malformedConfig); - } - - @Test - public void testMandateJndiLookupDefinitionElement() { - File malformedConfig = new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_JNDI_CONFIG); - this.validateMalformedConfig(malformedConfig); - } - - @Test - public void testMandateAPIPublisherElement() { - File malformedConfig = new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_API_PUBLISHER_CONFIG); - this.validateMalformedConfig(malformedConfig); - } - - @Test - public void testMandateAPIsElement() { - File malformedConfig = new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_APIS_CONFIG); - this.validateMalformedConfig(malformedConfig); - } - - @Test - public void testMandateAPIElement() { - File malformedConfig = new File( - MobileDeviceManagementConfigTests.MALFORMED_TEST_CONFIG_LOCATION_NO_API_CONFIG); - this.validateMalformedConfig(malformedConfig); - } - - /** - * Validates a given malformed-configuration file. - */ - private void validateMalformedConfig(File malformedConfig) { - try { - JAXBContext ctx = JAXBContext.newInstance(MobileDeviceManagementConfig.class); - Unmarshaller um = ctx.createUnmarshaller(); - um.setSchema(this.getSchema()); - um.unmarshal(malformedConfig); - Assert.assertTrue(false); - } catch (JAXBException e) { - Throwable linkedException = e.getLinkedException(); - if (!(linkedException instanceof SAXParseException)) { - log.error("Unexpected error occurred while unmarshalling mobile device management config", e); - Assert.assertTrue(false); - } - Assert.assertTrue(true); - } - } - - private Schema getSchema() { - return schema; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/DBTypes.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/DBTypes.java deleted file mode 100644 index fa263f384..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/DBTypes.java +++ /dev/null @@ -1,29 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.impl.common; - - -public enum DBTypes { - Oracle("Oracle"),H2("H2"),MySql("MySql"); - - String dbName ; - DBTypes(String dbStrName) { - dbName = dbStrName; - } -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfiguration.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfiguration.java deleted file mode 100644 index 042e105bf..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfiguration.java +++ /dev/null @@ -1,90 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.impl.common; - -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "Type") -public class TestDBConfiguration { - - private String connectionURL; - private String driverClassName; - private String username; - private String password; - - @Override public String toString() { - return "TestDataSourceConfiguration{" + - "ConnectionURL='" + connectionURL + '\'' + - ", DriverClassName='" + driverClassName + '\'' + - ", Username='" + username + '\'' + - ", Password='" + password + '\'' + - ", Type='" + dbType + '\'' + - '}'; - } - - private String dbType; - - @XmlElement(name = "ConnectionURL", nillable = false) - public String getConnectionURL() { - return connectionURL; - } - - public void setConnectionURL(String connectionURL) { - this.connectionURL = connectionURL; - } - - @XmlElement(name = "DriverClassName", nillable = false) - public String getDriverClassName() { - return driverClassName; - } - - public void setDriverClassName(String driverClassName) { - this.driverClassName = driverClassName; - } - - @XmlElement(name = "Username", nillable = false) - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - @XmlElement(name = "Password", nillable = false) - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @XmlAttribute(name = "name") - public String getType() { - return dbType; - } - - public void setType(String type) { - this.dbType = type; - } - -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/dao/util/MobileDatabaseUtils.java b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/dao/util/MobileDatabaseUtils.java deleted file mode 100644 index f454f6f06..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/dao/util/MobileDatabaseUtils.java +++ /dev/null @@ -1,111 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.impl.dao.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.impl.common.DBTypes; -import org.wso2.carbon.device.mgt.mobile.impl.common.TestDBConfiguration; -import org.wso2.carbon.device.mgt.mobile.impl.common.TestDBConfigurations; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import java.io.File; -import java.sql.*; - -/** - * This class provides the utility methods needed for DAO related test executions. - */ -public class MobileDatabaseUtils { - - private static final Log log = LogFactory.getLog(MobileDatabaseUtils.class); - public static final String TEST_RESOURCES_DB_CONFIG_FILE = - "src/test/resources/testdbconfig.xml"; - - public static void cleanupResources(Connection conn, Statement stmt, ResultSet rs) { - if (rs != null) { - try { - rs.close(); - } catch (SQLException e) { - log.warn("Error occurred while closing result set", e); - } - } - if (stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - log.warn("Error occurred while closing prepared statement", e); - } - } - if (conn != null) { - try { - conn.close(); - } catch (SQLException e) { - log.warn("Error occurred while closing database connection", e); - } - } - } - - public static TestDBConfiguration getTestDBConfiguration(DBTypes dbType) throws - MobileDeviceManagementDAOException, - DeviceManagementException { - File deviceMgtConfig = new File(TEST_RESOURCES_DB_CONFIG_FILE); - Document doc; - TestDBConfiguration testDBConfiguration = null; - TestDBConfigurations testDBConfigurations; - - doc = MobileDeviceManagementUtil.convertToDocument(deviceMgtConfig); - JAXBContext testDBContext; - - try { - testDBContext = JAXBContext.newInstance(TestDBConfigurations.class); - Unmarshaller unmarshaller = testDBContext.createUnmarshaller(); - testDBConfigurations = (TestDBConfigurations) unmarshaller.unmarshal(doc); - } catch (JAXBException e) { - throw new MobileDeviceManagementDAOException("Error parsing test db configurations", e); - } - - for (TestDBConfiguration testDBConfiguration1 : testDBConfigurations.getDbTypesList()) { - testDBConfiguration = testDBConfiguration1; - if (testDBConfiguration.getType().equals(dbType.toString())) { - break; - } - } - - return testDBConfiguration; - } - - public static void createH2DB(TestDBConfiguration testDBConf) throws Exception { - Connection conn = null; - Statement stmt = null; - try { - Class.forName(testDBConf.getDriverClassName()); - conn = DriverManager.getConnection(testDBConf.getConnectionURL()); - stmt = conn.createStatement(); - stmt.executeUpdate("RUNSCRIPT FROM './src/test/resources/sql/h2.sql'"); - } finally { - cleanupResources(conn, stmt, null); - } - } -} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-config.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-config.xml deleted file mode 100644 index 3fad2eceb..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-config.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - jdbc/MobileIOSDM_DS - - - - - jdbc/MobileAndroidDM_DS - - - - - jdbc/MobileWindowsDM_DS - - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-publisher-config.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-publisher-config.xml deleted file mode 100644 index 94fb50462..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-api-publisher-config.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - jdbc/MobileDM_DS - - - - - - - - enrollment - admin - enrollment - 1.0.0 - http://localhost:9763/ - http,https - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-apis-config.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-apis-config.xml deleted file mode 100644 index 743fe6c24..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-apis-config.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - jdbc/MobileDM_DS - - - - - - - - enrollment - admin - enrollment - 1.0.0 - http://localhost:9763/ - http,https - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-ds-config.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-ds-config.xml deleted file mode 100644 index 1f1b5ef14..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-ds-config.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - jdbc/MobileDM_DS - - - - - - - - enrollment - admin - enrollment - 1.0.0 - http://localhost:9763/ - http,https - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-jndi-config.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-jndi-config.xml deleted file mode 100644 index 06dc33761..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-jndi-config.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - jdbc/MobileDM_DS - - - - - - - - enrollment - admin - enrollment - 1.0.0 - http://localhost:9763/ - http,https - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-mgt-repo.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-mgt-repo.xml deleted file mode 100644 index 617742635..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/malformed-mobile-config-no-mgt-repo.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - jdbc/MobileDM_DS - - - - - - - - enrollment - admin - enrollment - 1.0.0 - http://localhost:9763/ - http,https - - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/schema/MobileDeviceManagementConfigSchema.xsd b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/schema/MobileDeviceManagementConfigSchema.xsd deleted file mode 100644 index ff6435e50..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/config/schema/MobileDeviceManagementConfigSchema.xsd +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/log4j.properties b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/log4j.properties deleted file mode 100644 index 675d63149..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/log4j.properties +++ /dev/null @@ -1,33 +0,0 @@ -# -# Copyright 2015 WSO2, Inc. (http://wso2.com) -# -# 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 is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=DEBUG, STD_OUT - -# Redirect log messages to console -log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender -log4j.appender.STD_OUT.Target=System.out -log4j.appender.STD_OUT.layout=org.apache.log4j.PatternLayout -log4j.appender.STD_OUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/sql/h2.sql b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/sql/h2.sql deleted file mode 100644 index 6d2106879..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/sql/h2.sql +++ /dev/null @@ -1,55 +0,0 @@ - --- ----------------------------------------------------- --- Table `AD_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_DEVICE` ( - `DEVICE_ID` VARCHAR(45) NOT NULL , - `PUSH_TOKEN` VARCHAR(45) NULL DEFAULT NULL , - `IMEI` VARCHAR(45) NULL DEFAULT NULL , - `IMSI` VARCHAR(45) NULL DEFAULT NULL , - `OS_VERSION` VARCHAR(45) NULL DEFAULT NULL , - `DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL , - `VENDOR` VARCHAR(45) NULL DEFAULT NULL , - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - `CHALLENGE` VARCHAR(45) NULL DEFAULT NULL, - `TOKEN` VARCHAR(500) NULL DEFAULT NULL, - `UNLOCK_TOKEN` VARCHAR(500) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `OS_BUILD_DATE` VARCHAR(45) NULL DEFAULT NULL, - PRIMARY KEY (`DEVICE_ID`) ); - - --- ----------------------------------------------------- --- Table `AD_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_FEATURE` ( - `ID` INT NOT NULL AUTO_INCREMENT , - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL , - `DESCRIPTION` VARCHAR(200) NULL , - `DEVICE_TYPE` VARCHAR(50) NULL , - PRIMARY KEY (`ID`) ); - --- ----------------------------------------------------- --- Table `AD_OPERATION` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_OPERATION` ( - `OPERATION_ID` INT NOT NULL AUTO_INCREMENT , - `FEATURE_CODE` VARCHAR(45) NOT NULL , - `CREATED_DATE` BIGINT NULL , - PRIMARY KEY (`OPERATION_ID`)); - - --- ----------------------------------------------------- --- Table `AD_FEATURE_PROPERTY` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_FEATURE_PROPERTY` ( - `PROPERTY` VARCHAR(45) NOT NULL , - `FEATURE_ID` INT NOT NULL , - PRIMARY KEY (`PROPERTY`) , - CONSTRAINT `fk_AD_FEATURE_PROPERTY_AD_FEATURE1` - FOREIGN KEY (`FEATURE_ID` ) - REFERENCES `AD_FEATURE` (`ID` ) - ON DELETE NO ACTION - ON UPDATE NO ACTION); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testdbconfig.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testdbconfig.xml deleted file mode 100644 index eee04a324..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testdbconfig.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - jdbc:h2:mem:cdm-mobile-test-db;DB_CLOSE_DELAY=-1 - org.h2.Driver - - - - diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testng.xml b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testng.xml deleted file mode 100644 index f73ab880b..000000000 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/resources/testng.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/pom.xml b/components/mobile-plugins/pom.xml index 5766f13e2..005931bf1 100644 --- a/components/mobile-plugins/pom.xml +++ b/components/mobile-plugins/pom.xml @@ -35,7 +35,6 @@ android-plugin windows-plugin - mobile-base-plugin 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 index 208a667a0..9a973323d 100644 --- a/components/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 @@ -35,7 +35,7 @@ import javax.ws.rs.core.Response; * All end points supports JSON, XMl with content negotiation. */ @API(name = "Windows Configuration Management", version = "1.0.0", - context = "api/device-mgt/windows/v1.0/services/configuration", + context = "/api/device-mgt/windows/v1.0/services/configuration", tags = {"windows"}) @Api(value = "Windows Configuration Management", description = "This carries all the resources related to Windows configurations management functionalities") 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 index 730171da7..5cfa31fd4 100644 --- a/components/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 @@ -39,7 +39,7 @@ import java.util.List; @Api(value = "Windows Device Management Administrative Service", description = "Device management related admin APIs.") @API(name = "Windows Device Management Administrative Service", version = "1.0.0", - context = "api/device-mgt/windows/v1.0/admin/devices", + context = "/api/device-mgt/windows/v1.0/admin/devices", tags = {"devicemgt_windows"}) @WebService @Path("/admin/devices") 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 index 5f0f84421..8734124df 100644 --- a/components/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 @@ -41,7 +41,7 @@ import java.util.List; @Api(value = "Windows Device Management", description = "This carries all the resources related to Windows device management functionalities") @API(name = "Windows Device Management", version = "1.0.0", - context = "api/device-mgt/windows/v1.0/devices", + context = "/api/device-mgt/windows/v1.0/devices", tags = {"devicemgt_windows"}) @WebService @Path("/devices") diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml index ef310a9fd..223f7c5d6 100644 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml +++ b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml @@ -57,11 +57,16 @@ org.apache.commons.logging, javax.xml.bind.*, javax.sql, + javax.naming, + javax.xml.parsers; version=0.0.0, + org.w3c.dom, + org.wso2.carbon.context, + org.wso2.carbon.utils.*, org.wso2.carbon.device.mgt.common.*, - org.wso2.carbon.device.mgt.mobile.*, org.wso2.carbon.ndatasource.core, org.wso2.carbon.policy.mgt.common.*, org.wso2.carbon.registry.core, + org.wso2.carbon.registry.core.session, org.wso2.carbon.registry.core.service, org.wso2.carbon.registry.api, org.wso2.carbon.device.mgt.extensions.license.mgt.registry @@ -91,10 +96,6 @@ - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile - org.eclipse.osgi org.eclipse.osgi diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobileDeviceMgtPluginException.java b/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 similarity index 73% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobileDeviceMgtPluginException.java rename to 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 index ef2871c28..d1295937b 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/common/MobileDeviceMgtPluginException.java +++ b/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 @@ -15,10 +15,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.wso2.carbon.device.mgt.mobile.common; +package org.wso2.carbon.device.mgt.mobile.windows.exception; -public class MobileDeviceMgtPluginException extends Exception{ +public class WindowsDeviceMgtPluginException extends Exception{ private static final long serialVersionUID = -2297311387874900305L; private String errorMessage; @@ -31,26 +31,26 @@ public class MobileDeviceMgtPluginException extends Exception{ this.errorMessage = errorMessage; } - public MobileDeviceMgtPluginException(String msg, Exception nestedEx) { + public WindowsDeviceMgtPluginException(String msg, Exception nestedEx) { super(msg, nestedEx); setErrorMessage(msg); } - public MobileDeviceMgtPluginException(String message, Throwable cause) { + public WindowsDeviceMgtPluginException(String message, Throwable cause) { super(message, cause); setErrorMessage(message); } - public MobileDeviceMgtPluginException(String msg) { + public WindowsDeviceMgtPluginException(String msg) { super(msg); setErrorMessage(msg); } - public MobileDeviceMgtPluginException() { + public WindowsDeviceMgtPluginException() { super(); } - public MobileDeviceMgtPluginException(Throwable cause) { + public WindowsDeviceMgtPluginException(Throwable cause) { super(cause); } diff --git a/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 b/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 index 30f6cb4f2..dd497352b 100644 --- a/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 +++ b/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 @@ -26,14 +26,14 @@ import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.common.MobilePluginConstants; -import org.wso2.carbon.device.mgt.mobile.dao.AbstractMobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.windows.exception.WindowsDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.AbstractMobileDeviceManagementDAOFactory; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOException; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.WindowsDAOFactory; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.windows.impl.util.MobileDeviceManagementUtil; +import org.wso2.carbon.device.mgt.mobile.windows.impl.util.WindowsPluginConstants; import org.wso2.carbon.device.mgt.mobile.windows.impl.util.WindowsPluginUtils; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; import org.wso2.carbon.registry.api.RegistryException; import org.wso2.carbon.registry.api.Resource; @@ -62,7 +62,7 @@ public class WindowsDeviceManager implements DeviceManager { try { if (licenseManager.getLicense(WindowsDeviceManagementService.DEVICE_TYPE_WINDOWS, - MobilePluginConstants.LANGUAGE_CODE_ENGLISH_US) == null) { + WindowsPluginConstants.LANGUAGE_CODE_ENGLISH_US) == null) { licenseManager.addLicense(WindowsDeviceManagementService.DEVICE_TYPE_WINDOWS, defaultLicense); } featureManager.addSupportedFeaturesToDB(); @@ -97,10 +97,10 @@ public class WindowsDeviceManager implements DeviceManager { resource = MobileDeviceManagementUtil.getConfigurationRegistry().newResource(); resource.setContent(writer.toString()); - resource.setMediaType(MobilePluginConstants.MEDIA_TYPE_XML); + resource.setMediaType(WindowsPluginConstants.MEDIA_TYPE_XML); MobileDeviceManagementUtil.putRegistryResource(resourcePath, resource); status = true; - } catch (MobileDeviceMgtPluginException e) { + } catch (WindowsDeviceMgtPluginException e) { throw new DeviceManagementException( "Error occurred while retrieving the Registry instance : " + e.getMessage(), e); } catch (RegistryException e) { @@ -126,10 +126,10 @@ public class WindowsDeviceManager implements DeviceManager { Unmarshaller unmarshaller = context.createUnmarshaller(); return (PlatformConfiguration) unmarshaller.unmarshal( new StringReader(new String((byte[]) resource.getContent(), Charset. - forName(MobilePluginConstants.CHARSET_UTF8)))); + forName(WindowsPluginConstants.CHARSET_UTF8)))); } return null; - } catch (MobileDeviceMgtPluginException e) { + } catch (WindowsDeviceMgtPluginException e) { throw new DeviceManagementException( "Error occurred while retrieving the Registry instance : " + e.getMessage(), e); } catch (JAXBException e) { diff --git a/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 b/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 index 6b501376a..e033cd059 100644 --- a/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 +++ b/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 @@ -21,12 +21,12 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.Feature; import org.wso2.carbon.device.mgt.common.FeatureManager; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOFactory; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileFeatureDAO; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.WindowsDAOFactory; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.windows.impl.util.MobileDeviceManagementUtil; import java.util.ArrayList; import java.util.List; diff --git a/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 b/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 new file mode 100644 index 000000000..ad2bb32f2 --- /dev/null +++ b/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 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2014, 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.impl.config; + +import org.w3c.dom.Document; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.util.MobileDeviceManagementUtil; +import org.wso2.carbon.utils.CarbonUtils; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import java.io.File; + +/** + * Class responsible for the mobile device manager configuration initialization. + */ +public class MobileDeviceConfigurationManager { + + private static final String MOBILE_DEVICE_CONFIG_XML_NAME = "mobile-config.xml"; + private static final String MOBILE_DEVICE_PLUGIN_DIRECTORY = "mobile"; + private static final String DEVICE_MGT_PLUGIN_CONFIGS_DIRECTORY = "device-mgt-plugin-configs"; + private MobileDeviceManagementConfig currentMobileDeviceConfig; + private static MobileDeviceConfigurationManager mobileDeviceConfigManager; + + private final String mobileDeviceMgtConfigXMLPath = + CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + + DEVICE_MGT_PLUGIN_CONFIGS_DIRECTORY + + File.separator + + MOBILE_DEVICE_PLUGIN_DIRECTORY + File.separator + MOBILE_DEVICE_CONFIG_XML_NAME; + + public static MobileDeviceConfigurationManager getInstance() { + if (mobileDeviceConfigManager == null) { + synchronized (MobileDeviceConfigurationManager.class) { + if (mobileDeviceConfigManager == null) { + mobileDeviceConfigManager = new MobileDeviceConfigurationManager(); + } + } + } + return mobileDeviceConfigManager; + } + + public synchronized void initConfig() throws DeviceManagementException { + try { + File mobileDeviceMgtConfig = new File(mobileDeviceMgtConfigXMLPath); + Document doc = MobileDeviceManagementUtil.convertToDocument(mobileDeviceMgtConfig); + JAXBContext mobileDeviceMgmtContext = + JAXBContext.newInstance(MobileDeviceManagementConfig.class); + Unmarshaller unmarshaller = mobileDeviceMgmtContext.createUnmarshaller(); + this.currentMobileDeviceConfig = + (MobileDeviceManagementConfig) unmarshaller.unmarshal(doc); + } catch (Exception e) { + throw new DeviceManagementException( + "Error occurred while initializing Mobile Device Management config", e); + } + } + + public MobileDeviceManagementConfig getMobileDeviceManagementConfig() { + return currentMobileDeviceConfig; + } + + +} diff --git a/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 b/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 new file mode 100644 index 000000000..c33c76e57 --- /dev/null +++ b/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 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, 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.impl.config; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Represents Mobile Device Mgt configuration. + */ +@XmlRootElement(name = "MobileDeviceMgtConfiguration") +public final class MobileDeviceManagementConfig { + + private MobileDeviceManagementRepository mobileDeviceMgtRepository; + + @XmlElement(name = "ManagementRepository", nillable = false) + public MobileDeviceManagementRepository getMobileDeviceMgtRepository() { + return mobileDeviceMgtRepository; + } + + public void setMobileDeviceMgtRepository( + MobileDeviceManagementRepository mobileDeviceMgtRepository) { + this.mobileDeviceMgtRepository = mobileDeviceMgtRepository; + } + +} diff --git a/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 b/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 new file mode 100644 index 000000000..225535cf3 --- /dev/null +++ b/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 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014, 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.impl.config; + +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.DataSourceConfigAdapter; +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.MobileDataSourceConfig; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.util.List; +import java.util.Map; + +/** + * Class for holding management repository data. + */ +@XmlRootElement(name = "ManagementRepository") +public class MobileDeviceManagementRepository { + + private Map mobileDataSourceConfigMap; + private List mobileDataSourceConfigs; + + public MobileDataSourceConfig getMobileDataSourceConfig(String provider) { + return mobileDataSourceConfigMap.get(provider); + } + + @XmlElement(name = "DataSourceConfigurations") + @XmlJavaTypeAdapter(DataSourceConfigAdapter.class) + public Map getMobileDataSourceConfigMap() { + return mobileDataSourceConfigMap; + } + + public void setMobileDataSourceConfigMap(Map mobileDataSourceConfigMap) { + this.mobileDataSourceConfigMap = mobileDataSourceConfigMap; + } + + public List getMobileDataSourceConfigs() { + return (List) mobileDataSourceConfigMap.values(); + } + +} diff --git a/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 b/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 new file mode 100644 index 000000000..331db7477 --- /dev/null +++ b/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 @@ -0,0 +1,51 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource; + +import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DataSourceConfigAdapter + extends XmlAdapter> { + + @Override + public Map unmarshal(MobileDataSourceConfigurations mobileDataSourceConfigurations) + throws Exception { + + Map mobileDataSourceConfigMap = new HashMap(); + for (MobileDataSourceConfig mobileDataSourceConfig : mobileDataSourceConfigurations + .getMobileDataSourceConfigs()) { + mobileDataSourceConfigMap.put(mobileDataSourceConfig.getType(), mobileDataSourceConfig); + } + return mobileDataSourceConfigMap; + } + + @Override + public MobileDataSourceConfigurations marshal(Map mobileDataSourceConfigMap) + throws Exception { + + MobileDataSourceConfigurations mobileDataSourceConfigurations = new MobileDataSourceConfigurations(); + mobileDataSourceConfigurations.setMobileDataSourceConfigs( + (List) mobileDataSourceConfigMap.values()); + + return mobileDataSourceConfigurations; + } +} diff --git a/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 b/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 new file mode 100644 index 000000000..5c834dc78 --- /dev/null +++ b/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 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014, 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.impl.config.datasource; + +import javax.xml.bind.annotation.*; +import java.util.List; + +/** + * Class for hold JndiLookupDefinition of mobile-config.xml at parsing with JAXB. + */ +@XmlRootElement(name = "JndiLookupDefinition") +public class JNDILookupDefinition { + + private String jndiName; + private List jndiProperties; + + @XmlElement(name = "Name", nillable = false) + public String getJndiName() { + return jndiName; + } + + public void setJndiName(String jndiName) { + this.jndiName = jndiName; + } + + @XmlElementWrapper(name = "Environment", nillable = false) + @XmlElement(name = "Property", nillable = false) + public List getJndiProperties() { + return jndiProperties; + } + + public void setJndiProperties(List jndiProperties) { + this.jndiProperties = jndiProperties; + } + + @XmlRootElement(name = "Property") + public static class JNDIProperty { + + private String name; + + private String value; + + @XmlAttribute(name = "Name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlValue + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + +} + diff --git a/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 b/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 new file mode 100644 index 000000000..c1ba5bd55 --- /dev/null +++ b/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 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014, 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.impl.config.datasource; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Class for holding data source configuration in mobile-config.xml at parsing with JAXB. + */ +@XmlRootElement(name = "DataSourceConfiguration") +public class MobileDataSourceConfig { + + private JNDILookupDefinition jndiLookupDefinition; + private String type; + + @XmlElement(name = "JndiLookupDefinition", nillable = true) + public JNDILookupDefinition getJndiLookupDefinition() { + return jndiLookupDefinition; + } + + public void setJndiLookupDefinition(JNDILookupDefinition jndiLookupDefinition) { + this.jndiLookupDefinition = jndiLookupDefinition; + } + + @XmlAttribute(name = "type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfigurations.java b/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 similarity index 53% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfigurations.java rename to 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 index 88092ea41..3cf0a5ed3 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/test/java/org/wso2/carbon/device/mgt/mobile/impl/common/TestDBConfigurations.java +++ b/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 @@ -15,25 +15,27 @@ * specific language governing permissions and limitations * under the License. */ +package org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource; -package org.wso2.carbon.device.mgt.mobile.impl.common; - +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.List; -@XmlRootElement(name = "TestDataSourceConfigurations") -public class TestDBConfigurations { +@XmlRootElement(name = "DataSourceConfigurations") +@XmlAccessorType(XmlAccessType.FIELD) +public class MobileDataSourceConfigurations { - private List dbTypesList; + @XmlElement(name = "DataSourceConfiguration", nillable = true) + private List mobileDataSourceConfigs; - @XmlElement(name = "Type") - public List getDbTypesList() { - return dbTypesList; + public List getMobileDataSourceConfigs() { + return mobileDataSourceConfigs; } - public void setDbTypesList(List dbTypesList) { - this.dbTypesList = dbTypesList; + public void setMobileDataSourceConfigs(List mobileDataSourceConfigs) { + this.mobileDataSourceConfigs = mobileDataSourceConfigs; } } diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/AbstractMobileDeviceManagementDAOFactory.java b/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 similarity index 87% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/AbstractMobileDeviceManagementDAOFactory.java rename to 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 index 32bcb8de7..5ebee9358 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/AbstractMobileDeviceManagementDAOFactory.java +++ b/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 @@ -16,14 +16,14 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao; +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.config.datasource.JNDILookupDefinition; -import org.wso2.carbon.device.mgt.mobile.config.datasource.MobileDataSourceConfig; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.windows.exception.WindowsDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.JNDILookupDefinition; +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.MobileDataSourceConfig; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.util.MobileDeviceManagementDAOUtil; import javax.sql.DataSource; import java.util.HashMap; @@ -41,7 +41,7 @@ public abstract class AbstractMobileDeviceManagementDAOFactory implements Mobile private static boolean isInitialized; public static void init(Map mobileDataSourceConfigMap) - throws MobileDeviceMgtPluginException { + throws WindowsDeviceMgtPluginException { DataSource dataSource; for (String pluginType : mobileDataSourceConfigMap.keySet()) { if (dataSourceMap.get(pluginType) == null) { @@ -54,7 +54,7 @@ public abstract class AbstractMobileDeviceManagementDAOFactory implements Mobile } public static void init(String key, MobileDataSourceConfig mobileDataSourceConfig) throws - MobileDeviceMgtPluginException { + WindowsDeviceMgtPluginException { DataSource dataSource = AbstractMobileDeviceManagementDAOFactory.resolveDataSource(mobileDataSourceConfig); dataSourceMap.put(key, dataSource); } diff --git a/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 b/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 new file mode 100644 index 000000000..36c4c6c29 --- /dev/null +++ b/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 @@ -0,0 +1,74 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileDevice; + +import java.util.List; + +/** + * This class represents the key operations associated with persisting mobile-device related + * information. + */ +public interface MobileDeviceDAO { + + /** + * Fetches a MobileDevice from MDM database. + * + * @param mblDeviceId Id of the Mobile-Device. + * @return MobileDevice corresponding to given device-id. + * @throws MobileDeviceManagementDAOException + */ + MobileDevice getMobileDevice(String mblDeviceId) throws MobileDeviceManagementDAOException; + + /** + * Adds a new MobileDevice to the MDM database. + * + * @param mobileDevice MobileDevice to be added. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean addMobileDevice(MobileDevice mobileDevice) throws MobileDeviceManagementDAOException; + + /** + * Updates MobileDevice information in MDM database. + * + * @param mobileDevice MobileDevice to be updated. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean updateMobileDevice(MobileDevice mobileDevice) throws MobileDeviceManagementDAOException; + + /** + * Deletes a given MobileDevice from MDM database. + * + * @param mblDeviceId Id of MobileDevice to be deleted. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean deleteMobileDevice(String mblDeviceId) throws MobileDeviceManagementDAOException; + + /** + * Fetches all MobileDevices from MDM database. + * + * @return List of MobileDevices. + * @throws MobileDeviceManagementDAOException + */ + List getAllMobileDevices() throws MobileDeviceManagementDAOException; + +} diff --git a/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 b/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 new file mode 100644 index 000000000..4d772f635 --- /dev/null +++ b/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 @@ -0,0 +1,80 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; + +/** + * Custom exception class for mobile device specific data access related exceptions. + */ +public class MobileDeviceManagementDAOException extends Exception { + + private String message; + private static final long serialVersionUID = 2021891706072918865L; + + /** + * Constructs a new MobileDeviceManagementDAOException with the specified detail message and + * nested exception. + * + * @param message error message + * @param nestedException exception + */ + public MobileDeviceManagementDAOException(String message, Exception nestedException) { + super(message, nestedException); + setErrorMessage(message); + } + + /** + * Constructs a new MobileDeviceManagementDAOException with the specified detail message + * and cause. + * + * @param message the detail message. + * @param cause the cause of this exception. + */ + public MobileDeviceManagementDAOException(String message, Throwable cause) { + super(message, cause); + setErrorMessage(message); + } + + /** + * Constructs a new MobileDeviceManagementDAOException with the specified detail message. + * + * @param message the detail message. + */ + public MobileDeviceManagementDAOException(String message) { + super(message); + setErrorMessage(message); + } + + /** + * Constructs a new MobileDeviceManagementDAOException with the specified and cause. + * + * @param cause the cause of this exception. + */ + public MobileDeviceManagementDAOException(Throwable cause) { + super(cause); + } + + public String getMessage() { + return message; + } + + public void setErrorMessage(String errorMessage) { + this.message = errorMessage; + } + +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceListener.java b/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 similarity index 77% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceListener.java rename to 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 index 649786c43..b4362cd73 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/DataSourceListener.java +++ b/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 @@ -16,10 +16,12 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile; +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; -public interface DataSourceListener { +public interface MobileDeviceManagementDAOFactory { - void notifyObserver(); + MobileDeviceDAO getMobileDeviceDAO(); + + MobileFeatureDAO getMobileFeatureDAO(); } diff --git a/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 b/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 new file mode 100644 index 000000000..9d50a0208 --- /dev/null +++ b/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 @@ -0,0 +1,110 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; + +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileFeature; + +import java.util.List; + +/** + * This class represents the key operations associated with persisting mobile feature related + * information. + */ +public interface MobileFeatureDAO { + + /** + * Adds a new MobileFeature to Mobile-Feature table. + * + * @param mobileFeature MobileFeature object that holds data related to the feature to be inserted. + * @return boolean status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean addFeature(MobileFeature mobileFeature) throws MobileDeviceManagementDAOException; + + /** + * Adda a list of MobileFeatures to Mobile-Feature table. + * + * @param mobileFeatures List of MobileFeature objects. + * @return boolean status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean addFeatures(List mobileFeatures) throws MobileDeviceManagementDAOException; + + /** + * Updates a MobileFeature in Mobile-Feature table. + * + * @param mobileFeature MobileFeature object that holds data has to be updated. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean updateFeature(MobileFeature mobileFeature) throws MobileDeviceManagementDAOException; + + /** + * Deletes a MobileFeature from Mobile-Feature table when the feature id is given. + * + * @param mblFeatureId MobileFeature id of the MobileFeature to be deleted. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean deleteFeatureById(int mblFeatureId) throws MobileDeviceManagementDAOException; + + /** + * Deletes a MobileFeature from Mobile-Feature table when the feature code is given. + * + * @param mblFeatureCode MobileFeature code of the feature to be deleted. + * @return The status of the operation. + * @throws MobileDeviceManagementDAOException + */ + boolean deleteFeatureByCode(String mblFeatureCode) throws MobileDeviceManagementDAOException; + + /** + * Retrieves a given MobileFeature from Mobile-Feature table when the feature id is given. + * + * @param mblFeatureId Feature id of the feature to be retrieved. + * @return MobileFeature object that holds data of the feature represented by featureId. + * @throws MobileDeviceManagementDAOException + */ + MobileFeature getFeatureById(int mblFeatureId) throws MobileDeviceManagementDAOException; + + /** + * Retrieves a given MobileFeature from Mobile-Feature table when the feature code is given. + * + * @param mblFeatureCode Feature code of the feature to be retrieved. + * @return MobileFeature object that holds data of the feature represented by featureCode. + * @throws MobileDeviceManagementDAOException + */ + MobileFeature getFeatureByCode(String mblFeatureCode) throws MobileDeviceManagementDAOException; + + /** + * Retrieves all MobileFeatures of a MobileDevice type from Mobile-Feature table. + * + * @param deviceType MobileDevice type of the MobileFeatures to be retrieved + * @return MobileFeature object list. + * @throws MobileDeviceManagementDAOException + */ + List getFeatureByDeviceType(String deviceType) throws MobileDeviceManagementDAOException; + + /** + * Retrieve all the MobileFeatures from Mobile-Feature table. + * + * @return MobileFeature object list. + * @throws MobileDeviceManagementDAOException + */ + List getAllFeatures() throws MobileDeviceManagementDAOException; +} diff --git a/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 b/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 index 6e99fc6b9..6bbdf572f 100644 --- a/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 +++ b/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 @@ -21,10 +21,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; 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.mobile.dao.AbstractMobileDeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceDAO; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.impl.WindowsDeviceDAOImpl; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.impl.WindowsFeatureDAOImpl; diff --git a/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 b/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 index 1dd62d287..0d12c6f3b 100644 --- a/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 +++ b/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 @@ -18,8 +18,6 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl.dao; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; - /** * Implement Exception class for Windows Device Features. */ diff --git a/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 b/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 index f65d42fc7..1cf1d83f4 100644 --- a/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 +++ b/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 @@ -19,11 +19,11 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceDAO; -import org.wso2.carbon.device.mgt.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.mobile.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceDAO; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOException; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.WindowsDAOFactory; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileDevice; import org.wso2.carbon.device.mgt.mobile.windows.impl.util.WindowsPluginConstants; import java.sql.Connection; diff --git a/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 b/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 index a1e42cdff..a65a6266c 100644 --- a/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 +++ b/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 @@ -21,12 +21,12 @@ package org.wso2.carbon.device.mgt.mobile.windows.impl.dao.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.mobile.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.dao.MobileFeatureDAO; -import org.wso2.carbon.device.mgt.mobile.dao.util.MobileDeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.mobile.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileFeatureDAO; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.WindowsDAOFactory; import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.WindowsFeatureManagementDAOException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.util.MobileDeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileFeature; import org.wso2.carbon.device.mgt.mobile.windows.impl.util.WindowsPluginConstants; import java.sql.Connection; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/util/MobileDeviceManagementDAOUtil.java b/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 similarity index 89% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/util/MobileDeviceManagementDAOUtil.java rename to 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 index bf1c005c1..6490a07f9 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/dao/util/MobileDeviceManagementDAOUtil.java +++ b/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 @@ -16,14 +16,14 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.dao.util; +package org.wso2.carbon.device.mgt.mobile.windows.impl.dao.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.config.datasource.JNDILookupDefinition; -import org.wso2.carbon.device.mgt.mobile.config.datasource.MobileDataSourceConfig; -import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementSchemaInitializer; +import org.wso2.carbon.device.mgt.mobile.windows.exception.WindowsDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.JNDILookupDefinition; +import org.wso2.carbon.device.mgt.mobile.windows.impl.config.datasource.MobileDataSourceConfig; +import org.wso2.carbon.device.mgt.mobile.windows.impl.util.MobileDeviceManagementSchemaInitializer; import javax.naming.InitialContext; import javax.sql.DataSource; @@ -90,7 +90,8 @@ public class MobileDeviceManagementDAOUtil { * * @param dataSource Mobile data source */ - public static void setupMobileDeviceManagementSchema(DataSource dataSource, String pluginType) throws MobileDeviceMgtPluginException { + public static void setupMobileDeviceManagementSchema(DataSource dataSource, String + pluginType) throws WindowsDeviceMgtPluginException { MobileDeviceManagementSchemaInitializer initializer = new MobileDeviceManagementSchemaInitializer(dataSource, pluginType); String checkSql = "select * from "; @@ -110,7 +111,7 @@ public class MobileDeviceManagementDAOUtil { + " already exists. Not creating a new database."); } } catch (Exception e) { - throw new MobileDeviceMgtPluginException("Error occurred while initializing Mobile Device " + + throw new WindowsDeviceMgtPluginException("Error occurred while initializing Mobile Device " + "Management database schema", e); } } diff --git a/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 b/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 new file mode 100644 index 000000000..77b70de3b --- /dev/null +++ b/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 @@ -0,0 +1,135 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * DTO of MobileDevice. + */ +public class MobileDevice implements Serializable { + + private String mobileDeviceId; + private String osVersion; + private String model; + private String vendor; + private String latitude; + private String longitude; + private String imei; + private String imsi; + private String serial; + private String osBuildDate; + + private Map deviceProperties; + + public MobileDevice() { + this.deviceProperties = new HashMap<>(); + } + + public String getMobileDeviceId() { + return mobileDeviceId; + } + + public void setMobileDeviceId(String mobileDeviceId) { + this.mobileDeviceId = mobileDeviceId; + } + + public String getOsVersion() { + return osVersion; + } + + public void setOsVersion(String osVersion) { + this.osVersion = osVersion; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getVendor() { + return vendor; + } + + public void setVendor(String vendor) { + this.vendor = vendor; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getImsi() { + return imsi; + } + + public void setImsi(String imsi) { + this.imsi = imsi; + } + + public String getSerial() { + return serial; + } + + public void setSerial(String serial) { + this.serial = serial; + } + + public Map getDeviceProperties() { + return deviceProperties; + } + + public void setDeviceProperties(Map deviceProperties) { + this.deviceProperties = deviceProperties; + } + + public String getOsBuildDate() { + return osBuildDate; + } + + public void setOsBuildDate(String osBuildDate) { + this.osBuildDate = osBuildDate; + } +} diff --git a/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 b/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 new file mode 100644 index 000000000..f592286b4 --- /dev/null +++ b/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 @@ -0,0 +1,86 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +/** + * DTO of Mobile Device Operation Mappings. + */ +public class MobileDeviceOperationMapping { + + private String deviceId; + private int operationId; + private long sentDate; + private long receivedDate; + private Status status; + + public enum Status { + NEW, INPROGRESS, COMPLETED + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public void setStatus(String status) { + if(Status.NEW.name().equals(status)){ + this.status = Status.NEW; + }else if(Status.INPROGRESS.name().equals(status)){ + this.status = Status.INPROGRESS; + }else if(Status.COMPLETED.name().equals(status)){ + this.status = Status.COMPLETED; + } + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public int getOperationId() { + return operationId; + } + + public void setOperationId(int operationId) { + this.operationId = operationId; + } + + public long getSentDate() { + return sentDate; + } + + public void setSentDate(long sentDate) { + this.sentDate = sentDate; + } + + public long getReceivedDate() { + return receivedDate; + } + + public void setReceivedDate(long receivedDate) { + this.receivedDate = receivedDate; + } + +} diff --git a/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 b/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 new file mode 100644 index 000000000..9702746c1 --- /dev/null +++ b/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 @@ -0,0 +1,73 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +import java.io.Serializable; + +/** + * DTO of Mobile features. + */ +public class MobileFeature implements Serializable { + + private int id; + private String deviceType; + private String code; + private String name; + private String description; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } +} diff --git a/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 b/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 new file mode 100644 index 000000000..7a6f1006a --- /dev/null +++ b/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 @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +/** + * DTO of Mobile feature property. Represents a property of a mobile feature. + */ +public class MobileFeatureProperty { + + private String property; + private Integer featureID; + + public Integer getFeatureID() { + return featureID; + } + + public void setFeatureID(Integer featureID) { + this.featureID = featureID; + } + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + +} \ No newline at end of file diff --git a/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 b/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 new file mode 100644 index 000000000..1ee87e664 --- /dev/null +++ b/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 @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +import java.util.List; + +/** + * DTO of MobileOperation. + */ +public class MobileOperation { + + private int operationId; + private String featureCode; + private long createdDate; + private List properties; + + public int getOperationId() { + return operationId; + } + + public void setOperationId(int operationId) { + this.operationId = operationId; + } + + public List getProperties() { + return properties; + } + + public void setProperties(List properties) { + this.properties = properties; + } + + public String getFeatureCode() { + return featureCode; + } + + public void setFeatureCode(String featureCode) { + this.featureCode = featureCode; + } + + public long getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(long createdDate) { + this.createdDate = createdDate; + } +} \ No newline at end of file diff --git a/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 b/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 new file mode 100644 index 000000000..bff208948 --- /dev/null +++ b/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 @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.dto; + +/** + * DTO of Mobile Operation property. + */ +public class MobileOperationProperty { + + private int operationId; + private String property; + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public int getOperationId() { + return operationId; + } + + public void setOperationId(int operationId) { + this.operationId = operationId; + } + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementSchemaInitializer.java b/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 similarity index 91% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementSchemaInitializer.java rename to 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 index f0071a85f..048c4d3a5 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementSchemaInitializer.java +++ b/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 @@ -16,11 +16,10 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.util; +package org.wso2.carbon.device.mgt.mobile.windows.impl.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.common.MobilePluginConstants; import org.wso2.carbon.utils.CarbonUtils; import org.wso2.carbon.utils.dbcreator.DatabaseCreator; @@ -37,7 +36,7 @@ public final class MobileDeviceManagementSchemaInitializer extends DatabaseCreat private static final Log log = LogFactory.getLog(MobileDeviceManagementSchemaInitializer.class); private static final String setupSQLScriptBaseLocation = CarbonUtils.getCarbonHome() + File.separator + "dbscripts" + File.separator - + MobilePluginConstants.MOBILE_DB_SCRIPTS_FOLDER + + + WindowsPluginConstants.MOBILE_DB_SCRIPTS_FOLDER + File.separator + "plugins" + File.separator; private String pluginType; diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementUtil.java b/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 similarity index 90% rename from components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementUtil.java rename to 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 index e97c0cb0d..c658eb6d0 100644 --- a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile/src/main/java/org/wso2/carbon/device/mgt/mobile/util/MobileDeviceManagementUtil.java +++ b/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 @@ -16,7 +16,7 @@ * under the License. */ -package org.wso2.carbon.device.mgt.mobile.util; +package org.wso2.carbon.device.mgt.mobile.windows.impl.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -27,10 +27,13 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.Feature; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.common.MobileDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.common.MobilePluginConstants; -import org.wso2.carbon.device.mgt.mobile.dto.*; -import org.wso2.carbon.device.mgt.mobile.internal.MobileDeviceManagementDataHolder; +import org.wso2.carbon.device.mgt.mobile.windows.exception.WindowsDeviceMgtPluginException; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileDevice; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileDeviceOperationMapping; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileFeature; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileOperation; +import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileOperationProperty; +import org.wso2.carbon.device.mgt.mobile.windows.internal.WindowsDeviceManagementDataHolder; import org.wso2.carbon.registry.api.RegistryException; import org.wso2.carbon.registry.api.Resource; import org.wso2.carbon.registry.core.Registry; @@ -211,34 +214,34 @@ public class MobileDeviceManagementUtil { return feature; } - public static Registry getConfigurationRegistry() throws MobileDeviceMgtPluginException { + public static Registry getConfigurationRegistry() throws WindowsDeviceMgtPluginException { try { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - return MobileDeviceManagementDataHolder.getInstance().getRegistryService() + return WindowsDeviceManagementDataHolder.getInstance().getRegistryService() .getConfigSystemRegistry( tenantId); } catch (RegistryException e) { - throw new MobileDeviceMgtPluginException( + throw new WindowsDeviceMgtPluginException( "Error in retrieving conf registry instance: " + e.getMessage(), e); } } - public static Resource getRegistryResource(String path) throws MobileDeviceMgtPluginException { + public static Resource getRegistryResource(String path) throws WindowsDeviceMgtPluginException { try { if(MobileDeviceManagementUtil.getConfigurationRegistry().resourceExists(path)){ return MobileDeviceManagementUtil.getConfigurationRegistry().get(path); } return null; } catch (RegistryException e) { - throw new MobileDeviceMgtPluginException("Error in retrieving registry resource : " + + throw new WindowsDeviceMgtPluginException("Error in retrieving registry resource : " + e.getMessage(), e); } } public static boolean putRegistryResource(String path, Resource resource) - throws MobileDeviceMgtPluginException { + throws WindowsDeviceMgtPluginException { boolean status; try { MobileDeviceManagementUtil.getConfigurationRegistry().beginTransaction(); @@ -246,7 +249,7 @@ public class MobileDeviceManagementUtil { MobileDeviceManagementUtil.getConfigurationRegistry().commitTransaction(); status = true; } catch (RegistryException e) { - throw new MobileDeviceMgtPluginException( + throw new WindowsDeviceMgtPluginException( "Error occurred while persisting registry resource : " + e.getMessage(), e); } @@ -257,17 +260,17 @@ public class MobileDeviceManagementUtil { String regPath = ""; switch (platform) { case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID: - regPath = MobilePluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + + regPath = WindowsPluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID + "/" + resourceName; break; case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS: - regPath = MobilePluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + + regPath = WindowsPluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS + "/" + resourceName; break; case DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS: - regPath = MobilePluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + + regPath = WindowsPluginConstants.MOBILE_CONFIG_REGISTRY_ROOT + "/" + DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_IOS + "/" + resourceName; break; @@ -292,7 +295,7 @@ public class MobileDeviceManagementUtil { } public static boolean createRegistryCollection(String path) - throws MobileDeviceMgtPluginException { + throws WindowsDeviceMgtPluginException { try { if (! MobileDeviceManagementUtil.getConfigurationRegistry().resourceExists(path)) { Resource resource = MobileDeviceManagementUtil.getConfigurationRegistry().newCollection(); @@ -301,12 +304,8 @@ public class MobileDeviceManagementUtil { MobileDeviceManagementUtil.getConfigurationRegistry().commitTransaction(); } return true; - } catch (MobileDeviceMgtPluginException e) { - throw new MobileDeviceMgtPluginException( - "Error occurred while creating a registry collection : " + - e.getMessage(), e); } catch (RegistryException e) { - throw new MobileDeviceMgtPluginException( + throw new WindowsDeviceMgtPluginException( "Error occurred while creating a registry collection : " + e.getMessage(), e); } diff --git a/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 b/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 deleted file mode 100644 index 7596871c9..000000000 --- a/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 +++ /dev/null @@ -1,48 +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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.impl.util; - -/** - * Define constance used by Windows plugin. - */ -public class WindowsPluginConstants { - - //properties related to database table WINDOWS_DEVICE - public static final String DEVICE_ID = "DEVICE_ID"; - public static final String CHANNEL_URI = "CHANNEL_URI"; - public static final String DEVICE_INFO = "DEVICE_INFO"; - public static final String IMEI = "IMEI"; - public static final String IMSI = "IMSI"; - public static final String OS_VERSION = "OS_VERSION"; - public static final String DEVICE_MODEL = "DEVICE_MODEL"; - public static final String VENDOR = "VENDOR"; - public static final String LATITUDE = "LATITUDE"; - public static final String LONGITUDE = "LONGITUDE"; - public static final String SERIAL = "SERIAL"; - public static final String MAC_ADDRESS = "MAC_ADDRESS"; - public static final String DEVICE_NAME = "DEVICE_NAME"; - - //Properties related to WIN_FEATURE table - public static final String WINDOWS_FEATURE_ID = "ID"; - public static final String WINDOWS_FEATURE_CODE = "CODE"; - public static final String WINDOWS_FEATURE_NAME = "NAME"; - public static final String WINDOWS_FEATURE_DESCRIPTION = "DESCRIPTION"; - - -} diff --git a/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 b/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 index 5fd45c61a..f5a07a67d 100644 --- a/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 +++ b/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 @@ -61,9 +61,9 @@ public class WindowsDeviceManagementServiceComponent { try { BundleContext bundleContext = ctx.getBundleContext(); - androidServiceRegRef = - bundleContext.registerService(DeviceManagementService.class.getName(), - new WindowsDeviceManagementService(), null); +// androidServiceRegRef = +// bundleContext.registerService(DeviceManagementService.class.getName(), +// new WindowsDeviceManagementService(), null); // Policy management service diff --git a/features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml similarity index 98% rename from features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml rename to features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml index 08945d8f7..8193c2fc6 100644 --- a/features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml +++ b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt-plugins - iot-analytics-feature + analytics-feature 2.2.5-SNAPSHOT ../pom.xml diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/build.properties b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/build.properties rename to features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/build.properties diff --git a/features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/p2.inf b/features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/p2.inf similarity index 100% rename from features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/p2.inf rename to features/analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/p2.inf diff --git a/features/iot-plugins-feature/iot-analytics-feature/pom.xml b/features/analytics-feature/pom.xml similarity index 89% rename from features/iot-plugins-feature/iot-analytics-feature/pom.xml rename to features/analytics-feature/pom.xml index f47b1273f..fb1398eed 100644 --- a/features/iot-plugins-feature/iot-analytics-feature/pom.xml +++ b/features/analytics-feature/pom.xml @@ -21,13 +21,13 @@ org.wso2.carbon.devicemgt-plugins - iot-plugins-feature + carbon-device-mgt-plugins-parent 2.2.5-SNAPSHOT - ../pom.xml + ../../pom.xml 4.0.0 - iot-analytics-feature + analytics-feature pom WSO2 Carbon - IoT Server IoT Analytics Feature http://wso2.org diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/pom.xml diff --git a/features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/build.properties b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/iot-analytics-feature/org.wso2.carbon.device.mgt.iot.analytics.feature/src/main/resources/build.properties rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/build.properties diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/datasources/androidsense-datasources.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/datasources/androidsense-datasources.xml similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/datasources/androidsense-datasources.xml rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/datasources/androidsense-datasources.xml diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/h2.sql b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/h2.sql similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/h2.sql rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/h2.sql diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mssql.sql b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mssql.sql similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mssql.sql rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mssql.sql diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mysql.sql b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mysql.sql similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mysql.sql rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/mysql.sql diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/oracle.sql b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/oracle.sql similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/oracle.sql rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/oracle.sql diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/postgresql.sql b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/postgresql.sql similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/postgresql.sql rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/dbscripts/postgresql.sql diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/devicetypes/android_sense.xml b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/devicetypes/android_sense.xml similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/devicetypes/android_sense.xml rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/devicetypes/android_sense.xml diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/p2.inf b/features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/p2.inf similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/p2.inf rename to features/device-types-feature/androidsense-plugin-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/p2.inf diff --git a/features/iot-plugins-feature/androidsense-plugin-feature/pom.xml b/features/device-types-feature/androidsense-plugin-feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/androidsense-plugin-feature/pom.xml rename to features/device-types-feature/androidsense-plugin-feature/pom.xml diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/pom.xml diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.h b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.h similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.h rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.h diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.ino b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.ino similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.ino rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/ArduinoBoardSketch.ino diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/Connect.ino b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/Connect.ino similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/Connect.ino rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/Connect.ino diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PollServer.ino b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PollServer.ino similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PollServer.ino rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PollServer.ino diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PushData.ino b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PushData.ino similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PushData.ino rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/PushData.ino diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/sketch.properties b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/sketch.properties similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/sketch.properties rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/agent/sketch.properties diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/build.properties b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/build.properties rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/build.properties diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/devicetypes/arduino.xml b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/devicetypes/arduino.xml similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/devicetypes/arduino.xml rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/devicetypes/arduino.xml diff --git a/features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/p2.inf b/features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/p2.inf similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/p2.inf rename to features/device-types-feature/arduino-plugin-feature/org.wso2.carbon.device.mgt.iot.arduino.feature/src/main/resources/p2.inf diff --git a/features/iot-plugins-feature/arduino-plugin-feature/pom.xml b/features/device-types-feature/arduino-plugin-feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/arduino-plugin-feature/pom.xml rename to features/device-types-feature/arduino-plugin-feature/pom.xml diff --git a/features/iot-plugins-feature/pom.xml b/features/device-types-feature/pom.xml similarity index 89% rename from features/iot-plugins-feature/pom.xml rename to features/device-types-feature/pom.xml index 946c20510..f1dec8761 100644 --- a/features/iot-plugins-feature/pom.xml +++ b/features/device-types-feature/pom.xml @@ -27,20 +27,17 @@ 4.0.0 - iot-plugins-feature + device-types-feature 2.2.5-SNAPSHOT pom WSO2 Carbon - Device Management IoT Plugins Feature http://wso2.org - iot-analytics-feature androidsense-plugin-feature arduino-plugin-feature raspberrypi-plugin-feature virtual-fire-alarm-plugin-feature - iot-base-plugin-feature - iot-devicetypes-feature diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/pom.xml diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/README.md b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/README.md similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/README.md rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/README.md diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/RaspberryService.sh diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/deviceConfig.properties b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/deviceConfig.properties similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/deviceConfig.properties rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/deviceConfig.properties diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/org.eclipse.paho.mqtt.python.tar diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/sketch.properties b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/sketch.properties similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/sketch.properties rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/sketch.properties diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryAgent.py diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryStats.log b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryStats.log similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryStats.log rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/RaspberryStats.log diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/httpServer.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/httpServer.py similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/httpServer.py rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/httpServer.py diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/iotUtils.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/iotUtils.py similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/iotUtils.py rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/iotUtils.py diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/mqttConnector.py diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/running_mode.py b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/running_mode.py similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/running_mode.py rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/src/running_mode.py diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/startService.sh diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/testAgent.sh b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/testAgent.sh similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/testAgent.sh rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/agent/testAgent.sh diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/build.properties b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/build.properties rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/build.properties diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/datasources/raspberrypi-datasources.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/datasources/raspberrypi-datasources.xml similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/datasources/raspberrypi-datasources.xml rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/datasources/raspberrypi-datasources.xml diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/h2.sql b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/h2.sql similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/h2.sql rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/h2.sql diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mssql.sql b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mssql.sql similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mssql.sql rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mssql.sql diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mysql.sql b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mysql.sql similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mysql.sql rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/mysql.sql diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/oracle.sql b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/oracle.sql similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/oracle.sql rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/oracle.sql diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/postgresql.sql b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/postgresql.sql similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/postgresql.sql rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/dbscripts/postgresql.sql diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/devicetypes/raspberrypi.xml b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/devicetypes/raspberrypi.xml similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/devicetypes/raspberrypi.xml rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/devicetypes/raspberrypi.xml diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/p2.inf b/features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/p2.inf similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/p2.inf rename to features/device-types-feature/raspberrypi-plugin-feature/org.wso2.carbon.device.mgt.iot.raspberrypi.feature/src/main/resources/p2.inf diff --git a/features/iot-plugins-feature/raspberrypi-plugin-feature/pom.xml b/features/device-types-feature/raspberrypi-plugin-feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/raspberrypi-plugin-feature/pom.xml rename to features/device-types-feature/raspberrypi-plugin-feature/pom.xml diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/pom.xml diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/cep_query.txt b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/cep_query.txt similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/cep_query.txt rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/cep_query.txt diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/deviceConfig.properties b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/deviceConfig.properties similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/deviceConfig.properties rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/deviceConfig.properties diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/sketch.properties b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/sketch.properties similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/sketch.properties rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/sketch.properties diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/start-device.sh b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/start-device.sh similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/start-device.sh rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/advanced_agent/start-device.sh diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/deviceConfig.properties b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/deviceConfig.properties similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/deviceConfig.properties rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/deviceConfig.properties diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/sketch.properties b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/sketch.properties similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/sketch.properties rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/sketch.properties diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/start-device.sh b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/start-device.sh similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/start-device.sh rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/start-device.sh diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/virtual_firealarm.jks b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/virtual_firealarm.jks similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/virtual_firealarm.jks rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/agent/virtual_firealarm.jks diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/build.properties b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/build.properties rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/build.properties diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/certs/wso2certs.jks b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/certs/wso2certs.jks similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/certs/wso2certs.jks rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/certs/wso2certs.jks diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/conf/virtual_firealarm.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/conf/virtual_firealarm.xml similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/conf/virtual_firealarm.xml rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/conf/virtual_firealarm.xml diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/datasources/virtual_firealarm-datasources.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/datasources/virtual_firealarm-datasources.xml similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/datasources/virtual_firealarm-datasources.xml rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/datasources/virtual_firealarm-datasources.xml diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/h2.sql b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/h2.sql similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/h2.sql rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/h2.sql diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mssql.sql b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mssql.sql similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mssql.sql rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mssql.sql diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mysql.sql b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mysql.sql similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mysql.sql rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/mysql.sql diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/oracle.sql b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/oracle.sql similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/oracle.sql rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/oracle.sql diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/postgresql.sql b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/postgresql.sql similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/postgresql.sql rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/dbscripts/postgresql.sql diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/devicetypes/virtual_firealarm.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/devicetypes/virtual_firealarm.xml similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/devicetypes/virtual_firealarm.xml rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/devicetypes/virtual_firealarm.xml diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/p2.inf b/features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/p2.inf similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/p2.inf rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/p2.inf diff --git a/features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/pom.xml b/features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml similarity index 100% rename from features/iot-plugins-feature/virtual-fire-alarm-plugin-feature/pom.xml rename to features/device-types-feature/virtual-fire-alarm-plugin-feature/pom.xml diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/pom.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml similarity index 84% rename from features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/pom.xml rename to features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml index 88af0ea81..f17ae0e1d 100644 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/pom.xml +++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/pom.xml @@ -22,47 +22,47 @@ org.wso2.carbon.devicemgt-plugins - iot-base-plugin-feature + extensions-feature 2.2.5-SNAPSHOT ../pom.xml 4.0.0 - org.wso2.carbon.device.mgt.iot.adapter.feature + org.wso2.carbon.device.mgt.adapter.feature pom 2.2.5-SNAPSHOT - WSO2 Carbon - IoT Device Management Feature + WSO2 Carbon - Device Management Adapters Feature http://wso2.org This feature contains the adapter bundles required for IoT Server org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt + org.wso2.carbon.device.mgt.output.adapter.mqtt org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp + org.wso2.carbon.device.mgt.output.adapter.xmpp org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.ui + org.wso2.carbon.device.mgt.output.adapter.websocket org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.http + org.wso2.carbon.device.mgt.input.adapter.http org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt + org.wso2.carbon.device.mgt.input.adapter.mqtt org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp + org.wso2.carbon.device.mgt.input.adapter.xmpp @@ -82,7 +82,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.ui.endpoint + org.wso2.carbon.device.mgt.output.adapter.websocket.endpoint ${carbon.devicemgt.plugins.version} war true @@ -132,7 +132,7 @@ p2-feature-gen - org.wso2.carbon.device.mgt.iot.adapter + org.wso2.carbon.device.mgt.adapter ../../../features/etc/feature.properties @@ -142,25 +142,25 @@ - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.output.adapter.mqtt:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.output.adapter.mqtt:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.output.adapter.xmpp:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.output.adapter.xmpp:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.input.adapter.extension:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.extension:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.input.adapter.http:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.http:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.input.adapter.mqtt:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.mqtt:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.input.adapter.xmpp:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.input.adapter.xmpp:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.output.adapter.ui:${carbon.devicemgt.plugins.version} + org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.output.adapter.websocket:${carbon.devicemgt.plugins.version} org.eclipse.paho:org.eclipse.paho.client.mqttv3:${eclipse.paho.version} diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/build.properties b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/build.properties similarity index 100% rename from features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/build.properties rename to features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/build.properties diff --git a/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf new file mode 100644 index 000000000..f9b3d0c5b --- /dev/null +++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/p2.inf @@ -0,0 +1,4 @@ +instructions.configure = \ +org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/webapps/);\ +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.adapter_${feature.version}/webapps/,target:${installFolder}/../../deployment/server/webapps/,overwrite:true);\ +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.adapter_${feature.version}/websocket-validation.xml,target:${installFolder}/../../conf/etc/websocket-validation.xml,overwrite:true);\ diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/websocket-validation.xml b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml similarity index 85% rename from features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/websocket-validation.xml rename to features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml index ec880fe00..b36677fec 100644 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/websocket-validation.xml +++ b/features/extensions-feature/org.wso2.carbon.device.mgt.adapter.feature/src/main/resources/websocket-validation.xml @@ -24,7 +24,7 @@ - + https://localhost:9443/services/OAuth2TokenValidationService admin @@ -35,5 +35,5 @@ - + \ No newline at end of file diff --git a/features/extensions-feature/pom.xml b/features/extensions-feature/pom.xml index 64ebaa7c5..0afd1d07f 100644 --- a/features/extensions-feature/pom.xml +++ b/features/extensions-feature/pom.xml @@ -35,6 +35,7 @@ org.wso2.carbon.appmgt.mdm.osgiconnector.feature + org.wso2.carbon.device.mgt.adapter.feature diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/p2.inf b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/p2.inf deleted file mode 100644 index 833314fd0..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.adapter.feature/src/main/resources/p2.inf +++ /dev/null @@ -1,4 +0,0 @@ -instructions.configure = \ -org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/webapps/);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.iot.adapter_${feature.version}/webapps/,target:${installFolder}/../../deployment/server/webapps/,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.iot.adapter_${feature.version}/websocket-validation.xml,target:${installFolder}/../../conf/etc/websocket-validation.xml,overwrite:true);\ diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/pom.xml b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/pom.xml deleted file mode 100644 index c5b7ede08..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/pom.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - org.wso2.carbon.devicemgt-plugins - iot-base-plugin-feature - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.iot.url.printer.feature - pom - 2.2.5-SNAPSHOT - WSO2 Carbon - IoT Device Management Feature - http://wso2.org - This feature contains the core bundles required for IoT Server - - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.url.printer - - - - - - - maven-resources-plugin - - - copy-resources - generate-resources - - copy-resources - - - src/main/resources - - - resources - - build.properties - p2.inf - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - package - - unpack - - - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.ui - - ${project.version} - zip - true - - ${project.build.directory}/maven-shared-archive-resources/jaggeryapps/devicemgt - - **/* - - - - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.carbon.device.mgt.iot.url.printer - ../../../features/etc/feature.properties - - - org.wso2.carbon.p2.category.type:server - org.eclipse.equinox.p2.type.group:false - - - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.url.printer:${carbon.devicemgt.plugins.version} - - - - org.wso2.carbon.core.server:${carbon.kernel.version} - - org.wso2.carbon.device.mgt.server:${carbon.devicemgt.version} - - - - - - - - - diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/build.properties b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/build.properties deleted file mode 100644 index 33bb0980d..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/build.properties +++ /dev/null @@ -1,19 +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. -# - -custom = true diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-enrollment.vm b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-enrollment.vm deleted file mode 100644 index 61cc9340d..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-enrollment.vm +++ /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. -*# - - You have been invited to enroll your devices in WSO2 IoT Server - - - - WSO2 IoT Server - - -

    -
    -
    -
    - WSO2 -
    -
    -
    -

    - Hi $first-name, -

    - -

    - You have been invited to enrol devices with WSO2 IoT Server. - Click here to enrol the WSO2 IoT Server devices to begin.

    - -

    - Should you need assistance, please contact your administrator. -

    - -

    - Regards, -

    - -

    - WSO2 IoT Server Administrator -

    -
    -
    - - - - -
    WSO2
    -
    -
    -
    - - - ]]> - - diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-registration.vm b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-registration.vm deleted file mode 100644 index 4d60d15e9..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/email/templates/user-registration.vm +++ /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. -*# - - You have successfully been registered in WSO2 IoT Server - - - - WSO2 IoT Server - - -
    -
    -
    -
    - WSO2 -
    -
    -
    -

    - Hi $first-name, -

    - -

    - You have been registered in WSO2 IoT Server and invited to enrol your device. - Click here to enrol the WSO2 IoT Server devices to begin.

    - -

    - Use following credentials to log in to WSO2 IoT Server. -

    - -

    - Username: $username -
    - Password: $password -

    - -

    - Should you need assistance, please contact your administrator. -

    - -

    - Regards, -

    - -

    - WSO2 IoT Server Administrator -

    -
    -
    - - - - -
    WSO2
    -
    -
    -
    - - - ]]> - -
    diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/p2.inf b/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/p2.inf deleted file mode 100644 index c18cb2b6d..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/org.wso2.carbon.device.mgt.iot.url.printer.feature/src/main/resources/p2.inf +++ /dev/null @@ -1,5 +0,0 @@ -instructions.configure = \ -org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/jaggeryapps/);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.iot.url.printer_${feature.version}/jaggeryapps/,target:${installFolder}/../../deployment/server/jaggeryapps/,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../../repository/resources/email-templates);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.iot.url.printer_${feature.version}/email/templates,target:${installFolder}/../../../repository/resources/email-templates,overwrite:true);\ \ No newline at end of file diff --git a/features/iot-plugins-feature/iot-base-plugin-feature/pom.xml b/features/iot-plugins-feature/iot-base-plugin-feature/pom.xml deleted file mode 100644 index 2373f6c0b..000000000 --- a/features/iot-plugins-feature/iot-base-plugin-feature/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - org.wso2.carbon.devicemgt-plugins - iot-plugins-feature - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - iot-base-plugin-feature - 2.2.5-SNAPSHOT - pom - WSO2 Carbon - Device Management IoT Base Plugin Feature - http://wso2.org - - - org.wso2.carbon.device.mgt.iot.url.printer.feature - org.wso2.carbon.device.mgt.iot.adapter.feature - - - diff --git a/features/iot-plugins-feature/iot-devicetypes-feature/org.wso2.carbon.device.mgt.iot.devicetypes.feature/pom.xml b/features/iot-plugins-feature/iot-devicetypes-feature/org.wso2.carbon.device.mgt.iot.devicetypes.feature/pom.xml deleted file mode 100644 index 28e24aaec..000000000 --- a/features/iot-plugins-feature/iot-devicetypes-feature/org.wso2.carbon.device.mgt.iot.devicetypes.feature/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - - org.wso2.carbon.devicemgt-plugins - iot-devicetypes-feature - 2.2.5-SNAPSHOT - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.devicetypes.feature - IoT Server Device types Feature - pom - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.carbon.device.mgt.iot.devicetypes - ../../../features/etc/feature.properties - - - org.wso2.carbon.p2.category.type:server - org.eclipse.equinox.p2.type.group:true - - - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.androidsense.feature:${carbon.devicemgt.plugins.version} - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.arduino.feature:${carbon.devicemgt.plugins.version} - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.raspberrypi.feature:${carbon.devicemgt.plugins.version} - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature:${carbon.devicemgt.plugins.version} - - - - - - - - - - diff --git a/features/iot-plugins-feature/iot-devicetypes-feature/pom.xml b/features/iot-plugins-feature/iot-devicetypes-feature/pom.xml deleted file mode 100644 index bc6f81c2b..000000000 --- a/features/iot-plugins-feature/iot-devicetypes-feature/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - 4.0.0 - - - org.wso2.carbon.devicemgt-plugins - iot-plugins-feature - 2.2.5-SNAPSHOT - - - org.wso2.carbon.devicemgt-plugins - iot-devicetypes-feature - IoT Server Device types - pom - - - org.wso2.carbon.device.mgt.iot.devicetypes.feature - - - \ No newline at end of file diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml index 125250e9f..78be91320 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml +++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/pom.xml @@ -45,6 +45,24 @@ com.h2database.wso2 h2-database-engine + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.common + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.server.feature + zip + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.extensions.feature + zip + + + com.google.code.gson + gson + diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml new file mode 100644 index 000000000..2c667f3b6 --- /dev/null +++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/devicetypes/android.xml @@ -0,0 +1,37 @@ + + + + + + + jdbc/MobileAndroidDM_DS + + + + carbon.super + false + + + + place_holder + place_holder + place_holder + + + diff --git a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf index 3b9d91aec..09f06e052 100644 --- a/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf +++ b/features/mobile-plugins-feature/android-plugin-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/p2.inf @@ -5,6 +5,8 @@ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../featur org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/dbscripts/plugins/,target:${installFolder}/../../../dbscripts/cdm/plugins/android,overwrite:true);\ org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../database/);\ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/database/,target:${installFolder}/../../database/,overwrite:true);\ +org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/devicetypes/);\ +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.android_${feature.version}/devicetypes/,target:${installFolder}/../../deployment/server/devicetypes/,overwrite:true);\ instructions.unconfigure = \ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/webapps/mdm-android-agent.war);\ @@ -15,4 +17,5 @@ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../dep org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard);\ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.type-view);\ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../../dbscripts/cdm/plugins/android);\ -org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../database/WSO2MobileAndroid_DB.h2.db);\ \ No newline at end of file +org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../database/WSO2MobileAndroid_DB.h2.db);\ +org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/devicetypes/android.xml);\ \ No newline at end of file diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/pom.xml b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/pom.xml deleted file mode 100644 index 4444651f4..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/pom.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - org.wso2.carbon.devicemgt-plugins - mobile-base-plugin-feature - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile.feature - pom - 2.2.5-SNAPSHOT - WSO2 Carbon - Mobile Device Management Feature - http://wso2.org - This feature contains the core bundles required for Mobile Device Management functionality - - - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.common - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile.url.printer - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.server.feature - zip - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.extensions.feature - zip - - - com.google.code.gson - gson - - - - - - - maven-resources-plugin - 2.6 - - - copy-resources - generate-resources - - copy-resources - - - src/main/resources - - - resources - - build.properties - p2.inf - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - package - - unpack - - - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile.ui - - ${project.version} - zip - true - - ${project.build.directory}/maven-shared-archive-resources/jaggeryapps/ - - **/* - - - - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.carbon.device.mgt.mobile - ../../../../features/etc/feature.properties - - - org.wso2.carbon.p2.category.type:server - org.eclipse.equinox.p2.type.group:false - - - - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.mobile:${carbon.devicemgt.plugins.version} - org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.device.mgt.mobile.url.printer:${carbon.devicemgt.plugins.version} - - - org.wso2.carbon.core.server:${carbon.kernel.version} - org.wso2.carbon.device.mgt.server:${carbon.devicemgt.version} - org.wso2.carbon.device.mgt.extensions:${carbon.devicemgt.version} - - - - - - - - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/build.properties b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/build.properties deleted file mode 100644 index 9c86577d7..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/build.properties +++ /dev/null @@ -1 +0,0 @@ -custom = true diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/conf/mobile-config.xml b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/conf/mobile-config.xml deleted file mode 100644 index 06076bbcb..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/conf/mobile-config.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - jdbc/MobileAndroidDM_DS - - - - - jdbc/MobileWindowsDM_DS - - - - - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/h2.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/h2.sql deleted file mode 100644 index 3352ba8de..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/h2.sql +++ /dev/null @@ -1,31 +0,0 @@ - --- ----------------------------------------------------- --- Table `AD_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_DEVICE` ( - `DEVICE_ID` VARCHAR(45) NOT NULL, - `GCM_TOKEN` VARCHAR(1000) NULL DEFAULT NULL, - `DEVICE_INFO` VARCHAR(8000) NULL DEFAULT NULL, - `IMEI` VARCHAR(45) NULL DEFAULT NULL, - `IMSI` VARCHAR(45) NULL DEFAULT NULL, - `OS_VERSION` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL, - `VENDOR` VARCHAR(45) NULL DEFAULT NULL, - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - `OS_BUILD_DATE` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`DEVICE_ID`)); - --- ----------------------------------------------------- --- Table `AD_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_FEATURE` ( - `ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`ID`)); - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mssql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mssql.sql deleted file mode 100644 index 3cd14ad6a..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mssql.sql +++ /dev/null @@ -1,32 +0,0 @@ --- ----------------------------------------------------- --- Table `AD_DEVICE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[AD_DEVICE]') AND TYPE IN (N'U')) -CREATE TABLE AD_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL, - GCM_TOKEN VARCHAR(1000) NULL DEFAULT NULL, - DEVICE_INFO VARCHAR(8000) NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - IMSI VARCHAR(45) NULL DEFAULT NULL, - OS_VERSION VARCHAR(45) NULL DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) NULL DEFAULT NULL, - VENDOR VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - OS_BUILD_DATE VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (DEVICE_ID)); - --- ----------------------------------------------------- --- Table `AD_FEATURE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[AD_FEATURE]') AND TYPE IN (N'U')) -CREATE TABLE AD_FEATURE ( - ID INT NOT NULL IDENTITY, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (ID) -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mysql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mysql.sql deleted file mode 100644 index 3fc6fd32c..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/mysql.sql +++ /dev/null @@ -1,32 +0,0 @@ --- ----------------------------------------------------- --- Table `AD_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_DEVICE` ( - `DEVICE_ID` VARCHAR(45) NOT NULL, - `GCM_TOKEN` VARCHAR(1000) NULL DEFAULT NULL, - `DEVICE_INFO` VARCHAR(8000) NULL DEFAULT NULL, - `IMEI` VARCHAR(45) NULL DEFAULT NULL, - `IMSI` VARCHAR(45) NULL DEFAULT NULL, - `OS_VERSION` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL, - `VENDOR` VARCHAR(45) NULL DEFAULT NULL, - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - `OS_BUILD_DATE` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`DEVICE_ID`)) - ENGINE = InnoDB; - --- ----------------------------------------------------- --- Table `AD_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `AD_FEATURE` ( - `ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`ID`) - ) ENGINE = InnoDB; - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/oracle.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/oracle.sql deleted file mode 100644 index ba4b4239b..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/oracle.sql +++ /dev/null @@ -1,51 +0,0 @@ --- ----------------------------------------------------- --- Table `AD_DEVICE` --- ----------------------------------------------------- -CREATE TABLE AD_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL , - DEVICE_INFO VARCHAR(4000) DEFAULT NULL, - GCM_TOKEN VARCHAR(1000) DEFAULT NULL, - IMEI VARCHAR(45) DEFAULT NULL, - IMSI VARCHAR(45) DEFAULT NULL, - OS_VERSION VARCHAR(45) DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) DEFAULT NULL, - VENDOR VARCHAR(45) DEFAULT NULL, - LATITUDE VARCHAR(45) DEFAULT NULL, - LONGITUDE VARCHAR(45) DEFAULT NULL, - SERIAL VARCHAR(45) DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) DEFAULT NULL, - DEVICE_NAME VARCHAR(100) DEFAULT NULL, - OS_BUILD_DATE VARCHAR(100) DEFAULT NULL, - CONSTRAINT PK_AD_DEVICE PRIMARY KEY (DEVICE_ID) -) -/ - --- ----------------------------------------------------- --- Table `AD_FEATURE` --- ----------------------------------------------------- -CREATE TABLE AD_FEATURE ( - ID INT NOT NULL, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NOT NULL, - DESCRIPTION VARCHAR(200) DEFAULT NULL, - CONSTRAINT AD_FEATURE PRIMARY KEY (ID) -) -/ - --- ----------------------------------------------------- --- Sequence `AD_FEATURE_ID_INC_SEQ` --- ----------------------------------------------------- -CREATE SEQUENCE AD_FEATURE_ID_INC_SEQ START WITH 1 INCREMENT BY 1 NOCACHE -/ --- ----------------------------------------------------- --- Trigger `AD_FEATURE_ID_INC_TRIG` --- ----------------------------------------------------- -CREATE OR REPLACE TRIGGER AD_FEATURE_ID_INC_TRIG -BEFORE INSERT -ON AD_FEATURE -REFERENCING NEW AS NEW -FOR EACH ROW - BEGIN - SELECT AD_FEATURE_ID_INC_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL; - END; -/ \ No newline at end of file diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/postgresql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/postgresql.sql deleted file mode 100644 index 95c4709cc..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/android/postgresql.sql +++ /dev/null @@ -1,30 +0,0 @@ --- ----------------------------------------------------- --- Table AD_DEVICE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS AD_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL , - DEVICE_INFO TEXT NULL DEFAULT NULL, - GCM_TOKEN VARCHAR(1000) NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - IMSI VARCHAR(45) NULL DEFAULT NULL, - OS_VERSION VARCHAR(45) NULL DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) NULL DEFAULT NULL, - VENDOR VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - OS_BUILD_DATE VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (DEVICE_ID) - ); - --- ----------------------------------------------------- --- Table AD_FEATURE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS AD_FEATURE ( - ID BIGSERIAL NOT NULL PRIMARY KEY, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/h2.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/h2.sql deleted file mode 100644 index a115e5457..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/h2.sql +++ /dev/null @@ -1,33 +0,0 @@ --- ----------------------------------------------------- --- Table `IOS_DEVICE` --- ----------------------------------------------------- - CREATE TABLE IF NOT EXISTS `IOS_DEVICE` ( - `MOBILE_DEVICE_ID` VARCHAR(45) NOT NULL, - `APNS_PUSH_TOKEN` VARCHAR(100) DEFAULT NULL, - `MAGIC_TOKEN` VARCHAR(100) DEFAULT NULL, - `MDM_TOKEN` VARCHAR(100) DEFAULT NULL, - `UNLOCK_TOKEN` VARCHAR(2000) DEFAULT NULL, - `CHALLENGE_TOKEN` VARCHAR(45) DEFAULT NULL, - `DEVICE_INFO` VARCHAR(8000) DEFAULT NULL, - `SERIAL` VARCHAR(45) DEFAULT NULL, - `PRODUCT` VARCHAR(45) DEFAULT NULL, - `IMEI` VARCHAR(45) DEFAULT NULL, - `VERSION` VARCHAR(45) DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) DEFAULT NULL, - `ICCID` VARCHAR(45) DEFAULT NULL, - `LATITUDE` VARCHAR(45) DEFAULT NULL, - `LONGITUDE` VARCHAR(45) DEFAULT NULL, - PRIMARY KEY (`MOBILE_DEVICE_ID`) -); - --- ----------------------------------------------------- --- Table `IOS_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `IOS_FEATURE` ( - `FEATURE_ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`FEATURE_ID`) -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mssql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mssql.sql deleted file mode 100644 index 9d816fe8f..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mssql.sql +++ /dev/null @@ -1,35 +0,0 @@ --- ----------------------------------------------------- --- Table `IOS_FEATURE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IOS_FEATURE]') AND TYPE IN (N'U')) -CREATE TABLE IOS_FEATURE ( - ID INT NOT NULL IDENTITY, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (ID) -); - --- ----------------------------------------------------- --- Table `IOS_DEVICE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[IOS_DEVICE]') AND TYPE IN (N'U')) - CREATE TABLE IOS_DEVICE ( - MOBILE_DEVICE_ID VARCHAR(45) NOT NULL, - APNS_PUSH_TOKEN VARCHAR(100) NULL DEFAULT NULL, - MAGIC_TOKEN VARCHAR(100) NULL DEFAULT NULL, - MDM_TOKEN VARCHAR(100) NULL DEFAULT NULL, - UNLOCK_TOKEN VARCHAR(2000) NULL DEFAULT NULL, - CHALLENGE_TOKEN VARCHAR(45) NULL DEFAULT NULL, - DEVICE_INFO VARCHAR(8000) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - PRODUCT VARCHAR(45) NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - VERSION VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - ICCID VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - PRIMARY KEY (MOBILE_DEVICE_ID) -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mysql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mysql.sql deleted file mode 100644 index 3f617b7c7..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/mysql.sql +++ /dev/null @@ -1,33 +0,0 @@ --- ----------------------------------------------------- --- Table `IOS_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `IOS_DEVICE` ( - `MOBILE_DEVICE_ID` VARCHAR(45) NOT NULL, - `APNS_PUSH_TOKEN` VARCHAR(100) NULL DEFAULT NULL, - `MAGIC_TOKEN` VARCHAR(100) NULL DEFAULT NULL, - `MDM_TOKEN` VARCHAR(100) NULL DEFAULT NULL, - `UNLOCK_TOKEN` VARCHAR(2000) NULL DEFAULT NULL, - `CHALLENGE_TOKEN` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_INFO` VARCHAR(8000) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `PRODUCT` VARCHAR(45) NULL DEFAULT NULL, - `IMEI` VARCHAR(45) NULL DEFAULT NULL, - `VERSION` VARCHAR(45) NULL DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - `ICCID` VARCHAR(45) NULL DEFAULT NULL, - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - PRIMARY KEY (`MOBILE_DEVICE_ID`) -) ENGINE = InnoDB; - --- ----------------------------------------------------- --- Table `IOS_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `IOS_FEATURE` ( - `FEATURE_ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`FEATURE_ID`) -) ENGINE = InnoDB; diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/oracle.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/oracle.sql deleted file mode 100644 index 232371731..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/oracle.sql +++ /dev/null @@ -1,53 +0,0 @@ --- ----------------------------------------------------- --- Table `IOS_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IOS_DEVICE ( - MOBILE_DEVICE_ID VARCHAR(45) NOT NULL, - APNS_PUSH_TOKEN VARCHAR(100) DEFAULT NULL, - MAGIC_TOKEN VARCHAR(100) DEFAULT NULL, - MDM_TOKEN VARCHAR(100) DEFAULT NULL, - UNLOCK_TOKEN VARCHAR(2000) DEFAULT NULL, - CHALLENGE_TOKEN VARCHAR(45) DEFAULT NULL, - DEVICE_INFO VARCHAR(4000) DEFAULT NULL, - SERIAL VARCHAR(45) DEFAULT NULL, - PRODUCT VARCHAR(45) DEFAULT NULL, - IMEI VARCHAR(45) DEFAULT NULL, - VERSION VARCHAR(45) DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) DEFAULT NULL, - DEVICE_NAME VARCHAR(100) DEFAULT NULL, - ICCID VARCHAR(45) DEFAULT NULL, - LATITUDE VARCHAR(45) DEFAULT NULL, - LONGITUDE VARCHAR(45) DEFAULT NULL, - CONSTRAINT PK_IOS_DEVICE PRIMARY KEY (MOBILE_DEVICE_ID) -) -/ - --- ----------------------------------------------------- --- Table `IOS_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IOS_FEATURE ( - ID INT NOT NULL, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NOT NULL, - DESCRIPTION VARCHAR(200) NULL, - CONSTRAINT PK_IOS_FEATURE PRIMARY KEY (ID) -) -/ - --- Sequence `IOS_FEATURE_ID_INC_SEQ` --- ----------------------------------------------------- -CREATE SEQUENCE IOS_FEATURE_ID_INC_SEQ START WITH 1 INCREMENT BY 1 NOCACHE -/ - --- ----------------------------------------------------- --- Trigger `IOS_FEATURE_ID_INC_TRIG` --- ----------------------------------------------------- -CREATE OR REPLACE TRIGGER IOS_FEATURE_ID_INC_TRIG -BEFORE INSERT -ON IOS_FEATURE -REFERENCING NEW AS NEW -FOR EACH ROW - BEGIN - SELECT IOS_FEATURE_ID_INC_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL; - END; -/ \ No newline at end of file diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/postgresql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/postgresql.sql deleted file mode 100644 index c03e68e4a..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/ios/postgresql.sql +++ /dev/null @@ -1,33 +0,0 @@ --- ----------------------------------------------------- --- Table IOS_FEATURE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS IOS_FEATURE ( - FEATURE_ID SERIAL NOT NULL, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (FEATURE_ID) -); - --- ----------------------------------------------------- --- Table IOS_DEVICE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS IOS_DEVICE ( - MOBILE_DEVICE_ID VARCHAR(45) NOT NULL, - APNS_PUSH_TOKEN VARCHAR(100) NULL DEFAULT NULL, - MAGIC_TOKEN VARCHAR(100) NULL DEFAULT NULL, - MDM_TOKEN VARCHAR(100) NULL DEFAULT NULL, - UNLOCK_TOKEN VARCHAR(2000) NULL DEFAULT NULL, - CHALLENGE_TOKEN VARCHAR(45) NULL DEFAULT NULL, - DEVICE_INFO VARCHAR(8000) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - PRODUCT VARCHAR(45) NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - VERSION VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - ICCID VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - PRIMARY KEY (MOBILE_DEVICE_ID) - ); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/h2.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/h2.sql deleted file mode 100644 index f1749a8a8..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/h2.sql +++ /dev/null @@ -1,30 +0,0 @@ --- ----------------------------------------------------- --- Table `WIN_DEVICE` --- ----------------------------------------------------- - CREATE TABLE IF NOT EXISTS `WIN_DEVICE` ( - `DEVICE_ID` VARCHAR(45) NOT NULL, - `CHANNEL_URI` VARCHAR(100) NULL DEFAULT NULL, - `DEVICE_INFO` TEXT NULL DEFAULT NULL, - `IMEI` VARCHAR(45) NULL DEFAULT NULL, - `IMSI` VARCHAR(45) NULL DEFAULT NULL, - `OS_VERSION` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL, - `VENDOR` VARCHAR(45) NULL DEFAULT NULL, - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`DEVICE_ID`) -); - --- ----------------------------------------------------- --- Table `WIN_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `WIN_FEATURE` ( - `ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NOT NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`ID`) -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mssql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mssql.sql deleted file mode 100644 index 524a483c7..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mssql.sql +++ /dev/null @@ -1,32 +0,0 @@ --- ----------------------------------------------------- --- Table `WINDOWS_FEATURE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[WIN_FEATURE]') AND TYPE IN (N'U')) -CREATE TABLE WIN_FEATURE ( - ID INT NOT NULL IDENTITY, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (ID) -); - --- ----------------------------------------------------- --- Table `WINDOWS_DEVICE` --- ----------------------------------------------------- -IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[WIN_DEVICE]') AND TYPE IN (N'U')) -CREATE TABLE WIN_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL, - CHANNEL_URI VARCHAR(100) NULL DEFAULT NULL, - DEVICE_INFO TEXT NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - IMSI VARCHAR(45) NULL DEFAULT NULL, - OS_VERSION VARCHAR(45) NULL DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) NULL DEFAULT NULL, - VENDOR VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (DEVICE_ID) -); diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mysql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mysql.sql deleted file mode 100644 index 2ebcc80f7..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/mysql.sql +++ /dev/null @@ -1,34 +0,0 @@ --- ----------------------------------------------------- --- Table `WIN_DEVICE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `WIN_DEVICE` ( - `DEVICE_ID` VARCHAR(45) NOT NULL, - `CHANNEL_URI` VARCHAR(100) NULL DEFAULT NULL, - `DEVICE_INFO` TEXT NULL DEFAULT NULL, - `IMEI` VARCHAR(45) NULL DEFAULT NULL, - `IMSI` VARCHAR(45) NULL DEFAULT NULL, - `OS_VERSION` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL, - `VENDOR` VARCHAR(45) NULL DEFAULT NULL, - `LATITUDE` VARCHAR(45) NULL DEFAULT NULL, - `LONGITUDE` VARCHAR(45) NULL DEFAULT NULL, - `SERIAL` VARCHAR(45) NULL DEFAULT NULL, - `MAC_ADDRESS` VARCHAR(45) NULL DEFAULT NULL, - `DEVICE_NAME` VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (`DEVICE_ID`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `WIN_FEATURE` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `WIN_FEATURE` ( - `ID` INT NOT NULL AUTO_INCREMENT, - `CODE` VARCHAR(45) NULL, - `NAME` VARCHAR(100) NULL, - `DESCRIPTION` VARCHAR(200) NULL, - PRIMARY KEY (`ID`)) -ENGINE = InnoDB; - - - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/oracle.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/oracle.sql deleted file mode 100644 index a7a389264..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/oracle.sql +++ /dev/null @@ -1,51 +0,0 @@ --- ----------------------------------------------------- --- Table `WIN_DEVICE` --- ----------------------------------------------------- -CREATE TABLE WIN_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL, - CHANNEL_URI VARCHAR(100) DEFAULT NULL, - DEVICE_INFO VARCHAR2(4000) DEFAULT NULL, - IMEI VARCHAR(45) DEFAULT NULL, - IMSI VARCHAR(45) DEFAULT NULL, - OS_VERSION VARCHAR(45) DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) DEFAULT NULL, - VENDOR VARCHAR(45) DEFAULT NULL, - LATITUDE VARCHAR(45) DEFAULT NULL, - LONGITUDE VARCHAR(45) DEFAULT NULL, - SERIAL VARCHAR(45) DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) DEFAULT NULL, - DEVICE_NAME VARCHAR(100) DEFAULT NULL, - CONSTRAINT PK_WIN_DEVICE PRIMARY KEY (DEVICE_ID) -) -/ - --- ----------------------------------------------------- --- Table `WIN_FEATURE` --- ----------------------------------------------------- -CREATE TABLE WIN_FEATURE ( - ID INT NOT NULL, - CODE VARCHAR(45) NOT NULL, - NAME VARCHAR(100) NOT NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (ID) -) -/ - --- ----------------------------------------------------- --- Sequence `WIN_FEATURE_ID_INC_SEQ` --- ----------------------------------------------------- -CREATE SEQUENCE WIN_FEATURE_ID_INC_SEQ START WITH 1 INCREMENT BY 1 NOCACHE -/ - --- ----------------------------------------------------- --- Trigger `WIN_FEATURE_ID_INC_TRIG` --- ----------------------------------------------------- -CREATE OR REPLACE TRIGGER WIN_FEATURE_ID_INC_TRIG -BEFORE INSERT -ON WIN_FEATURE -REFERENCING NEW AS NEW -FOR EACH ROW - BEGIN - SELECT WIN_FEATURE_ID_INC_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL; - END; -/ \ No newline at end of file diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/postgresql.sql b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/postgresql.sql deleted file mode 100644 index d7444757d..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/dbscripts/plugins/windows/postgresql.sql +++ /dev/null @@ -1,31 +0,0 @@ --- ----------------------------------------------------- --- Table WIN_DEVICE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS WIN_DEVICE ( - DEVICE_ID VARCHAR(45) NOT NULL, - CHANNEL_URI VARCHAR(100) NULL DEFAULT NULL, - DEVICE_INFO TEXT NULL DEFAULT NULL, - IMEI VARCHAR(45) NULL DEFAULT NULL, - IMSI VARCHAR(45) NULL DEFAULT NULL, - OS_VERSION VARCHAR(45) NULL DEFAULT NULL, - DEVICE_MODEL VARCHAR(45) NULL DEFAULT NULL, - VENDOR VARCHAR(45) NULL DEFAULT NULL, - LATITUDE VARCHAR(45) NULL DEFAULT NULL, - LONGITUDE VARCHAR(45) NULL DEFAULT NULL, - SERIAL VARCHAR(45) NULL DEFAULT NULL, - MAC_ADDRESS VARCHAR(45) NULL DEFAULT NULL, - DEVICE_NAME VARCHAR(100) NULL DEFAULT NULL, - PRIMARY KEY (DEVICE_ID) - ); - --- ----------------------------------------------------- --- Table WIN_FEATURE --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS WIN_FEATURE ( - ID SERIAL NOT NULL, - CODE VARCHAR(45) NULL, - NAME VARCHAR(100) NULL, - DESCRIPTION VARCHAR(200) NULL, - PRIMARY KEY (ID) - ); - diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-enrollment.vm b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-enrollment.vm deleted file mode 100644 index 25b3b26a0..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-enrollment.vm +++ /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. -*# - - You have been invited to enroll your device in WSO2 EMM - - - - WSO2 Enterprise Mobility Manager - - -
    -
    -
    -
    - WSO2 -
    -
    -
    -

    - Hi $first-name, -

    - -

    - You have been invited to enrol your device in WSO2 Enterprise Mobility Manager. - Click here to download the WSO2 EMM client application to begin device - enrolment.

    - -

    - Should you need assistance, please contact your administrator. -

    - -

    - Regards, -

    - -

    - WSO2 EMM Administrator -

    -
    -
    - - - - -
    WSO2
    -
    -
    -
    - - - ]]> - -
    diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-registration.vm b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-registration.vm deleted file mode 100644 index 56e95625e..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/email/templates/user-registration.vm +++ /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. -*# - - You have successfully been registered in WSO2 EMM - - - - WSO2 Enterprise Mobility Manager - - -
    -
    -
    -
    - WSO2 -
    -
    -
    -

    - Hi $first-name, -

    - -

    - You have been registered in WSO2 Enterprise Mobility Manager and invited to enrol your device. - Click here to download the WSO2 EMM client application to begin device - enrolment.

    - -

    - Use following credentials to log in to WSO2 EMM client application. -

    - -

    - Username: $username -
    - Password: $password -

    - -

    - Should you need assistance, please contact your administrator. -

    - -

    - Regards, -

    - -

    - WSO2 EMM Administrator -

    -
    -
    - - - - -
    WSO2
    -
    -
    -
    - - - ]]> - -
    diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/p2.inf b/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/p2.inf deleted file mode 100644 index 5801bf287..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/org.wso2.carbon.device.mgt.mobile.feature/src/main/resources/p2.inf +++ /dev/null @@ -1,7 +0,0 @@ -instructions.configure = \ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile_${feature.version}/conf/mobile-config.xml,target:${installFolder}/../../conf/mobile-config.xml,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile_${feature.version}/dbscripts/plugins/,target:${installFolder}/../../../dbscripts/cdm/plugins,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/jaggeryapps/);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile_${feature.version}/jaggeryapps/,target:${installFolder}/../../deployment/server/jaggeryapps/,overwrite:true);\ -org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../../repository/resources/email-templates);\ -org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile_${feature.version}/email/templates,target:${installFolder}/../../../repository/resources/email-templates,overwrite:true);\ \ No newline at end of file diff --git a/features/mobile-plugins-feature/mobile-base-plugin-feature/pom.xml b/features/mobile-plugins-feature/mobile-base-plugin-feature/pom.xml deleted file mode 100644 index e6092b147..000000000 --- a/features/mobile-plugins-feature/mobile-base-plugin-feature/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - org.wso2.carbon.devicemgt-plugins - mobile-plugins-feature - 2.2.5-SNAPSHOT - ../pom.xml - - - 4.0.0 - mobile-base-plugin-feature - 2.2.5-SNAPSHOT - pom - WSO2 Carbon - Device Management EMM Base Plugin Feature - http://wso2.org - - - org.wso2.carbon.device.mgt.mobile.feature - - - diff --git a/features/mobile-plugins-feature/pom.xml b/features/mobile-plugins-feature/pom.xml index c81d3aeae..4f0d9ca6f 100644 --- a/features/mobile-plugins-feature/pom.xml +++ b/features/mobile-plugins-feature/pom.xml @@ -34,7 +34,6 @@ http://wso2.org - mobile-base-plugin-feature android-plugin-feature windows-plugin-feature diff --git a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml index 56ad700f0..a8a107298 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml +++ b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml @@ -45,6 +45,24 @@ com.h2database.wso2 h2-database-engine + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.common + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.server.feature + zip + + + org.wso2.carbon.devicemgt + org.wso2.carbon.device.mgt.extensions.feature + zip + + + com.google.code.gson + gson + diff --git a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/devicetypes/windows.xml b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/devicetypes/windows.xml new file mode 100644 index 000000000..3d79ba953 --- /dev/null +++ b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/devicetypes/windows.xml @@ -0,0 +1,37 @@ + + + + + + + jdbc/MobileWindowsDM_DS + + + + carbon.super + false + + + + place_holder + place_holder + place_holder + + + diff --git a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/p2.inf b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/p2.inf index d70e9fe99..c015c524e 100644 --- a/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/p2.inf +++ b/features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/p2.inf @@ -4,6 +4,9 @@ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../featur org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/dbscripts/plugins/,target:${installFolder}/../../../dbscripts/cdm/plugins/windows,overwrite:true);\ org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../database/);\ org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/database/,target:${installFolder}/../../database/,overwrite:true);\ +org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/devicetypes/);\ +org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/devicetypes/,target:${installFolder}/../../deployment/server/devicetypes/,overwrite:true);\ + instructions.unconfigure = \ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/webapps/api#device-mgt#windows#v1.0.war);\ @@ -14,4 +17,6 @@ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../dep org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard);\ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view);\ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../../dbscripts/cdm/plugins/windows);\ -org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../database/WSO2MobileWindows_DB.h2.db);\ \ No newline at end of file +org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../database/WSO2MobileWindows_DB.h2.db);\ +org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../. +./deployment/server/devicetypes/windows.xml);\ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 25df92552..e87769393 100644 --- a/pom.xml +++ b/pom.xml @@ -35,11 +35,13 @@ - components/mobile-plugins - components/iot-plugins components/extensions + components/mobile-plugins + components/device-types + components/analytics + features/analytics-feature features/mobile-plugins-feature - features/iot-plugins-feature + features/device-types-feature features/extensions-feature @@ -365,39 +367,39 @@ + + + + + org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.url.printer - ${carbon.devicemgt.plugins.version} - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.mqtt + org.wso2.carbon.device.mgt.output.adapter.mqtt ${carbon.devicemgt.plugins.version} org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.xmpp + org.wso2.carbon.device.mgt.output.adapter.xmpp ${carbon.devicemgt.plugins.version} org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.extension + org.wso2.carbon.device.mgt.input.adapter.extension ${carbon.devicemgt.plugins.version} org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.http + org.wso2.carbon.device.mgt.input.adapter.http ${carbon.devicemgt.plugins.version} org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.mqtt + org.wso2.carbon.device.mgt.input.adapter.mqtt ${carbon.devicemgt.plugins.version} org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.input.adapter.xmpp + org.wso2.carbon.device.mgt.input.adapter.xmpp ${carbon.devicemgt.plugins.version} @@ -408,7 +410,7 @@ org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.iot.output.adapter.ui + org.wso2.carbon.device.mgt.output.adapter.websocket ${carbon.devicemgt.plugins.version} From 46ad53073526959c1b9215af990e4b23f49ee840 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 4 Nov 2016 19:17:21 +0530 Subject: [PATCH 2/2] adding missing files continuation from restructuring effort. --- .../impl/util/WindowsPluginConstants.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create 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 diff --git a/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 b/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 new file mode 100644 index 000000000..d7d516b8d --- /dev/null +++ b/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 @@ -0,0 +1,56 @@ +/* + * 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. + */ + +package org.wso2.carbon.device.mgt.mobile.windows.impl.util; + +/** + * Define constance used by Windows plugin. + */ +public class WindowsPluginConstants { + + //properties related to database table WINDOWS_DEVICE + public static final String DEVICE_ID = "DEVICE_ID"; + public static final String CHANNEL_URI = "CHANNEL_URI"; + public static final String DEVICE_INFO = "DEVICE_INFO"; + public static final String IMEI = "IMEI"; + public static final String IMSI = "IMSI"; + public static final String OS_VERSION = "OS_VERSION"; + public static final String DEVICE_MODEL = "DEVICE_MODEL"; + public static final String VENDOR = "VENDOR"; + public static final String LATITUDE = "LATITUDE"; + public static final String LONGITUDE = "LONGITUDE"; + public static final String SERIAL = "SERIAL"; + public static final String MAC_ADDRESS = "MAC_ADDRESS"; + public static final String DEVICE_NAME = "DEVICE_NAME"; + + //Properties related to WIN_FEATURE table + public static final String WINDOWS_FEATURE_ID = "ID"; + public static final String WINDOWS_FEATURE_CODE = "CODE"; + public static final String WINDOWS_FEATURE_NAME = "NAME"; + public static final String WINDOWS_FEATURE_DESCRIPTION = "DESCRIPTION"; + + public static final String MOBILE_DB_SCRIPTS_FOLDER = "cdm"; + public static final String MOBILE_CONFIG_REGISTRY_ROOT = "/_system/config"; + + public static final String MEDIA_TYPE_XML = "application/xml"; + public static final String CHARSET_UTF8 = "UTF8"; + public static final String LANGUAGE_CODE_ENGLISH_US = "en_US"; + public static final String LANGUAGE_CODE_ENGLISH_UK = "en_UK"; + + +}

    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%0ATH8l)RVJ;0ZZiHq=MsXwYNfU72K5ey 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

    hxYbWZJ-)RA>Y`~y9JelwcthRdR>Xnzpvba79 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

    |b{D1t_ttrm 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