add icons to app inspector

and support non-autogeneration in icon pipe
diff --git a/ui-modules/app-inspector/app/components/entity-tree/entity-node.html b/ui-modules/app-inspector/app/components/entity-tree/entity-node.html
index 9159b45..4a73f51 100644
--- a/ui-modules/app-inspector/app/components/entity-tree/entity-node.html
+++ b/ui-modules/app-inspector/app/components/entity-tree/entity-node.html
@@ -22,9 +22,12 @@
             <brooklyn-status-icon value="{{entity.serviceState}}" ng-if="entity.serviceState || entity.applicationId"></brooklyn-status-icon>
             <i class="fa fa-2x fa-external-link" ng-if="!entity.serviceState && !entity.applicationId"></i>
             <span>{{entity.name}}</span>
+            <span class="node-icon"><img ng-src="{{ entity | iconGeneratorPipe:{doNotAutogenerate: true} }}"/></span>
         </a>
-        <div class="entity-node-toggle" ng-if="entity.children.length > 0 || entity.members.length > 0" ng-click="onToggle($event)" >
+        <div class="entity-node-toggle-wrapper">
+          <div class="entity-node-toggle" ng-if="entity.children.length > 0 || entity.members.length > 0" ng-click="onToggle($event)" >
             <span class="glyphicon" ng-class="isChildrenOpen ? 'glyphicon-chevron-up' : 'glyphicon-chevron-down'"></span>
+          </div>
         </div>
     </div>
     <div class="entity-node-children" ng-show="isChildrenOpen">
diff --git a/ui-modules/app-inspector/app/components/entity-tree/entity-node.less b/ui-modules/app-inspector/app/components/entity-tree/entity-node.less
index 619ee24..ac4f717 100644
--- a/ui-modules/app-inspector/app/components/entity-tree/entity-node.less
+++ b/ui-modules/app-inspector/app/components/entity-tree/entity-node.less
@@ -75,10 +75,28 @@
         margin-left: 10px;
       }
     }
+    .entity-node-toggle-wrapper {
+      width: 38px;      
+      flex-grow: 0;
+    }
     .entity-node-toggle {
-      flex-shrink: 1;
+      width: 38px;      
       padding: 12px;
       cursor: row-resize;
     }
   }
+  .node-icon {
+    .pull-right();
+    flex-grow: 0 !important;
+    max-height: 20px; //let it extend above and below span's boundaries
+    overflow: visible !important;
+    margin-top: -8px;
+    margin-left: 0 !important;
+    img {
+      .make-icon(36px);
+    }
+    img[src] {
+      margin-left: 10px;
+    }
+  }
 }
diff --git a/ui-modules/app-inspector/app/views/main/inspect/summary/summary.less b/ui-modules/app-inspector/app/views/main/inspect/summary/summary.less
index ccd0ee0..059df66 100644
--- a/ui-modules/app-inspector/app/views/main/inspect/summary/summary.less
+++ b/ui-modules/app-inspector/app/views/main/inspect/summary/summary.less
@@ -20,14 +20,38 @@
 
   .entity-header {
 
+    
     .entity-name {
+      display: flex;
       border: none;
       -webkit-font-smoothing: antialiased;
+      align-items: center;
+      
+      .node-icon {
+        flex: 0 1 0px;
+        margin-left: 3px;
+        img[src] {
+          .make-icon(80px);
+          margin-right: 18px;
+        }
+      }
+      
+      .node-name {
+        flex: 1 0 200px;
+        border: none;
+      }
+      .editable-wrap {
+        flex: 1 0 200px;
+        width: auto;
+      }
+      
+      &.loading {
+        margin-left: 5px;
+        margin-top: 16px;
+        margin-bottom: 16px;
+      }
     }
-    .editable-wrap {
-      width: 100%;
-    }
-
+    
     .editable {
       color: @primary-500;
       height: 34px;
diff --git a/ui-modules/app-inspector/app/views/main/inspect/summary/summary.template.html b/ui-modules/app-inspector/app/views/main/inspect/summary/summary.template.html
index 8f5bea0..378bcfd 100644
--- a/ui-modules/app-inspector/app/views/main/inspect/summary/summary.template.html
+++ b/ui-modules/app-inspector/app/views/main/inspect/summary/summary.template.html
@@ -19,8 +19,11 @@
 <div class="entity-summary" ng-init="show = { status: true, mostRecentActivityInError: true, policies: true };">
     <div class="tab-header">
         <div class="entity-header">
-            <h2 ng-if="!vm.entity" class="entity-name"><loading-state error="vm.error.entity"></loading-state></h2>
-            <h2 ng-if="vm.entity" class="entity-name" editable-text="vm.name" blur="submit" buttons="no" blur="submit" onaftersave="vm.updateEntityName()">{{ vm.entity.name }}</h2>
+            <h2 ng-if="!vm.entity" class="entity-name loading"><loading-state error="vm.error.entity"></loading-state></h2>
+            <h2 ng-if="vm.entity" class="entity-name">
+              <span class="node-icon"><img ng-src="{{ vm.entity | iconGeneratorPipe:{doNotAutogenerate: true} }}"/></span>
+              <span class="node-name" editable-text="vm.name" blur="submit" buttons="no" blur="submit" onaftersave="vm.updateEntityName()">{{ vm.entity.name }}</span>
+            </h2>
         </div>
         <p ng-if="vm.sensors['main.uri']">
             <a ng-href="{{vm.sensors['main.uri']}}">{{vm.sensors['main.uri']}}</a>
diff --git a/ui-modules/utils/icon-generator/icon-generator.js b/ui-modules/utils/icon-generator/icon-generator.js
index cdf4325..0146e2f 100644
--- a/ui-modules/utils/icon-generator/icon-generator.js
+++ b/ui-modules/utils/icon-generator/icon-generator.js
@@ -63,17 +63,30 @@
 }
 
 export function iconGeneratorPipe(iconGenerator) {
-    return function (input, field) {
+    return function (input, opts) {
+        let field, doNotAutogenerate=false;
+        if (opts) {
+            if (typeof opts === 'string') {
+                field = opts;
+            } else {
+                field = opts.field;
+                doNotAutogenerate = opts.doNotAutogenerate;
+            }
+        }
+        let generateFrom = input;
         if (typeof(input) === 'object') {
             if (input.hasOwnProperty('iconUrl') && input.iconUrl) {
                 return input.iconUrl;
             } else if (input.hasOwnProperty('links') && input.links.hasOwnProperty('iconUrl') && input.links.iconUrl) {
                 return input.links.iconUrl;
             } else if (input.hasOwnProperty(field || 'id')) {
-                return iconGenerator(input[field || 'id'])
+                generateFrom = input[field || 'id'];
             }
         }
-        return iconGenerator(input);
+        if (doNotAutogenerate) {
+            return null;
+        }
+        return iconGenerator(generateFrom);
     }
 }