diff m-toolbox/classes/+utils/@modules/buildModule.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/+utils/@modules/buildModule.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,138 @@
+% BUILDMODULE builds a new module structure in the location specified by
+% the user.
+%
+% CALL:   utils.modules.buildModule(dir, module_name)
+%
+% INPUTS:
+%              dir - the directory in which to build the module
+%      module_name - a name for the new module
+%
+% Example:
+%
+%        utils.modules.buildModule('~/work', 'myNewModule')
+%
+%
+% The resulting module structure on disk looks like:
+%
+% module/
+%   |- classes
+%   |- functions
+%   |- jar
+%   |- models
+%   |- tests
+%        |- classes
+%        |- models
+%
+%
+% M Hewitson 21-01-11
+%
+% $Id: buildModule.m,v 1.4 2011/03/28 11:26:57 hewitson Exp $
+%
+function varargout = buildModule(varargin)
+  
+  if nargin ~= 2
+    help(['utils.modules.' mfilename]);
+    error('incorrect inputs');
+  end
+  
+  % Inputs
+  mdir = varargin{1};
+  if ~ischar(mdir)
+    error('The first input should be a string indicating a directory on disk');
+  end
+  
+  mname = varargin{2};
+  if ~ischar(mname)
+    error('The second input should be a string indicating the module name');
+  end
+  
+  % Make module
+  mpath = fullfile(mdir, mname);
+  paths = {'classes', 'functions', 'jar', 'models', 'pipelines', 'examples', 'tests', ...
+    fullfile('tests', 'classes'), fullfile('tests', 'models')};
+  
+  % Check if the directory for the new module exists
+  if isdir(mpath)
+    r = input(sprintf('A directory exists at the chosen location (%s). \nDo you want to overwrite it? (yes/no) ', mpath), 's');
+    if ~strcmpi(r, 'yes')
+      return;
+    end
+  end
+  
+  % Make module dir
+  [success,message,messageid] = mkdir(mdir,mname);
+  if ~success
+    error(messageid, 'Failed to make module directory. %s', message);
+  end
+  
+  % Make all the sub directories
+  for kk=1:numel(paths)
+    p = paths{kk};
+    [success,message,messageid] = mkdir(mpath, p);
+    if ~success
+      error(messageid, 'Failed to make module directory %s.\n %s', fullfile(mpath, p), message);
+    end
+  end
+  
+  % create README
+  fd = fopen(fullfile(mpath, 'README.txt'), 'w+');
+  fprintf(fd, 'LTPDA Module %s\n', mname);
+  fprintf(fd, '\n');
+  fprintf(fd, '\n');
+  fprintf(fd, 'For further details see the following README files:\n');
+  fprintf(fd, '   classes/README_classes.txt\n');
+  fprintf(fd, '   functions/README_functions.txt\n');
+  fprintf(fd, '   jar/README_jar.txt\n');
+  fprintf(fd, '   models/README_models.txt\n');
+  fprintf(fd, '   pipelines/README_pipelines.txt\n');
+  fprintf(fd, '   tests/README_tests.txt\n');
+  fprintf(fd, '   tests/classes/README_class_tests.txt\n');
+  fprintf(fd, '   tests/models/README_model_tests.txt\n');
+  fprintf(fd, '\n');
+  fprintf(fd, '\n');
+  % copy in the README files
+  src = fileparts(which('utils.modules.buildModule'));
+  installREADME(src, 'README_classes.txt', mpath, 'classes');
+  installREADME(src, 'README_functions.txt', mpath, 'functions');
+  installREADME(src, 'README_jar.txt', mpath, 'jar');
+  installREADME(src, 'README_models.txt', mpath, 'models');
+  installREADME(src, 'README_pipelines.txt', mpath, 'pipelines');
+  installREADME(src, 'README_tests.txt', mpath, 'tests');
+  installREADME(src, 'README_class_tests.txt', mpath, fullfile('tests', 'classes'));
+  installREADME(src, 'README_model_tests.txt', mpath, fullfile('tests', 'models'));
+  
+  
+  % Write moduleinfo.xml
+  writeModuleInfoXML(mpath, mname);  
+  
+  ls(mpath)
+  fprintf('* Module built successfully at %s\n', mpath);
+  
+end
+
+function writeModuleInfoXML(mpath, name)
+  
+  docNode = com.mathworks.xml.XMLUtils.createDocument('moduleinfo');
+  docRootNode = docNode.getDocumentElement;
+  docRootNode.setAttribute('name',name);
+  docRootNode.setAttribute('version','1.0');
+  
+
+  % Save the sample XML document.
+  xmlFileName = fullfile(mpath,'moduleinfo.xml');
+  xmlwrite(xmlFileName,docNode);
+  
+end
+
+function installREADME(src, name, mpath, mdir)
+  
+  src = fullfile(src, name);
+  dest = fullfile(mpath, mdir);
+  [success,message,messageid] = copyfile(src, dest);
+  if ~success
+    error(messageid, 'Failed to copy %s to %s', src, dest);
+  end
+  
+end
+
+% END
\ No newline at end of file