Browse Source

HUE-1813 [sqoop] autocomplete output directory

Abraham Elmahrek 12 years ago
parent
commit
06bac19
2 changed files with 46 additions and 30 deletions
  1. 2 1
      apps/rdbms/src/rdbms/tests.py
  2. 44 29
      apps/sqoop/src/sqoop/templates/app.mako

+ 2 - 1
apps/rdbms/src/rdbms/tests.py

@@ -24,7 +24,8 @@ from nose.tools import assert_true, assert_equal
 
 
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.django_test_util import make_logged_in_client
 
 
-from librdbms import conf as rdbms_conf, dbms
+from librdbms import conf as rdbms_conf
+from librdbms.server import dbms
 
 
 
 
 class MockRdbms:
 class MockRdbms:

+ 44 - 29
apps/sqoop/src/sqoop/templates/app.mako

@@ -15,6 +15,7 @@
 ## limitations under the License.
 ## limitations under the License.
 <%!
 <%!
   from desktop.views import commonheader, commonfooter
   from desktop.views import commonheader, commonfooter
+  from django.template.defaultfilters import urlencode
   from django.utils.translation import ugettext as _
   from django.utils.translation import ugettext as _
   from django.core.urlresolvers import reverse
   from django.core.urlresolvers import reverse
 %>
 %>
@@ -243,16 +244,26 @@ ${ commonheader(None, "sqoop", user) | n,unicode }
 <div data-bind="template: {'name': modal.name(), 'if': modal.name()}" id="modal-container" class="modal hide fade"></div>
 <div data-bind="template: {'name': modal.name(), 'if': modal.name()}" id="modal-container" class="modal hide fade"></div>
 
 
 <div id="chooseFile" class="modal hide fade">
 <div id="chooseFile" class="modal hide fade">
-    <div class="modal-header">
-        <a href="#" class="close" data-dismiss="modal">&times;</a>
-        <h3>${_('Choose a folder')}</h3>
-    </div>
-    <div class="modal-body">
-        <div id="filechooser">
-        </div>
-    </div>
-    <div class="modal-footer">
+  <div class="modal-header">
+    <a href="#" class="close" data-dismiss="modal">&times;</a>
+    <h3>${_('Choose a folder')}</h3>
+  </div>
+  <div class="modal-body">
+    <div id="filechooser"></div>
+  </div>
+  <div class="modal-footer"></div>
+</div>
+
+<div id="jHueHdfsAutocomplete" class="popover bottom" style="position:absolute;display:none;max-width:1000px;z-index:33000">
+  <div class="arrow"></div>
+  <div class="popover-inner">
+    <h3 class="popover-title"></h3>
+    <div class="popover-content">
+      <p>
+        <ul class="unstyled"></ul>
+      </p>
     </div>
     </div>
+  </div>
 </div>
 </div>
 
 
 <script type="text/html" id="delete-job-modal">
 <script type="text/html" id="delete-job-modal">
@@ -598,6 +609,7 @@ ${ commonheader(None, "sqoop", user) | n,unicode }
 <script src="/static/ext/js/knockout.mapping-2.3.2.js" type="text/javascript" charset="utf-8"></script>
 <script src="/static/ext/js/knockout.mapping-2.3.2.js" type="text/javascript" charset="utf-8"></script>
 <script src="/static/ext/js/bootstrap-editable.min.js"></script>
 <script src="/static/ext/js/bootstrap-editable.min.js"></script>
 <script src="/static/ext/js/knockout.x-editable.js"></script>
 <script src="/static/ext/js/knockout.x-editable.js"></script>
+<script src="/static/js/jquery.hdfsautocomplete.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/cclass.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/cclass.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/koify.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/koify.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/sqoop.autocomplete.js" type="text/javascript" charset="utf-8"></script>
 <script src="/sqoop/static/js/sqoop.autocomplete.js" type="text/javascript" charset="utf-8"></script>
@@ -773,7 +785,8 @@ $(document).on('show_section', function(e, section){
   viewModel.shownSection(section);
   viewModel.shownSection(section);
 });
 });
 $(document).on('changed.page', function(e, jobWizard) {
 $(document).on('changed.page', function(e, jobWizard) {
-  $('input[name="table.tableName').typeahead({
+  // Autocomplete fields and table name
+  $('input[name="table.tableName"]').typeahead({
     'source': function(query, process) {
     'source': function(query, process) {
       var database = viewModel.connection().database();
       var database = viewModel.connection().database();
       switch (viewModel.connection().jdbcDriver()) {
       switch (viewModel.connection().jdbcDriver()) {
@@ -787,28 +800,29 @@ $(document).on('changed.page', function(e, jobWizard) {
       return [];
       return [];
     }
     }
   });
   });
-  function columnsAutocomplete(query, process) {
-    var database = viewModel.connection().database();
-    if (viewModel.job()) {
-      var table = viewModel.job().table();
-      switch (viewModel.connection().jdbcDriver()) {
-        case 'com.mysql.jdbc.Driver':
-        return autocomplete.columns('mysql', database, table);
-        break;
-        case 'org.postgresql.Driver':
-        return autocomplete.columns('postgresql', database, table);
-        break;
-        case 'oracle.jdbc.OracleDriver':
-        return autocomplete.columns('oracle', database, table);
+  $('input[name="table.partitionColumn"],input[name="table.columns"]').typeahead({
+    'source': function(query, process) {
+      var database = viewModel.connection().database();
+      if (viewModel.job()) {
+        var table = viewModel.job().table();
+        switch (viewModel.connection().jdbcDriver()) {
+          case 'com.mysql.jdbc.Driver':
+          return autocomplete.columns('mysql', database, table);
+          break;
+          case 'org.postgresql.Driver':
+          return autocomplete.columns('postgresql', database, table);
+          break;
+          case 'oracle.jdbc.OracleDriver':
+          return autocomplete.columns('oracle', database, table);
+        }
+        return [];
       }
       }
-      return [];
     }
     }
-  }
-  $('input[name="table.columns"]').typeahead({
-    'source': columnsAutocomplete
   });
   });
-  $('input[name="table.partitionColumn"]').typeahead({
-    'source': columnsAutocomplete
+  // Autocomplete HDFS paths
+  $('input[name="output.outputDirectory"],input[name="input.inputDirectory"]').jHueHdfsAutocomplete({
+    home: "/user/${ user }/",
+    smartTooltip: "${_('Did you know? You can use the tab key or CTRL + Space to autocomplete file and folder names')}"
   });
   });
 });
 });
 $(document).on('shown_section', (function(){
 $(document).on('shown_section', (function(){
@@ -1213,6 +1227,7 @@ $(document).ready(function () {
     placement: 'right'
     placement: 'right'
   });
   });
 });
 });
+
 </script>
 </script>
 
 
 ${ commonfooter(messages) | n,unicode }
 ${ commonfooter(messages) | n,unicode }