# HG changeset patch # User Sean Halle # Date 1407395450 25200 # Node ID 20a1407463a054d94014818ae0ebd41ba8a10263 # Parent d18eee376f456599c81cb75b7cb33b8b8488f8e6 sort of working with view sets -- does restore, (not tested) have to chg Display to handle view sets diff -r d18eee376f45 -r 20a1407463a0 1__Development/0__Code_Dev/Javascript_approach/.idea/workspace.xml --- a/1__Development/0__Code_Dev/Javascript_approach/.idea/workspace.xml Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/0__Code_Dev/Javascript_approach/.idea/workspace.xml Thu Aug 07 00:10:50 2014 -0700 @@ -4,7 +4,6 @@ - @@ -32,10 +31,10 @@ - + - + @@ -56,29 +55,17 @@ - + - - - - - - - - - - - - - - + + @@ -97,24 +84,46 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + @@ -123,18 +132,18 @@ - - + + - + - - + + @@ -161,13 +170,14 @@ @@ -213,6 +223,12 @@ + + + + + + @@ -335,15 +351,10 @@ file://$PROJECT_DIR$/MVDM_implementation/app/POPSyntaxGraphVisualizer.js 56 - - - file://$PROJECT_DIR$/MVDM_implementation/app/buildGabePatternSyntaxGraph.js - 67 - - @@ -382,7 +393,7 @@ - + @@ -416,7 +427,7 @@ - + @@ -458,7 +469,7 @@ - + @@ -484,7 +495,7 @@ - + @@ -518,7 +529,7 @@ - + @@ -544,7 +555,7 @@ - + @@ -587,22 +598,6 @@ - - - - - - - - - - - - - - - - @@ -611,54 +606,86 @@ - + - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - - + + + + + + + + + + - + diff -r d18eee376f45 -r 20a1407463a0 1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/GabePatternSrcHolder.js --- a/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/GabePatternSrcHolder.js Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/GabePatternSrcHolder.js Thu Aug 07 00:10:50 2014 -0700 @@ -3,11 +3,33 @@ //Make a SrcHolder object define( function( require, exports, module ) { +//bookkeeping, setup var visualizer = require('./POPSyntaxGraphVisualizer'); var commander = require('./POPSyntaxGraphCommander'); var modifier = require('./POPSyntaxGraphModifier'); var syntaxGraph = require('./buildGabePatternSyntaxGraph'); +var theObjColl = syntaxGraph.rootElem.__proto__.__proto__; +function ConstructorBuffer(){ +} + +function ShadowGraphElem() { + this.portsInShadows = []; + this.portsOutShadows = []; + this.portsIn = []; + this.portsOut = []; + this.linkedElems = []; + this.viewSet = {}; +}; +var shadowGraphElemProto = new ConstructorBuffer(); +shadowGraphElemProto.__proto__ = theObjColl; +ShadowGraphElem.prototype = shadowGraphElemProto; +ShadowGraphElem.prototype.constructor = ShadowGraphElem; + +//================================================== +//== +//================================================== + //The src holder has to serialize the syntax graph out to persistent // storage, and bring it back in, converting back to javascript objects //JSON can stringify and then parse back, but it can't handle circuits @@ -40,11 +62,7 @@ // return to the position were in just before visiting this element //-] when no where to return to, then done! var persistTheGraph = function( theGraphRoot ) { - var shadowGraphRoot = { rootElem: {}, rootViewSet: {} }; - var shadowRootElem = makeShadowElem(); - var shadowRootViewSet = { syntaxElem: {}, elemViewTree: {}, viewSetLinks: [] }; - shadowGraphRoot.rootElem = shadowRootElem; - shadowGraphRoot.rootViewSet = shadowRootViewSet; + var shadowGraphRoot = {}; startPersisting(); //send notice to web server that persist protocol is starting //save out the top level object that has the handles to the view hierarchy root @@ -54,12 +72,12 @@ // clean up. Any view stuff will be reached from that element var rootElem = theGraphRoot.rootElem; //save 'cause pointers about to be replaced persistAnchorAndViewSetRoot( theGraphRoot, shadowGraphRoot ); - visitNextElemAndPersistIt( rootElem, shadowRootElem ); - endPersisting(); //tell web server that persist protocol ended + visitNextElemAndPersistIt( rootElem ); +// endPersisting(); //tell web server that persist protocol ended //now, restore all the pointers, replacing the IDs with pointer to object restoreAnchorAndViewSetRoot( theGraphRoot, shadowGraphRoot ); - visitNextElemAndRestoreIt( rootElem, shadowRootElem ); + visitNextElemAndRestoreIt( rootElem ); } function persistAnchorAndViewSetRoot( theGraphRoot, shadowGraphRoot ) { @@ -89,94 +107,75 @@ } //Contract: have already verified that this elem has not been visited before calling -var visitNextElemAndPersistIt = function( elem, shadowElem ) { +var visitNextElemAndPersistIt = function( elem ) { //mark the element as having been visited elem.isAlreadyVisited = true; //cut the back link going from the view set to the elem node - if(elem.viewSet.syntaxElem) { - shadowElem.viewSet.syntaxElem = elem.viewSet.syntaxElem; + if((elem.viewSet||{}).syntaxElem) { elem.viewSet.syntaxElem = elem.viewSet.syntaxElem.ID; } - //visit each port (save this position before visiting!) + //visit each port var elemToVisit = {}; var i = 0; var j = 0; var inPort = {}; var ports = elem.portsIn; var numPorts = ports.length; var numPairedPorts = 0; - //as go along, save pointers into shadow element.. for( j = 0; j < numPorts; j++ ) { inPort = ports[j]; numPairedPorts = inPort.pairedPorts.length; - //shadowElem may not have enough positions in portsIn array.. - shadowElem.portsIn.push({pairedPorts: []}); //follow each pairedPort link for( i = 0; i < numPairedPorts; i++ ) { //process element linked to the paired port elemToVisit = inPort.pairedPorts[i].element; if( !elemToVisit.isAlreadyVisited ) { - //not visited yet, so doesn't have a shadow elem - var newShadowElem = makeShadowElem(); - fixthis shadowElem.portsIn[j].pairedPortShadows[i] = newShadowElem; - visitNextElemAndPersistIt(elemToVisit, newShadowElem ); + visitNextElemAndPersistIt( elemToVisit ); } //back from visit, replace pointer with ID of pointed to port - shadowElem.portsIn[j].pairedPorts[i] = inPort.pairedPorts[i]; //first save it! inPort.pairedPorts[i] = inPort.pairedPorts[i].ID; } - //save and replace the element back-pointer in the port object - shadowElem.portsIn[j].element = inPort.element; + //replace the element back-pointer in the port object inPort.element = inPort.element.ID; } ports = elem.portsOut; numPorts = ports.length; var outPort = {}; for( j = 0; j < numPorts; j++ ) { outPort = ports[j]; numPairedPorts = outPort.pairedPorts.length; - shadowElem.portsOut.push({pairedPorts: []}); //follow each pairedPort link for( i = 0; i < numPairedPorts; i++ ) { //process element linked to the paired port elemToVisit = outPort.pairedPorts[i].element; if( !elemToVisit.isAlreadyVisited ) { - var newShadowElem = { portsIn: [], portsOut: [], linkedElems: [] }; - shadowElem.portsOut[j].pairedPorts.push(newShadowElem); - visitNextElemAndPersistIt(elemToVisit, newShadowElem ); + visitNextElemAndPersistIt( elemToVisit ); } //when come back, replace pointer with ID of pointed to port outPort.pairedPorts[i] = outPort.pairedPorts[i].ID; } - //save and replace the element back-pointer in the port object - shadowElem.portsOut[j].element = outPort.element; + //replace the element back-pointer in the port object outPort.element = outPort.element.ID; } var numLinkedElems = elem.linkedElems.length; for( i = 0; i < numLinkedElems; i++ ) { if( !(elem.linkedElems[i].isAlreadyVisited) ) { - var newShadowElem = { portsIn: [], portsOut: [], linkedElems: [] }; - shadowElem.linkedElems.push(newShadowElem); - visitNextElemAndPersistIt(elem.linkedElems[i], newShadowElem ); + visitNextElemAndPersistIt( elem.linkedElems[i] ); } //back from visit, replace pointer with ID of pointed to elem - shadowElem.linkedElems[i] = elem.linkedElems[i]; elem.linkedElems[i] = elem.linkedElems[i].ID; } //cut links to the view sets embedded within view set link objects - if(elem.viewSet.viewSetLinks) { + if((elem.viewSet||{}).viewSetLinks) { var viewSet = elem.viewSet; var numLinked = viewSet.viewSetLinks.length; var viewSetLink = {}; for (i = 0; i < numLinked; i++) { viewSetLink = viewSet.viewSetLinks[i]; - if (viewSetLink) { - var shadowLink = { referenceViewSet: {}, subordinateViewSet: {} }; - shadowLink.referenceViewSet = viewSetLink.referenceViewSet; - shadowLink.subordinateViewSet = viewSetLink.subordinateViewSet; + if( viewSetLink ) { viewSetLink.referenceViewSet = viewSetLink.referenceViewSet.ID; viewSetLink.subordinateViewSet = viewSetLink.subordinateViewSet.ID; } } } //cut back-links to parent view boxes within view set tree - if(elem.viewSet.rootViewBox) { + if((elem.viewSet||{}).rootViewBox ) { walkViewTree( elem.viewSet.rootViewBox ); } @@ -189,6 +188,7 @@ //now that the graph, with its view sets, has been written out to JSON, // go back and restore the pointers, replacing the IDs with actual pointer. +//Replace top pointers from a shadow, then after this can lookup pointers by ID function restoreAnchorAndViewSetRoot( theGraphRoot, shadowGraphRoot ) { //just copy the above code and reverse the direction of the assignments! theGraphRoot.rootElem = shadowGraphRoot.rootElem; @@ -201,108 +201,104 @@ } //Contract: have already verified that this elem has not been visited before calling -var visitNextElemAndRestoreIt = function( elem, shadowElem ) { +var visitNextElemAndRestoreIt = function( elem ) { //mark the element as having been visited elem.isAlreadyVisited = false; //all start at true, making false marks as restored //restore the back link going from the view set to the elem node - if(elem.viewSet.syntaxElem) { - elem.viewSet.syntaxElem = shadowElem.viewSet.syntaxElem; + if((elem.viewSet||{}).syntaxElem) { //idiom makes safe when viewset undefined + elem.viewSet.syntaxElem = elem.getByID(elem.viewSet.syntaxElem); } //restore each port var elemToVisit = {}; var i = 0; var j = 0; var inPort = {}; - var ports = elem.portsIn; var numPorts = ports.length; var numPairedPorts = 0; - //as go along, restore pointers from shadow element.. + var portsIn = elem.portsIn; var numPorts = portsIn.length; var numPairedPorts = 0; + //as go along, restore pointers by looking them up for( j = 0; j < numPorts; j++ ) { - inPort = ports[j]; + inPort = portsIn[j]; + + //restore the element back-pointer in the port object + inPort.element = inPort.getByID(inPort.element); + + //follow each pairedPort link numPairedPorts = inPort.pairedPorts.length; - //follow each pairedPort link - //restore the element back-pointer in the port object - inPort.element = shadowElem.portsIn[j].element; for( i = 0; i < numPairedPorts; i++ ) { //process element linked to the paired port //first, replace pointer to port - inPort.pairedPorts[i] = shadowElem.portsIn[j].pairedPorts[i]; -//verify this is right order -- do rest of restore on tis one before visit? + inPort.pairedPorts[i] = inPort.getByID(inPort.pairedPorts[i]); elemToVisit = inPort.pairedPorts[i].element; - if( elemToVisit.isAlreadyVisited ) { //if still marked from before - visitNextElemAndPersistIt(elemToVisit, shadowElem.portsIn[j].pairedPorts[i] ); + if( typeof elemToVisit == 'number' ) { + //means the element back-pointer inside the port on the other end + // is still the ID.. IE, that port and its element not restored yet + visitNextElemAndRestoreIt( outPort.getByID(elemToVisit) ); + } + else if( elemToVisit.isAlreadyVisited ) { //if still marked from before + //don't think this case will ever come up! if elem not restored, + // then the elem's port's back pointer will still be an ID and above + // if() will catch it.. + visitNextElemAndRestoreIt( elemToVisit ); } } } - ports = elem.portsOut; numPorts = ports.length; var outPort = {}; + var outPorts = elem.portsOut; numPorts = outPorts.length; var outPort = {}; for( j = 0; j < numPorts; j++ ) { - outPort = ports[j]; + outPort = outPorts[j]; + //restore back link from outPort to its element + outPort.element = outPort.getByID(outPort.element); numPairedPorts = outPort.pairedPorts.length; - shadowElem.portsOut.push({pairedPorts: []}); - //follow each pairedPort link + //visit each pairedPort link for( i = 0; i < numPairedPorts; i++ ) { + //restore the pointer to the paired port + outPort.pairedPorts[i] = outPort.getByID(outPort.pairedPorts[i]); //process element linked to the paired port elemToVisit = outPort.pairedPorts[i].element; - if( !elemToVisit.isAlreadyVisited ) { - var newShadowElem = { portsIn: [], portsOut: [], linkedElems: [] }; - shadowElem.portsOut[j].pairedPorts.push(newShadowElem); - visitNextElemAndPersistIt(elemToVisit, newShadowElem ); + if( typeof elemToVisit == 'number' ) { + //means the element back-pointer inside the port on the other end + // is still the ID.. IE, that port and its element not restored yet + visitNextElemAndRestoreIt( outPort.getByID(elemToVisit) ); } - //when come back, replace pointer with ID of pointed to port - outPort.pairedPorts[i] = outPort.pairedPorts[i].ID; + else if( elemToVisit.isAlreadyVisited ) { //if needs restoring + //don't think this case will ever come up! if not restored, + // then the elem back pointer will still be an ID and above + // if() will catch it.. + visitNextElemAndRestoreIt( elemToVisit ); + } } - //save and replace the element back-pointer in the port object - shadowElem.portsOut[j].element = outPort.element; - outPort.element = outPort.element.ID; } var numLinkedElems = elem.linkedElems.length; for( i = 0; i < numLinkedElems; i++ ) { - if( !(elem.linkedElems[i].isAlreadyVisited) ) { - var newShadowElem = { portsIn: [], portsOut: [], linkedElems: [] }; - shadowElem.linkedElems.push(newShadowElem); - visitNextElemAndPersistIt(elem.linkedElems[i], newShadowElem ); + //restore linked elem first, then process that restored elem + elem.linkedElems[i] = elem.getByID( elem.linkedElems[i] ); + if( elem.linkedElems[i].isAlreadyVisited ) { + visitNextElemAndRestoreIt( elem.linkedElems[i] ); } - //back from visit, replace pointer with ID of pointed to elem - shadowElem.linkedElems[i] = elem.linkedElems[i]; - elem.linkedElems[i] = elem.linkedElems[i].ID; } - //cut links to the view sets embedded within view set link objects - if(elem.viewSet.viewSetLinks) { + //restore links to the view sets embedded within view set link objects + if( (elem.viewSet||{}).viewSetLinks ) { var viewSet = elem.viewSet; - var numLinked = viewSet.viewSetLinks.length; + var numLinked = viewSet.viewSetLinks.length; //array always exists var viewSetLink = {}; for (i = 0; i < numLinked; i++) { viewSetLink = viewSet.viewSetLinks[i]; if (viewSetLink) { - var shadowLink = { referenceViewSet: {}, subordinateViewSet: {} }; - shadowLink.referenceViewSet = viewSetLink.referenceViewSet; - shadowLink.subordinateViewSet = viewSetLink.subordinateViewSet; - viewSetLink.referenceViewSet = viewSetLink.referenceViewSet.ID; - viewSetLink.subordinateViewSet = viewSetLink.subordinateViewSet.ID; + viewSetLink.referenceViewSet = elem.getByID(viewSetLink.referenceViewSet); + viewSetLink.subordinateViewSet = elem.getByID(viewSetLink.subordinateViewSet); } } } - //cut back-links to parent view boxes within view set tree - if(elem.viewSet.rootViewBox) { - walkViewTree( elem.viewSet.rootViewBox ); + //restore back-links to parent view boxes within view set tree + if( (elem.viewSet||{}).rootViewBox ) { //idiom that's safe when viewSet undefine + walkViewTreeAndRestore( elem.viewSet.rootViewBox ); } - - //this elem, and all objects reachable from it are now safe to be - // stringified with JSON.. so do it! - var stringOfElemNode = JSON.stringify( elem, null, '\t' ); - console.log("JSON of elem: " + stringOfElemNode ); - persistString( stringOfElemNode ); } - persistTheGraph( syntaxGraph ); +persistTheGraph( syntaxGraph ); console.log("\npersisting graph done!\n") //retrievePersistedString(); -function makeShadowElem(){ - return { portsIn: [], portsOut: [], linkedElems: [], portsInShadows: [], portsOutShadows [] }; - -} - //walk the tree, replacing all parent pointers with ID // dont bother keeping shadow copy, easily restored without copy function walkViewTree( viewBox ) { @@ -320,12 +316,30 @@ // persistString( JSON.stringify(viewBox)) console.log("done recursing viewBox: " + viewBox.ID) } +//walk the tree, restoring all IDs with parent and children pointers +function walkViewTreeAndRestore( viewBox ) { + //replace ID that's in the parent field with looked up object pointer + if(viewBox.parent) viewBox.parent = viewBox.getByID(viewBox.parent); + if(viewBox.children.length > 0) { //all view boxes should have array! + var childBox = {}; + var numChildren = viewBox.children.length; + for (i = 0; i < numChildren; i++) { + viewBox.children[i] = viewBox.getByID(viewBox.children[i]); + childBox = viewBox.children[i]; + if( childBox ) { + walkViewTree( childBox ); + } + } + } + console.log("done restoring viewBox: " + viewBox.ID) +} function startPersisting() { //bottle server var theUrl = "http://localhost:8080/startsavinggraph"; var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", theUrl, false ); + console.log("about to send start persisting command"); xmlHttp.send( null ); console.log("started persisting: " + xmlHttp.responseText ); } @@ -366,7 +380,7 @@ var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", theUrl, false ); xmlHttp.send( null ); - console.log("started persisting: " + xmlHttp.responseText ); + console.log("end persisting: " + xmlHttp.responseText ); } //================================ diff -r d18eee376f45 -r 20a1407463a0 1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPDisplay.js --- a/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPDisplay.js Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPDisplay.js Thu Aug 07 00:10:50 2014 -0700 @@ -86,7 +86,7 @@ var viewBox = {}; var newSurface = {}; var newSurfMod = {}; var newContainer = {}; var newContMod = {}; var i = 0; var numChildren = 0; - +rewrite display to handle view sets! var nextGenParents = []; var parentContainer = {}; var viewBoxChildren = []; nextGenParents.push( {viewBox: rootViewSet, container: rootContainer}); //loop, getting oldest parent pair in queue each time @@ -173,7 +173,7 @@ init: init, connectToCommander: connectToCommander, handleGesture: handleGesture, - acceptViewList: acceptRootViewSet + acceptRootViewSet: acceptRootViewSet }; }); diff -r d18eee376f45 -r 20a1407463a0 1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPSyntaxGraphVisualizer.js --- a/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPSyntaxGraphVisualizer.js Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/0__Code_Dev/Javascript_approach/MVDM_implementation/app/POPSyntaxGraphVisualizer.js Thu Aug 07 00:10:50 2014 -0700 @@ -3,8 +3,6 @@ //Make a Visualizer object, and a number of functions that operate on it. // One of the functions accepts define(function(require, exports, module) { -//Create the famous infrastructure, which is used for rendering on screen - var srcHolder = {}; var DisplayToSendTo = {}; diff -r d18eee376f45 -r 20a1407463a0 1__Development/6__Website/POPBottleServer/POPBottleServer.py --- a/1__Development/6__Website/POPBottleServer/POPBottleServer.py Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/6__Website/POPBottleServer/POPBottleServer.py Thu Aug 07 00:10:50 2014 -0700 @@ -3,40 +3,18 @@ graphFile = None -@route('/') -def index(): - return 'Hello!' +#============== -@route('/') -@route('/hello/') -def nameroute(name): - return template('Hello {{name}}!', name=name) - -@route('/savejson/') -def savejson(thejson): - text_file = open("syntaxGraph.json", "w") - text_file.write("%s" % thejson) - text_file.close() - print "hello" - response.set_header('Access-Control-Allow-Origin', '*') -# return 'Got JSON!' -# return template('Got JSON! {{printjson}}!', printjson = thejson) - -@route('/getjson') -def getjson(): - text_file = open("syntaxGraph.json", "r") - returnjson = text_file.read() - text_file.close() - response.set_header('Access-Control-Allow-Origin', '*') - return returnjson - -#=============== @route('/startsavinggraph') def startsavinggraph(): - global graphFile - graphFile = open("syntaxGraph.json", "w") - response.set_header('Access-Control-Allow-Origin', '*') - return 'ACK' + global graphFile + graphFile = open("syntaxGraph.json", "w") + print "opened graph file " + print "Name of the file: ", graphFile.name + print "Closed or not : ", graphFile.closed + print "Opening mode : ", graphFile.mode + print "Softspace flag : ", graphFile.softspace + response.set_header('Access-Control-Allow-Origin', '*') @route('/save1elem/') def save1elem(thejson): @@ -44,11 +22,10 @@ thejson = thejson.replace('%N', '\n') thejson = thejson.replace('%H', '\\') thejson = thejson.replace('%S', '/') - print thejson +# print thejson global graphFile - graphFile.write("%s\n\n" % thejson) + graphFile.write("%s\nend elem\n" % thejson) response.set_header('Access-Control-Allow-Origin', '*') - return 'ACK' @route('/endsavinggraph') def endsavinggraph(): @@ -80,4 +57,7 @@ graphFile.close() return 'ACK' +#================ + run(host='localhost', port=8080) + diff -r d18eee376f45 -r 20a1407463a0 1__Development/6__Website/POPBottleServer/syntaxGraph.json --- a/1__Development/6__Website/POPBottleServer/syntaxGraph.json Wed Aug 06 00:16:19 2014 -0700 +++ b/1__Development/6__Website/POPBottleServer/syntaxGraph.json Thu Aug 07 00:10:50 2014 -0700 @@ -0,0 +1,477 @@ +{ + "rootElem": 1, + "rootViewSet": { + "ID": 2, + "viewSetLinks": [ + { + "ID": 3, + "referenceViewSet": 2, + "subordinateViewSet": 4, + "xOffset": 0, + "yOffset": 0, + "scale": 1 + } + ] + } +} +end elem +{ + "ID": 31, + "properties": [ + { + "ID": 32, + "propertyName": "TypeOfElement", + "propertyValue": "Command", + "subProperties": [ + { + "ID": 33, + "propertyName": "CommandID", + "propertyValue": "GabePattPop", + "subProperties": [] + } + ] + }, + { + "ID": 34, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticPatternRoot", + "subProperties": [] + } + ], + "portsIn": [ + { + "ID": 35, + "element": 31, + "properties": [ + { + "ID": 36, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 37, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [ + 28 + ] + } + ], + "portsOut": [ + { + "ID": 38, + "element": 31, + "properties": [ + { + "ID": 39, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 40, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + }, + { + "ID": 41, + "element": 31, + "properties": [ + { + "ID": 42, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 43, + "propertyName": "TypeOfCommData", + "propertyValue": "float", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + } + ], + "linkedElems": [], + "isAlreadyVisited": true +} +end elem +{ + "ID": 18, + "properties": [ + { + "ID": 19, + "propertyName": "TypeOfElement", + "propertyValue": "Command", + "subProperties": [ + { + "ID": 20, + "propertyName": "CommandID", + "propertyValue": "GabePattPush", + "subProperties": [] + } + ] + }, + { + "ID": 21, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticPatternRoot", + "subProperties": [] + } + ], + "portsIn": [ + { + "ID": 22, + "element": 18, + "properties": [ + { + "ID": 23, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 24, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + }, + { + "ID": 25, + "element": 18, + "properties": [ + { + "ID": 26, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 27, + "propertyName": "TypeOfCommData", + "propertyValue": "float", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + } + ], + "portsOut": [ + { + "ID": 28, + "element": 18, + "properties": [ + { + "ID": 29, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 30, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [ + 35 + ] + } + ], + "linkedElems": [], + "isAlreadyVisited": true +} +end elem +{ + "ID": 12, + "properties": [ + { + "ID": 13, + "propertyName": "TypeOfElement", + "propertyValue": "GabeQueryPattern", + "subProperties": [] + }, + { + "ID": 14, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticHierarchy", + "subProperties": [] + } + ], + "portsIn": [], + "portsOut": [], + "linkedElems": [ + 18, + 31 + ], + "isAlreadyVisited": true +} +end elem +{ + "ID": 44, + "properties": [ + { + "ID": 45, + "propertyName": "TypeOfElement", + "propertyValue": "Command", + "subProperties": [ + { + "ID": 46, + "propertyName": "CommandID", + "propertyValue": "GabePassThrough", + "subProperties": [] + } + ] + }, + { + "ID": 47, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticPatternRoot", + "subProperties": [] + } + ], + "portsIn": [ + { + "ID": 48, + "element": 44, + "properties": [ + { + "ID": 49, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 50, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + }, + { + "ID": 51, + "element": 44, + "properties": [ + { + "ID": 52, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 53, + "propertyName": "TypeOfCommData", + "propertyValue": "float", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + } + ], + "portsOut": [ + { + "ID": 54, + "element": 44, + "properties": [ + { + "ID": 55, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 56, + "propertyName": "TypeOfCommData", + "propertyValue": "GabePattStack", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + }, + { + "ID": 57, + "element": 44, + "properties": [ + { + "ID": 58, + "propertyName": "TypeOfPort", + "propertyValue": "dataComm", + "subProperties": [ + { + "ID": 59, + "propertyName": "TypeOfCommData", + "propertyValue": "float", + "subProperties": [] + } + ] + } + ], + "pairedPorts": [] + } + ], + "linkedElems": [], + "isAlreadyVisited": true +} +end elem +{ + "ID": 15, + "properties": [ + { + "ID": 16, + "propertyName": "TypeOfElement", + "propertyValue": "GabeReplacePattern", + "subProperties": [] + }, + { + "ID": 17, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticHierarchy", + "subProperties": [] + } + ], + "portsIn": [], + "portsOut": [], + "linkedElems": [ + 44 + ], + "isAlreadyVisited": true +} +end elem +{ + "ID": 1, + "properties": [ + { + "ID": 10, + "propertyName": "TypeOfElement", + "propertyValue": "GabeTransformRule", + "subProperties": [] + }, + { + "ID": 11, + "propertyName": "TypeOfSyntacticStructure", + "propertyValue": "syntacticHierarchy", + "subProperties": [] + } + ], + "portsIn": [], + "portsOut": [], + "linkedElems": [ + 12, + 15 + ], + "viewSet": { + "ID": 4, + "syntaxElem": 1, + "rootViewBox": { + "ID": 5, + "shape": "", + "width": 1000, + "height": 700, + "xOffset": 0, + "yOffset": 0, + "scale": 1, + "parent": 4, + "children": [ + { + "ID": 6, + "shape": " properties ", + "width": 49, + "height": 14, + "xOffset": 8, + "yOffset": 8, + "scale": 1, + "parent": 5, + "children": [], + "handlers": [ + { + "type": "key" + } + ] + }, + { + "ID": 7, + "shape": " portsIn ", + "width": 33, + "height": 14, + "xOffset": 8, + "yOffset": 25, + "scale": 1, + "parent": 5, + "children": [], + "handlers": [ + { + "type": "key" + } + ] + }, + { + "ID": 8, + "shape": " portsOut ", + "width": 42, + "height": 14, + "xOffset": 8, + "yOffset": 42, + "scale": 1, + "parent": 5, + "children": [], + "handlers": [ + { + "type": "key" + } + ] + }, + { + "ID": 9, + "shape": " linkedElems ", + "width": 55, + "height": 14, + "xOffset": 8, + "yOffset": 59, + "scale": 1, + "parent": 5, + "children": [], + "handlers": [ + { + "type": "key" + } + ] + } + ], + "handlers": [ + { + "type": "key" + }, + { + "type": "key" + } + ] + }, + "viewSetLinks": [] + }, + "isAlreadyVisited": true +} +end elem