From f5854fd32c19c44d32a3e6739b30271d4dccd393 Mon Sep 17 00:00:00 2001 From: Avi Ziv Date: Mon, 31 Jul 2017 15:50:46 +0300 Subject: [SDC] code rebase for sdc resync to LF Change-Id: If6d87c9e324f508a8a6b80b10a03d1843901472e Signed-off-by: Michael Lando --- .../component-instance.service.ts | 4 +- .../component-services/component.service.ts | 8 +- .../services/component-services/service.service.ts | 4 +- .../src/app/ng2/services/data-type.service.ts | 2 + .../app/ng2/services/http.interceptor.service.ts | 162 --------------------- catalog-ui/src/app/ng2/services/http.service.ts | 29 ++-- catalog-ui/src/app/ng2/services/modal.service.ts | 27 +++- 7 files changed, 48 insertions(+), 188 deletions(-) delete mode 100644 catalog-ui/src/app/ng2/services/http.interceptor.service.ts (limited to 'catalog-ui/src/app/ng2/services') diff --git a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts index 0c499facff..27de59de82 100644 --- a/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts +++ b/catalog-ui/src/app/ng2/services/component-instance-services/component-instance.service.ts @@ -25,14 +25,14 @@ import {sdc2Config} from "../../../../main"; import {PropertyBEModel} from "app/models"; import {CommonUtils} from "app/utils"; import {Component, ComponentInstance, InputModel} from "app/models"; -import {InterceptorService} from "ng2-interceptors/index"; +import { HttpService } from '../http.service'; @Injectable() export class ComponentInstanceServiceNg2 { protected baseUrl; - constructor(private http: InterceptorService) { + constructor(private http: HttpService) { this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root; } diff --git a/catalog-ui/src/app/ng2/services/component-services/component.service.ts b/catalog-ui/src/app/ng2/services/component-services/component.service.ts index cd593d5e3e..c648711d5d 100644 --- a/catalog-ui/src/app/ng2/services/component-services/component.service.ts +++ b/catalog-ui/src/app/ng2/services/component-services/component.service.ts @@ -30,8 +30,8 @@ import {ComponentGenericResponse} from "../responses/component-generic-response" import {sdc2Config} from "../../../../main"; import {InstanceBePropertiesMap} from "../../../models/properties-inputs/property-fe-map"; import {API_QUERY_PARAMS} from "app/utils"; -import {ComponentType, ServerTypeUrl} from "../../../utils/constants"; -import {InterceptorService} from "ng2-interceptors/index"; +import { ComponentType, ServerTypeUrl } from "../../../utils/constants"; +import { HttpService } from '../http.service'; declare var angular:angular.IAngularStatic; @@ -40,7 +40,7 @@ export class ComponentServiceNg2 { protected baseUrl; - constructor(private http:InterceptorService) { + constructor(private http:HttpService) { this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root; } @@ -54,7 +54,7 @@ export class ComponentServiceNg2 { return this.http.get(this.baseUrl + this.getServerTypeUrl(componentType) + componentId + '/filteredDataByParams', {search: params}) .map((res:Response) => { return new ComponentGenericResponse().deserialize(res.json()); - }).do(error => console.log('server data:', error)); + }); } private getServerTypeUrl = (componentType:string):string => { diff --git a/catalog-ui/src/app/ng2/services/component-services/service.service.ts b/catalog-ui/src/app/ng2/services/component-services/service.service.ts index 1f5de18c04..ec912bbcf5 100644 --- a/catalog-ui/src/app/ng2/services/component-services/service.service.ts +++ b/catalog-ui/src/app/ng2/services/component-services/service.service.ts @@ -26,7 +26,7 @@ import { Response } from '@angular/http'; import {Service} from "app/models"; import { downgradeInjectable } from '@angular/upgrade/static'; import {sdc2Config} from "../../../../main"; -import {InterceptorService} from "ng2-interceptors/index"; +import { HttpService } from '../http.service'; @Injectable() @@ -34,7 +34,7 @@ export class ServiceServiceNg2 { protected baseUrl = ""; - constructor(private http: InterceptorService) { + constructor(private http: HttpService) { this.baseUrl = sdc2Config.api.root + sdc2Config.api.component_api_root; } diff --git a/catalog-ui/src/app/ng2/services/data-type.service.ts b/catalog-ui/src/app/ng2/services/data-type.service.ts index 48d32b7e69..30c02a4141 100644 --- a/catalog-ui/src/app/ng2/services/data-type.service.ts +++ b/catalog-ui/src/app/ng2/services/data-type.service.ts @@ -38,12 +38,14 @@ export class DataTypeService { } public getDataTypeByTypeName(typeName: string): DataTypeModel { + if (!this.dataTypes[typeName]) console.log("MISSING Datatype: " + typeName); return this.dataTypes[typeName]; } public getDerivedDataTypeProperties(dataTypeObj: DataTypeModel, propertiesArray: Array, parentName: string) { //push all child properties to array + if (!dataTypeObj) return; if (dataTypeObj.properties) { dataTypeObj.properties.forEach((derivedProperty) => { if(dataTypeObj.name !== PROPERTY_DATA.OPENECOMP_ROOT || derivedProperty.name !== PROPERTY_DATA.SUPPLEMENTAL_DATA){//The requirement is to not display the property supplemental_data diff --git a/catalog-ui/src/app/ng2/services/http.interceptor.service.ts b/catalog-ui/src/app/ng2/services/http.interceptor.service.ts deleted file mode 100644 index c90bfd2848..0000000000 --- a/catalog-ui/src/app/ng2/services/http.interceptor.service.ts +++ /dev/null @@ -1,162 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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 'rxjs/add/operator/map'; -import 'rxjs/add/operator/toPromise'; -import 'rxjs/Rx'; -import {sdc2Config} from './../../../main'; -import {Interceptor, InterceptedRequest, InterceptedResponse} from 'ng2-interceptors'; -import {SharingService} from "../../services/sharing-service"; -import {ReflectiveInjector} from '@angular/core'; -import {Cookie2Service} from "./cookie.service"; -import {UUID} from "angular2-uuid"; -import {Dictionary} from "../../utils/dictionary/dictionary"; -import {SEVERITY} from "../../utils/constants"; -import {IServerMessageModalModel} from "../../view-models/modals/message-modal/message-server-modal/server-message-modal-view-model"; - - -export class HttpInterceptor implements Interceptor { - - private cookieService:Cookie2Service; - private sharingService:SharingService; - - constructor() { - let injector = ReflectiveInjector.resolveAndCreate([Cookie2Service, SharingService]); - this.cookieService = injector.get(Cookie2Service); - this.sharingService = injector.get(SharingService); - } - - public interceptBefore(request:InterceptedRequest):InterceptedRequest { - /** - * For every request to the server, that the service id, or resource id is sent in the URL, need to pass UUID in the header. - * Check if the unique id exists in uuidMap, and if so get the UUID and add it to the header. - */ - request.options.headers.append(this.cookieService.getUserIdSuffix(), this.cookieService.getUserId()); - request.options.withCredentials = true; - var uuidValue = this.getUuidValue(request.url); - if (uuidValue != '') { - request.options.headers.set('X-ECOMP-ServiceID', uuidValue); - } - request.options.headers.set('X-ECOMP-RequestID', UUID.UUID()); - return request; - } - - public interceptAfter(response:InterceptedResponse):InterceptedResponse { - - if (response.response.status !== 200 && response.response.status !== 201) { - this.responseError(response.response.json()); - //console.log("Error from BE:",response); - } - return response; - } - - private getUuidValue = (url:string):string => { - let map:Dictionary = this.sharingService.getUuidMap(); - if (map && url.indexOf(sdc2Config.api.root) > 0) { - map.forEach((key:string) => { - if (url.indexOf(key) !== -1) { - return this.sharingService.getUuidValue(key); - } - }); - } - return ''; - }; - - public formatMessageArrays = (message:string, variables:Array)=> { - return message.replace(/\[%(\d+)\]/g, function (_, m) { - let tmp = []; - let list = variables[--m].split(";"); - list.forEach(function (item) { - tmp.push("
  • " + item + "
  • "); - }); - return "
      " + tmp.join("") + "
    "; - }); - }; - - public responseError = (rejection:any)=> { - - let text:string; - let variables; - let messageId:string = ""; - let isKnownException = false; - - if (rejection && rejection.serviceException) { - text = rejection.serviceException.text; - variables = rejection.serviceException.variables; - messageId = rejection.serviceException.messageId; - isKnownException = true; - } else if (rejection && rejection.requestError && rejection.requestError.serviceException) { - text = rejection.requestError.serviceException.text; - variables = rejection.requestError.serviceException.variables; - messageId = rejection.requestError.serviceException.messageId; - isKnownException = true; - } else if (rejection && rejection.requestError && rejection.requestError.policyException) { - text = rejection.requestError.policyException.text; - variables = rejection.requestError.policyException.variables; - messageId = rejection.requestError.policyException.messageId; - isKnownException = true; - } else if (rejection) { - text = 'Wrong error format from server'; - console.error(text); - isKnownException = false; - } - - let data:IServerMessageModalModel; - if (isKnownException) { - // Remove the "Error: " text at the begining - if (text.trim().indexOf("Error:") === 0) { - text = text.replace("Error:", "").trim(); - } - - //mshitrit DE199895 bug fix - let count:number = 0; - variables.forEach(function (item) { - variables[count] = item ? item.replace('<', '<').replace('>', '>') : ''; - count++; - }); - - // Format the message in case has array to
    • - text = this.formatMessageArrays(text, variables); - - // Format the message %1 %2 - text = text.format(variables); - - // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http). - data = { - title: 'Error', - message: text, - messageId: messageId, - status: rejection.status, - severity: SEVERITY.ERROR - }; - } else { - // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http). - data = { - title: 'Error', - message: rejection.status !== -1 ? rejection.statusText : "Error getting response from server", - messageId: messageId, - status: rejection.status, - severity: SEVERITY.ERROR - }; - } - - console.error('ERROR data',data); - } -} diff --git a/catalog-ui/src/app/ng2/services/http.service.ts b/catalog-ui/src/app/ng2/services/http.service.ts index 5cd5a10000..21fe09023a 100644 --- a/catalog-ui/src/app/ng2/services/http.service.ts +++ b/catalog-ui/src/app/ng2/services/http.service.ts @@ -24,14 +24,18 @@ import {Observable} from 'rxjs/Observable'; import {UUID} from 'angular2-uuid'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; +import 'rxjs/add/observable/throw'; import {Dictionary} from "../../utils/dictionary/dictionary"; import {SharingService, CookieService} from "app/services"; import {sdc2Config} from './../../../main'; +import { ModalService } from "app/ng2/services/modal.service"; +import { ServerErrorResponse } from "app/models"; +import { ErrorMessageComponent } from 'app/ng2/components/modal/error-message/error-message.component'; @Injectable() export class HttpService extends Http { - constructor(backend:XHRBackend, options:RequestOptions, private sharingService:SharingService, private cookieService: CookieService) { + constructor(backend: XHRBackend, options: RequestOptions, private sharingService: SharingService, private cookieService: CookieService, private modalService: ModalService) { super(backend, options); this._defaultOptions.withCredentials = true; this._defaultOptions.headers.append(cookieService.getUserIdSuffix(), cookieService.getUserId()); @@ -64,7 +68,7 @@ export class HttpService extends Http { } request.headers.set('X-ECOMP-RequestID', UUID.UUID()); } - return super.request(request, options).catch(this.catchAuthError(this)); + return super.request(request, options).catch((err) => this.catchError(err)); } private getUuidValue = (url: string) :string => { @@ -79,15 +83,14 @@ export class HttpService extends Http { return ''; } - private catchAuthError(self:HttpService) { - // we have to pass HttpService's own instance here as `self` - return (res:Response) => { - console.log(res); - if (res.status === 401 || res.status === 403) { - // if not authenticated - console.log(res); - } - return Observable.throw(res); - }; - } + private catchError = (response: Response): Observable => { + + let modalInstance = this.modalService.createErrorModal("OK"); + let errorResponse: ServerErrorResponse = new ServerErrorResponse(response); + this.modalService.addDynamicContentToModal(modalInstance, ErrorMessageComponent, errorResponse); + modalInstance.instance.open(); + + return Observable.throw(response); + }; + } diff --git a/catalog-ui/src/app/ng2/services/modal.service.ts b/catalog-ui/src/app/ng2/services/modal.service.ts index 32192f40c2..65ff870769 100644 --- a/catalog-ui/src/app/ng2/services/modal.service.ts +++ b/catalog-ui/src/app/ng2/services/modal.service.ts @@ -11,10 +11,10 @@ export class ModalService { constructor(private componentFactoryResolver: ComponentFactoryResolver, private applicationRef: ApplicationRef) { } - /* Shortcut method to open a simple modal with title, message, and close button that simply closes the modal. */ + /* Shortcut method to open an alert modal with title, message, and close button that simply closes the modal. */ public openAlertModal(title: string, message: string, closeButtonText?:string) { let closeButton: ButtonModel = new ButtonModel(closeButtonText || 'Close', 'grey', this.closeCurrentModal); - let modalModel: ModalModel = new ModalModel('sm', title, message, [closeButton]); + let modalModel: ModalModel = new ModalModel('sm', title, message, [closeButton], 'alert'); this.createCustomModal(modalModel).instance.open(); } @@ -22,19 +22,28 @@ export class ModalService { /** * Shortcut method to open a basic modal with title, message, and an action button with callback, as well as close button. * NOTE: To close the modal from within the callback, use modalService.closeCurrentModal() //if you run into zone issues with callbacks see:https://stackoverflow.com/questions/36566698/how-to-dynamically-create-bootstrap-modals-as-angular2-components + * NOTE: To add dynamic content to the modal, use modalService.addDynamicContentToModal(). First param is the return value of this function -- componentRef. * @param title Heading for modal * @param message Message for modal * @param actionButtonText Blue call to action button * @param actionButtonCallback function to invoke when button is clicked * @param cancelButtonText text for close/cancel button */ - public openActionModal = (title:string, message:string, actionButtonText:string, actionButtonCallback:Function, cancelButtonText:string) => { + public createActionModal = (title: string, message: string, actionButtonText: string, actionButtonCallback: Function, cancelButtonText: string): ComponentRef => { let actionButton: ButtonModel = new ButtonModel(actionButtonText, 'blue', actionButtonCallback); let cancelButton: ButtonModel = new ButtonModel(cancelButtonText, 'grey', this.closeCurrentModal); let modalModel: ModalModel = new ModalModel('sm', title, message, [actionButton, cancelButton]); - this.createCustomModal(modalModel).instance.open(); + let modalInstance: ComponentRef = this.createCustomModal(modalModel); + return modalInstance; + } + + + public createErrorModal = (closeButtonText?: string, errorMessage?: string):ComponentRef => { + let closeButton: ButtonModel = new ButtonModel(closeButtonText || 'Close', 'grey', this.closeCurrentModal); + let modalModel: ModalModel = new ModalModel('sm', 'Error', errorMessage, [closeButton], 'error'); + let modalInstance: ComponentRef = this.createCustomModal(modalModel); + return modalInstance; } - /* Use this method to create a modal with title, message, and completely custom buttons. Use response.instance.open() to open */ public createCustomModal = (customModalData: ModalModel): ComponentRef => { @@ -53,6 +62,14 @@ export class ModalService { } + public addDynamicContentToModal = (modalInstance: ComponentRef, dynamicComponentType: Type, dynamicComponentInput: any) => { + + let dynamicContent = this.createDynamicComponent(dynamicComponentType, modalInstance.instance.dynamicContentContainer); + dynamicContent.instance.input = dynamicComponentInput; + modalInstance.instance.dynamicContent = dynamicContent; + return modalInstance; + } + //Creates a component dynamically (aka during runtime). If a view container is not specified, it will append the new component to the app root. //To subscribe to an event from invoking component: componentRef.instance.clicked.subscribe((m) => console.log(m.name)); private createDynamicComponent(componentType: Type, viewContainerRef?:ViewContainerRef): ComponentRef { -- cgit 1.2.3-korg