瀏覽代碼

HUE-7820 [core] Introduce a comment observable in sqlMeta

Johan Ahlen 8 年之前
父節點
當前提交
9c3773e
共有 1 個文件被更改,包括 62 次插入16 次删除
  1. 62 16
      desktop/core/src/desktop/static/desktop/js/sqlMetadata.js

+ 62 - 16
desktop/core/src/desktop/static/desktop/js/sqlMetadata.js

@@ -24,10 +24,56 @@ var SqlMetadata = (function () {
     self.sourceType = options.sourceType;
     self.path = options.path;
 
-    self.sourceMeta;
-    self.navigatorMeta;
+    self.sourceMeta = undefined;
+    self.navigatorMeta = undefined;
+    self.commentObservable = undefined;
+
+    self.lastNavigatorPromise = undefined;
+    self.lastSourcePromise = undefined;
+
+    self.silenceErrors = options.silenceErrors;
+    self.cachedOnly = options.cachedOnly;
   }
 
+  var refreshCommentObservable = function (sqlMeta) {
+    if (sqlMeta.commentObservable) {
+      if (HAS_NAVIGATOR) {
+        sqlMeta.getNavigatorMeta().done(function () {
+          if (sqlMeta.navigatorMeta && sqlMeta.navigatorMeta.entity) {
+            sqlMeta.commentObservable(sqlMeta.navigatorMeta.entity.description || sqlMeta.navigatorMeta.entity.originalDescription);
+          } else {
+            sqlMeta.getSourceMeta().done(function () {
+              sqlMeta.commentObservable(sqlMeta.sourceMeta ? (sqlMeta.sourceMeta.comment || '') : '');
+            });
+          }
+        })
+      } else {
+        sqlMeta.getSourceMeta().done(function () {
+          sqlMeta.commentObservable(sqlMeta.sourceMeta ? (sqlMeta.sourceMeta.comment || '') : '');
+        });
+      }
+    }
+  };
+
+  SqlMetadata.prototype.getCommentObservable = function () {
+    var self = this;
+    if (!self.commentObservable) {
+      self.commentObservable = ko.observable();
+      refreshCommentObservable(self);
+    }
+    return self.commentObservable;
+  };
+
+  SqlMetadata.prototype.getSourceMeta = function () {
+    var self = this;
+    return self.lastSourcePromise || self.loadSourceMeta()
+  };
+
+  SqlMetadata.prototype.getNavigatorMeta = function () {
+    var self = this;
+    return self.lastNavigatorPromise || self.loadNavigatorMeta()
+  };
+
   SqlMetadata.prototype.isDatabase = function () {
     var self = this;
     return self.path.length === 1;
@@ -63,41 +109,41 @@ var SqlMetadata = (function () {
     return self.sourceMeta && self.sourceMeta.type === 'array';
   };
 
-  SqlMetadata.prototype.loadSourceMeta = function (silenceErrors, cachedOnly) {
+  SqlMetadata.prototype.loadSourceMeta = function () {
     var self = this;
-    var promise = $.Deferred();
+    self.lastSourcePromise = $.Deferred();
     ApiHelper.getInstance().fetchSourceMetadata({
       sourceType: self.sourceType,
       path: self.path,
-      silenceErrors: silenceErrors,
-      cachedOnly: cachedOnly
+      silenceErrors: self.silenceErrors,
+      cachedOnly: self.cachedOnly
     }).done(function (data) {
       self.sourceMeta = data;
       self.loaded = true;
-      promise.resolve(self);
+      self.lastSourcePromise.resolve(self);
     }).fail(function (message) {
       self.hasErrors = true;
-      promise.reject(message);
+      self.lastSourcePromise.reject(message);
     });
 
-    return promise;
+    return self.lastSourcePromise.promise();
   };
   
-  SqlMetadata.prototype.loadNavigatorMeta = function (silenceErrors) {
+  SqlMetadata.prototype.loadNavigatorMeta = function () {
     var self = this;
-    var promise = $.Deferred();
+    self.lastNavigatorPromise = $.Deferred();
     if (HAS_NAVIGATOR) {
       ApiHelper.getInstance().fetchNavigatorMetadata({
         path: self.path,
-        silenceErrors: silenceErrors,
+        silenceErrors: self.silenceErrors,
       }).done(function (data) {
         self.navigatorMeta = data;
-        promise.resolve(self);
-      }).fail(promise.reject);
+        self.lastNavigatorPromise.resolve(self);
+      }).fail(self.lastNavigatorPromise.reject);
     } else {
-      promise.resolve();
+      self.lastNavigatorPromise.resolve();
     }
-    return promise;
+    return self.lastNavigatorPromise.promise();
   };
 
   return SqlMetadata;