Merge "Dockerize the frontend of controlpanel"
authorPatrik Buhr <patrik.buhr@est.tech>
Tue, 12 Jan 2021 15:24:36 +0000 (15:24 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Tue, 12 Jan 2021 15:24:36 +0000 (15:24 +0000)
16 files changed:
docs/api.json
webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/PolicyController.java
webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/model/PolicyInfo.java
webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/model/PolicyInstance.java [new file with mode: 0644]
webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImpl.java
webapp-backend/src/test/java/org/oransc/portal/nonrtric/controlpanel/mock/PolicyControllerMockConfiguration.java
webapp-backend/src/test/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImplTest.java
webapp-frontend/src/app/controlpanel.component.html
webapp-frontend/src/app/controlpanel.module.ts
webapp-frontend/src/app/footer/footer.component.ts
webapp-frontend/src/app/interceptor.mock.ts
webapp-frontend/src/app/interfaces/controlpanel.types.ts
webapp-frontend/src/app/mock/ei-jobs.json
webapp-frontend/src/app/mock/rics.json [new file with mode: 0644]
webapp-frontend/src/app/services/controlpanel/controlpanel.service.spec.ts [deleted file]
webapp-frontend/src/app/services/controlpanel/controlpanel.service.ts [deleted file]

index 53e1a2f..3a47572 100644 (file)
         "tags": [
           "policy-controller"
         ],
-        "summary": "Returns a policy instance of a type",
+        "summary": "Returns a policy instance",
         "operationId": "getPolicyInstanceUsingGET",
         "produces": [
           "application/json"
             "description": "policy_instance_id",
             "required": true,
             "type": "string"
-          },
-          {
-            "name": "type",
-            "in": "query",
-            "description": "type",
-            "required": true,
-            "type": "string"
           }
         ],
         "responses": {
index 6cf79f1..ccc2ac7 100644 (file)
@@ -93,12 +93,10 @@ public class PolicyController {
         return this.policyAgentApi.getPolicyInstancesForType(policyTypeIdString);
     }
 
-    @ApiOperation(value = "Returns a policy instance of a type")
+    @ApiOperation(value = "Returns a policy instance")
     @GetMapping(POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME + "}")
-    public ResponseEntity<Object> getPolicyInstance(
-        @RequestParam(name = "type", required = true) String policyTypeIdString,
-        @PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId) {
-        logger.debug("getPolicyInstance {}:{}", policyTypeIdString, policyInstanceId);
+    public ResponseEntity<Object> getPolicyInstance(@PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId) {
+        logger.debug("getPolicyInstance {}", policyInstanceId);
         return this.policyAgentApi.getPolicyInstance(policyInstanceId);
     }
 
index 782919d..9ea4d93 100644 (file)
  * limitations under the License.
  * ========================LICENSE_END===================================
  */
+
 package org.oransc.portal.nonrtric.controlpanel.model;
 
+import com.google.gson.annotations.SerializedName;
+
+import lombok.Builder;
+
 import org.immutables.gson.Gson;
-import org.immutables.value.Value;
 
-@Value.Immutable
 @Gson.TypeAdapters
-public interface PolicyInfo {
+@Builder
+public class PolicyInfo {
+    @SerializedName(value = "id", alternate = "policy_id")
+    public String policyId;
+
+    @SerializedName(value = "type", alternate = "policytype_id")
+    public String policyTypeId;
+
+    @SerializedName(value = "ric", alternate = "ric_id")
+    public String ricId;
 
-    public String id();
+    @SerializedName(value = "json", alternate = "policy_data")
+    public Object policyData;
 
-    public String type();
+    @SerializedName(value = "service", alternate = "service_id")
+    public String serviceId;
 
-    public String ric();
+    @SerializedName("transient")
+    public boolean isTransient = false;
 
-    public Object json();
+    @SerializedName(value = "statusNotificationUri", alternate = "status_notification_uri")
+    public String statusNotificationUri = "";
 
-    public String service();
+    @SerializedName("lastModified")
+    public String lastModified = "";
 
-    public String lastModified();
+    public boolean validate() {
+        return policyId != null && policyTypeId != null && ricId != null && policyData != null && serviceId != null;
+    }
 
 }
diff --git a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/model/PolicyInstance.java b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/model/PolicyInstance.java
new file mode 100644 (file)
index 0000000..993538c
--- /dev/null
@@ -0,0 +1,62 @@
+/*-
+ * ========================LICENSE_START=================================
+ * O-RAN-SC
+ * %%
+ * Copyright (C) 2019 Nordix Foundation
+ * Modifications Copyright (C) 2020 Nordix Foundation
+ * %%
+ * 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.
+ * ========================LICENSE_END===================================
+ */
+
+package org.oransc.portal.nonrtric.controlpanel.model;
+
+import com.google.gson.annotations.SerializedName;
+
+import lombok.Builder;
+
+import org.immutables.gson.Gson;
+
+@Gson.TypeAdapters
+@Builder
+public class PolicyInstance {
+
+    @SerializedName(value = "policy_id")
+    public String policyId;
+
+    @SerializedName(value = "policytype_id")
+    public String policyTypeId;
+
+    @SerializedName(value = "ric_id")
+    public String ricId;
+
+    @SerializedName(value = "policy_data")
+    public Object policyData;
+
+    @SerializedName(value = "service_id")
+    public String serviceId;
+
+    @SerializedName(value = "transient")
+    public boolean isTransient = false;
+
+    @SerializedName(value = "status_notification_uri")
+    public String statusNotificationUri = "";
+
+    @SerializedName(value = "lastModified")
+    public String lastModified = "";
+
+    public boolean validate() {
+        return policyId != null && policyTypeId != null && ricId != null && policyData != null && serviceId != null;
+    }
+
+}
index f8b7c3e..9e30c51 100644 (file)
@@ -35,8 +35,8 @@ import java.util.List;
 
 import org.immutables.gson.Gson;
 import org.immutables.value.Value;
-import org.oransc.portal.nonrtric.controlpanel.model.ImmutablePolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInfo;
+import org.oransc.portal.nonrtric.controlpanel.model.PolicyInstance;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyType;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyTypes;
 import org.oransc.portal.nonrtric.controlpanel.util.AsyncRestClient;
@@ -127,31 +127,55 @@ public class PolicyAgentApiImpl implements PolicyAgentApi {
                 .get("policy_ids") //
                 .getAsJsonArray(); //
 
-            Type listType = new TypeToken<List<ImmutablePolicyInfo>>() {}.getType();
-            List<PolicyInfo> rspParsed = gson.fromJson(policyInstances, listType);
+            List<Object> res = new ArrayList<>();
+            for (JsonElement p : policyInstances) {
+                ResponseEntity<Object> policyInstance = getIndividualPolicyInstance(p.getAsString());
+                res.add(policyInstance.getBody());
+            }
 
-            return new ResponseEntity<>(gson.toJson(rspParsed), rsp.getStatusCode());
+            return new ResponseEntity<>(gson.toJson(res), rsp.getStatusCode());
         } catch (Exception e) {
             return ErrorResponseHandler.handleException(e);
         }
     }
 
-    @Override
-    public ResponseEntity<Object> getPolicyInstance(String id) {
+    public ResponseEntity<Object> getIndividualPolicyInstance(String id) {
         try {
             String url = "/v2/policies/" + id;
             ResponseEntity<String> rsp = webClient.getForEntity(url).block();
             JsonObject obj = JsonParser.parseString(rsp.getBody()).getAsJsonObject();
-            String str = obj.toString();
-            return new ResponseEntity<>(str, rsp.getStatusCode());
+
+            // lastModified timestamp is fetched from PolicyStatus instead
+            ResponseEntity<String> status = getPolicyStatus(id);
+            String lastModified = JsonParser.parseString(status.getBody()).getAsJsonObject() //
+                .get("last_modified") //
+                .getAsString(); //
+            obj.addProperty("lastModified", lastModified);
+
+            PolicyInfo i = gson.fromJson(obj, PolicyInfo.class);
+            return new ResponseEntity<>(i, rsp.getStatusCode());
         } catch (Exception e) {
             ResponseEntity<String> rsp = ErrorResponseHandler.handleException(e);
             return new ResponseEntity<>(rsp.getBody(), rsp.getStatusCode());
         }
     }
 
-    private String getTimeStampUTC() {
-        return java.time.Instant.now().toString();
+    public ResponseEntity<String> getPolicyStatus(String id) {
+        try {
+            String url = "/v2/policies/" + id + "/status";
+            ResponseEntity<String> rsp = webClient.getForEntity(url).block();
+            return new ResponseEntity<>(rsp.getBody(), rsp.getStatusCode());
+        } catch (Exception e) {
+            ResponseEntity<String> rsp = ErrorResponseHandler.handleException(e);
+            return new ResponseEntity<>(rsp.getBody(), rsp.getStatusCode());
+        }
+    }
+
+    @Override
+    public ResponseEntity<Object> getPolicyInstance(String id) {
+        ResponseEntity<Object> rsp = getIndividualPolicyInstance(id);
+        PolicyInfo i = (PolicyInfo) rsp.getBody();
+        return new ResponseEntity<>(i.policyData, rsp.getStatusCode());
     }
 
     @Override
@@ -159,17 +183,19 @@ public class PolicyAgentApiImpl implements PolicyAgentApi {
         String ric) {
         String url = "/v2/policies/";
 
-        PolicyInfo i = ImmutablePolicyInfo.builder() //
-            .id(policyInstanceId) //
-            .type(policyTypeIdString) //
-            .ric(ric) //
-            .json(json) //
-            .service("controlpanel") //
-            .lastModified(getTimeStampUTC()) //
+        JsonElement data = JsonParser.parseString(json.toString()).getAsJsonObject();
+
+        PolicyInstance i = PolicyInstance.builder() //
+            .policyId(policyInstanceId) //
+            .policyTypeId(policyTypeIdString) //
+            .ricId(ric) //
+            .policyData(data) //
+            .serviceId("controlpanel") //
             .build(); //
 
         try {
-            String jsonStr = gson.toJson(i, PolicyInfo.class);
+            String jsonStr = gson.toJson(i, PolicyInstance.class);
+            logger.debug("PolicyInstance: " + jsonStr);
             webClient.putForEntity(url, jsonStr).block();
             return new ResponseEntity<>(HttpStatus.OK);
         } catch (Exception e) {
@@ -191,11 +217,11 @@ public class PolicyAgentApiImpl implements PolicyAgentApi {
     @Value.Immutable
     @Gson.TypeAdapters
     interface RicInfo {
-        public String ricName();
+        public String ric_id();
 
-        public Collection<String> nodeNames();
+        public Collection<String> managed_element_ids();
 
-        public Collection<String> policyTypes();
+        public Collection<String> policytype_ids();
     }
 
     @Override
@@ -215,7 +241,7 @@ public class PolicyAgentApiImpl implements PolicyAgentApi {
             List<RicInfo> rspParsed = gson.fromJson(rics, listType);
             Collection<String> result = new ArrayList<>(rspParsed.size());
             for (RicInfo ric : rspParsed) {
-                result.add(ric.ricName());
+                result.add(ric.ric_id());
             }
             String json = gson.toJson(result);
             return new ResponseEntity<>(json, HttpStatus.OK);
index e593736..d6476db 100644 (file)
@@ -35,7 +35,6 @@ import java.util.Optional;
 import java.util.Vector;
 import java.util.stream.Collectors;
 
-import org.oransc.portal.nonrtric.controlpanel.model.ImmutablePolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInstances;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyType;
@@ -154,8 +153,14 @@ public class PolicyControllerMockConfiguration {
         }
 
         void putInstance(String typeId, String instanceId, Object instanceData, String ric) {
-            PolicyInfo i = ImmutablePolicyInfo.builder().json(instanceData).lastModified(getTimeStampUTC())
-                .id(instanceId).ric(ric).service("service").type(typeId).build();
+            PolicyInfo i = PolicyInfo.builder() //
+                .policyData(instanceData) //
+                .lastModified(getTimeStampUTC()) //
+                .policyId(instanceId) //
+                .ricId(ric) //
+                .serviceId("service") //
+                .policyTypeId(typeId) //
+                .build(); //
             instances.put(instanceId, i);
         }
 
@@ -168,7 +173,7 @@ public class PolicyControllerMockConfiguration {
             if (i == null) {
                 throw new RestClientException("Type not found: " + id);
             }
-            return i.json();
+            return i.policyData;
         }
 
         public Collection<PolicyType> getTypes() {
@@ -179,7 +184,7 @@ public class PolicyControllerMockConfiguration {
             ArrayList<PolicyInfo> result = new ArrayList<>();
             for (PolicyInfo i : instances.values()) {
                 if (typeId.isPresent()) {
-                    if (i.type().equals(typeId.get())) {
+                    if (i.policyTypeId.equals(typeId.get())) {
                         result.add(i);
                     }
 
index 42d2669..deedd8e 100644 (file)
@@ -28,17 +28,17 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
 
-import java.lang.reflect.Type;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
-import java.util.List;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.oransc.portal.nonrtric.controlpanel.model.ImmutablePolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInfo;
+import org.oransc.portal.nonrtric.controlpanel.model.PolicyInstance;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInstances;
 import org.oransc.portal.nonrtric.controlpanel.util.AsyncRestClient;
 import org.springframework.http.HttpStatus;
@@ -53,13 +53,20 @@ class PolicyAgentApiImplTest {
     private static final String POLICY_TYPE_1_INVALID = "\"title\":\"type1\"}";
     private static final String POLICY_TYPE_2_VALID = "{\"title\":\"type2\"}";
     private static final String POLICY_1_ID = "policy1";
-    private static final String POLICY_1_VALID = "{\"policyId\":\"policy1\"}";
-    private static final String POLICY_1_INVALID = "\"policyId\":\"policy1\"}";
+    private static final String POLICY_DATA =
+        "{\"qosObjectives\":{\"priorityLevel\":22.0},\"scope\":{\"qosId\":\"22\",\"ueId\":\"22\"}}";
+    private static final String POLICY_1_VALID =
+        "{\"policy_id\":\"policy1\",\"policytype_id\":\"type1\",\"ric_id\":\"ric1\",\"policy_data\":" + POLICY_DATA
+            + ",\"service_id\":\"controlpanel\"}";
+    private static final String POLICY_1_INVALID = "\"policy_id\":\"policy1\"}";
     private static final String RIC_1_ID = "ric1";
-    private static final String RIC_1_INFO_VALID = "{\"ricName\":\"ric1\",\"policyTypes\":[\"type1\"]}";
-    private static final String RIC_1_INFO_INVALID = "{\"ricName\":\"ric1\",\"policyTypes\":\"type1\"]}";
+    private static final String RIC_1_INFO_VALID = "{\"ric_id\":\"ric1\",\"policytype_ids\":[\"type1\"]}";
+    private static final String RIC_1_INFO_INVALID = "{\"ric_id\":\"ric1\",\"policytype_ids\":\"type1\"]}";
     private static final String CLIENT_ERROR_MESSAGE = "XXXXXXX";
-
+    private static final String SERVICE_ID = "controlpanel";
+    private static final String TIMESTAMP = "2021-01-12T09:59:33.392470Z";
+    private static final String STATUS =
+        "{\"last_modified\": \"" + TIMESTAMP + "\",\"status\":{\"enforceStatus\": \"\",\"enforceReason\": \"\"}}";
     private static com.google.gson.Gson gson = new GsonBuilder() //
         .serializeNulls() //
         .create(); //
@@ -129,10 +136,13 @@ class PolicyAgentApiImplTest {
 
     @Test
     void testGetPolicyInstancesForTypeSuccessValidJson() {
-        String policyInstances = "{\"policy_ids\":[{\"id\":\"policy1\"}]}";
-        String policyInstancesJson = parsePolicyInstancesJson("[{\"id\":\"policy1\"}]");
+        String policyInstances = "{\"policy_ids\":[\"policy1\"]}";
+        String policyInstancesJson = parsePolicyInstancesJson("[\"policy1\"]");
 
         whenGetReturnOK(urlPolicyInstances(POLICY_TYPE_1_ID), HttpStatus.OK, policyInstances);
+        whenGetReturnOK(urlPolicyInstance(POLICY_1_ID), HttpStatus.OK, POLICY_1_VALID);
+        whenGetReturnOK(urlPolicyStatus(POLICY_1_ID), HttpStatus.OK, STATUS);
+
         ResponseEntity<String> returnedResp = apiUnderTest.getPolicyInstancesForType(POLICY_TYPE_1_ID);
         assertEquals(returnedResp.getBody(), policyInstancesJson);
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
@@ -154,15 +164,19 @@ class PolicyAgentApiImplTest {
         return "/v2/policies/" + id;
     }
 
+    private String urlPolicyStatus(String id) {
+        return "/v2/policies/" + id + "/status";
+    }
+
     @Test
     void testGetPolicyInstance() {
         whenGetReturnOK(urlPolicyInstance(POLICY_1_ID), HttpStatus.OK, POLICY_1_VALID);
+        whenGetReturnOK(urlPolicyStatus(POLICY_1_ID), HttpStatus.OK, STATUS);
 
         ResponseEntity<Object> returnedResp = apiUnderTest.getPolicyInstance(POLICY_1_ID);
 
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
-        assertEquals(POLICY_1_VALID, returnedResp.getBody());
-
+        assertEquals(POLICY_DATA, gson.toJson(returnedResp.getBody()));
     }
 
     private String urlPutPolicy() {
@@ -183,21 +197,20 @@ class PolicyAgentApiImplTest {
     @Test
     void testPutPolicyFailure() {
         String url = urlPutPolicy();
-
-        PolicyInfo i = ImmutablePolicyInfo.builder() //
-            .id(POLICY_1_ID) //
-            .type(POLICY_TYPE_1_ID) //
-            .ric(RIC_1_ID) //
-            .json(POLICY_1_VALID) //
-            .service("") //
-            .lastModified("") //
+        JsonElement data = JsonParser.parseString(POLICY_DATA).getAsJsonObject();
+        PolicyInstance i = PolicyInstance.builder() //
+            .policyId(POLICY_1_ID) //
+            .policyTypeId(POLICY_TYPE_1_ID) //
+            .ricId(RIC_1_ID) //
+            .policyData(data) //
+            .serviceId(SERVICE_ID) //
             .build(); //
 
-        String jsonStr = gson.toJson(i, PolicyInfo.class);
+        String jsonStr = gson.toJson(i);
         whenPutReturnFailure(url, jsonStr, HttpStatus.NOT_FOUND, CLIENT_ERROR_MESSAGE);
 
         ResponseEntity<String> returnedResp =
-            apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_1_VALID, RIC_1_ID);
+            apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_DATA, RIC_1_ID);
 
         assertTrue(returnedResp.getBody().contains(CLIENT_ERROR_MESSAGE));
         assertEquals(HttpStatus.NOT_FOUND, returnedResp.getStatusCode());
@@ -206,22 +219,19 @@ class PolicyAgentApiImplTest {
     @Test
     void testPutPolicySuccess() {
         String url = urlPutPolicy();
-        PolicyInfo i = ImmutablePolicyInfo.builder() //
-            .id(POLICY_1_ID) //
-            .type(POLICY_TYPE_1_ID) //
-            .ric(RIC_1_ID) //
-            .json(POLICY_1_VALID) //
-            .service("") //
-            .lastModified("") //
+        JsonElement data = JsonParser.parseString(POLICY_DATA).getAsJsonObject();
+        PolicyInstance i = PolicyInstance.builder() //
+            .policyId(POLICY_1_ID) //
+            .policyTypeId(POLICY_TYPE_1_ID) //
+            .ricId(RIC_1_ID) //
+            .policyData(data) //
+            .serviceId(SERVICE_ID) //
             .build(); //
-
-        String jsonStr = gson.toJson(i, PolicyInfo.class);
-
+        String jsonStr = gson.toJson(i);
         whenPutReturnOK(url, jsonStr, HttpStatus.OK, POLICY_1_VALID);
 
         ResponseEntity<String> returnedResp =
-            apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_1_VALID, RIC_1_ID);
-
+            apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_DATA, RIC_1_ID);
         assertNull(returnedResp.getBody());
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
     }
@@ -288,12 +298,20 @@ class PolicyAgentApiImplTest {
     }
 
     private String parsePolicyInstancesJson(String inputString) {
-        Type listType = new TypeToken<List<ImmutablePolicyInfo>>() {}.getType();
-        List<PolicyInfo> rspParsed = gson.fromJson(inputString, listType);
-        PolicyInstances policyInstances = new PolicyInstances();
-        for (PolicyInfo policy : rspParsed) {
-            policyInstances.add(policy);
+        JsonArray arr = JsonParser.parseString(inputString).getAsJsonArray();
+        PolicyInstances res = new PolicyInstances();
+        JsonElement data = JsonParser.parseString(POLICY_DATA).getAsJsonObject();
+        for (JsonElement id : arr) {
+            PolicyInfo i = PolicyInfo.builder() //
+                .policyId(id.getAsString()) //
+                .policyTypeId(POLICY_TYPE_1_ID) //
+                .ricId(RIC_1_ID) //
+                .policyData(data) //
+                .serviceId(SERVICE_ID) //
+                .lastModified(TIMESTAMP) //
+                .build(); //
+            res.add(i);
         }
-        return gson.toJson(policyInstances);
+        return gson.toJson(res);
     }
 }
index a6ae9e0..649a5d5 100644 (file)
@@ -51,7 +51,7 @@
       </div>
     </section>
     <section #sidenav class="menu-body">
-      <rd-sidenav-list></rd-sidenav-list>
+      <rd-sidenav-list (sidenavClose)="drawer.toggle()">></rd-sidenav-list>
     </section>
     <section class="menu-footer">
 
index 8e958a9..ea14a5d 100644 (file)
@@ -39,7 +39,6 @@ import { MDBBootstrapModule } from 'angular-bootstrap-md';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { ToastrModule } from 'ngx-toastr';
 import { ConfirmDialogComponent } from './ui/confirm-dialog/confirm-dialog.component';
-import { ControlpanelService } from './services/controlpanel/controlpanel.service';
 import { ErrorDialogComponent } from './ui/error-dialog/error-dialog.component';
 import { ErrorDialogService } from './services/ui/error-dialog.service';
 import { FlexLayoutModule } from '@angular/flex-layout';
@@ -68,24 +67,26 @@ export const isMock = environment.mock;
 @NgModule({
   declarations: [
     ConfirmDialogComponent,
+    ControlpanelComponent,
     EICardComponent,
     EICoordinatorComponent,
     ErrorDialogComponent,
     FooterComponent,
     MainComponent,
+    NodeModulesComponent,
     NoTypePolicyInstanceDialogComponent,
     PolicyCardComponent,
     PolicyControlComponent,
     PolicyInstanceComponent,
     PolicyInstanceDialogComponent,
-    ControlpanelComponent,
     SidenavListComponent,
-    NodeModulesComponent
   ],
   imports: [
     BrowserModule,
     BrowserAnimationsModule,
     ChartsModule,
+    ControlpanelRoutingModule,
+    CookieModule.forRoot(),
     FlexLayoutModule,
     FormsModule,
     HttpClientModule,
@@ -116,10 +117,8 @@ export const isMock = environment.mock;
     MatToolbarModule,
     MatTooltipModule,
     MDBBootstrapModule.forRoot(),
-    ControlpanelRoutingModule,
     ReactiveFormsModule,
     ToastrModule.forRoot(),
-    CookieModule.forRoot()
   ],
   exports: [
     ErrorDialogComponent,
@@ -146,7 +145,6 @@ export const isMock = environment.mock;
     PolicyInstanceDialogComponent
   ],
   providers: [
-    ControlpanelService,
     ErrorDialogService,
     UiService,
     {
index 47e768e..dc4c3c3 100644 (file)
@@ -20,8 +20,6 @@
  * ========================LICENSE_END===================================
  */
 import { Component, OnInit } from '@angular/core';
-import { ControlpanelSuccessTransport } from '../interfaces/controlpanel.types';
-import { ControlpanelService } from '../services/controlpanel/controlpanel.service';
 import { UiService } from '../services/ui/ui.service';
 
 @Component({
@@ -38,12 +36,10 @@ export class FooterComponent implements OnInit {
   controlpanelVersion: string;
 
   // Inject the service
-  constructor(private controlpanelService: ControlpanelService,
-    private ui: UiService) { }
+  constructor(private ui: UiService) { }
 
   ngOnInit() {
     this.controlpanelVersion = '0.0';
-    // this.controlpanelService.getVersion().subscribe((res: ControlpanelSuccessTransport) => this.controlpanelVersion = res.data);
     this.ui.darkModeState.subscribe((isDark) => {
       this.darkMode = isDark;
     });
index bffeabe..bfba913 100644 (file)
@@ -6,6 +6,7 @@ import * as policyinstances from './mock/policy-instance.json';
 import * as policyinstanceedit from './mock/policy-instance-edit.json';
 import * as eijobs from './mock/ei-jobs.json';
 import * as eiproducers from './mock/ei-producers.json';
+import * as rics from './mock/rics.json';
 
 const urls = [
     {
@@ -31,6 +32,10 @@ const urls = [
     {
         url: 'api/enrichment/eiproducers',
         json: eiproducers
+    },
+    {
+        url: 'api/policy/rics?policyType=1',
+        json: rics
     }
 ];
 
@@ -39,6 +44,10 @@ export class HttpMockRequestInterceptor implements HttpInterceptor {
     constructor(private injector: Injector) {}
 
     intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+        if (request.method === "PUT" && request.url.includes("policies")) {
+            console.log('Answered PUT policy ' + request.url);
+            return of(new HttpResponse({ status: 200 }));
+        }
         for (const element of urls) {
             if (request.url === element.url) {
                 console.log('Loaded from stub json : ' + request.url);
index 44e1d9f..cad0630 100644 (file)
@@ -25,34 +25,3 @@ export interface ControlpanelSuccessTransport {
   status: number;
   data: string;
 }
-
-export interface EcompRoleFunction {
-  name: string;
-  code: string;
-  type: string;
-  action: string;
-}
-
-export interface EcompRole {
-  id: number;
-  name: string;
-  [position: number]: EcompRoleFunction;
-}
-
-export interface EcompUser {
-  orgId?: number;
-  managerId?: string;
-  firstName?: string;
-  middleInitial?: string;
-  lastName?: string;
-  phone?: string;
-  email?: string;
-  hrid?: string;
-  orgUserId?: string;
-  orgCode?: string;
-  orgManagerUserId?: string;
-  jobTitle?: string;
-  loginId: string;
-  active: boolean;
-  [position: number]: EcompRole;
-}
index ffe37d7..6d96872 100644 (file)
@@ -2,6 +2,7 @@
     {
       "ei_job_identity": "job1",
       "ei_type_identity": "type1",
+      "owner": "owner1",
       "ei_job_data": {
         "jobparam2": "value2_job1",
         "jobparam3": "value3_job1",
diff --git a/webapp-frontend/src/app/mock/rics.json b/webapp-frontend/src/app/mock/rics.json
new file mode 100644 (file)
index 0000000..0fa4446
--- /dev/null
@@ -0,0 +1,4 @@
+[
+    "ric1",
+    "ric2"
+]
\ No newline at end of file
diff --git a/webapp-frontend/src/app/services/controlpanel/controlpanel.service.spec.ts b/webapp-frontend/src/app/services/controlpanel/controlpanel.service.spec.ts
deleted file mode 100644 (file)
index d94a779..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * O-RAN-SC
- * %%
- * Copyright (C) 2019 AT&T Intellectual Property
- * Modifications Copyright (C) 2020 Nordix Foundation
- * %%
- * 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.
- * ========================LICENSE_END===================================
- */
-import { TestBed } from '@angular/core/testing';
-
-import { ControlpanelService } from './controlpanel.service';
-
-describe('ControlpanelService', () => {
-  beforeEach(() => TestBed.configureTestingModule({}));
-
-  it('should be created', () => {
-    const service: ControlpanelService = TestBed.get(ControlpanelService);
-    expect(service).toBeTruthy();
-  });
-});
diff --git a/webapp-frontend/src/app/services/controlpanel/controlpanel.service.ts b/webapp-frontend/src/app/services/controlpanel/controlpanel.service.ts
deleted file mode 100644 (file)
index 5aed53b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * O-RAN-SC
- * %%
- * Copyright (C) 2019 AT&T Intellectual Property
- * Modifications Copyright (C) 2020 Nordix Foundation
- * %%
- * 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.
- * ========================LICENSE_END===================================
- */
-import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
-import { Observable } from 'rxjs';
-import { ControlpanelSuccessTransport, EcompUser } from '../../interfaces/controlpanel.types';
-
-@Injectable({
-  providedIn: 'root'
-})
-
-/**
- * Services to query the Control Panel's admin endpoints.
- */
-export class ControlpanelService {
-
-  private basePath = 'api/admin/';
-
-  constructor(private httpClient: HttpClient) {
-    // injects to variable httpClient
-  }
-
- /**
-   * Checks app health
-   * @returns Observable that should yield a ControlpanelSuccessTransport
-   */
-  getHealth(): Observable<ControlpanelSuccessTransport> {
-    return this.httpClient.get<ControlpanelSuccessTransport>(this.basePath + 'health');
-  }
-
-  /**
-   * Gets Control Panel version details
-   * @returns Observable that should yield a ControlpanelSuccessTransport object
-   */
-  getVersion(): Observable<ControlpanelSuccessTransport> {
-    return this.httpClient.get<ControlpanelSuccessTransport>(this.basePath + 'version');
-  }
-
-  /**
-   * Gets Control Panel users
-   * @returns Observable that should yield a EcompUser array
-   */
-  getUsers(): Observable<EcompUser[]> {
-    return this.httpClient.get<EcompUser[]>(this.basePath + 'user');
-  }
-
-}