aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java33
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java77
-rw-r--r--catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java40
-rw-r--r--catalog-ui/configurations/dev.js1
-rw-r--r--catalog-ui/configurations/prod.js1
-rw-r--r--catalog-ui/src/app/models/app-config.ts1
-rw-r--r--catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html4
-rw-r--r--catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts16
-rw-r--r--catalog-ui/src/app/ng2/services/plugins.service.ts23
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java8
10 files changed, 140 insertions, 64 deletions
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
index f4cbe9a70b..460d6deeee 100644
--- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
@@ -24,7 +24,6 @@ public class PluginStatusBL {
private final Gson gson;
private final CloseableHttpClient client;
private final PluginsConfiguration pluginsConfiguration;
- private Integer connectionTimeout;
private RequestConfig requestConfig;
public PluginStatusBL() {
@@ -41,7 +40,7 @@ public class PluginStatusBL {
}
- public String checkPluginsListAvailability() {
+ public String getPluginsList() {
String result = null;
if (pluginsConfiguration == null || pluginsConfiguration.getPluginsList() == null) {
@@ -50,20 +49,36 @@ public class PluginStatusBL {
} else {
log.debug("The value returned from getConfig is {}", pluginsConfiguration);
- connectionTimeout = pluginsConfiguration.getConnectionTimeout();
+
+ result = gson.toJson(pluginsConfiguration.getPluginsList());
+ }
+ return result;
+ }
+
+ public String getPluginAvailability(String pluginId) {
+ String result = null;
+
+ if (pluginsConfiguration == null || pluginsConfiguration.getPluginsList() == null) {
+ log.warn("Configuration of type {} was not found", PluginsConfiguration.class);
+ throw new InvalidArgumentException("the plugin configuration was not read successfully.");
+
+ } else {
+ log.debug("The value returned from getConfig is {}", pluginsConfiguration);
+ Integer connectionTimeout = pluginsConfiguration.getConnectionTimeout();
this.requestConfig = RequestConfig.custom()
.setSocketTimeout(connectionTimeout)
.setConnectTimeout(connectionTimeout)
.setConnectionRequestTimeout(connectionTimeout).build();
- List<Plugin> availablePluginsList = new ArrayList<>();
- pluginsConfiguration.getPluginsList().forEach(plugin -> {
- plugin.setOnline(checkPluginAvailability(plugin));
+ Plugin wantedPlugin = pluginsConfiguration.getPluginsList().stream()
+ .filter(plugin -> plugin.getPluginId().equals(pluginId))
+ .findAny()
+ .orElse(null);
- availablePluginsList.add(plugin);
- });
- result = gson.toJson(availablePluginsList);
+ if (wantedPlugin != null) {
+ result = gson.toJson(checkPluginAvailability(wantedPlugin));
+ }
}
return result;
}
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
index 271a3b2d22..073c79e683 100644
--- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
@@ -7,9 +7,9 @@
* 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.
@@ -30,6 +30,7 @@ import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
@@ -42,42 +43,74 @@ import javax.ws.rs.core.Response.Status;
@Path("/config")
public class ConfigServlet extends LoggingServlet {
- private static final Logger log = LoggerFactory.getLogger(ConfigServlet.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(ConfigServlet.class.getName());
- @GET
- @Path("/ui/plugins")
- @Produces(MediaType.APPLICATION_JSON)
- public Response getPluginsConfiguration(@Context final HttpServletRequest request) {
+ @GET
+ @Path("/ui/plugins")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPluginsConfiguration(@Context final HttpServletRequest request) {
- try {
- logFeRequest(request);
+ try {
+ logFeRequest(request);
- ServletContext context = request.getSession().getServletContext();
+ ServletContext context = request.getSession().getServletContext();
- PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
+ PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
- String result = pluginStatusBL.checkPluginsListAvailability();
+ String result = pluginStatusBL.getPluginsList();
- Response response = Response.status(Status.OK).entity(result).build();
+ Response response = Response.status(Status.OK).entity(result).build();
- logFeResponse(request, response);
+ logFeResponse(request, response);
- return response;
- } catch (Exception e) {
- FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
- log.error("Unexpected FE response logging error :", e);
- return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
- }
+ return response;
+ } catch (Exception e) {
+ FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
+ log.error("Unexpected FE response logging error :", e);
+ return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
+ }
- }
+ }
+
+ @GET
+ @Path("/ui/plugins/{pluginId}/online")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPluginOnlineState(@PathParam("pluginId") final String pluginId, @Context final HttpServletRequest request) {
+
+ try {
+ logFeRequest(request);
+
+ ServletContext context = request.getSession().getServletContext();
+
+ PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
+
+ String result = pluginStatusBL.getPluginAvailability(pluginId);
+
+ if (result == null) {
+ log.debug("Plugin with pluginId: {} was not found in the configuration", pluginId);
+ return Response.status(Status.NOT_FOUND).entity("Plugin with pluginId:\"" + pluginId + "\" was not found in the configuration").build();
+ }
+
+ Response response = Response.status(Status.OK).entity(result).build();
+
+ logFeResponse(request, response);
+
+ return response;
+ } catch (Exception e) {
+ FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
+ log.error("Unexpected FE response logging error :", e);
+ return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
+ }
+ }
- protected void inHttpRequest(HttpServletRequest httpRequest) {
+ protected void inHttpRequest(HttpServletRequest httpRequest) {
log.info("{} {} {}", httpRequest.getMethod(), httpRequest.getRequestURI(), httpRequest.getProtocol());
}
/**
* Extracted for purpose of clear method name, for logback %M parameter
+ *
* @param response http response
*/
protected void outHttpResponse(Response response) {
diff --git a/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java b/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
index e1d93b702d..731516e65b 100644
--- a/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
+++ b/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@@ -63,24 +64,33 @@ public class PluginStatusBLTest {
}
@Test
- public void TestOfflinePluginBeingReturnedWithIsOnlineValueFalse() throws ClientProtocolException, IOException {
+ public void TestPluginsConfigurationListReturnsWithWantedPlugins() {
testPluginsList.add(offlinePlugin);
+ testPluginsList.add(onlinePlugin);
when(pluginsConfiguration.getPluginsList()).thenReturn(testPluginsList);
-
- when(statusLine.getStatusCode()).thenReturn(404);
- when(httpResponse.getStatusLine()).thenReturn(statusLine);
- when(httpClient.execute(Mockito.any(HttpHead.class))).thenReturn(httpResponse);
- offlinePlugin.setOnline(false);
assertPluginList.add(offlinePlugin);
+ assertPluginList.add(onlinePlugin);
String result = gson.toJson(assertPluginList);
- String actualResult = pluginStatusBL.checkPluginsListAvailability();
+ String actualResult = pluginStatusBL.getPluginsList();
- System.out.println(result);
- System.out.println(actualResult);
+ assertEquals(actualResult, result);
+ }
+
+ @Test
+ public void TestGetPluginAvailabilityShouldReturnFalseWhenPluginIsOffline() throws ClientProtocolException, IOException {
+ testPluginsList.add(offlinePlugin);
+ when(pluginsConfiguration.getPluginsList()).thenReturn(testPluginsList);
- assertTrue(pluginStatusBL.checkPluginsListAvailability().equals(result));
+ when(statusLine.getStatusCode()).thenReturn(404);
+ when(httpResponse.getStatusLine()).thenReturn(statusLine);
+ when(httpClient.execute(Mockito.any(HttpHead.class))).thenReturn(httpResponse);
+
+ String result = gson.toJson(false);
+ String actualResult = pluginStatusBL.getPluginAvailability(offlinePlugin.getPluginId());
+
+ assertEquals(actualResult, result);
}
@Test
@@ -92,13 +102,9 @@ public class PluginStatusBLTest {
when(httpResponse.getStatusLine()).thenReturn(statusLine);
when(httpClient.execute(Mockito.any())).thenReturn(httpResponse);
- onlinePlugin.setOnline(true);
- assertPluginList.add(onlinePlugin);
+ String result = gson.toJson(true);
+ String actualResult = pluginStatusBL.getPluginAvailability(onlinePlugin.getPluginId());
- String result = gson.toJson(assertPluginList);
-
- assertTrue(pluginStatusBL.checkPluginsListAvailability().equals(result));
-
+ assertEquals(actualResult, result);
}
-
}
diff --git a/catalog-ui/configurations/dev.js b/catalog-ui/configurations/dev.js
index 6ca5445ba4..d1c9fe7c69 100644
--- a/catalog-ui/configurations/dev.js
+++ b/catalog-ui/configurations/dev.js
@@ -27,6 +27,7 @@ const SDC_CONFIG = {
"GET_resource_api_artifact": "/v1/catalog/:type/:entityId/artifacts/api/:id",
"GET_configuration_ui": "/v1/configuration/ui",
"GET_plugins_configuration": "/config/ui/plugins",
+ "GET_plugin_online_state": "/config/ui/plugins/:pluginId/online",
"GET_resource_validate_name": "/v1/catalog/resources/validate-name/:name",
"GET_activity_log": "/v1/catalog/audit-records/:type/:id",
"GET_service": "/v1/catalog/services/:id",
diff --git a/catalog-ui/configurations/prod.js b/catalog-ui/configurations/prod.js
index 08fd20f8e5..2cd6860595 100644
--- a/catalog-ui/configurations/prod.js
+++ b/catalog-ui/configurations/prod.js
@@ -27,6 +27,7 @@ const SDC_CONFIG = {
"GET_resource_api_artifact": "/v1/catalog/:type/:entityId/artifacts/api/:id",
"GET_configuration_ui": "/v1/configuration/ui",
"GET_plugins_configuration": "/config/ui/plugins",
+ "GET_plugin_online_state": "/config/ui/plugins/:pluginId/online",
"GET_resource_validate_name": "/v1/catalog/resources/validate-name/:name",
"GET_activity_log": "/v1/catalog/audit-records/:type/:id",
"GET_service": "/v1/catalog/services/:id",
diff --git a/catalog-ui/src/app/models/app-config.ts b/catalog-ui/src/app/models/app-config.ts
index a0ebb54638..0e6284c669 100644
--- a/catalog-ui/src/app/models/app-config.ts
+++ b/catalog-ui/src/app/models/app-config.ts
@@ -54,6 +54,7 @@ export interface IApi {
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 54a5c2648c..cce1c40765 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 cd92cca2f7..067bb96d8e 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 {Component, Inject, Input, Output, OnInit, EventEmitter} from "@angular/c
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 @@ export class PluginFrameComponent implements OnInit {
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 7a85b6e1b6..2a3b68fe25 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 @@ export class PluginsService {
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));
+ }
}
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
index 55c7a11cf4..b3b57e3182 100644
--- a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
+++ b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
@@ -80,14 +80,6 @@ public class PluginsConfiguration extends BasicConfiguration {
this.pluginDisplayOptions = pluginDisplayOptions;
}
- public boolean isOnline() {
- return isOnline;
- }
-
- public void setOnline(boolean online) {
- isOnline = online;
- }
-
}
public static class PluginDisplayOptions {