From 818c6378c24fa117699f6e673f0427c12a91259c Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Wed, 11 Mar 2020 11:06:43 +0200 Subject: [PATCH] Add index management for admins --- .../java/eu/eudat/controllers/Datasets.java | 16 +++++ .../eudat/logic/managers/DatasetManager.java | 25 +++++++ dmp-frontend/src/app/app-routing.module.ts | 8 +++ .../core/services/dataset/dataset.service.ts | 8 +++ .../index-managment.component.html | 8 +++ .../index-managment.component.scss | 8 +++ .../index-managment.component.ts | 67 +++++++++++++++++++ .../index-managment/index-managment.module.ts | 20 ++++++ .../index-managment.routing.ts | 15 +++++ 9 files changed, 175 insertions(+) create mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html create mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss create mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts create mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts create mode 100644 dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index 067cee359..8664235c1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -66,5 +66,21 @@ public class Datasets extends BaseController { DataTableData datasetProfileTableData = this.datasetManager.getDatasetProfilesUsedByDatasets(datasetProfileTableRequestItem, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData)); } + + @javax.transaction.Transactional + @RequestMapping(method = RequestMethod.POST, value = {"/index"}) + public @ResponseBody + ResponseEntity> generateIndex(Principal principal) throws Exception { + this.datasetManager.generateIndex(principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Generated").payload(null)); + } + + @javax.transaction.Transactional + @RequestMapping(method = RequestMethod.DELETE, value = {"/index"}) + public @ResponseBody + ResponseEntity> clearIndex(Principal principal) throws Exception { + this.datasetManager.clearIndex(principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Cleared").payload(null)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 9ce9242a9..97fa7b4e3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -832,4 +832,29 @@ public class DatasetManager { return data; } + + public void generateIndex(Principal principal) { + if (principal.getAuthorities().contains(Authorities.ADMIN.getValue())) { + this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable().toList(); + List datasetWizardModels = this.apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().asQueryable().toList() + .stream().map(dataset -> new DatasetWizardModel().fromDataModel(dataset)).collect(Collectors.toList()); + datasetWizardModels.forEach(datasetWizardModel -> { + try { + updateTags(apiContext.getOperationsContext().getDatasetRepository(), datasetWizardModel); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + }); + } + } + + public void clearIndex(Principal principal) { + if (principal.getAuthorities().contains(Authorities.ADMIN.getValue())) { + try { + this.apiContext.getOperationsContext().getDatasetRepository().clear(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + } } diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index db7a467c4..7a07738da 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -188,6 +188,14 @@ const appRoutes: Routes = [ title: 'GENERAL.TITLES.GUIDE-EDITOR' }, }, + { + path: 'index-managment', + loadChildren: () => import('./ui/admin/index-managment/index-managment.module').then(m => m.IndexManagmentModule), + data: { + breadcrumb: true, + title: 'GENERAL.TITLES.INDEX-MANAGMENT' + }, + }, { path: 'login/admin', loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule), diff --git a/dmp-frontend/src/app/core/services/dataset/dataset.service.ts b/dmp-frontend/src/app/core/services/dataset/dataset.service.ts index d1b59d588..70b806bed 100644 --- a/dmp-frontend/src/app/core/services/dataset/dataset.service.ts +++ b/dmp-frontend/src/app/core/services/dataset/dataset.service.ts @@ -38,4 +38,12 @@ export class DatasetService { getDatasetProfilesUsedPaged(dataTableRequest: DataTableRequest) { return this.http.post>(this.actionUrl + 'datasetProfilesUsedByDatasets/paged', dataTableRequest); } + + generateIndex() { + return this.http.post(this.actionUrl + 'index', {}); + } + + clearIndex() { + return this.http.delete(this.actionUrl + 'index'); + } } diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html new file mode 100644 index 000000000..bf8020a0d --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.html @@ -0,0 +1,8 @@ +
+ +
+ + +
+
+
diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss new file mode 100644 index 000000000..4ec878d3b --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.scss @@ -0,0 +1,8 @@ +.root { + padding-top: 5em; + padding-bottom: 2em; + + .button { + margin: 5px; + } +} diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts new file mode 100644 index 000000000..7b37c8ace --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { DatasetService } from '@app/core/services/dataset/dataset.service'; +import { BaseComponent } from '@common/base/base.component'; +import { takeUntil } from 'rxjs/operators'; +import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service'; +import { TranslateService } from '@ngx-translate/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-index-managment', + templateUrl: './index-managment.component.html', + styleUrls: ['./index-managment.component.scss'] +}) +export class IndexManagmentComponent extends BaseComponent implements OnInit { + + constructor( + private datasetService: DatasetService, + private uiNotificationService: UiNotificationService, + private translate: TranslateService, + private router: Router, + ) + { + super(); + } + + ngOnInit() { + } + + generateIndex(ev: Event) { + (ev.srcElement as HTMLButtonElement).disabled = true; + this.datasetService.generateIndex().pipe(takeUntil(this._destroyed)).subscribe( + response => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + + clearIndex(ev: Event) { + (ev.srcElement as HTMLButtonElement).disabled = true; + this.datasetService.clearIndex().pipe(takeUntil(this._destroyed)).subscribe( + response => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); +} + + onCallbackSuccess(): void { + this.uiNotificationService.snackBarNotification( this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.router.navigate(['/reload']).then(() => this.router.navigate(['/index-managment'])); +} + +onCallbackError(error: any) { + this.uiNotificationService.snackBarNotification( error, SnackBarNotificationLevel.Error); + //this.validateAllFormFields(this.formGroup); +} + +} diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts new file mode 100644 index 000000000..048d5e10f --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { IndexManagmentRoutingModule } from './index-managment.routing'; +import { IndexManagmentComponent } from './index-managment.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; + + +@NgModule({ + declarations: [IndexManagmentComponent], + imports: [ + CommonUiModule, + CommonFormsModule, + ConfirmationDialogModule, + IndexManagmentRoutingModule + ] +}) +export class IndexManagmentModule { } diff --git a/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts new file mode 100644 index 000000000..928c348b5 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/index-managment/index-managment.routing.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { IndexManagmentComponent } from './index-managment.component'; +import { AdminAuthGuard } from '@app/core/admin-auth-guard.service'; + + +const routes: Routes = [ + { path: '', component: IndexManagmentComponent, canActivate: [AdminAuthGuard] }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class IndexManagmentRoutingModule { }