diff src/app/query-state.ts @ 58:3b4046e0cc02 default

Merge from ng2-table branch. d7c947909ab888c013171b8c037e4f9fab30fe57
author casties
date Wed, 29 Mar 2017 17:19:12 +0200
parents d7c947909ab8
children
line wrap: on
line diff
--- a/src/app/query-state.ts	Mon Mar 20 18:50:31 2017 +0100
+++ b/src/app/query-state.ts	Wed Mar 29 17:19:12 2017 +0200
@@ -1,5 +1,6 @@
 import {QueryStep} from './query-step';
 import {ResultType} from './result-type';
+import {QueryMode, getQueryModeById} from './query-mode';
 
 export class QueryState {
     public steps: QueryStep[] = [];
@@ -15,10 +16,59 @@
     public resultTypes: string;
     public resultType: ResultType;
     public resultInfo: string;
-    public resultAttributes: string[];    
+    public resultAttributes: string[];
     public resultRelations: any[];
     public resultColumns: any[];
     
+
+    /**
+     * Sets the query state from a string.
+     */
+    setStateFromString(newStateString: string) {
+        try {
+            // state string is json
+            let newState = JSON.parse(newStateString);
+            // state should be list of steps
+            if (!Array.isArray(newState)) return;
+            let newSteps: QueryStep[] = [];
+            newState.forEach((elem) => {
+                // step is an array [mode, params]
+                if (!Array.isArray(elem)) return;
+                let mode = elem[0];
+                // get QueryMode object
+                let qm: QueryMode = getQueryModeById(mode);
+                let params = elem[1];
+                if (qm != null && params != null) {
+                    // construct QueryStep
+                    let qs = new QueryStep(qm, params);
+                    newSteps.push(qs);
+                }
+            });
+            if (newSteps.length > 0) {
+                // set new state
+                this.steps = newSteps;
+            }
+        } catch (e) {
+            console.error("Unable to set state from string: "+newStateString);
+        }
+    }
+
+    getNumSteps() {
+        return this.steps.length;
+    }
+    
+    /**
+     * Returns the current query state as a string.
+     */
+    getStateAsString(): string {
+        let stateList = this.steps.map((qs) => [qs.mode.id, qs.params]);
+        let stateStr = JSON.stringify(stateList);
+        return stateStr;
+    }
+
+    /**
+     * Returns the cypher query as text for display.
+     */
     getQueryText() {
         let text = this.resultCypherQuery;
         let hasParams = false;