|
|
|
@ -16,14 +16,16 @@ |
|
|
|
import './import-dialog.scss'; |
|
|
|
|
|
|
|
/*@ngInject*/ |
|
|
|
export default function ImportDialogCsvController($scope, $mdDialog, toast, importTitle, importFileLabel, entityType, importExport, types, $timeout, $q) { |
|
|
|
export default function ImportDialogCsvController($scope, $mdDialog, toast, importTitle, importFileLabel, entityType, importExport, types, $mdStepper) { |
|
|
|
|
|
|
|
var vm = this; |
|
|
|
|
|
|
|
vm.cancel = cancel; |
|
|
|
vm.importFromJson = importFromJson; |
|
|
|
vm.finishExport = finishExport; |
|
|
|
vm.fileAdded = fileAdded; |
|
|
|
vm.clearFile = clearFile; |
|
|
|
vm.nextStep = nextStep; |
|
|
|
vm.previousStep = previousStep; |
|
|
|
|
|
|
|
vm.addDevices = addDevices; |
|
|
|
vm.importParams = { |
|
|
|
@ -32,69 +34,28 @@ export default function ImportDialogCsvController($scope, $mdDialog, toast, impo |
|
|
|
isHeader: true |
|
|
|
}; |
|
|
|
|
|
|
|
vm.selectedStep = 0; |
|
|
|
vm.stepProgress = 1; |
|
|
|
vm.maxStep = 3; |
|
|
|
vm.showBusyText = false; |
|
|
|
vm.stepData = [ |
|
|
|
{ step: 1, completed: false, optional: false, data: {} }, |
|
|
|
{ step: 2, completed: false, optional: false, data: {} }, |
|
|
|
{ step: 3, completed: false, optional: false, data: {} }, |
|
|
|
]; |
|
|
|
|
|
|
|
vm.enableNextStep = function nextStep() { |
|
|
|
//do not exceed into max step
|
|
|
|
if (vm.selectedStep >= vm.maxStep) { |
|
|
|
return; |
|
|
|
} |
|
|
|
//do not increment vm.stepProgress when submitting from previously completed step
|
|
|
|
if (vm.selectedStep === vm.stepProgress - 1) { |
|
|
|
vm.stepProgress = vm.stepProgress + 1; |
|
|
|
} |
|
|
|
vm.selectedStep = vm.selectedStep + 1; |
|
|
|
}; |
|
|
|
|
|
|
|
vm.moveToPreviousStep = function moveToPreviousStep() { |
|
|
|
if (vm.selectedStep > 0) { |
|
|
|
vm.selectedStep = vm.selectedStep - 1; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
vm.submitCurrentStep = function submitCurrentStep(stepData, isSkip) { |
|
|
|
var deferred = $q.defer(); |
|
|
|
vm.showBusyText = true; |
|
|
|
if (!stepData.completed && !isSkip) { |
|
|
|
//simulate $http
|
|
|
|
$timeout(function () { |
|
|
|
vm.showBusyText = false; |
|
|
|
deferred.resolve({ status: 200, statusText: 'success', data: {} }); |
|
|
|
//move to next step when success
|
|
|
|
stepData.completed = true; |
|
|
|
vm.enableNextStep(); |
|
|
|
}, 1000) |
|
|
|
} else { |
|
|
|
vm.showBusyText = false; |
|
|
|
vm.enableNextStep(); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
vm.importTitle = importTitle; |
|
|
|
vm.importFileLabel = importFileLabel; |
|
|
|
vm.entityType = entityType; |
|
|
|
|
|
|
|
vm.isVertical = true; |
|
|
|
vm.isLinear = true; |
|
|
|
vm.isAlternative = false; |
|
|
|
vm.isMobileStepText = true; |
|
|
|
|
|
|
|
vm.columnsParam = []; |
|
|
|
vm.parseData = []; |
|
|
|
|
|
|
|
vm.delimiters = [{ |
|
|
|
key: ',', |
|
|
|
value: ',' |
|
|
|
},{ |
|
|
|
}, { |
|
|
|
key: ';', |
|
|
|
value: ';' |
|
|
|
},{ |
|
|
|
}, { |
|
|
|
key: '|', |
|
|
|
value: '|' |
|
|
|
},{ |
|
|
|
}, { |
|
|
|
key: '\t', |
|
|
|
value: 'Tab' |
|
|
|
}]; |
|
|
|
@ -107,11 +68,11 @@ export default function ImportDialogCsvController($scope, $mdDialog, toast, impo |
|
|
|
reader.onload = function (event) { |
|
|
|
$scope.$apply(function () { |
|
|
|
if (event.target.result) { |
|
|
|
$scope.theForm.$setDirty(); |
|
|
|
vm.theFormStep1.$setDirty(); |
|
|
|
var importCSV = event.target.result; |
|
|
|
if (importCSV && importCSV.length > 0) { |
|
|
|
try { |
|
|
|
parseCSV(importCSV); |
|
|
|
vm.importData = importCSV; |
|
|
|
vm.fileName = $file.name; |
|
|
|
} catch (err) { |
|
|
|
vm.fileName = null; |
|
|
|
@ -126,12 +87,15 @@ export default function ImportDialogCsvController($scope, $mdDialog, toast, impo |
|
|
|
} |
|
|
|
|
|
|
|
function parseCSV(importData) { |
|
|
|
var columnParam = {}; |
|
|
|
var config = { |
|
|
|
delim: vm.importParams.delim, |
|
|
|
header: vm.importParams.isHeader |
|
|
|
}; |
|
|
|
parseData = importExport.convertCSVToJson(importData, config); |
|
|
|
return importExport.convertCSVToJson(importData, config); |
|
|
|
} |
|
|
|
|
|
|
|
function createColumnsData(parseData) { |
|
|
|
var columnParam = {}; |
|
|
|
for (var i = 0; i < parseData.headers.length; i++) { |
|
|
|
if (vm.importParams.isHeader && parseData.headers[i].search(/^(name|type)$/im) === 0) { |
|
|
|
columnParam = { |
|
|
|
@ -150,24 +114,14 @@ export default function ImportDialogCsvController($scope, $mdDialog, toast, impo |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function addDevices () { |
|
|
|
var arrayParam = [{type: "ENTITY_FIELD", key: "name", sampleData: "Device 1"}, {type: "ENTITY_FIELD", key: "type", sampleData: "test"}, {type: "SERVER_ATTRIBUTE", key: "test", sampleData: "test"}, {type: "TIMESERIES", key: "testBoolean", sampleData: false}, {type: "SHARED_ATTRIBUTE", key: "testNumber", sampleData: 123}]; // eslint-disable-line
|
|
|
|
var data = {headers: ["Device 1", "test", "test", "FALSE", "123"], |
|
|
|
rows:[["Device 1", "test", "test", false, 123.5]]}; |
|
|
|
// rows:[["Device 1", "test", "test", false, 123],
|
|
|
|
// ["Device 2", "test", "test", false, 124],
|
|
|
|
// ["Device 3", "test", "test", false, 125],
|
|
|
|
// ["Device 4", "test", "test", false, 126],
|
|
|
|
// ["Device 5", "test", "test", false, 127]]};
|
|
|
|
arrayParam = vm.columnsParam; |
|
|
|
data = parseData; |
|
|
|
var arrayData = []; |
|
|
|
function addDevices(importData, parameterColumns) { |
|
|
|
var entitysData = []; |
|
|
|
var config = { |
|
|
|
ignoreErrors: true, |
|
|
|
resendRequest: true |
|
|
|
}; |
|
|
|
for (var i = 0; i < data.rows.length; i ++) { |
|
|
|
var obj = { |
|
|
|
for (var i = 0; i < importData.rows.length; i++) { |
|
|
|
var entityData = { |
|
|
|
name: "", |
|
|
|
type: "", |
|
|
|
attributes: { |
|
|
|
@ -176,58 +130,86 @@ export default function ImportDialogCsvController($scope, $mdDialog, toast, impo |
|
|
|
}, |
|
|
|
timeseries: [] |
|
|
|
}; |
|
|
|
for(var j = 0; j < arrayParam.length; j++){ |
|
|
|
switch (arrayParam[j].type) { |
|
|
|
for (var j = 0; j < parameterColumns.length; j++) { |
|
|
|
switch (parameterColumns[j].type) { |
|
|
|
case types.entityGroup.columnType.serverAttribute.value: |
|
|
|
obj.attributes.server.push({ |
|
|
|
key: arrayParam[j].key, |
|
|
|
value: data.rows[i][j] |
|
|
|
entityData.attributes.server.push({ |
|
|
|
key: parameterColumns[j].key, |
|
|
|
value: importData.rows[i][j] |
|
|
|
}); |
|
|
|
break; |
|
|
|
case types.entityGroup.columnType.sharedAttribute.value: |
|
|
|
obj.attributes.shared.push({ |
|
|
|
key: arrayParam[j].key, |
|
|
|
value: data.rows[i][j] |
|
|
|
entityData.attributes.shared.push({ |
|
|
|
key: parameterColumns[j].key, |
|
|
|
value: importData.rows[i][j] |
|
|
|
}); |
|
|
|
break; |
|
|
|
case types.entityGroup.columnType.timeseries.value: |
|
|
|
obj.timeseries.push({ |
|
|
|
key: arrayParam[j].key, |
|
|
|
value: data.rows[i][j] |
|
|
|
entityData.timeseries.push({ |
|
|
|
key: parameterColumns[j].key, |
|
|
|
value: importData.rows[i][j] |
|
|
|
}); |
|
|
|
break; |
|
|
|
case types.entityGroup.columnType.entityField.value: |
|
|
|
switch (arrayParam[j].key) { |
|
|
|
switch (parameterColumns[j].key) { |
|
|
|
case types.entityGroup.entityField.name.value: |
|
|
|
obj.name = data.rows[i][j]; |
|
|
|
entityData.name = importData.rows[i][j]; |
|
|
|
break; |
|
|
|
case types.entityGroup.entityField.type.value: |
|
|
|
obj.type = data.rows[i][j]; |
|
|
|
entityData.type = importData.rows[i][j]; |
|
|
|
break; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
arrayData.push(obj); |
|
|
|
entitysData.push(entityData); |
|
|
|
} |
|
|
|
importExport.createMultiEntity(arrayData, vm.entityType, vm.importParams.isUpdate, config).then(function () { |
|
|
|
$mdDialog.hide(); |
|
|
|
importExport.createMultiEntity(entitysData, vm.entityType, vm.importParams.isUpdate, config).then(function (response) { |
|
|
|
vm.statistical = response; |
|
|
|
$mdStepper('import-stepper').next(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function clearFile() { |
|
|
|
$scope.theForm.$setDirty(); |
|
|
|
vm.theFormStep1.$setDirty(); |
|
|
|
vm.fileName = null; |
|
|
|
parseData = null; |
|
|
|
vm.columnsParam = []; |
|
|
|
vm.importData = null; |
|
|
|
} |
|
|
|
|
|
|
|
function previousStep() { |
|
|
|
let steppers = $mdStepper('import-stepper'); |
|
|
|
steppers.back(); |
|
|
|
} |
|
|
|
|
|
|
|
function nextStep(step) { |
|
|
|
let steppers = $mdStepper('import-stepper'); |
|
|
|
switch (step) { |
|
|
|
case 2: |
|
|
|
steppers.next(); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
parseData = parseCSV(vm.importData); |
|
|
|
if (parseData === -1) { |
|
|
|
clearFile(); |
|
|
|
steppers.back(); |
|
|
|
} else { |
|
|
|
createColumnsData(parseData); |
|
|
|
steppers.next(); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
steppers.next(); |
|
|
|
addDevices(parseData, vm.columnsParam) |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
function cancel() { |
|
|
|
$mdDialog.cancel(); |
|
|
|
} |
|
|
|
|
|
|
|
function importFromJson() { |
|
|
|
$scope.theForm.$setPristine(); |
|
|
|
$mdDialog.hide(vm.importData); |
|
|
|
function finishExport() { |
|
|
|
$mdDialog.hide(); |
|
|
|
} |
|
|
|
} |
|
|
|
|