From 8a59e6ae972891376e0749360751e90dc577eb9e Mon Sep 17 00:00:00 2001 From: Nicola Vigano <nicola.vigano@esrf.fr> Date: Sat, 11 May 2013 15:35:34 +0200 Subject: [PATCH] OAR: reduced proliferation of files Signed-off-by: Nicola Vigano <nicola.vigano@esrf.fr> --- zUtil_OAR/gtOarLoadParameters.m | 44 +++++++++++++++++++++++++++++- zUtil_OAR/gtOarSaveParameters.m | 37 ++++++++++++++++++++++++- zUtil_OAR/gtReadParamsOARfromXML.m | 41 ---------------------------- zUtil_OAR/gtWriteParamsOARtoXML.m | 34 ----------------------- 4 files changed, 79 insertions(+), 77 deletions(-) delete mode 100644 zUtil_OAR/gtReadParamsOARfromXML.m delete mode 100644 zUtil_OAR/gtWriteParamsOARtoXML.m diff --git a/zUtil_OAR/gtOarLoadParameters.m b/zUtil_OAR/gtOarLoadParameters.m index 044443aa..497ec4d1 100644 --- a/zUtil_OAR/gtOarLoadParameters.m +++ b/zUtil_OAR/gtOarLoadParameters.m @@ -1,6 +1,6 @@ function oarparameters = gtOarLoadParameters(filename) if (exist([filename '.xml'], 'file')) - oarparameters = gtReadParamsOARfromXML([filename '.xml']); + oarparameters = readParamsOARfromXML([filename '.xml']); elseif (exist([filename '.mat'], 'file')) oarparameters = []; load([filename '.mat']); @@ -9,3 +9,45 @@ function oarparameters = gtOarLoadParameters(filename) 'oarparameters.[xml | mat] is missing') end end + +function oarparams = readParamsOARfromXML(filename) + tree = xmlread(filename); + oarElem = tree.getFirstChild(); + oarparams = struct(); + funcElements = oarElem.getElementsByTagName('function'); + for numFunc = 1:funcElements.getLength() + funcElem = funcElements.item(numFunc-1); + funcName = char(funcElem.getAttribute('name')); + arrayElements = funcElem.getElementsByTagName('array'); + for numArray = 1:arrayElements.getLength() + arrayElem = arrayElements.item(numArray-1); + arrayName = sprintf('array%s', char(arrayElem.getAttribute('id'))); + jobElements = arrayElem.getElementsByTagName('job'); + + allocCell = cell(1, jobElements.getLength()); + + fields = cell(1, 0); + fieldElements = jobElements.item(0).getChildNodes(); + for numField = 1:fieldElements.getLength(); + fieldName = char(fieldElements.item(numField-1).getNodeName()); + if (~strcmp(fieldName, '#text')) + fields{1, end+1} = fieldName; + end + end + fieldsExpansion = fields; + fieldsExpansion(2, :) = {allocCell}; + jobs = struct('jobId', allocCell, fieldsExpansion{:}); + + for numJob = 1:jobElements.getLength() + jobElem = jobElements.item(numJob-1); + jobs(numJob).jobId = str2double(char(jobElem.getAttribute('id'))); + + for field = fields + fieldElems = jobElem.getElementsByTagName(field{1}); + jobs(numJob).(field{1}) = char(fieldElems.item(0).getTextContent()); + end + end + oarparams.(funcName).(arrayName).job = jobs; + end + end +end diff --git a/zUtil_OAR/gtOarSaveParameters.m b/zUtil_OAR/gtOarSaveParameters.m index 201dedb0..516149ee 100644 --- a/zUtil_OAR/gtOarSaveParameters.m +++ b/zUtil_OAR/gtOarSaveParameters.m @@ -1,4 +1,39 @@ function gtOarSaveParameters(filename, oarparameters) - gtWriteParamsOARtoXML([filename '.xml'], oarparameters); + writeParamsOARtoXML([filename '.xml'], oarparameters); save([filename '.mat'], 'oarparameters', '-v7.3'); end + +function writeParamsOARtoXML(filename, oarparams) + docNode = com.mathworks.xml.XMLUtils.createDocument('oarparameters'); + docRootNode = docNode.getDocumentElement(); + funcNames = fieldnames(oarparams); + for funcName = funcNames' + funcElement = docNode.createElement('function'); + funcElement.setAttribute('name', funcName{1}); + func = oarparams.(funcName{1}); + arrayNames = fieldnames(func); + for arrayName = arrayNames' + arrayElement = docNode.createElement('array'); + arrayElement.setAttribute('id', arrayName{1}(6:end)); + array = func.(arrayName{1}); + for n = 1:numel(array.job) + jobElement = docNode.createElement('job'); + jobElement.setAttribute('id', num2str(array.job(n).jobId)); + + % Using reflection, but avoiding duplication of Job ID info + fields = fieldnames(array.job(n)); + fields = setdiff(fields, {'jobId'}); + for field = fields' + fieldElement = docNode.createElement(field{1}); + fieldElement.appendChild( ... + docNode.createTextNode(array.job(n).(field{1}))); + jobElement.appendChild(fieldElement); + end + arrayElement.appendChild(jobElement); + end + funcElement.appendChild(arrayElement); + end + docRootNode.appendChild(funcElement); + end + xmlwrite(filename, docNode); +end diff --git a/zUtil_OAR/gtReadParamsOARfromXML.m b/zUtil_OAR/gtReadParamsOARfromXML.m deleted file mode 100644 index d9771db3..00000000 --- a/zUtil_OAR/gtReadParamsOARfromXML.m +++ /dev/null @@ -1,41 +0,0 @@ -function oarparams = gtReadParamsOARfromXML(filename) - tree = xmlread(filename); - oarElem = tree.getFirstChild(); - oarparams = struct(); - funcElements = oarElem.getElementsByTagName('function'); - for numFunc = 1:funcElements.getLength() - funcElem = funcElements.item(numFunc-1); - funcName = char(funcElem.getAttribute('name')); - arrayElements = funcElem.getElementsByTagName('array'); - for numArray = 1:arrayElements.getLength() - arrayElem = arrayElements.item(numArray-1); - arrayName = sprintf('array%s', char(arrayElem.getAttribute('id'))); - jobElements = arrayElem.getElementsByTagName('job'); - - allocCell = cell(1, jobElements.getLength()); - - fields = cell(1, 0); - fieldElements = jobElements.item(0).getChildNodes(); - for numField = 1:fieldElements.getLength(); - fieldName = char(fieldElements.item(numField-1).getNodeName()); - if (~strcmp(fieldName, '#text')) - fields{1, end+1} = fieldName; - end - end - fieldsExpansion = fields; - fieldsExpansion(2, :) = {allocCell}; - jobs = struct('jobId', allocCell, fieldsExpansion{:}); - - for numJob = 1:jobElements.getLength() - jobElem = jobElements.item(numJob-1); - jobs(numJob).jobId = str2double(char(jobElem.getAttribute('id'))); - - for field = fields - fieldElems = jobElem.getElementsByTagName(field{1}); - jobs(numJob).(field{1}) = char(fieldElems.item(0).getTextContent()); - end - end - oarparams.(funcName).(arrayName).job = jobs; - end - end -end diff --git a/zUtil_OAR/gtWriteParamsOARtoXML.m b/zUtil_OAR/gtWriteParamsOARtoXML.m deleted file mode 100644 index 62491ba2..00000000 --- a/zUtil_OAR/gtWriteParamsOARtoXML.m +++ /dev/null @@ -1,34 +0,0 @@ -function gtWriteParamsOARtoXML(filename, oarparams) - docNode = com.mathworks.xml.XMLUtils.createDocument('oarparameters'); - docRootNode = docNode.getDocumentElement(); - funcNames = fieldnames(oarparams); - for funcName = funcNames' - funcElement = docNode.createElement('function'); - funcElement.setAttribute('name', funcName{1}); - func = oarparams.(funcName{1}); - arrayNames = fieldnames(func); - for arrayName = arrayNames' - arrayElement = docNode.createElement('array'); - arrayElement.setAttribute('id', arrayName{1}(6:end)); - array = func.(arrayName{1}); - for n = 1:numel(array.job) - jobElement = docNode.createElement('job'); - jobElement.setAttribute('id', num2str(array.job(n).jobId)); - - % Using reflection, but avoiding duplication of Job ID info - fields = fieldnames(array.job(n)); - fields = setdiff(fields, {'jobId'}); - for field = fields' - fieldElement = docNode.createElement(field{1}); - fieldElement.appendChild( ... - docNode.createTextNode(array.job(n).(field{1}))); - jobElement.appendChild(fieldElement); - end - arrayElement.appendChild(jobElement); - end - funcElement.appendChild(arrayElement); - end - docRootNode.appendChild(funcElement); - end - xmlwrite(filename, docNode); -end -- GitLab