blob: 81e4d3326849feb8c76e4dcfd826d47a21c632d5 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
define([
"require",
"backbone",
"hbs!tmpl/import/ImportLayoutView_tmpl",
"modules/Modal",
'utils/CommonViewFunction',
"utils/Utils",
"utils/UrlLinks",
"dropzone"
], function(require, Backbone, ImportLayoutViewTmpl, Modal, CommonViewFunction, Utils, UrlLinks, dropzone) {
var ImportLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends ImportLayoutView */
{
_viewName: "ImportLayoutView",
template: ImportLayoutViewTmpl,
/** Layout sub regions */
regions: {},
/** ui selector cache */
ui: {},
/** ui events hash */
events: function() {
var events = {};
return events;
},
/**
* intialize a new ImportLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, "callback", "isGlossary"));
var that = this;
this.modal = new Modal({
title: this.isGlossary ? "Import Glossary" : "Import Business Metadata",
content: this,
cancelText: "Cancel",
okText: "upload",
allowCancel: true,
okCloses: false,
mainClass: "dropzone-modal"
}).open();
this.modal.$el.find("button.ok").attr("disabled", true);
this.modal.on("ok", function(e) {
that.dropzone.processQueue();
});
this.modal.on("closeModal", function() {
that.modal.trigger("cancel");
});
},
bindEvents: function() {},
onRender: function() {
var that = this;
this.dropzone = null;
var updateButton = function(files) {
var buttonEl = that.modal.$el.find("button.ok");
if (files.length === 0) {
buttonEl.attr("disabled", true);
} else {
buttonEl.attr("disabled", false);
}
}
var headers = {};
headers[CommonViewFunction.restCsrfCustomHeader] = '""';
this.$("#importGlossary").dropzone({
url: that.isGlossary ? UrlLinks.glossaryImportUrl() : UrlLinks.businessMetadataImportUrl(),
clickable: true,
acceptedFiles: ".csv,.xls,.xlsx",
autoProcessQueue: false,
maxFiles: 1,
addRemoveLinks: true,
init: function() {
that.dropzone = this;
this.on('addedfile', function(file) {
updateButton(this.files);
})
this.on('removedfile', function(file) {
updateButton(this.files);
})
},
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
},
success: function(file, response, responseObj) {
var success = true;
if (response.failedImportInfoList && response.failedImportInfoList.length) {
success = false;
Utils.defaultErrorHandler(null, file.xhr, { defaultErrorMessage: response.failedImportInfoList[0].remarks });
}
if (success) {
that.modal.trigger("cancel");
Utils.notifySuccess({
content: "File: " + file.name + " imported successfully"
});
}
if (that.callback && ((response.successImportInfoList && response.successImportInfoList.length > 0) || success)) {
that.callback();
}
},
error: function(file, response, responseObj) {
Utils.defaultErrorHandler(null, responseObj, { defaultErrorMessage: (response.errorMessage) || response });
that.modal.$el.find("button.ok").attr("disabled", false);
},
dictDefaultMessage: "Drop files here or click to upload.",
headers: headers
});
}
}
);
return ImportLayoutView;
});