Skip to content
Snippets Groups Projects
Commit 8a59e6ae authored by Nicola Vigano's avatar Nicola Vigano
Browse files

OAR: reduced proliferation of files

parent 37e6b708
No related branches found
No related tags found
No related merge requests found
function oarparameters = gtOarLoadParameters(filename) function oarparameters = gtOarLoadParameters(filename)
if (exist([filename '.xml'], 'file')) if (exist([filename '.xml'], 'file'))
oarparameters = gtReadParamsOARfromXML([filename '.xml']); oarparameters = readParamsOARfromXML([filename '.xml']);
elseif (exist([filename '.mat'], 'file')) elseif (exist([filename '.mat'], 'file'))
oarparameters = []; oarparameters = [];
load([filename '.mat']); load([filename '.mat']);
...@@ -9,3 +9,45 @@ function oarparameters = gtOarLoadParameters(filename) ...@@ -9,3 +9,45 @@ function oarparameters = gtOarLoadParameters(filename)
'oarparameters.[xml | mat] is missing') 'oarparameters.[xml | mat] is missing')
end end
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
function gtOarSaveParameters(filename, oarparameters) function gtOarSaveParameters(filename, oarparameters)
gtWriteParamsOARtoXML([filename '.xml'], oarparameters); writeParamsOARtoXML([filename '.xml'], oarparameters);
save([filename '.mat'], 'oarparameters', '-v7.3'); save([filename '.mat'], 'oarparameters', '-v7.3');
end 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
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment