dev@74
|
1 import {
|
dev@74
|
2 Component, OnInit, Output, EventEmitter, Input,
|
dev@74
|
3 OnDestroy
|
dev@74
|
4 } from '@angular/core';
|
dev@44
|
5 import {FeatureExtractionService} from "../services/feature-extraction/feature-extraction.service";
|
dev@74
|
6 import {ListResponse} from "piper";
|
dev@74
|
7 import {Subscription} from "rxjs";
|
dev@44
|
8
|
dev@47
|
9 export interface ExtractorOutputInfo {
|
dev@47
|
10 extractorKey: string;
|
dev@47
|
11 combinedKey: string;
|
dev@47
|
12 outputId: string;
|
dev@44
|
13 name: string;
|
dev@44
|
14 }
|
dev@44
|
15
|
dev@44
|
16 @Component({
|
dev@44
|
17 selector: 'app-feature-extraction-menu',
|
dev@44
|
18 templateUrl: './feature-extraction-menu.component.html',
|
dev@44
|
19 styleUrls: ['./feature-extraction-menu.component.css']
|
dev@44
|
20 })
|
dev@74
|
21 export class FeatureExtractionMenuComponent implements OnInit, OnDestroy {
|
dev@44
|
22
|
dev@48
|
23 @Input()
|
dev@48
|
24 set disabled(isDisabled: boolean) {
|
dev@48
|
25 this.isDisabled = isDisabled;
|
dev@48
|
26 }
|
dev@48
|
27
|
dev@48
|
28 get disabled() {
|
dev@48
|
29 return this.isDisabled;
|
dev@48
|
30 }
|
dev@48
|
31
|
dev@47
|
32 @Output() requestOutput: EventEmitter<ExtractorOutputInfo>;
|
dev@47
|
33
|
dev@48
|
34 private isDisabled: boolean;
|
dev@47
|
35 private extractorsMap: Map<string, ExtractorOutputInfo>;
|
dev@74
|
36 private populateExtractors: (available: ListResponse) => void;
|
dev@47
|
37 extractors: Iterable<ExtractorOutputInfo>;
|
dev@74
|
38 private librariesUpdatedSubscription: Subscription;
|
dev@44
|
39
|
dev@44
|
40 constructor(private piperService: FeatureExtractionService) {
|
dev@47
|
41 this.extractorsMap = new Map();
|
dev@44
|
42 this.extractors = [];
|
dev@51
|
43 this.requestOutput = new EventEmitter<ExtractorOutputInfo>();
|
dev@48
|
44 this.isDisabled = true;
|
dev@74
|
45 this.populateExtractors = available => {
|
dev@46
|
46 const maxCharacterLimit = 50;
|
dev@46
|
47 available.available.forEach(staticData => {
|
dev@47
|
48 const isSingleOutputExtractor = staticData.basicOutputInfo.length === 1;
|
dev@47
|
49 staticData.basicOutputInfo.forEach(output => {
|
dev@47
|
50 const combinedKey = `${staticData.key}:${output.identifier}`;
|
dev@47
|
51 this.extractorsMap.set(combinedKey, {
|
dev@47
|
52 extractorKey: staticData.key,
|
dev@47
|
53 combinedKey: combinedKey,
|
dev@47
|
54 name: (
|
dev@47
|
55 isSingleOutputExtractor
|
dev@47
|
56 ? staticData.basic.name
|
dev@47
|
57 : `${staticData.basic.name}: ${output.name}`
|
dev@47
|
58 ).substr(0, maxCharacterLimit) + '...',
|
dev@47
|
59 outputId: output.identifier
|
dev@46
|
60 });
|
dev@47
|
61 });
|
dev@46
|
62 });
|
dev@47
|
63 this.extractors = [...this.extractorsMap.values()];
|
dev@74
|
64 };
|
dev@74
|
65 }
|
dev@74
|
66
|
dev@74
|
67 ngOnInit() {
|
dev@74
|
68 this.piperService.list().then(this.populateExtractors);
|
dev@74
|
69 this.librariesUpdatedSubscription = this.piperService.librariesUpdated$.subscribe(this.populateExtractors);
|
dev@44
|
70 }
|
dev@44
|
71
|
dev@47
|
72 extract(combinedKey: string): void {
|
dev@47
|
73 this.requestOutput.emit(this.extractorsMap.get(combinedKey));
|
dev@47
|
74 }
|
dev@47
|
75
|
dev@74
|
76 load(): void {
|
dev@74
|
77 this.piperService.updateAvailableLibraries().subscribe(res => {
|
dev@74
|
78 Object.keys(res).forEach(key => this.piperService.load(key));
|
dev@74
|
79 });
|
dev@74
|
80 }
|
dev@74
|
81
|
dev@74
|
82 ngOnDestroy(): void {
|
dev@74
|
83 this.librariesUpdatedSubscription.unsubscribe();
|
dev@74
|
84 }
|
dev@44
|
85 }
|