Added copyright headers
[src/xds/xds-agent.git] / webapp / src / app / pages / build / build.component.ts
index 99b7e54..f937fc3 100644 (file)
@@ -1,3 +1,21 @@
+/**
+* @license
+* Copyright (C) 2017 "IoT.bzh"
+* Author Sebastien Douheret <sebastien@iot.bzh>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
 import { Component, ViewEncapsulation, AfterViewChecked, ElementRef, ViewChild, OnInit, Input } from '@angular/core';
 import { Observable } from 'rxjs/Observable';
 import { FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms';
@@ -31,6 +49,7 @@ export class BuildComponent implements OnInit, AfterViewChecked {
   public buildIsCollapsed = false;
   public cmdOutput: string;
   public cmdInfo: string;
+  public curPrj: IProject;
 
   private startTime: Map<string, number> = new Map<string, number>();
 
@@ -42,11 +61,13 @@ export class BuildComponent implements OnInit, AfterViewChecked {
     private modalService: NgbModal,
   ) {
     this.cmdOutput = '';
-    this.cmdInfo = '';      // TODO: to be remove (only for debug)
-
+    this.cmdInfo = '';       // TODO: to be remove (only for debug)
   }
 
   ngOnInit() {
+    // Retreive current project
+    this.prjSvr.curProject$.subscribe(p => this.curPrj = p);
+
     // Command output data tunneling
     this.xdsSvr.CmdOutput$.subscribe(data => {
       this.cmdOutput += data.stdout;
@@ -76,71 +97,67 @@ export class BuildComponent implements OnInit, AfterViewChecked {
     this.cmdOutput = '';
   }
 
-  settingsShow() {
-    const activeModal = this.modalService.open(BuildSettingsModalComponent, { size: 'lg', container: 'nb-layout' });
-    activeModal.componentInstance.modalHeader = 'Large Modal';
+  isSetupValid(): boolean {
+    return (typeof this.curPrj !== 'undefined');
   }
 
-  clean() {
-    const curPrj = this.prjSvr.getCurrent();
-    this._exec(
-      curPrj.uiSettings.cmdClean,
-      curPrj.uiSettings.subpath,
-      [],
-      curPrj.uiSettings.envVars.join(' '));
-  }
+  settingsShow() {
+    if (!this.isSetupValid()) {
+      return this.alertSvr.warning('Please select first a valid project.', true);
+    }
 
-  preBuild() {
-    const curPrj = this.prjSvr.getCurrent();
-    this._exec(
-      curPrj.uiSettings.cmdPrebuild,
-      curPrj.uiSettings.subpath,
-      [],
-      curPrj.uiSettings.envVars.join(' '));
+    const activeModal = this.modalService.open(BuildSettingsModalComponent, { size: 'lg', container: 'nb-layout' });
+    activeModal.componentInstance.modalHeader = 'Large Modal';
   }
 
-  build() {
-    const curPrj = this.prjSvr.getCurrent();
-    this._exec(
-      curPrj.uiSettings.cmdBuild,
-      curPrj.uiSettings.subpath,
-      [],
-      curPrj.uiSettings.envVars.join(' '),
-    );
-  }
+  execCmd(cmdName: string) {
+    if (!this.isSetupValid()) {
+      return this.alertSvr.warning('Please select first a valid project.', true);
+    }
 
-  populate() {
-    const curPrj = this.prjSvr.getCurrent();
-    this._exec(
-      curPrj.uiSettings.cmdPopulate,
-      curPrj.uiSettings.subpath,
-      [], // args
-      curPrj.uiSettings.envVars.join(' '),
-    );
-  }
+    if (!this.curPrj.uiSettings) {
+      return this.alertSvr.warning('Invalid setting structure', true);
+    }
 
-  execCmd() {
-    const curPrj = this.prjSvr.getCurrent();
-    this._exec(
-      curPrj.uiSettings.cmdArgs.join(' '),
-      curPrj.uiSettings.subpath,
-      [],
-      curPrj.uiSettings.envVars.join(' '),
-    );
-  }
+    let cmd = '';
+    switch (cmdName) {
+      case 'clean':
+        cmd = this.curPrj.uiSettings.cmdClean;
+        break;
+      case 'prebuild':
+        cmd = this.curPrj.uiSettings.cmdPrebuild;
+        break;
+      case 'build':
+        cmd = this.curPrj.uiSettings.cmdBuild;
+        break;
+      case 'populate':
+        cmd = this.curPrj.uiSettings.cmdPopulate;
+        break;
+      case 'exec':
+        if (this.curPrj.uiSettings.cmdArgs instanceof Array)  {
+          cmd = this.curPrj.uiSettings.cmdArgs.join(' ');
+        } else {
+          cmd = this.curPrj.uiSettings.cmdArgs;
+        }
+        break;
+      default:
+        return this.alertSvr.warning('Unknown command name ' + cmdName);
+    }
 
-  private _exec(cmd: string, dir: string, args: string[], env: string) {
-    this.curProject = this.prjSvr.getCurrent();
-    const prjID = this.curProject.id;
+    const prjID = this.curPrj.id;
+    const dir = this.curPrj.uiSettings.subpath;
+    const args: string[] = [];
+    const sdkid = this.sdkSvr.getCurrentId();
 
-    if (!this.curProject) {
-      return this.alertSvr.warning('No active project', true);
+    let env = '';
+    if (this.curPrj.uiSettings.envVars instanceof Array) {
+      env = this.curPrj.uiSettings.envVars.join(' ');
+    } else {
+      env = this.curPrj.uiSettings.envVars;
     }
 
     this.cmdOutput += this._outputHeader();
 
-    const sdkid = this.sdkSvr.getCurrentId();
-
     // Detect key=value in env string to build array of string
     const envArr = [];
     env.split(';').forEach(v => envArr.push(v.trim()));