Mercurial > hg > ltpda
diff m-toolbox/classes/@history/attachToDom.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@history/attachToDom.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,109 @@ + +function collectedHist = attachToDom(histObjs, dom, parent, collectedHist) + + % Attach the history always to the historyRoot node + historyRoot = dom.getElementsByTagName('historyRoot'); + historyRoot = historyRoot.item(0); + + % Do not call the super class + % attachToDom@ltpda_nuo(obj, dom, node); + + addgraph(histObjs); + + function histId = addgraph(histObjs) + + histId = ''; + for oo = 1:numel(histObjs) + histObj = histObjs(oo); + + if ~objectInArray(collectedHist, histObj) + + % Create object node + histNode = dom.createElement(class(histObj)); + histNode.setAttribute('shape', sprintf('%dx%d', size(histObj))); + + % Add methodInfo + if isa(histObj.methodInfo, 'minfo') + + if numel(histObj.methodInfo) == 1 && isempty(histObj.methodInfo.children) + % Special case if the minfo-object doesn't have children. + % Store in this case the minfo-object as an attribute. + histNode.setAttribute('methodInfo', histObj.methodInfo.getEncodedString()); + else + % Create an own minfo node if the minfo-object have children or + % there are more than one minfo-objects +% mInfoNode = dom.createElement('methodInfo'); + collectedHist = histObj.methodInfo.attachToDom(dom, histNode, collectedHist); +% histNode.appendChild(mInfoNode); + end + end + + % Add plistUsed + if isa(histObj.plistUsed, 'plist') + pUsedNode = dom.createElement('plistUsed'); + collectedHist = histObj.plistUsed.attachToDom(dom, pUsedNode, collectedHist); + histNode.appendChild(pUsedNode); + end + + % Add methodInvars + histNode.setAttribute('methodInvars', utils.xml.cellstr2str(histObj.methodInvars)); + + % Add proctime + histNode.setAttribute('proctime', num2str(histObj.proctime)); + + % Add UUID + histNode.setAttribute('UUID', histObj.UUID); + + % Add objectClass + histNode.setAttribute('objectClass', utils.xml.prepareString(histObj.objectClass)); + + % Add creator + % Special behavior for the creator of a PLIST because + % provenance/attachToDom adds a extra node and this is not what we + % want. Store the creator information direct to the plist node as an + % attribute. + if isa(histObj.creator, 'provenance') + SEPARATOR = ' ยง '; + creatorInfo = histObj.creator(1).getEncodedString(); + for cc = 2:numel(histObj.creator) + creatorInfo = [creatorInfo, SEPARATOR, histObj.creator(cc).getEncodedString()]; + end + else + creatorInfo = ''; + end + histNode.setAttribute('creator', creatorInfo); + + % Add inhists + if ~isempty(histObj.inhists) + inhistsNode = dom.createElement('inhists'); + attrHistId = addgraph(histObj.inhists); + inhistsNode.setAttribute('UUID', strtrim(attrHistId)); + histNode.appendChild(inhistsNode); + end + + collectedHist = [collectedHist histNode]; + end + + % Add the object UUID to the output. + histId = [histId, ' ', histObj.UUID]; + + end + + end + + for hh = 1:numel(collectedHist) + historyRoot.appendChild(collectedHist(hh)); + end + +end + +function res = objectInArray(objects, obj) + + res = false; + for kk=1:numel(objects) + if strcmp(utils.xml.mchar(objects(kk).getAttribute('UUID')), obj.UUID) + res = true; + break; + end + end +end