Browse Source

HUE-950 [desktop] Adding icons to the document list

Romain Rigaux 12 years ago
parent
commit
36586c7754

+ 3 - 0
apps/oozie/src/oozie/models.py

@@ -286,6 +286,7 @@ class Workflow(Job):
   objects = WorkflowManager()
 
   HUE_ID = 'hue-id-w'
+  ICON = '/oozie/static/art/icon_oozie_24_workflow.png'
 
   def get_type(self):
     return 'workflow'
@@ -1267,6 +1268,7 @@ class Coordinator(Job):
                                     help_text=_t('Additional properties to transmit to the workflow, e.g. limit=100, and EL functions, e.g. username=${coord:user()}'))
 
   HUE_ID = 'hue-id-c'
+  ICON = '/oozie/static/art/icon_oozie_24_coordinator.png'
 
   def get_type(self):
     return 'coordinator'
@@ -1532,6 +1534,7 @@ class Bundle(Job):
   coordinators = models.ManyToManyField(Coordinator, through='BundledCoordinator')
 
   HUE_ID = 'hue-id-b'
+  ICON = '/oozie/static/art/icon_oozie_24_bundle.png'
 
   def get_type(self):
     return 'bundle'

+ 24 - 0
desktop/core/src/desktop/models.py

@@ -15,6 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import logging
 from itertools import chain
 
 from django.db import models
@@ -28,9 +29,13 @@ from desktop.lib.i18n import force_unicode
 from desktop.lib.exceptions_renderable import PopupException
 
 from useradmin.models import get_default_user_group
+from desktop import appmanager
 
 
 
+LOG = logging.getLogger(__name__)
+
+
 class UserPreferences(models.Model):
   """Holds arbitrary key/value strings."""
   user = models.ForeignKey(auth_models.User)
@@ -278,6 +283,25 @@ class Document(models.Model):
 
     return copy_doc
 
+  @property
+  def icon(self):
+    apps = appmanager.get_apps_dict()
+    
+    try:
+      if self.content_type.app_label == 'beeswax':
+        if self.extra == '0':      
+          return apps['beeswax'].icon_path
+        else:
+          return apps['impala'].icon_path
+      elif self.content_type.app_label == 'oozie':
+        return self.content_type.model_class().ICON
+      elif self.content_type.app_label in apps: 
+        return apps[self.content_type.app_label].icon_path
+      else:
+        return '/static/art/favicon.png'
+    except Exception, e:
+      LOG.warn(force_unicode(e))
+      return '/static/art/favicon.png' 
 
 
 class DocumentPermission(models.Model):

+ 8 - 23
desktop/core/src/desktop/templates/home.mako

@@ -77,17 +77,20 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
               <a href="#" data-toggle="dropdown"><i class="icon-plus-sign"></i> ${_('New document')}</a>
               <ul class="dropdown-menu" role="menu">
                 % if 'beeswax' in apps:
-                <li><a href="${ url('beeswax:index') }"><img src="/beeswax/static/art/icon_beeswax_24.png"/> ${_('Hive Query')}</a></li>
+                <li><a href="#"><img src="${ apps['beeswax'].icon_path }"/> ${_('Hive Query')}</a></li>
                 % endif
                 % if 'impala' in apps:
-                <li><a href="${ url('impala:index') }"><img src="/impala/static/art/icon_impala_24.png"/> ${_('Impala Query')}</a></li>
+                <li><a href="#"><img src="${ apps['impala'].icon_path }"/> ${_('Impala Query')}</a></li>
                 % endif
                 % if 'pig' in apps:
-                <li><a href="${ url('pig:index') }"><img src="/pig/static/art/icon_pig_24.png"/> ${_('Pig Script')}</a></li>
+                <li><a href="#"><img src="${ apps['pig'].icon_path }"/> ${_('Pig Script')}</a></li>
                 % endif
+                % if 'sqoop' in apps:
+                <li><a href="#"><img src="${ apps['sqoop'].icon_path }"/> ${_('Sqoop Transfer')}</a></li>
+                % endif                
                 % if 'oozie' in apps:
                 <li class="dropdown-submenu">
-                  <a href="#"><img src="/oozie/static/art/icon_oozie_24.png"/> ${_('Oozie Scheduler')}</a>
+                  <a href="#"><img src="${ apps['oozie'].icon_path }"/> ${_('Oozie Scheduler')}</a>
                   <ul class="dropdown-menu">
                     <li><a href="${ url('oozie:create_workflow') }"><img src="/oozie/static/art/icon_oozie_24_workflow.png"/> ${_('Workflow')}</a></li>
                     <li><a href="${ url('oozie:create_coordinator') }"><img src="/oozie/static/art/icon_oozie_24_coordinator.png"/> ${_('Coordinator')}</a></li>
@@ -505,7 +508,7 @@ function addRow(doc) {
       _tags += '<span class="badge">' + doc.tags[i].name + '</span> ';
     }
     documentsTable.fnAddData([
-      getIcon(doc.contentType),
+      '<img src="' + doc.icon + '" width="80%"/>',
       '<a href="' + doc.url + '" data-row-selector="true">' + doc.name + '</a>',
       emptyStringIfNull(doc.description),
       '<div class="documentTags" data-document-id="' + doc.id + '">' + _tags + '</div>',
@@ -536,24 +539,6 @@ function updateDoc(updatedDoc) {
   });
 }
 
-
-function getIcon(contentType) {
-  var _code = '<img src="';
-  switch (contentType) {
-    case "workflow":
-      _code += '/oozie/static/art/icon_oozie_24_workflow.png';
-      break;
-    case "coordinator":
-      _code += '/oozie/static/art/icon_oozie_24_coordinator.png';
-      break;
-    case "bundle":
-      _code += '/oozie/static/art/icon_oozie_24_bundle.png';
-      break;
-  }
-  _code += '" />';
-  return _code;
-}
-
 function emptyStringIfNull(obj) {
   if (obj != null && typeof obj != "undefined") {
     return obj;

+ 2 - 1
desktop/core/src/desktop/views.py

@@ -52,7 +52,7 @@ def home(request):
   docs = Document.objects.get_docs(request.user).order_by('-last_modified')[:100]
   tags = DocumentTag.objects.filter(owner=request.user)
   
-  apps = dict([(app.name, app) for app in appmanager.get_apps(request.user)])
+  apps = appmanager.get_apps_dict(request.user)
   
   return render('home.mako', request, {
     'apps': apps,                                       
@@ -84,6 +84,7 @@ def massage_doc_for_json(doc):
   return {
       'id': doc.id,
       'contentType': doc.content_type.name,
+      'icon': doc.icon,
       'name': doc.name,
       'url': doc.content_object.get_absolute_url(),
       'description': doc.description,