diff --git a/src/app/core/component/cardrenderer/card-renderer.component.ts b/src/app/core/component/cardrenderer/card-renderer.component.ts index 3cfc9e74..60ef9e88 100644 --- a/src/app/core/component/cardrenderer/card-renderer.component.ts +++ b/src/app/core/component/cardrenderer/card-renderer.component.ts @@ -6,11 +6,13 @@ import Pattern from '../../model/hal/pattern.model'; import { HalLink } from '../../model/hal/hal-link.interface'; import { PatternService } from '../../service/pattern.service'; import { ToasterService } from 'angular2-toaster'; +import { MatDialog } from "@angular/material/dialog"; +import { DeleteConfirmationDialogComponent } from "../delete-confirmation-dialog/delete-confirmation-dialog.component"; @Component({ selector: 'pp-card-renderer', templateUrl: './card-renderer.component.html', - styleUrls: ['./card-renderer.component.scss'] + styleUrls: [ './card-renderer.component.scss' ] }) export class CardRendererComponent { @@ -22,23 +24,37 @@ export class CardRendererComponent { private router: Router, private activatedRoute: ActivatedRoute, private patternService: PatternService, - private toasterService: ToasterService) { + private toasterService: ToasterService, + private dialog: MatDialog) { } navigate(pattern: UriEntity): void { this.zone.run(() => { - this.router.navigate([UriConverter.doubleEncodeUri(pattern.uri)], { relativeTo: this.activatedRoute }); + this.router.navigate([ UriConverter.doubleEncodeUri(pattern.uri) ], { relativeTo: this.activatedRoute }); }); } delete(pattern: Pattern): void { - this.patternService.deletePattern(pattern._links.self.href) - .subscribe( - value => this.handlePatternDelete(pattern), - error => { - this.toasterService.pop('error', 'Could not delete pattern!'); - } - ); + this.dialog.open(DeleteConfirmationDialogComponent, { + data: { + name: pattern.name, + } + }) + .afterClosed().subscribe(dialoganswer => { + if (dialoganswer) { + this.patternService.deletePattern(pattern._links.self.href) + .subscribe( + value => { + this.handlePatternDelete(pattern); + this.toasterService.pop('success', 'Pattern deleted!'); + }, + error => { + this.toasterService.pop('error', 'Could not delete pattern!', "A Pattern can only be deleted if it is not a part of any Pattern Views"); + } + ); + } + }); + } getLinkCount(directedEdges: HalLink[] | HalLink): number { @@ -51,15 +67,15 @@ export class CardRendererComponent { private collectAllEdgesOfPattern(pattern: Pattern): HalLink[] { let collectedEdges: HalLink[] = []; if (pattern._links.outgoingDirectedEdges) { - Array.isArray(pattern._links.outgoingDirectedEdges) ? collectedEdges = [...collectedEdges, ...pattern._links.outgoingDirectedEdges] : + Array.isArray(pattern._links.outgoingDirectedEdges) ? collectedEdges = [ ...collectedEdges, ...pattern._links.outgoingDirectedEdges ] : collectedEdges.push(pattern._links.outgoingDirectedEdges); } if (pattern._links.ingoingDirectedEdges) { - Array.isArray(pattern._links.ingoingDirectedEdges) ? collectedEdges = [...collectedEdges, ...pattern._links.ingoingDirectedEdges] : + Array.isArray(pattern._links.ingoingDirectedEdges) ? collectedEdges = [ ...collectedEdges, ...pattern._links.ingoingDirectedEdges ] : collectedEdges.push(pattern._links.ingoingDirectedEdges); } if (pattern._links.undirectedEdges) { - Array.isArray(pattern._links.undirectedEdges) ? collectedEdges = [...collectedEdges, ...pattern._links.undirectedEdges] : + Array.isArray(pattern._links.undirectedEdges) ? collectedEdges = [ ...collectedEdges, ...pattern._links.undirectedEdges ] : collectedEdges.push(pattern._links.undirectedEdges); } return collectedEdges; diff --git a/src/app/core/component/create-edit-pattern-language/create-edit-pattern-language.component.ts b/src/app/core/component/create-edit-pattern-language/create-edit-pattern-language.component.ts index 1b7c571a..4d3ec129 100644 --- a/src/app/core/component/create-edit-pattern-language/create-edit-pattern-language.component.ts +++ b/src/app/core/component/create-edit-pattern-language/create-edit-pattern-language.component.ts @@ -90,11 +90,12 @@ export class CreateEditPatternLanguageComponent implements OnInit { if (this.patternLanguageForm.valid) { switch (this.componentDialogType) { - case CreateEditComponentDialogType.PATTERN_VIEW: + case CreateEditComponentDialogType.PATTERN_VIEW : case CreateEditComponentDialogType.DESIGN_MODEL: this.saveClicked.emit({ dialogResult: { - name: this.name.value + name: this.name.value, + logo: this.iconUrl.value, } }); this.dialogRef.close(); @@ -123,17 +124,6 @@ export class CreateEditPatternLanguageComponent implements OnInit { }); this.dialogRef.close(); break; - - case CreateEditComponentDialogType.DESIGN_MODEL: - - this.saveClicked.emit({ - dialogResult: { - name: this.name.value, - logo: this.iconUrl.value - } - }); - this.dialogRef.close(); - break; } } } diff --git a/src/app/core/component/delete-confirmation-dialog/delete-confirmation-dialog.component.html b/src/app/core/component/delete-confirmation-dialog/delete-confirmation-dialog.component.html index fdcbe3f4..d6520076 100644 --- a/src/app/core/component/delete-confirmation-dialog/delete-confirmation-dialog.component.html +++ b/src/app/core/component/delete-confirmation-dialog/delete-confirmation-dialog.component.html @@ -1,7 +1,9 @@ -

Edit or Delete Relation

+

Do you really want to delete {{data.name}}?

+

Do you really want to delete this item?

-
diff --git a/src/app/core/service/pattern-language.service.ts b/src/app/core/service/pattern-language.service.ts index 6e1d9173..74b1f246 100644 --- a/src/app/core/service/pattern-language.service.ts +++ b/src/app/core/service/pattern-language.service.ts @@ -107,4 +107,9 @@ export class PatternLanguageService implements GraphDataService { getEdgeTypes(): Observable { return of(); } + + deletePatternLanguage(patternLanguageId: string){ + const url = this.repoEndpoint + '/patternLanguages/' + patternLanguageId; + return this.http.delete(url); + } } diff --git a/src/app/core/service/pattern-view.service.ts b/src/app/core/service/pattern-view.service.ts index 5a93586d..8018aa9b 100644 --- a/src/app/core/service/pattern-view.service.ts +++ b/src/app/core/service/pattern-view.service.ts @@ -91,13 +91,13 @@ export class PatternViewService implements GraphDataService { return this.http.get>(patternContainer._links.undirectedEdges.href); } - getDirectedEdgeById(patternViewId, edgeId: string) : Observable{ - return this.http.get(this.repoEndpoint + /patternViews/+ patternViewId + /directedEdges/ + edgeId) + getDirectedEdgeById(patternViewId, edgeId: string): Observable { + return this.http.get(this.repoEndpoint + /patternViews/ + patternViewId + /directedEdges/ + edgeId) } - getUndirectedEdgeById(patternViewId, edgeId: string) : Observable{ - return this.http.get(this.repoEndpoint + /patternViews/+ patternViewId + /undirectedEdges/ + edgeId) + getUndirectedEdgeById(patternViewId, edgeId: string): Observable { + return this.http.get(this.repoEndpoint + /patternViews/ + patternViewId + /undirectedEdges/ + edgeId) } deleteLink(patternLink: any): Observable { @@ -116,10 +116,14 @@ export class PatternViewService implements GraphDataService { return of(); } - removeRelationFromView(patternContainer: PatternContainer, relation: any):void { - relation.markerStart === undefined? - this.http.delete(patternContainer._links.directedEdges.href + '/' + relation.id).subscribe(): + removeRelationFromView(patternContainer: PatternContainer, relation: any): void { + relation.markerStart === undefined ? + this.http.delete(patternContainer._links.directedEdges.href + '/' + relation.id).subscribe() : this.http.delete(patternContainer._links.undirectedEdges.href + '/' + relation.id).subscribe(); } + deletePatternView(patternViewId: PatternContainer) { + return this.http.delete(patternViewId._links.self.href); + } + } diff --git a/src/app/core/service/pattern.service.ts b/src/app/core/service/pattern.service.ts index 481e4096..742af464 100644 --- a/src/app/core/service/pattern.service.ts +++ b/src/app/core/service/pattern.service.ts @@ -68,8 +68,6 @@ export class PatternService { } getPatternById(patternLanguage: PatternLanguage, patternId: String): Observable { - console.log('patternid'); - console.log(patternId); return this.http.get (this.repoEndpoint + '/patternLanguages/' + patternLanguage.id + '/patterns/' + patternId); } diff --git a/src/app/design-model-module/component/design-model-management/design-model-management.component.html b/src/app/design-model-module/component/design-model-management/design-model-management.component.html index ce958f56..2449f99b 100644 --- a/src/app/design-model-module/component/design-model-management/design-model-management.component.html +++ b/src/app/design-model-module/component/design-model-management/design-model-management.component.html @@ -6,23 +6,28 @@
- + class="landing-card"> - + - + {{designModel.name}} - - + - +
+ + +
diff --git a/src/app/design-model-module/component/design-model-management/design-model-management.component.scss b/src/app/design-model-module/component/design-model-management/design-model-management.component.scss index e1007dd5..3f53a98e 100644 --- a/src/app/design-model-module/component/design-model-management/design-model-management.component.scss +++ b/src/app/design-model-module/component/design-model-management/design-model-management.component.scss @@ -3,10 +3,16 @@ word-break: break-word; } -.mat-card-actions { - text-align: center; +.mat-card-title { + width: 10rem; + word-break: break-word; + cursor: pointer; +} + +.mat-card-image{ + cursor: pointer; } -.landing-card { +.mat-card-avatar{ cursor: pointer; } diff --git a/src/app/design-model-module/component/design-model-management/design-model-management.component.ts b/src/app/design-model-module/component/design-model-management/design-model-management.component.ts index ffd838ad..186bbd89 100644 --- a/src/app/design-model-module/component/design-model-management/design-model-management.component.ts +++ b/src/app/design-model-module/component/design-model-management/design-model-management.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, NgZone, OnInit } from '@angular/core'; import { CreateEditComponentDialogType, CreateEditPatternLanguageComponent @@ -12,12 +12,15 @@ import { ToasterService } from 'angular2-toaster'; import { Observable } from 'rxjs'; import { DesignModelService } from '../../service/design-model.service'; import { DesignModelResponse } from '../../model/hal/design-model-response'; +import { ActivatedRoute, Router } from "@angular/router"; +import { DesignModel } from "../../model/hal/design-model"; +import { DeleteConfirmationDialogComponent } from "../../../core/component/delete-confirmation-dialog/delete-confirmation-dialog.component"; @Component({ selector: 'pp-design-model-management', templateUrl: './design-model-management.component.html', - styleUrls: ['./design-model-management.component.scss'] + styleUrls: [ './design-model-management.component.scss' ] }) export class DesignModelManagementComponent implements OnInit { @@ -27,7 +30,10 @@ export class DesignModelManagementComponent implements OnInit { constructor(private designModelService: DesignModelService, private dialog: MatDialog, private patternLanguageService: PatternLanguageService, - private toastService: ToasterService) { + private toastService: ToasterService, + private activatedRoute: ActivatedRoute, + private router: Router, + private zone: NgZone) { } @@ -67,4 +73,29 @@ export class DesignModelManagementComponent implements OnInit { } ); } + + navigate(model: DesignModel): void { + this.zone.run(() => { + this.router.navigate([ model.id ], { relativeTo: this.activatedRoute }); + }) + } + + delete(designModel: DesignModel) { + const dialogRef = this.dialog.open(DeleteConfirmationDialogComponent, { + data: { + name: designModel.name, + } + }).afterClosed().subscribe(dialogAnswer => { + if (dialogAnswer) { + this.designModelService.deleteDesignModel(designModel).subscribe((respone) => { + for (let i = 0; i < this.designModelResponse._embedded.designModels.length; i++) { + this.designModelResponse._embedded.designModels[i].id === designModel.id ? this.designModelResponse._embedded.designModels.splice(i, 1) : null; + } + this.toastService.pop('success', 'Design Model deleted!'); + },(error) => { + this.toastService.pop('error', 'Design Model could not be deleted!'); + }); + } + }) + } } diff --git a/src/app/design-model-module/service/design-model.service.ts b/src/app/design-model-module/service/design-model.service.ts index 6b611063..d1399e2f 100644 --- a/src/app/design-model-module/service/design-model.service.ts +++ b/src/app/design-model-module/service/design-model.service.ts @@ -232,4 +232,8 @@ export class DesignModelService implements GraphDataService, GraphDataSavePatter return of({ graph: graphNodes }); } + + deleteDesignModel(designModel: DesignModel){ + return this.httpClient.delete(designModel._links.self.href); + } } diff --git a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.html b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.html index 42825e39..d73f1895 100644 --- a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.html +++ b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.html @@ -17,11 +17,11 @@
- - + - {{patternLanguage.name}} @@ -31,13 +31,16 @@ - - +
+
diff --git a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.scss b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.scss index 79875a2c..13641442 100644 --- a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.scss +++ b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.scss @@ -22,3 +22,15 @@ min-height: 20rem !important; min-width: 13rem !important; } + +.mat-card-title { + cursor: pointer; +} + +.mat-card-image{ + cursor: pointer; +} + +.mat-card-avatar{ + cursor: pointer; +} diff --git a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.ts b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.ts index 5f017f2f..5b0c0d25 100644 --- a/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.ts +++ b/src/app/pattern-language-management/pattern-language-management/pattern-language-management.component.ts @@ -27,6 +27,7 @@ import { DialogPatternLanguageResult } from '../data/DialogPatternLanguageResult import { map } from 'rxjs/operators'; import PatternLanguageModel from '../../core/model/hal/pattern-language-model.model'; import UriEntity from '../../core/model/hal/uri-entity.model'; +import { DeleteConfirmationDialogComponent } from "../../core/component/delete-confirmation-dialog/delete-confirmation-dialog.component"; @Component({ selector: 'pp-pattern-language-management', @@ -64,6 +65,7 @@ export class PatternLanguageManagementComponent implements OnInit { ngOnInit() { this.patternLanguages = Array.from(this.activatedRoute.snapshot.data.patternlanguages.values()) .sort(PatternLanguageManagementComponent.sortPatternLanguages); + this.reloadPatternRepo(); } async reloadPatternRepo() { @@ -72,14 +74,13 @@ export class PatternLanguageManagementComponent implements OnInit { map(result => result.sort(PatternLanguageManagementComponent.sortPatternLanguages))) .subscribe(result => { this.patternLanguages = result; - this._toasterService.pop('success', 'Reloaded Pattern Languages'); this.cdr.detectChanges(); return result; }); this.cdr.detectChanges(); } - navigateToPL(pl: UriEntity): void { + navigateToPL(pl: PatternLanguageModel): void { this.zone.run(() => { this.router.navigate([pl.id], { relativeTo: this.activatedRoute }); }); @@ -107,4 +108,24 @@ export class PatternLanguageManagementComponent implements OnInit { }); }); } + + delete(patternLanguage: PatternLanguageModel) { + const dialogRef = this.dialog.open(DeleteConfirmationDialogComponent, { + data: { + name: patternLanguage.name, + } + }).afterClosed().subscribe(dialogAnswer => { + if(dialogAnswer){ + this.patternLanguageService.deletePatternLanguage(patternLanguage.id).subscribe((response) =>{ + this.patternLanguages.splice(this.patternLanguages.indexOf(patternLanguage),1); + this._toasterService.pop('success', 'Pattern Language deleted!'); + },(error) => { + this._toasterService.pop('error', 'Pattern Language could not be deleted!', 'A Pattern Language can only be deleted if it does not contain any patterns.'); + }); + + + } + }) + + } } diff --git a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.html b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.html index 25c03f14..ac65582c 100644 --- a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.html +++ b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.html @@ -1,11 +1,28 @@ -
- - {{entity.name}} - +
+ + + + + + + {{patternView.name}} + + + + + + +
+ + +
+
+
diff --git a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.scss b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.scss index e58849e7..f5e9fc4d 100644 --- a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.scss +++ b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.scss @@ -16,3 +16,17 @@ margin: auto; } } + +.mat-card-title { + width: 10rem; + word-break: break-word; + cursor: pointer; +} + +.mat-card-image{ + cursor: pointer; +} + +.mat-card-avatar{ + cursor: pointer; +} diff --git a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts index 7ee551f7..8f9e1a14 100644 --- a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts +++ b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts @@ -16,11 +16,12 @@ import { ToasterService } from 'angular2-toaster'; import { UriConverter } from '../../core/util/uri-converter'; import UriEntity from '../../core/model/hal/uri-entity.model'; import { ActivatedRoute, Router } from '@angular/router'; +import { DeleteConfirmationDialogComponent } from "../../core/component/delete-confirmation-dialog/delete-confirmation-dialog.component"; @Component({ selector: 'pp-solution-language-management', templateUrl: './pattern-view-management.component.html', - styleUrls: ['./pattern-view-management.component.scss'] + styleUrls: [ './pattern-view-management.component.scss' ] }) export class PatternViewManagementComponent implements OnInit { public patternViewResponse; @@ -46,7 +47,7 @@ export class PatternViewManagementComponent implements OnInit { navigate(view: UriEntity): void { this.zone.run(() => { - this.router.navigate([UriConverter.doubleEncodeUri(view.uri)], { relativeTo: this.activatedRoute }); + this.router.navigate([ UriConverter.doubleEncodeUri(view.uri) ], { relativeTo: this.activatedRoute }); }); } @@ -58,6 +59,7 @@ export class PatternViewManagementComponent implements OnInit { .saveClicked .pipe( tap((result: DialogPatternLanguageResult) => { + console.log(result.dialogResult); view = result.dialogResult; }), switchMap(() => this.patternViewService.savePatternView(this.patternViewResponse._links.patternViews.href, view)), @@ -70,4 +72,24 @@ export class PatternViewManagementComponent implements OnInit { }); } + deletePatternView(patternView: PatternContainer) { + const dialogRef = this.dialog.open(DeleteConfirmationDialogComponent, { + data: { + name: patternView.name, + } + }).afterClosed().subscribe(dialogAnswer => { + if (dialogAnswer) { + this.patternViewService.deletePatternView(patternView).subscribe((response) => { + for (let i = 0; i < this.patternViewResponse._embedded.patternViews.length; i++) { + this.patternViewResponse._embedded.patternViews[i].id === patternView.id ? this.patternViewResponse._embedded.patternViews.splice(i, 1) : null; + } + this.toastService.pop('success', 'Pattern View deleted!'); + }, + (error) => { + this.toastService.pop('error', 'Pattern View could not be deleted!'); + } + ); + } + }) + } }