[CORD-1117] XOS GUI Various fix

Change-Id: I4237a5e23509e9173c958d76aa929a70583ba1e6
diff --git a/src/app/extender/services/onboard.service.ts b/src/app/extender/services/onboard.service.ts
index b6a9abc..206a968 100644
--- a/src/app/extender/services/onboard.service.ts
+++ b/src/app/extender/services/onboard.service.ts
@@ -4,11 +4,18 @@
 import {Observable} from 'rxjs';
 
 export interface IXosOnboarder {
-
+  onboard(): ng.IPromise<boolean>;
 }
 
 export class XosOnboarder implements IXosOnboarder {
-  static $inject = ['$timeout', '$log', '$q', 'WebSocket', '$ocLazyLoad', 'XosModelStore'];
+  static $inject = [
+    '$timeout',
+    '$log',
+    '$q',
+    'WebSocket',
+    '$ocLazyLoad',
+    'XosModelStore'
+  ];
 
   constructor(
     private $timeout: ng.ITimeoutService,
@@ -18,23 +25,37 @@
     private $ocLazyLoad: any, // TODO add definition
     private XosModelStore: IXosModelStoreService
   ) {
+
+  }
+
+  public onboard(): ng.IPromise<boolean> {
+    const d = this.$q.defer();
+
     this.$log.info('[XosOnboarder] Setup');
 
     // Load onboarded app
     const ComponentObservable: Observable<any> = this.XosModelStore.query('XOSGuiExtension');
 
     ComponentObservable.subscribe(
-        (component) => {
-          _.forEach(component, (c) => {
-            this.$log.info(`[XosOnboarder] Loading files for app: ${c.name}`);
-            const files = c.files.split(',').map(s => s.trim());
-            this.loadFile(files)
-              .then((res) => {
-                this.$log.info(`[XosOnboarder] All files loaded for app: ${c.name}`);
-              });
-          });
+      (component) => {
+        if (component.length === 0) {
+          return d.resolve();
         }
-      );
+        _.forEach(component, (c) => {
+          this.$log.info(`[XosOnboarder] Loading files for app: ${c.name}`);
+          const files = c.files.split(',').map(s => s.trim());
+          this.loadFile(files)
+            .then((res) => {
+              this.$log.info(`[XosOnboarder] All files loaded for app: ${c.name}`);
+              d.resolve();
+            })
+            .catch(e => {
+              this.$log.info(`[XosOnboarder] Error while onboarding apps: `, e);
+            });
+        });
+      }
+    );
+    return d.promise;
   }
 
   // NOTE files needs to be loaded in order, so async loop!
@@ -43,6 +64,7 @@
       d = this.$q.defer();
     }
     const file = files.shift();
+
     this.$log.info(`[XosOnboarder] Loading file: ${file}`);
     this.$ocLazyLoad.load(file)
       .then((res) => {