Mercurial > hg > ltpda
diff m-toolbox/classes/@LTPDAworkbench/run.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/@LTPDAworkbench/run.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,127 @@ +% RUN runs all, or some of the pipelines in the given Workbench file. +% +% CALL: +% +% id = LTPDAworkbench.run('foo.lwb') % run all +% id = LTPDAworkbench.run('foo.lwb', 'pipeline1') % run 'pipeline1' +% +% +% Hewitson 20-07-10 +% +% $Id: run.m,v 1.6 2011/04/07 14:52:22 hewitson Exp $ +% + +% TODO +% LTPDAworkbench.run('foo.lwb', 'plan') % run the plan (if there is one) + + +function UUID = run(varargin) + + % Sort out the filename + filename = varargin{1}; + [path, name, ext] = fileparts(filename); + + if isempty(path) + filename = fullfile(pwd, filename); + end + + if exist(filename, 'file') == 0 + error(['File not found at ' filename]); + end + + % Parse the XML file + f = java.io.File(filename); + parserFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); + parserFactory.setValidating(false); + db = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); + doc = db.parse(f); + + % Get the main document node + node = doc.getDocumentElement(); + + % Create a workbench instance + prefs = getappdata(0, 'LTPDApreferences'); + mp = javaObjectEDT('mpipeline.main.MainWindow', prefdir, prefs); + UUID = ['LWB_' num2str(round(cputime.*100))]; + javaMethodEDT('setInstanceIdentifier', mp, UUID); + + disp(['Processing pipeline: ' filename]); + disp([' results will be in: ' UUID]); + + % Read the pipelines + pipelines = mp.readPipelines(f, node); + pipelines = pipelines.toArray(); + + % read plan + + % If execute plan + + % else we do the stuff below + + pnames = {}; + if nargin == 2 + if strcmpi(varargin{2}, 'plan') + + plan = mp.readExecutionPlan(f, node); + + error('LTPDA:LTPDAworkbench:Run', 'Plan execution needs to be written!'); + else + pnames = varargin(2); + end + end + + if nargin > 2 + pnames = varargin(2:end); + end + + % Run over the pipelines + for kk=1:numel(pipelines) + + + % Get the pipeline and canvas + pl = pipelines(kk); + canvas = pl.getCanvas; + + if ~isempty(pnames) + if ~ismember(char(pl.getTitle), pnames) + continue; + end + end + + % Reset all blocks + canvas.resetAllBlocks + + % Execute constant blocks + LTPDAworkbench.executeConstants(canvas); + + % Run until all blocks are executed + while canvas.getReadyBlocks.size > 0 + + % Get the blocks ready to run + blocks = canvas.getReadyBlocks; + + % parse the ready blocks + [cmds, rbs] = LTPDAworkbench.parseBlocks(blocks, pl, genvarname(name)); + + % Execute commands + LTPDAworkbench.executeCommands(pl, cmds); + + % Move forward + canvas.stepForwards(); + + % Clear old variables + LTPDAworkbench.clearBlockVariables(rbs); + + end % End while blocks not executed + end % End loop over pipelines + + % Dispose of the pipeline + mp.setLtpdaPreferences2([]); + mp.dispose(); + + disp(['Completed processing pipeline: ' filename]); + disp([' results are in: ' UUID]); + + +end +