浏览代码

HUE-1876 [beeswax] Can't save result into an HDFS directory

Abraham Elmahrek 12 年之前
父节点
当前提交
9df9961
共有 2 个文件被更改,包括 54 次插入13 次删除
  1. 26 6
      apps/beeswax/src/beeswax/templates/execute.mako
  2. 28 7
      apps/beeswax/static/js/beeswax.vm.js

+ 26 - 6
apps/beeswax/src/beeswax/templates/execute.mako

@@ -87,7 +87,7 @@ ${layout.menubar(section='query')}
 
             <div data-bind="css: {'error': $root.getFileResourcePathErrors($index()).length > 0}" class="control-group">
               <label>${_('Path')}</label>
-              <input data-bind="value: path" type="text" class="filesField span7 pathChooser" placeholder="/user/foo/udf.jar"/>
+              <input data-bind="value: path" type="text" class="filesField span7 fileChooser" placeholder="/user/foo/udf.jar"/>
             </div>
           </div>
           <!-- /ko -->
@@ -216,10 +216,10 @@ ${layout.menubar(section='query')}
         <div id="queryPane">
 
           <div data-bind="css: {'hide': design.query.errors().length == 0}" class="hide alert alert-error">
-            <!-- ko if: design.query.errors().length > 0 -->
+            <!-- ko if: $root.getQueryErrors().length > 0 -->
             <p><strong>${_('Please provide a query')}</strong></p>
             <!-- /ko -->
-            <!-- ko if: design.query.errors().length == 0 -->
+            <!-- ko if: $root.getQueryErrors().length == 0 -->
             <p><strong>${_('Your query has the following error(s):')}</strong></p>
 
             <div>
@@ -493,6 +493,20 @@ ${layout.menubar(section='query')}
   </div>
 </div>
 
+<div id="chooseFolder" class="modal hide fade">
+  <div class="modal-header">
+    <a href="#" class="close" data-dismiss="modal">&times;</a>
+
+    <h3>${_('Choose an empty folder')}</h3>
+  </div>
+  <div class="modal-body">
+    <div id="folderchooser">
+    </div>
+  </div>
+  <div class="modal-footer">
+  </div>
+</div>
+
 
 <div id="saveAs" class="modal hide fade">
   <div class="modal-header">
@@ -619,7 +633,11 @@ ${layout.menubar(section='query')}
     margin-bottom: 5px;
   }
 
-  #filechooser {
+  #chooseFile, #chooseFolder {
+    z-index: 1100;
+  }
+
+  #filechooser, #folderchooser {
     min-height: 100px;
     overflow-y: auto;
   }
@@ -1168,7 +1186,7 @@ $(document).one('fetched.design', function () {
     emptytext: "${ _('Empty description') }"
   });
 
-  $(".pathChooser:not(:has(~ button))").after(getFileBrowseButton($(".pathChooser:not(:has(~ button))")));
+  $(".fileChooser:not(:has(~ button))").after(getFileBrowseButton($(".fileChooser:not(:has(~ button))")));
 });
 
 
@@ -1746,6 +1764,8 @@ $(document).ready(function () {
   % endif
 });
 
+$(".pathChooser:not(:has(~ button))").after(getFileAndFolderBrowseButton($(".pathChooser:not(:has(~ button))"), true));
+
 
 // Routie
 $(document).ready(function () {
@@ -1959,7 +1979,7 @@ if (viewModel.design.id() > 0 || viewModel.design.history.id() > 0) {
 }
 viewModel.design.fileResources.values.subscribe(function() {
   // File chooser button for file resources.
-  $(".pathChooser:not(:has(~ button))").after(getFileBrowseButton($(".pathChooser:not(:has(~ button))")));
+  $(".fileChooser:not(:has(~ button))").after(getFileBrowseButton($(".fileChooser:not(:has(~ button))")));
 });
 viewModel.fetchDatabases();
 ko.applyBindings(viewModel);

+ 28 - 7
apps/beeswax/static/js/beeswax.vm.js

@@ -276,7 +276,7 @@ function BeeswaxViewModel(server) {
     }
   };
 
-  var advancedParameterErrorHandling = function(advanced_parameter, key) {
+  var advancedErrorHandling = function(advanced_parameter, key) {
     return function(index) {
       var errors = self.design[advanced_parameter].errors();
       if (errors && errors[index]) {
@@ -291,14 +291,16 @@ function BeeswaxViewModel(server) {
     };
   };
 
-  self.getSettingKeyErrors = advancedParameterErrorHandling('settings', 'key');
-  self.getSettingValueErrors = advancedParameterErrorHandling('settings', 'value');
+  self.getQueryErrors = advancedErrorHandling('query', 'query');
 
-  self.getFileResourceTypeErrors = advancedParameterErrorHandling('fileResources', 'type');
-  self.getFileResourcePathErrors = advancedParameterErrorHandling('fileResources', 'path');
+  self.getSettingKeyErrors = advancedErrorHandling('settings', 'key');
+  self.getSettingValueErrors = advancedErrorHandling('settings', 'value');
 
-  self.getFunctionNameErrors = advancedParameterErrorHandling('functions', 'name');
-  self.getFunctionClassNameErrors = advancedParameterErrorHandling('functions', 'class_name');
+  self.getFileResourceTypeErrors = advancedErrorHandling('fileResources', 'type');
+  self.getFileResourcePathErrors = advancedErrorHandling('fileResources', 'path');
+
+  self.getFunctionNameErrors = advancedErrorHandling('functions', 'name');
+  self.getFunctionClassNameErrors = advancedErrorHandling('functions', 'class_name');
 
   function getMultiFormData(prefix, arr, members) {
     var data = {};
@@ -793,12 +795,31 @@ function getFileBrowseButton(inputElement) {
         inputElement.trigger("change");
         $("#chooseFile").modal("hide");
       },
+      selectFolder: false,
       createFolder: false
     });
     $("#chooseFile").modal("show");
   });
 }
 
+function getFileAndFolderBrowseButton(inputElement) {
+  return $("<button>").addClass("btn").addClass("fileChooserBtn").text("..").click(function (e) {
+    e.preventDefault();
+    $("#folderchooser").jHueFileChooser({
+      initialPath: inputElement.val(),
+      onFolderChoose:function (folderPath) {
+        inputElement.val(folderPath);
+        inputElement.trigger("change");
+        $("#chooseFolder").modal("hide");
+      },
+      selectFolder: true,
+      createFolder: false,
+      uploadFile:false
+    });
+    $("#chooseFolder").modal("show");
+  });
+}
+
 
 // utils
 function clickHard(el) {