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@236
|
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@44
|
23 @Component({
|
dev@236
|
24 selector: 'ugly-feature-extraction-menu',
|
dev@44
|
25 templateUrl: './feature-extraction-menu.component.html',
|
dev@44
|
26 styleUrls: ['./feature-extraction-menu.component.css']
|
dev@44
|
27 })
|
dev@74
|
28 export class FeatureExtractionMenuComponent implements OnInit, OnDestroy {
|
dev@44
|
29
|
dev@48
|
30 @Input()
|
dev@48
|
31 set disabled(isDisabled: boolean) {
|
dev@48
|
32 this.isDisabled = isDisabled;
|
dev@48
|
33 }
|
dev@48
|
34
|
dev@48
|
35 get disabled() {
|
dev@48
|
36 return this.isDisabled;
|
dev@48
|
37 }
|
dev@48
|
38
|
dev@47
|
39 @Output() requestOutput: EventEmitter<ExtractorOutputInfo>;
|
dev@47
|
40
|
dev@48
|
41 private isDisabled: boolean;
|
dev@47
|
42 private extractorsMap: Map<string, ExtractorOutputInfo>;
|
dev@74
|
43 private populateExtractors: (available: ListResponse) => void;
|
dev@47
|
44 extractors: Iterable<ExtractorOutputInfo>;
|
dev@74
|
45 private librariesUpdatedSubscription: Subscription;
|
dev@44
|
46
|
dev@44
|
47 constructor(private piperService: FeatureExtractionService) {
|
dev@47
|
48 this.extractorsMap = new Map();
|
dev@44
|
49 this.extractors = [];
|
dev@51
|
50 this.requestOutput = new EventEmitter<ExtractorOutputInfo>();
|
dev@48
|
51 this.isDisabled = true;
|
dev@74
|
52 this.populateExtractors = available => {
|
dev@46
|
53 const maxCharacterLimit = 50;
|
dev@46
|
54 available.available.forEach(staticData => {
|
dev@47
|
55 const isSingleOutputExtractor = staticData.basicOutputInfo.length === 1;
|
dev@47
|
56 staticData.basicOutputInfo.forEach(output => {
|
dev@47
|
57 const combinedKey = `${staticData.key}:${output.identifier}`;
|
dev@47
|
58 this.extractorsMap.set(combinedKey, {
|
dev@47
|
59 extractorKey: staticData.key,
|
dev@47
|
60 combinedKey: combinedKey,
|
dev@47
|
61 name: (
|
dev@47
|
62 isSingleOutputExtractor
|
dev@47
|
63 ? staticData.basic.name
|
dev@47
|
64 : `${staticData.basic.name}: ${output.name}`
|
dev@47
|
65 ).substr(0, maxCharacterLimit) + '...',
|
dev@47
|
66 outputId: output.identifier
|
dev@46
|
67 });
|
dev@47
|
68 });
|
dev@46
|
69 });
|
dev@47
|
70 this.extractors = [...this.extractorsMap.values()];
|
dev@74
|
71 };
|
dev@74
|
72 }
|
dev@74
|
73
|
dev@74
|
74 ngOnInit() {
|
dev@74
|
75 this.piperService.list().then(this.populateExtractors);
|
dev@236
|
76 this.librariesUpdatedSubscription =
|
dev@236
|
77 this.piperService.librariesUpdated$.subscribe(this.populateExtractors);
|
dev@44
|
78 }
|
dev@44
|
79
|
dev@47
|
80 extract(combinedKey: string): void {
|
dev@100
|
81 const info: ExtractorOutputInfo =
|
dev@100
|
82 this.extractorsMap.get(combinedKey);
|
dev@100
|
83 if (info) {
|
dev@100
|
84 this.requestOutput.emit(info);
|
dev@100
|
85 }
|
dev@47
|
86 }
|
dev@47
|
87
|
dev@236
|
88 load(select: MdSelect): void {
|
dev@236
|
89 console.warn(select, select._keyManager);
|
dev@236
|
90 const item = select._keyManager.activeItemIndex;
|
dev@236
|
91 select._keyManager.setFirstItemActive();
|
dev@74
|
92 this.piperService.updateAvailableLibraries().subscribe(res => {
|
dev@74
|
93 Object.keys(res).forEach(key => this.piperService.load(key));
|
dev@74
|
94 });
|
dev@74
|
95 }
|
dev@74
|
96
|
dev@74
|
97 ngOnDestroy(): void {
|
dev@74
|
98 this.librariesUpdatedSubscription.unsubscribe();
|
dev@74
|
99 }
|
dev@44
|
100 }
|