Plugin load by the UI
Changed the original plugin API to only return the plugins list
Changed the plugin Iframe to check if the plugin is online on every init
Change-Id: I7916668de17c49a2639047ef243939889a933067
Issue-ID: SDC-1400
Signed-off-by: Idan Amit <ia096e@intl.att.com>
diff --git a/catalog-ui/src/app/models/app-config.ts b/catalog-ui/src/app/models/app-config.ts
index a0ebb54..0e6284c 100644
--- a/catalog-ui/src/app/models/app-config.ts
+++ b/catalog-ui/src/app/models/app-config.ts
@@ -54,6 +54,7 @@
GET_activity_log:string;
GET_configuration_ui:string;
GET_plugins_configuration:string;
+ GET_plugin_online_state:string;
GET_service:string;
GET_ecomp_menu_items:string;
GET_service_validate_name:string;
diff --git a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
index 54a5c26..cce1c40 100644
--- a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
+++ b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
@@ -13,10 +13,10 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
<div class="plugin-frame">
<div class="w-sdc-main-container">
<iframe *ngIf="plugin.isOnline" class="plugin-iframe" [src]="pluginUrl | safeUrlSanitizer"></iframe>
- <plugin-not-connected [pluginName]="plugin.pluginId" *ngIf="!plugin.isOnline"></plugin-not-connected>
+ <plugin-not-connected [pluginName]="plugin.pluginId" *ngIf="!plugin.isOnline && isPluginCheckDone"></plugin-not-connected>
</div>
</div>
diff --git a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
index cd92cca..067bb96 100644
--- a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
+++ b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
@@ -2,6 +2,7 @@
import {URLSearchParams} from '@angular/http';
import {Plugin} from "app/models";
import {EventBusService} from "../../../services/event-bus.service";
+import {PluginsService} from "../../../services/plugins.service";
@Component({
selector: 'plugin-frame',
@@ -17,17 +18,26 @@
pluginUrl: string;
private urlSearchParams: URLSearchParams;
private isClosed: boolean;
+ private isPluginCheckDone: boolean;
constructor(private eventBusService: EventBusService,
+ private pluginsService: PluginsService,
@Inject('$scope') private $scope: ng.IScope,
@Inject('$state') private $state: ng.ui.IStateService) {
this.urlSearchParams = new URLSearchParams();
+ this.isPluginCheckDone = false;
}
ngOnInit(): void {
- if (this.plugin.isOnline) {
- this.initPlugin();
- }
+ this.pluginsService.isPluginOnline(this.plugin.pluginId).subscribe(isPluginOnline => {
+ this.plugin.isOnline = isPluginOnline;
+ this.isPluginCheckDone = true;
+
+ if (this.plugin.isOnline) {
+ this.initPlugin();
+ }
+ })
+
}
private initPlugin() {
diff --git a/catalog-ui/src/app/ng2/services/plugins.service.ts b/catalog-ui/src/app/ng2/services/plugins.service.ts
index 7a85b6e..2a3b68f 100644
--- a/catalog-ui/src/app/ng2/services/plugins.service.ts
+++ b/catalog-ui/src/app/ng2/services/plugins.service.ts
@@ -1,10 +1,19 @@
-import { Injectable } from '@angular/core';
-import {Plugin, PluginsConfiguration} from "app/models";
+import { Injectable, Inject } from '@angular/core';
+import {Observable} from 'rxjs/Observable';
+import {Http, Response} from '@angular/http';
+import {IApi, IAppConfigurtaion, Plugin, Plugins, PluginsConfiguration} from "app/models";
+import {ISdcConfig, SdcConfigToken} from "../config/sdc-config.config";
@Injectable()
export class PluginsService {
- constructor() {
+ private baseUrl;
+ public configuration: IAppConfigurtaion;
+ public api: IApi;
+
+ constructor(private http: Http, @Inject(SdcConfigToken) private sdcConfig:ISdcConfig) {
+ this.api = this.sdcConfig.api;
+ this.baseUrl = this.api.root + this.sdcConfig.api.component_api_root;
}
public getPluginByStateUrl = (stateUrl: string) => {
@@ -20,4 +29,12 @@
plugin.pluginDisplayOptions["context"].displayRoles.includes(userRole) &&
plugin.pluginDisplayOptions["context"].displayContext.indexOf(contextType) !== -1
};
+
+ public isPluginOnline = (pluginId: string): Observable<boolean> => {
+ let url:string = this.api.no_proxy_root + this.api.GET_plugin_online_state.replace(':pluginId', pluginId);
+ return this.http.get(url).map((res: Response) => {
+ return res.json()
+ })
+ .catch(error => Observable.of(false));
+ }
}