# HG changeset patch # User Robert Casties # Date 1452884447 -3600 # Node ID 6cd6c09032aa9391bc150fbecc3f67c64685154e # Parent 9f5473536a98dc2fd03efa9db31826620d48616b object type query with results! diff -r 9f5473536a98 -r 6cd6c09032aa app/app.component.ts --- a/app/app.component.ts Thu Jan 14 17:19:35 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -import {Component} from 'angular2/core'; -import {HTTP_PROVIDERS} from 'angular2/http'; - -import {QueryService} from './query.service'; -import {QuerySelectComponent} from './query-select.component'; -import {QueryResultComponent} from './query-result.component'; - -@Component({ - selector: 'my-text', - template: ` -

My Angular 2 Text: {{title}}

-

Selected option: {{selectedOption}}

- - - `, - directives: [QuerySelectComponent, QueryResultComponent], - providers: [QueryService, HTTP_PROVIDERS] -}) - -export class AppComponent { - public title = 'huhu!'; - public selectedOption = 'unknown'; - - constructor() { - } - -} diff -r 9f5473536a98 -r 6cd6c09032aa app/boot.ts --- a/app/boot.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/boot.ts Fri Jan 15 20:00:47 2016 +0100 @@ -1,4 +1,4 @@ import {bootstrap} from 'angular2/platform/browser' -import {AppComponent} from './app.component' +import {QueryAppComponent} from './query-app.component' -bootstrap(AppComponent); +bootstrap(QueryAppComponent); diff -r 9f5473536a98 -r 6cd6c09032aa app/query-app.component.ts --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/query-app.component.ts Fri Jan 15 20:00:47 2016 +0100 @@ -0,0 +1,34 @@ +import {Component} from 'angular2/core'; +import {HTTP_PROVIDERS} from 'angular2/http'; + +import {QueryService} from './query.service'; +import {QueryState} from './query-state'; +import {QuerySelectComponent} from './query-select.component'; +import {QueryResultComponent} from './query-result.component'; + +@Component({ + selector: 'query-app', + template: ` +

My Angular 2 Text: {{title}}

+

Selected query: {{selectedQuery}}

+ + + `, + directives: [QuerySelectComponent, QueryResultComponent], + providers: [QueryService, HTTP_PROVIDERS] +}) + +export class QueryAppComponent { + public title = 'huhu!'; + public selectedQuery: string; + public queryState: QueryState; + + constructor(private _queryService: QueryService) { + } + + onQueryChanged(event: any) { + console.debug("app.onquerychanged! event=", event); + this._queryService.updateQuery(); + this.queryState = this._queryService.getState(); + } +} diff -r 9f5473536a98 -r 6cd6c09032aa app/query-result-row.component.ts --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/query-result-row.component.ts Fri Jan 15 20:00:47 2016 +0100 @@ -0,0 +1,17 @@ +import {Component} from 'angular2/core'; + +@Component({ + selector: 'query-result-row', + template: ` + {{rowData.data.label}} + {{rowData}} + `, + inputs: ['rowData', 'rowType'] +}) + +export class QueryResultRowComponent { + + public rowData: any; + public rowType: string; + +} diff -r 9f5473536a98 -r 6cd6c09032aa app/query-result.component.ts --- a/app/query-result.component.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/query-result.component.ts Fri Jan 15 20:00:47 2016 +0100 @@ -2,13 +2,22 @@ import {QueryState} from './query-state'; +import {QueryResultRowComponent} from './query-result-row.component'; + @Component({ selector: 'query-result', template: `
+

Cypher: {{queryState.cypherQuery}}

Query results ({{queryState.numResults}}):

+
`, + directives: [QueryResultRowComponent], inputs: ['queryState'] }) @@ -16,11 +25,16 @@ public queryState: QueryState; + ngOnChanges() { + console.debug("result changed!"); + } + ngOnInit() { this.setup(); } setup() { + console.debug("result init!"); } } diff -r 9f5473536a98 -r 6cd6c09032aa app/query-select.component.ts --- a/app/query-select.component.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/query-select.component.ts Fri Jan 15 20:00:47 2016 +0100 @@ -1,8 +1,9 @@ -import {Component, OnInit} from 'angular2/core'; +import {Component, Output, EventEmitter, OnInit} from 'angular2/core'; import {QueryService} from './query.service'; import {QueryMode} from './query-mode'; import {QueryStep} from './query-step'; +import {QueryState} from './query-state'; @Component({ @@ -10,6 +11,7 @@ template: `

Selected option: {{selectedQuery}}

` + //outputs: ['queryChanged'] }) export class QuerySelectComponent implements OnInit { @@ -28,6 +31,8 @@ public selectedQuery = 'unknown'; public query2Options; + @Output('queryChanged') queryChanged = new EventEmitter(); + constructor(private _queryService: QueryService) {} ngOnInit() { @@ -37,7 +42,7 @@ setup() { this._queryService.setupIsmiObjectTypes(); this.queryModes = this._queryService.getQueryModes(); - // select first mode + // select first mode (too early?) this.selectedMode = this.queryModes[0]; this.query2Options = this._queryService.getQueryOptions(this.selectedMode); } @@ -52,7 +57,8 @@ var selected = event.target.value; this.selectedQuery = selected; console.debug("selected option:", selected); - var query = {'mode': this.selectedMode, 'objectType': selected}; - this._queryService.setQueryStep(0, query); + var query: QueryStep = {'mode': this.selectedMode, 'objectType': selected}; + this._queryService.setQueryStep(0, query); + this.queryChanged.emit(this._queryService.getState()); } } diff -r 9f5473536a98 -r 6cd6c09032aa app/query-state.ts --- a/app/query-state.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/query-state.ts Fri Jan 15 20:00:47 2016 +0100 @@ -1,7 +1,10 @@ +import {QueryStep} from './query-step'; + export interface QueryState { steps: QueryStep[]; cypherQuery: string; cypherParams: any; + resultTypes: string; results: any[]; numResults: number; } \ No newline at end of file diff -r 9f5473536a98 -r 6cd6c09032aa app/query-step.ts --- a/app/query-step.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/query-step.ts Fri Jan 15 20:00:47 2016 +0100 @@ -1,4 +1,6 @@ +import {QueryMode} from './query-mode'; + export interface QueryStep { - mode: string; + mode: QueryMode; objectType?: string; } \ No newline at end of file diff -r 9f5473536a98 -r 6cd6c09032aa app/query.service.ts --- a/app/query.service.ts Thu Jan 14 17:19:35 2016 +0100 +++ b/app/query.service.ts Fri Jan 15 20:00:47 2016 +0100 @@ -10,7 +10,7 @@ @Injectable() export class QueryService { - public queryState: QueryState; + public state: QueryState; public ismiObjectTypes; @@ -19,12 +19,18 @@ {id: 'att_contains', label: 'Attribute contains'}]; constructor(private _http: Http) { - this.queryState = { + this.state = { 'steps': [], 'cypherQuery': '', - 'cyperParams': {}, - 'results': [], - numResults: 0}; + 'cypherParams': {}, + 'results': [], + 'resultTypes': '', + 'numResults': 0 + }; + } + + getState() { + return this.state; } getQueryModes(): QueryMode[] { @@ -60,18 +66,37 @@ } setQueryStep(index: number, step: QueryStep) { - this.queryState.steps[index] = step; + this.state.steps[index] = step; this.createCypherQuery(); } createCypherQuery() { var cypher = ''; - var step = this.queryState.steps[0]; + var returnType = ''; + var step = this.state.steps[0]; if (step.mode.id === 'type_is') { cypher = `MATCH (e:${step.objectType}) return e`; + returnType = 'node'; } - this.queryState.cypherQuery = cypher; + this.state.cypherQuery = cypher; + this.state.resultTypes = returnType; + } + + updateQuery() { + this.createCypherQuery(); + var query = this.state.cypherQuery; + var params = this.state.cypherParams; + var res = this.fetchCypherResult(query, params); + res.subscribe( + data => { + console.debug("neo4j data=", data); + this.state.results = data.data.map(elem => elem[0]); + this.state.numResults = this.state.results.length; + }, + err => console.error("neo4j error=", err), + () => console.debug('neo4j query Complete') + ); } fetchCypherResult(query: string, params = {}) { diff -r 9f5473536a98 -r 6cd6c09032aa index.html --- a/index.html Thu Jan 14 17:19:35 2016 +0100 +++ b/index.html Fri Jan 15 20:00:47 2016 +0100 @@ -28,7 +28,7 @@ - Loading... + Loading...