10 changed files with 811 additions and 20 deletions
@ -0,0 +1,236 @@ |
|||
/* |
|||
* Copyright © 2016-2017 The Thingsboard Authors |
|||
* |
|||
* 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. |
|||
*/ |
|||
|
|||
import './extension-form.scss'; |
|||
|
|||
/* eslint-disable angular/log */ |
|||
|
|||
import extensionFormMqttTemplate from './extension-form-mqtt.tpl.html'; |
|||
|
|||
/* eslint-enable import/no-unresolved, import/default */ |
|||
|
|||
/*@ngInject*/ |
|||
export default function ExtensionFormHttpDirective($compile, $templateCache, $translate, types) { |
|||
|
|||
var linker = function(scope, element) { |
|||
|
|||
var template = $templateCache.get(extensionFormMqttTemplate); |
|||
element.html(template); |
|||
|
|||
scope.types = types; |
|||
scope.theForm = scope.$parent.theForm; |
|||
|
|||
scope.nameExpressions = { |
|||
deviceNameJsonExpression: "extension.converter-json", |
|||
deviceNameTopicExpression: "extension.topic" |
|||
}; |
|||
scope.typeExpressions = { |
|||
deviceTypeJsonExpression: "extension.converter-json", |
|||
deviceTypeTopicExpression: "extension.topic" |
|||
}; |
|||
|
|||
scope.extensionCustomConverterOptions = { |
|||
useWrapMode: false, |
|||
mode: 'json', |
|||
showGutter: true, |
|||
showPrintMargin: true, |
|||
theme: 'github', |
|||
advanced: { |
|||
enableSnippets: true, |
|||
enableBasicAutocompletion: true, |
|||
enableLiveAutocompletion: true |
|||
}, |
|||
onLoad: function(_ace) { |
|||
_ace.$blockScrolling = 1; |
|||
} |
|||
}; |
|||
|
|||
|
|||
if(scope.isAdd) { |
|||
scope.brokers = []; |
|||
scope.config.brokers = scope.brokers; |
|||
} else { |
|||
scope.brokers = scope.config.brokers; |
|||
} |
|||
|
|||
scope.updateValidity = function () { |
|||
var valid = scope.brokers && scope.brokers.length > 0; |
|||
scope.theForm.$setValidity('brokers', valid); |
|||
if(scope.brokers.length) { |
|||
for(let i=0;i<scope.brokers.length;i++) { |
|||
if(scope.brokers[i].credentials.type == scope.types.mqttCredentialTypes.pem.value) { |
|||
if(!(scope.brokers[i].credentials.caCert && scope.brokers[i].credentials.privateKey && scope.brokers[i].credentials.cert)) { |
|||
scope.theForm.$setValidity('cert.PEM', false); |
|||
break; |
|||
} else { |
|||
scope.theForm.$setValidity('cert.PEM', true); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
scope.$watch('brokers', function() { |
|||
scope.updateValidity(); |
|||
}, true); |
|||
|
|||
scope.addBroker = function() { |
|||
var newBroker = {host:"localhost", port:1882, ssl:false, retryInterval:3000, credentials:{type:"anonymous"}, mapping:[]}; |
|||
scope.brokers.push(newBroker); |
|||
} |
|||
|
|||
scope.removeBroker = function(broker) { |
|||
var index = scope.brokers.indexOf(broker); |
|||
if (index > -1) { |
|||
scope.brokers.splice(index, 1); |
|||
} |
|||
scope.theForm.$setDirty(); |
|||
} |
|||
|
|||
scope.addMap = function(mapping) { |
|||
var newMap = {topicFilter:"sensors", converter:{attributes:[],timeseries:[]}}; |
|||
|
|||
mapping.push(newMap); |
|||
} |
|||
|
|||
scope.removeMap = function(map, mapping) { |
|||
var index = mapping.indexOf(map); |
|||
if (index > -1) { |
|||
mapping.splice(index, 1); |
|||
} |
|||
scope.theForm.$setDirty(); |
|||
} |
|||
|
|||
scope.addAttribute = function(attributes) { |
|||
var newAttribute = {type:"", key:"", value:""}; |
|||
attributes.push(newAttribute); |
|||
} |
|||
|
|||
scope.removeAttribute = function(attribute, attributes) { |
|||
var index = attributes.indexOf(attribute); |
|||
if (index > -1) { |
|||
attributes.splice(index, 1); |
|||
} |
|||
scope.theForm.$setDirty(); |
|||
} |
|||
|
|||
scope.changeCredentials = function(broker) { |
|||
var type = broker.credentials.type; |
|||
broker.credentials = {}; |
|||
broker.credentials.type = type; |
|||
} |
|||
|
|||
scope.changeConverterType = function(map) { |
|||
if(map.converterType == "custom"){ |
|||
map.converter = ""; |
|||
} |
|||
if(map.converterType == "json") { |
|||
map.converter = {attributes:[],timeseries:[]}; |
|||
} |
|||
} |
|||
|
|||
scope.changeNameExpression = function(converter) { |
|||
if(converter.nameExp == "deviceNameJsonExpression") { |
|||
if(converter.deviceNameTopicExpression) { |
|||
delete converter.deviceNameTopicExpression; |
|||
} |
|||
} |
|||
if(converter.nameExp == "deviceNameTopicExpression") { |
|||
if(converter.deviceNameJsonExpression) { |
|||
delete converter.deviceNameJsonExpression; |
|||
} |
|||
} |
|||
} |
|||
|
|||
scope.changeTypeExpression = function(converter) { |
|||
if(converter.typeExp == "deviceTypeJsonExpression") { |
|||
if(converter.deviceTypeTopicExpression) { |
|||
delete converter.deviceTypeTopicExpression; |
|||
} |
|||
} |
|||
if(converter.typeExp == "deviceTypeTopicExpression") { |
|||
if(converter.deviceTypeJsonExpression) { |
|||
delete converter.deviceTypeJsonExpression; |
|||
} |
|||
} |
|||
} |
|||
|
|||
scope.validateCustomConverter = function(model, editorName) { |
|||
if(model && model.length) { |
|||
try { |
|||
angular.fromJson(model); |
|||
scope.theForm[editorName].$setValidity('converterJSON', true); |
|||
} catch(e) { |
|||
scope.theForm[editorName].$setValidity('converterJSON', false); |
|||
} |
|||
} |
|||
} |
|||
|
|||
scope.fileAdded = function($file, broker, fileType) { |
|||
var reader = new FileReader(); |
|||
reader.onload = function(event) { |
|||
scope.$apply(function() { |
|||
if(event.target.result) { |
|||
scope.theForm.$setDirty(); |
|||
var addedFile = event.target.result; |
|||
if (addedFile && addedFile.length > 0) { |
|||
if(fileType == "caCert") { |
|||
broker.credentials.caCertFileName = $file.name; |
|||
broker.credentials.caCert = addedFile.replace(/^data.*base64,/, ""); |
|||
} |
|||
if(fileType == "privateKey") { |
|||
broker.credentials.privateKeyFileName = $file.name; |
|||
broker.credentials.privateKey = addedFile.replace(/^data.*base64,/, ""); |
|||
} |
|||
if(fileType == "Cert") { |
|||
broker.credentials.certFileName = $file.name; |
|||
broker.credentials.cert = addedFile.replace(/^data.*base64,/, ""); |
|||
} |
|||
} |
|||
} |
|||
}); |
|||
}; |
|||
reader.readAsDataURL($file.file); |
|||
} |
|||
|
|||
scope.clearFile = function(broker, fileType) { |
|||
scope.theForm.$setDirty(); |
|||
if(fileType == "caCert") { |
|||
broker.credentials.caCertFileName = null; |
|||
broker.credentials.caCert = null; |
|||
} |
|||
if(fileType == "privateKey") { |
|||
broker.credentials.privateKeyFileName = null; |
|||
broker.credentials.privateKey = null; |
|||
} |
|||
if(fileType == "Cert") { |
|||
broker.credentials.certFileName = null; |
|||
broker.credentials.cert = null; |
|||
} |
|||
} |
|||
|
|||
$compile(element.contents())(scope); |
|||
} |
|||
|
|||
return { |
|||
restrict: "A", |
|||
link: linker, |
|||
scope: { |
|||
config: "=", |
|||
isAdd: "=" |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue