dev@74
|
1 import {
|
dev@236
|
2 Component,
|
dev@236
|
3 OnInit,
|
dev@236
|
4 Output,
|
dev@236
|
5 EventEmitter,
|
dev@236
|
6 Input,
|
dev@74
|
7 OnDestroy
|
dev@74
|
8 } from '@angular/core';
|
dev@236
|
9 import {
|
dev@236
|
10 FeatureExtractionService
|
dev@236
|
11 } from '../services/feature-extraction/feature-extraction.service';
|
dev@236
|
12 import {ListResponse} from 'piper';
|
dev@236
|
13 import {Subscription} from 'rxjs/Subscription';
|
dev@269
|
14 import {MdSelect} from '@angular/material';
|
dev@44
|
15
|
dev@47
|
16 export interface ExtractorOutputInfo {
|
dev@47
|
17 extractorKey: string;
|
dev@47
|
18 combinedKey: string;
|
dev@47
|
19 outputId: string;
|
dev@44
|
20 name: string;
|
dev@44
|
21 }
|
dev@44
|
22
|
dev@423
|
23 interface ExtractorInfo {
|
dev@423
|
24 name: string;
|
dev@423
|
25 outputs: ExtractorOutputInfo[];
|
dev@423
|
26 }
|
dev@423
|
27
|
dev@44
|
28 @Component({
|
dev@236
|
29 selector: 'ugly-feature-extraction-menu',
|
dev@44
|
30 templateUrl: './feature-extraction-menu.component.html',
|
dev@44
|
31 styleUrls: ['./feature-extraction-menu.component.css']
|
dev@44
|
32 })
|
dev@74
|
33 export class FeatureExtractionMenuComponent implements OnInit, OnDestroy {
|
dev@44
|
34
|
dev@48
|
35 @Input()
|
dev@48
|
36 set disabled(isDisabled: boolean) {
|
dev@48
|
37 this.isDisabled = isDisabled;
|
dev@48
|
38 }
|
dev@48
|
39
|
dev@48
|
40 get disabled() {
|
dev@48
|
41 return this.isDisabled;
|
dev@48
|
42 }
|
dev@426
|
43 @Input() onRequestOutput: () => void;
|
dev@48
|
44
|
dev@47
|
45 @Output() requestOutput: EventEmitter<ExtractorOutputInfo>;
|
dev@47
|
46
|
dev@48
|
47 private isDisabled: boolean;
|
dev@74
|
48 private populateExtractors: (available: ListResponse) => void;
|
dev@423
|
49 extractors: Iterable<ExtractorInfo>;
|
dev@74
|
50 private librariesUpdatedSubscription: Subscription;
|
dev@44
|
51
|
dev@44
|
52 constructor(private piperService: FeatureExtractionService) {
|
dev@44
|
53 this.extractors = [];
|
dev@51
|
54 this.requestOutput = new EventEmitter<ExtractorOutputInfo>();
|
dev@48
|
55 this.isDisabled = true;
|
dev@74
|
56 this.populateExtractors = available => {
|
dev@423
|
57 this.extractors = available.available.reduce((acc, staticData) => {
|
dev@423
|
58 const name = staticData.basic.name;
|
dev@423
|
59 const outputs: ExtractorOutputInfo[] =
|
dev@423
|
60 staticData.basicOutputInfo.map(output => {
|
dev@423
|
61 const combinedKey = `${staticData.key}:${output.identifier}`;
|
dev@423
|
62 return {
|
dev@423
|
63 extractorKey: staticData.key,
|
dev@423
|
64 combinedKey: combinedKey,
|
dev@423
|
65 name: output.name,
|
dev@423
|
66 outputId: output.identifier
|
dev@423
|
67 };
|
dev@46
|
68 });
|
dev@423
|
69 acc.push({name, outputs});
|
dev@423
|
70 return acc;
|
dev@423
|
71 }, [] as ExtractorInfo[]);
|
dev@74
|
72 };
|
dev@74
|
73 }
|
dev@74
|
74
|
dev@269
|
75 private getFirstSelectedItemOrEmpty(select: MdSelect): string {
|
dev@269
|
76 const selected = select.selected;
|
dev@269
|
77 if (selected) {
|
dev@269
|
78 return selected instanceof Array ? selected[0].value : selected.value;
|
dev@269
|
79 }
|
dev@269
|
80 return '';
|
dev@269
|
81 }
|
dev@269
|
82
|
dev@74
|
83 ngOnInit() {
|
dev@236
|
84 this.librariesUpdatedSubscription =
|
dev@236
|
85 this.piperService.librariesUpdated$.subscribe(this.populateExtractors);
|
dev@324
|
86 this.piperService.list().then(this.populateExtractors);
|
dev@44
|
87 }
|
dev@44
|
88
|
dev@423
|
89 extract(info: ExtractorOutputInfo): void {
|
dev@426
|
90 if (this.onRequestOutput) {
|
dev@426
|
91 this.onRequestOutput();
|
dev@426
|
92 }
|
dev@100
|
93 if (info) {
|
dev@100
|
94 this.requestOutput.emit(info);
|
dev@100
|
95 }
|
dev@47
|
96 }
|
dev@47
|
97
|
dev@238
|
98 load(): void {
|
dev@324
|
99 this.piperService.updateAvailableLibraries();
|
dev@74
|
100 }
|
dev@74
|
101
|
dev@74
|
102 ngOnDestroy(): void {
|
dev@74
|
103 this.librariesUpdatedSubscription.unsubscribe();
|
dev@74
|
104 }
|
dev@44
|
105 }
|