Bläddra i källkod

HUE-7820 [frontend] Add versioning to the DataCatalog and debug helper

Johan Ahlen 7 år sedan
förälder
incheckning
7f98468121

+ 41 - 1
desktop/core/src/desktop/static/desktop/js/dataCatalog.js

@@ -16,6 +16,8 @@
 
 var DataCatalog = (function () {
 
+  var DATA_CATALOG_VERSION = 1;
+
   /**
    * @param {String} sourceType
    * @constructor
@@ -37,6 +39,7 @@ var DataCatalog = (function () {
   DataCatalog.prototype.updateStore = function (dataCatalogEntry) {
     var self = this;
     self.store.setItem(dataCatalogEntry.getQualifiedPath(), {
+      version: DATA_CATALOG_VERSION,
       definition: dataCatalogEntry.definition,
       sourceMeta: dataCatalogEntry.sourceMeta,
       sample: dataCatalogEntry.sample,
@@ -152,7 +155,7 @@ var DataCatalog = (function () {
 
   var mergeFromStoreEntry = function (dataCatalogEntry, storeEntry) {
     var mergeAttribute = function (attributeName, ttl, promiseName) {
-      if (storeEntry[attributeName] && (!storeEntry[attributeName].hueTimestamp || (Date.now() - storeEntry[attributeName].hueTimestamp) < ttl)) {
+      if (storeEntry.version === DATA_CATALOG_VERSION && storeEntry[attributeName] && (!storeEntry[attributeName].hueTimestamp || (Date.now() - storeEntry[attributeName].hueTimestamp) < ttl)) {
         dataCatalogEntry[attributeName] = storeEntry[attributeName];
         if (promiseName) {
           dataCatalogEntry[promiseName] = $.Deferred().resolve(dataCatalogEntry[attributeName]).promise();
@@ -891,6 +894,43 @@ var DataCatalog = (function () {
     return instances[sourceType] || (instances[sourceType] = new DataCatalog(sourceType));
   };
 
+  if (typeof window.hueDebug === 'undefined') {
+    window.hueDebug = {};
+  }
+
+  window.hueDebug.fillDataCatalog = function (sourceType, path) {
+    if (!path) {
+      path = [];
+    }
+
+    var options = { silenceErrors: true };
+
+    var loadRecursive = function (entry) {
+      var deferred = $.Deferred();
+      var promises = [];
+      promises.push(entry.getSourceMeta(options));
+      promises.push(entry.getSample(options));
+      if (entry.hasPossibleChildren()) {
+        //promises.push(entry.loadNavOptMetaForChildren(options));
+        promises.push(entry.loadNavigatorMetaForChildren(options));
+        promises.push(entry.getChildren(options).done(function (childEntries) {
+          promises.push(childEntries.forEach(function (childEntry) {
+            loadRecursive(childEntry);
+          }));
+        }));
+      }
+      $.when.apply($, promises).always(deferred.resolve);
+      return deferred.promise();
+    };
+
+    var deferred = $.Deferred();
+    getCatalog(sourceType).getEntry({ path: path }).done(function (startEntry) {
+      startEntry.loadNavigatorMetaForChildren(options);
+      loadRecursive(startEntry).always(deferred.resolve);
+    });
+    return deferred.promise();
+  };
+
   return {
     getEntry: function (options) {
       return getCatalog(options.sourceType).getEntry(options);

+ 7 - 6
desktop/core/src/desktop/templates/common_header_footer_components.mako

@@ -256,13 +256,14 @@ from metadata.conf import has_optimizer, OPTIMIZER
         }
       });
 
-      window.hueDebug = {
-        viewModel: function (element) {
-          if (typeof element !== 'undefined' && typeof element === 'string') {
-            element = $(element)[0];
-          }
-          return ko.dataFor(element || document.body);
+      if (typeof window.hueDebug === 'undefined') {
+        window.hueDebug = {};
+      }
+      window.hueDebug.viewModel = function (element) {
+        if (typeof element !== 'undefined' && typeof element === 'string') {
+          element = $(element)[0];
         }
+        return ko.dataFor(element || document.body);
       }
     });
   </script>

+ 12 - 10
desktop/core/src/desktop/templates/hue.mako

@@ -1755,16 +1755,18 @@ ${ smart_unicode(login_modal(request).content) | n,unicode }
 
     $('.page-content').jHueScrollUp();
 
-    window.hueDebug = {
-      viewModel: function (element) {
-        if (typeof element !== 'undefined' && typeof element === 'string') {
-          element = $(element)[0];
-        }
-        return element ? ko.dataFor(element) : window.hueDebug.onePageViewModel;
-      },
-      onePageViewModel: onePageViewModel,
-      sidePanelViewModel: sidePanelViewModel,
-      topNavViewModel: topNavViewModel
+    if (typeof window.hueDebug === 'undefined') {
+      window.hueDebug = {};
+    }
+
+    window.hueDebug.onePageViewModel = onePageViewModel;
+    window.hueDebug.sidePanelViewModel = sidePanelViewModel;
+    window.hueDebug.topNavViewModel = topNavViewModel;
+    window.hueDebug.viewModel = function (element) {
+      if (typeof element !== 'undefined' && typeof element === 'string') {
+        element = $(element)[0];
+      }
+      return element ? ko.dataFor(element) : window.hueDebug.onePageViewModel;
     };
 
     var tour = new Shepherd.Tour({