Created
May 12, 2016 11:49
-
-
Save YMA-MDL/07e22c7b310d9796c226e6ff27c9ada7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| System.Diagnostics.Debugger.Break(); | |
| // Example request | |
| // <Item type="tha_Node" id="E2E7D574B0E2449DA6367CD0F8D01448" project="Proj1" fromStream="Trunk" fromVersion="1" toStream="Trunk">... | |
| Innovator inn = this.getInnovator(); | |
| // Get the main node informations | |
| string proj = this.getAttribute("project"); | |
| if (proj == null) return inn.newError("Project is required"); | |
| string fromStream = this.getAttribute("fromStream"); | |
| if (fromStream == null) return inn.newError("fromStream is required"); | |
| string toStream = this.getAttribute("toStream"); | |
| if (toStream == null) return inn.newError("toStream is required"); | |
| string fromVersion = this.getAttribute("fromVersion"); | |
| if (fromVersion == null) return inn.newError("fromVersion is required"); | |
| // get the existing stream | |
| Item existingStream = inn.newItem("tha_StreamVersion","get"); | |
| existingStream.setProperty("name",fromStream); | |
| existingStream = existingStream.apply(); | |
| string existingStreamId = existingStream.getItemByIndex(0).getID(); | |
| string newStreamVersionId ; | |
| string newStreamId; | |
| string editStreamId; | |
| // create the newstream | |
| if (fromStream != toStream){ | |
| Item newStream = inn.newItem("tha_Stream","add"); | |
| newStream.setProperty("name",toStream); | |
| Item newStreamV = inn.newItem("tha_StreamVersion","add"); | |
| newStreamV.setProperty("version","1"); | |
| newStream.addRelationship(newStreamV); | |
| newStream = newStream.apply(); | |
| newStreamId = newStream.getID(); | |
| newStream= newStream.fetchRelationships("tha_StreamVersion"); | |
| newStreamVersionId = newStream.getItemsByXPath("//Item[@type='tha_StreamVersion']").getItemByIndex(0).getID(); | |
| } else { | |
| Item editStream = inn.newItem("tha_Stream","edit"); | |
| editStream.setAttribute("where","[tha_Stream].name = '"+toStream+"'"); | |
| Item newStreamV = inn.newItem("tha_StreamVersion","add"); | |
| string newVersion = Convert.ToString(Convert.ToInt16(fromVersion)+1); | |
| newStreamV.setProperty("version",newVersion); | |
| editStream.addRelationship(newStreamV); | |
| editStream = editStream.apply(); | |
| editStreamId = editStream.getID(); | |
| newStreamV = inn.newItem("tha_StreamVersion","get"); | |
| newStreamV.setAttribute("where","[tha_StreamVersion].source_id='"+editStreamId+"' AND [tha_StreamVersion].version='"+newVersion+"'"); | |
| newStreamV = newStreamV.apply(); | |
| newStreamVersionId = newStreamV.getID(); | |
| } | |
| // For each Node, check the property values against the "from" Stream Version | |
| Item nodes = this.getItemsByXPath("//Item[@type='tha_Node']"); | |
| for (int i=0; i<nodes.getItemCount(); i++){ | |
| Item node = nodes.getItemByIndex(i); | |
| Item nodeSource = inn.newItem("tha_NodeVersion","get"); | |
| nodeSource.setAttribute("where","[THA_NODEVERSION].source_id='" + node.getID() + "' AND [THA_NODEVERSION].id in (select nve.source_id from [THA_NODEVERSIONEFFECTIVITY] nve inner join [THA_STREAMVERSION] sv on nve.stream_version=sv.id inner join [THA_STREAM] s on sv.source_id=s.id where s.name='"+fromStream+"' and sv.version='"+fromVersion+"')"); | |
| nodeSource = nodeSource.apply(); | |
| if (nodeSource.getItemCount()<1){ | |
| // create the node | |
| Item newNode = inn.newItem("tha_Node","add"); | |
| newNode.setProperty("name",node.getProperty("name")); | |
| Item newNodeVersion = inn.newItem("tha_NodeVersion","add"); | |
| newNodeVersion.setProperty("tha_prop1",node.getProperty("tha_prop1")); | |
| newNodeVersion.setProperty("tha_prop2",node.getProperty("tha_prop2")); | |
| Item nodeEff = inn.newItem("tha_NodeVersionEffectivity","add"); | |
| nodeEff.setProperty("stream_version",newStreamVersionId); | |
| newNodeVersion.addRelationship(nodeEff); | |
| newNode.addRelationship(newNodeVersion); | |
| newNode = newNode.apply(); | |
| } else { | |
| if ((node.getProperty("tha_prop1") != nodeSource.getProperty("tha_prop1")) || (node.getProperty("tha_prop2") != nodeSource.getProperty("tha_prop2"))) { | |
| // if any properties have changed, create a new NodeVersion item and attach a NodeVersionEffectivity item for the new Stream Version | |
| Item editedNode = inn.newItem("tha_Node","edit"); | |
| editedNode.setID(node.getID()); | |
| Item newNodeVersion = inn.newItem("tha_NodeVersion","add"); | |
| newNodeVersion.setProperty("tha_prop1",node.getProperty("tha_prop1")); | |
| newNodeVersion.setProperty("tha_prop2",node.getProperty("tha_prop2")); | |
| Item nodeEff = inn.newItem("tha_NodeVersionEffectivity","add"); | |
| nodeEff.setProperty("stream_version",newStreamVersionId); | |
| newNodeVersion.addRelationship(nodeEff); | |
| editedNode.addRelationship(newNodeVersion); | |
| editedNode = editedNode.apply(); | |
| } else { | |
| // find node version to edit | |
| // == node version where node = node and nodeversioneff.streamversion = fromstreamversion | |
| // Retrieve the effective Node Versions for each node in the array | |
| // if all properties match, create a new NodeVersionEffectivity item for the new Stream Version and attach it to the existing Node Version | |
| nodeSource.setAction("edit"); | |
| Item newNodeVersionEff = inn.newItem("tha_NodeVersionEffectivity","add"); | |
| newNodeVersionEff.setProperty("stream_version",newStreamVersionId); | |
| nodeSource.addRelationship(newNodeVersionEff); | |
| nodeSource = nodeSource.apply(); | |
| } | |
| } | |
| } | |
| Item links = this.getItemsByXPath("//Item[@type='tha_Link']"); | |
| for (int i=0; i<links.getItemCount(); i++){ | |
| Item link = links.getItemByIndex(i); | |
| Item linkSource = inn.newItem("tha_Link","get"); | |
| linkSource.setProperty("source_id",link.getProperty("source_id")); | |
| linkSource.setProperty("related_id",link.getProperty("related_id")); | |
| linkSource = linkSource.apply(); | |
| if (linkSource.getItemCount()>0) { | |
| // if one exists, create a new LinkEffectivity item for the new Stream Version and attach it to the existing Link item | |
| linkSource.setAction("edit"); | |
| Item linkEff = inn.newItem("tha_LinkEffectivity","add"); | |
| linkEff.setProperty("stream_version",newStreamVersionId); | |
| linkSource.addRelationship(linkEff); | |
| linkSource = linkSource.apply(); | |
| } else { | |
| // if none exist, create a new Link item and attach a LinkEffectivity item for the new Stream Version | |
| Item newLink = inn.newItem("tha_Link","add"); | |
| newLink.setProperty("source_id",link.getProperty("source_id")); | |
| Item relatedItem = link.getProperty("related_id"); | |
| if (link.getProperty("related_id")== null){ | |
| Item newNode = ("tha_Node","get"); | |
| newNode.setAttribut("where","[tha_Node].name='"++"'"); | |
| } else { | |
| } | |
| newLink.setProperty("related_id",relatedItem); | |
| Item linkEff = inn.newItem("tha_LinkEffectivity","add"); | |
| linkEff.setProperty("stream_version",newStreamVersionId); | |
| newLink.addRelationship(linkEff); | |
| newLink = newLink.apply(); | |
| } | |
| } | |
| return this; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment