diff --git a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html index 6db0e2c65a1add3dbf6def7311057d8f6811ae90..94f50b3a8ebdf386f0286b64663c5dc996cf6689 100644 --- a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html +++ b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html @@ -56,12 +56,12 @@ </td> </tr> <ng-template ngFor let-version [ngForOf]="app.versions.sort(appVersionCompare)"> - <tr *ngIf="versionRowVisible[i]" class="table-row" [routerLink]="['/admin/apps/edit/version', version?.appVersionId]"> - <td></td> - <td></td> - <td></td> - <td>{{version.version}}</td> - <td>{{"ENUM.STATE." + getStateAsString(version.state).toUpperCase() | translate }}</td> + <tr *ngIf="versionRowVisible[i]" class="table-row" > + <td [routerLink]="['/admin/apps/edit/version', version?.appVersionId]"></td> + <td [routerLink]="['/admin/apps/edit/version', version?.appVersionId]"></td> + <td [routerLink]="['/admin/apps/edit/version', version?.appVersionId]"></td> + <td [routerLink]="['/admin/apps/edit/version', version?.appVersionId]">{{version.version}}</td> + <td [routerLink]="['/admin/apps/edit/version', version?.appVersionId]">{{"ENUM.STATE." + getStateAsString(version.state).toUpperCase() | translate }}</td> <td class="text-right"> <a [routerLink]="['/admin/apps/view', version?.appVersionId]"> <em class="far fa-eye icon-black icon-bigger"></em> @@ -74,6 +74,9 @@ <li *roles="['ROLE_SYSTEM_ADMIN']"> <a (click)="showModal($event, app, version)" *ngIf="getStateAsString(version?.state) !== 'DELETED'">{{ 'APPS_MANAGEMENT.CHANGE_STATE_BUTTON' | translate }}</a> </li> + <li> + <a (click)="getApplicationInfoJSON(version?.appVersionId)">{{'APPS_MANAGEMENT.EXPORT_JSON' | translate}}</a> + </li> <li> <a [routerLink]="['/admin/apps/edit/version', version?.appVersionId]">{{ 'APPS_MANAGEMENT.EDIT_BUTTON' | translate }}</a> </li> diff --git a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts index 8f0e6740db44ab496bcff3cecced1de9cb6c92d5..abd9378a08de9bbe9d8c96f5cba18b9821b486f3 100644 --- a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts +++ b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts @@ -8,6 +8,7 @@ import {ApplicationVersion} from '../../../model/application-version'; import {map} from 'rxjs/operators'; import {ApplicationBase} from '../../../model/application-base'; import * as semver from 'semver' +import {ApplicationDTO} from '../../../model/application-dto'; @Component({ selector: 'nmaas-appmanagementlist', @@ -29,6 +30,9 @@ export class AppManagementListComponent implements OnInit { public filteredApps: ApplicationBase[] = []; + public blobUrl; + + constructor(public appsService: AppsService, public router: Router, public authService: AuthService) { @@ -104,4 +108,58 @@ export class AppManagementListComponent implements OnInit { this.apps = this.filteredApps } } + + public getApplicationInfoJSON(id: number) { + this.appsService.getApplicationDTO(id).subscribe( appDTO => { + // const app = appDTO; + appDTO = this.deleteIDsFields(appDTO); + let blob = new Blob([JSON.stringify(appDTO, null, 4)], {type: 'application/json'}) + this.blobUrl = window.URL.createObjectURL(blob); + let a = document.createElement('a'); + document.body.appendChild(a); + a.setAttribute('style', 'display: none'); + a.href = this.blobUrl; + a.download = `${appDTO.applicationBase.name}-${appDTO.application.version}.json` + a.click(); + window.URL.revokeObjectURL(this.blobUrl); + a.remove(); + }) + } + + private deleteIDsFields(app: ApplicationDTO) { + app.applicationBase.id = null; + app.applicationBase.owner = null; + app.applicationBase.tags.forEach(tag => { + tag.id = null; + }) + app.applicationBase.versions = null; + app.application.id = null; + if (app.application.configWizardTemplate !== null) { + app.application.configWizardTemplate.id = null; + } + if (app.application.configUpdateWizardTemplate !== null) { + app.application.configUpdateWizardTemplate.id = null; + } + if (app.application.appDeploymentSpec !== null) { + app.application.appDeploymentSpec.id = null; + if (app.application.appDeploymentSpec.kubernetesTemplate !== null) { + app.application.appDeploymentSpec.kubernetesTemplate.id = null; + app.application.appDeploymentSpec.kubernetesTemplate.chart.id = null; + } + app.application.appDeploymentSpec.storageVolumes.forEach(storageVolume => { + storageVolume.id = null; + }) + app.application.appDeploymentSpec.accessMethods.forEach(accessMethod => { + accessMethod.id = null; + }) + } + if (app.application.appConfigurationSpec !== null) { + app.application.appConfigurationSpec.id = null; + app.application.appConfigurationSpec.templates.forEach(template => { + template.id = null; + template.applicationId = null; + }) + } + return app; + } }