Changeset 8171


Ignore:
Timestamp:
05/06/11 10:44:34 (14 years ago)
Author:
Mathieu Morlighem
Message:

Updated organizer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/classes/organizer.m

    r8151 r8171  
    11%ORGANIZER class definition
     2%
     3%   Supported options:
     4%      repository: directory where all models will be saved
     5%      prefix:     prefix for saved model names
     6%      steps:      requested steps
     7%      trunkprefix:prefix of previous run with a different prefix. Used to branch.
    28%
    39%   Usage:
    410%      org = organizer(varargin)
    511%
     12%
    613%   Examples:
    7 %      org = organizer;                             %build an empty organizer object
    8 %      org = organizer('../Models/');               %build an empty organizer object with a given repository
    9 %      org = organizer('../Models/','models.AGU.'); %build an empty organizer object with a given repository and a prefix
    10 %      org = organizer('../Models/','models.AGU.','model.init'); %repository, prefix, and initial trunk prefix
     14%      org = organizer('repository','Models/','prefix','AGU2015','steps',0);  %build an empty organizer object with a given repository
    1115
    1216classdef organizer
    1317    properties (SetAccess=private)
    1418                 % {{{1
    15                  num         =0;
     19                 currentstep   =0;
    1620         end
    1721    properties (SetAccess=public)
    18                  repository  ='./';
    19                  prefix      ='model.';
    20                  trunkprefix ='';
    21                  steps       =[];
     22                 repository    ='./';
     23                 prefix        ='model.';
     24                 trunkprefix   ='';
     25                 steps         =[];
     26                 requestedsteps=[0];
    2227                 %}}}
    2328         end
    2429         methods
    2530                 function org=organizer(varargin) % {{{1
    26                          if nargin>3,
    27                                  help organizer
    28                                  error('organizer constructor error message: bad usage');
    29                          end
    30                          if nargin>2,
    31                                  trunkprefix=varargin{3};
     31
     32                         %process options
     33                         options=pairoptions(varargin{:});
     34
     35                         %Get prefix
     36                         prefix=getfieldvalue(options,'prefix','model.');
     37                         if ~ischar(prefix),                            error('prefix is not a string'); end
     38                         if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
     39                         org.prefix=prefix;
     40
     41                         %Get repository
     42                         repository=getfieldvalue(options,'repository','./');
     43                         if ~ischar(repository),        error('repository is not a string'); end
     44                         if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
     45                         org.repository=repository;
     46
     47                         %Get repository
     48                         org.requestedsteps=getfieldvalue(options,'steps',0);
     49
     50                         %Get trunk prefix (only if provided by user)
     51                         if exist(options,'trunkprefix'),
     52                                 trunkprefix=getfieldvalue(options,'trunkprefix','');
    3253                                 if ~ischar(trunkprefix),                                 error('trunkprefix is not a string'); end
    3354                                 if ~strcmp(regexprep(trunkprefix,'\s+',''),trunkprefix), error('trunkprefix should not have any white space'); end
    3455                                 org.trunkprefix=trunkprefix;
    35                          end
    36                          if nargin>1,
    37                                  prefix=varargin{2};
    38                                  if ~ischar(prefix),                            error('prefix is not a string'); end
    39                                  if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
    40                                  org.prefix=prefix;
    41                          end
    42                          if nargin>0,
    43                                  repository=varargin{1};
    44                                  if ~ischar(repository),        error('repository is not a string'); end
    45                                  if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
    46                                  org.repository=repository;
    4756                         end
    4857                 end
     
    8695                         end
    8796                 end%}}}
    88                  function bool=perform(org,steps,string) % {{{1
     97                 function bool=perform(org,string) % {{{1
    8998                         
    9099                         bool=false;
     
    93102                         if ~ischar(string),                            error('Step provided should be a string'); end
    94103                         if ~strcmp(regexprep(string,'\s+',''),string), error('Step provided should not have any white space'); end
    95                          if (org.num>0 & ismember({string},{org.steps.string}))
     104                         if (org.currentstep>0 & ismember({string},{org.steps.string}))
    96105                                 error(['Step ' string ' already present. Change name']);
    97106                         end
     
    100109                         org.steps(end+1).id=length(org.steps)+1;
    101110                         org.steps(end).string=string;
    102                          org.num=org.num+1;
     111                         org.currentstep=org.currentstep+1;
    103112
    104                          %if steps = 0, print all steps in org
    105                          if any(steps==0),
    106                                  if org.num==1,
    107                                          disp(sprintf('   prefix: %s',org.prefix(1:end-6)));
     113                         %if requestedsteps = 0, print all steps in org
     114                         if any(org.requestedsteps==0),
     115                                 if org.currentstep==1,
     116                                         disp(sprintf('   prefix: %s',org.prefix));
    108117                                 end
    109                                  disp(sprintf('   step #%2i : %s',org.steps(org.num).id,org.steps(org.num).string));
     118                                 disp(sprintf('   step #%2i : %s',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
    110119                         end
    111120
    112                          %Ok, now if num is a member of steps, return true
    113                          if ismember(org.num,steps),
    114                                  disp(sprintf('\n   step #%i : %s\n',org.steps(org.num).id,org.steps(org.num).string));
     121                         %Ok, now if currentstep is a member of steps, return true
     122                         if ismember(org.currentstep,org.requestedsteps),
     123                                 disp(sprintf('\n   step #%i : %s\n',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
    115124                                 bool=true;
    116125                         end
     
    123132
    124133                         %check
    125                          if (org.num==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
    126                          if (org.num>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
     134                         if (org.currentstep==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
     135                         if (org.currentstep>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
    127136
    128                          name=[org.repository '/' org.prefix org.steps(org.num).string ];
     137                         name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
    129138                         disp(['saving model as: ' name]);
    130139                         
    131140                         %check that md is a model
    132141                         if ~isa(md,'model'),       error('savemodel error message: third argument is not a model'); end
    133                          if (org.num>length(org.steps)), error(['organizer error message: element with id ' num2str(org.num) ' not found']); end
     142                         if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
    134143
    135144                         %before saving model, try and find a runme.m file, and save it.
Note: See TracChangeset for help on using the changeset viewer.