X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Fservices%2FSharedService.ts;h=26e5e0791e5b86cd8290c7e49384284c1e141291;hb=063a3f1741d0cb20d5ee80590339fec54ab1acdd;hp=3a138e585a54563823330fee8bb660e3f60d05bd;hpb=3b4814aa2d3dec621dadb52f058ba95a3dc3a86a;p=osm%2FNG-UI.git diff --git a/src/services/SharedService.ts b/src/services/SharedService.ts index 3a138e5..26e5e07 100644 --- a/src/services/SharedService.ts +++ b/src/services/SharedService.ts @@ -22,7 +22,8 @@ import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; import { EventEmitter, Injectable, Output } from '@angular/core'; import { FormArray, FormGroup } from '@angular/forms'; import { Router } from '@angular/router'; -import { CONSTANTNUMBER, ERRORDATA, GETAPIURLHEADER, PACKAGEINFO, PAGERSMARTTABLE, SMARTTABLECLASS, TARSETTINGS } from 'CommonModel'; +import { TranslateService } from '@ngx-translate/core'; +import { CONSTANTNUMBER, ERRORDATA, FILESETTINGS, GETAPIURLHEADER, PACKAGEINFO, PAGERSMARTTABLE, SMARTTABLECLASS, TARSETTINGS } from 'CommonModel'; import { environment } from 'environment'; import * as HttpStatus from 'http-status-codes'; import * as untar from 'js-untar'; @@ -64,6 +65,12 @@ export class SharedService { // tslint:disable-next-line: max-line-length public REGX_PASSWORD_PATTERN: RegExp = new RegExp(/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/); + /** Variables to hold maxlength for the description @public */ + public MAX_LENGTH_DESCRIPTION: number = 500; + + /** Variables to hold maxlength for the name @public */ + public MAX_LENGTH_NAME: number = 50; + /** FormGroup instance added to the form @ html @public */ public formGroup: FormGroup; @@ -88,38 +95,48 @@ export class SharedService { /** Service holds the router information @private */ private router: Router; + /** Random color string generator length @private */ + private colorStringLength: number = 256; + /** Check for the root directory @private */ private directoryCount: number = 2; - constructor(restService: RestService, router: Router) { + /** Contains tranlsate instance @private */ + private translateService: TranslateService; + + constructor(restService: RestService, router: Router, translateService: TranslateService) { this.restService = restService; this.router = router; + this.translateService = translateService; } /** convert epoch time function @public */ public convertEpochTime(unixtimestamp: number): string { - const monthsArr: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - const date: Date = new Date(unixtimestamp * this.epochTime1000); - const year: number = date.getFullYear(); - const month: string = monthsArr[date.getMonth()]; - const day: number = date.getDate(); - const hours: number = date.getHours(); - const minutes: string = '0' + date.getMinutes(); - const seconds: string = '0' + date.getSeconds(); - return month + '-' + day + '-' + year + ' ' + hours + ':' + minutes.substr(this.epochTimeMinus2) + ':' - + seconds.substr(this.epochTimeMinus2); + if (!isNullOrUndefined(unixtimestamp)) { + const monthsArr: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + const date: Date = new Date(unixtimestamp * this.epochTime1000); + const year: number = date.getFullYear(); + const month: string = monthsArr[date.getMonth()]; + const day: number = date.getDate(); + const hours: number = date.getHours(); + const minutes: string = '0' + date.getMinutes(); + const seconds: string = '0' + date.getSeconds(); + return month + '-' + day + '-' + year + ' ' + hours + ':' + minutes.substr(this.epochTimeMinus2) + ':' + + seconds.substr(this.epochTimeMinus2); + } + return this.translateService.instant('NODATE'); } /** Download Files function @public */ - public downloadFiles(shortName: string, binaryData: Blob[], filetype: string): void { + public downloadFiles(name: string, binaryData: Blob[], filetype: string): void { const downloadLink: HTMLAnchorElement = document.createElement('a'); downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, { type: filetype })); - if (shortName !== undefined) { + if (name !== undefined) { if (window.navigator.msSaveOrOpenBlob) { - window.navigator.msSaveBlob(new Blob(binaryData, { type: filetype }), 'OSM_Export_' + shortName + '.tar.gz'); + window.navigator.msSaveBlob(new Blob(binaryData, { type: filetype }), 'OSM_Export_' + name + '.tar.gz'); } else { - downloadLink.setAttribute('download', 'OSM_Export_' + shortName + '.tar.gz'); + downloadLink.setAttribute('download', 'OSM_Export_' + name + '.tar.gz'); document.body.appendChild(downloadLink); downloadLink.click(); } @@ -177,14 +194,15 @@ export class SharedService { const getFoldersFiles: {}[] = extractedFiles; const folderNameStr: string = extractedFiles[0].name; getFoldersFiles.forEach((value: TARSETTINGS) => { + const fileValueObj: FILESETTINGS = this.createFileValueObject(value); const getRootFolder: string[] = value.name.split('/'); if (value.name.startsWith(folderNameStr) && (value.name.endsWith('.yaml') || value.name.endsWith('.yml')) && getRootFolder.length === this.directoryCount) { - tar.append(value.name, packageInfo.descriptor, { type: value.type }); + tar.append(value.name, packageInfo.descriptor, fileValueObj); } else { if (value.type !== 'L') { - tar.append(value.name, new Uint8Array(value.buffer), { type: value.type }); + tar.append(value.name, new Uint8Array(value.buffer), fileValueObj); } } }); @@ -207,6 +225,15 @@ export class SharedService { }); }); } + /** Method to return the file information @public */ + public createFileValueObject(value: TARSETTINGS): FILESETTINGS { + return { + type: value.type, + linkname: value.linkname, + owner: value.uname, + group: value.gname + }; + } /** Method to check given string is JSON or not @public */ public checkJson(jsonString: string): boolean { jsonString = jsonString.replace(/'/g, '"'); @@ -218,21 +245,21 @@ export class SharedService { return true; } /** Clean the form before submit @public */ - public cleanForm(formGroup: FormGroup): void { + public cleanForm(formGroup: FormGroup, formName?: String): void { Object.keys(formGroup.controls).forEach((key: string) => { - if ((!isNullOrUndefined((formGroup.get(key) as FormArray | FormGroup).controls)) && key !== 'vimconfig') { + if ((!isNullOrUndefined((formGroup.get(key) as FormArray | FormGroup).controls)) && key !== 'config') { // tslint:disable-next-line: no-shadowed-variable for (const { item, index } of (formGroup.get(key).value).map((item: {}, index: number) => ({ item, index }))) { const newFormGroup: FormGroup = (formGroup.get(key) as FormArray).controls[index] as FormGroup; this.cleanForm(newFormGroup); } - } else if (formGroup.get(key).value !== undefined && formGroup.get(key).value !== null && key !== 'vimconfig') { + } else if (formGroup.get(key).value !== undefined && formGroup.get(key).value !== null && key !== 'config') { if (!Array.isArray(formGroup.get(key).value)) { if (typeof formGroup.get(key).value === 'string') { formGroup.get(key).setValue(formGroup.get(key).value.trim()); } } - } else if (key === 'vimconfig') { + } else if (key === 'config' && formName === 'vim') { const newFormGroup: FormGroup = formGroup.get(key) as FormGroup; this.cleanForm(newFormGroup); } @@ -274,11 +301,32 @@ export class SharedService { this.restService.handleError(error, 'get'); }); } + /** Random RGB color code generator @public */ + public generateColor(): string { + const x: number = Math.floor(Math.random() * this.colorStringLength); + const y: number = Math.floor(Math.random() * this.colorStringLength); + const z: number = Math.floor(Math.random() * this.colorStringLength); + return 'rgb(' + x + ',' + y + ',' + z + ')'; + } + + /** Add custom name/tag to the dropdown @public */ + public addCustomTag(tag: string): string { + return tag; + } + + /** Fetch file extension @public */ + public fetchFileExtension(fileInfo: FileList): string { + return fileInfo[0].name.substring(fileInfo[0].name.lastIndexOf('.') + 1); + } + /** Method to validate file extension and size @private */ private vaildataFileInfo(fileInfo: File, fileType: string): boolean { const extension: string = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1); const packageSize: number = CONSTANTNUMBER.oneMB * environment.packageSize; - if (extension.toLowerCase() === fileType && fileInfo.size <= packageSize) { + if (fileType === 'yaml' && (extension.toLowerCase() === 'yaml' || extension.toLowerCase() === 'yml') + && fileInfo.size <= packageSize) { + return true; + } else if (extension.toLowerCase() === fileType && fileInfo.size <= packageSize) { return true; } return false;