diff m-toolbox/classes/@ltpda_uo/submitDialog.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children 5eb86f6881ef
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@ltpda_uo/submitDialog.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,284 @@
+% SUBMITDIALOG Creates a connection and the sinfo structure depending of the input variables.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: SUBMITDIALOG Creates a connection and the sinfo structure
+%              depending of the input variables.
+%
+% CALL:        sinfo = submitDialog(sinfo_in, pl)
+%
+% VERSION:     $Id: submitDialog.m,v 1.19 2011/11/10 09:47:47 mauro Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sinfo = submitDialog(pl)
+  
+  % Copy input plist
+  pl = copy(pl, 1);
+  
+  %%% Show dialog or not
+  noDialog = pl.find('no dialog');
+  
+  %%% Create/fill sinfo from the plist.
+  sinfo = getDefaultStruct();
+  
+  %%% Check If we should the sinfo from a file
+  if ~isempty(pl.find('sinfo filename'))
+    pl.combine(utils.xml.read_sinfo_xml(pl.find('sinfo filename')));
+  end
+  
+  %%% Set the fields from the plist to the struct
+  sinfo = setField(sinfo, pl, 'experiment title');
+  sinfo = setField(sinfo, pl, 'experiment description');
+  sinfo = setField(sinfo, pl, 'analysis description');
+  sinfo = setField(sinfo, pl, 'quantity');
+  sinfo = setField(sinfo, pl, 'keywords');
+  sinfo = setField(sinfo, pl, 'reference ids');
+  sinfo = setField(sinfo, pl, 'additional comments');
+  sinfo = setField(sinfo, pl, 'additional authors');
+  
+  %%% Create connection if the
+  if  (allFieldsFilled(sinfo)) || ...
+      (allMandatoryFieldsFilled(sinfo) && noDialog)
+    
+    %%% Return because we have all sinfo information
+    return
+  end
+  
+  jsinfo = awtcreate('mpipeline.repository.SubmissionInfo', 'Lmpipeline.main.MainWindow;', []);
+  
+  if ~isempty(sinfo.experiment_title), jsinfo.setExperimentTitle(sinfo.experiment_title);end
+  if ~isempty(sinfo.experiment_description), jsinfo.setExperimentDescription(sinfo.experiment_description); end
+  if ~isempty(sinfo.analysis_description), jsinfo.setAnalysisDescription(sinfo.analysis_description); end
+  if ~isempty(sinfo.quantity), jsinfo.setQuantity(sinfo.quantity); end
+  if ~isempty(sinfo.keywords), jsinfo.setKeywords(sinfo.keywords); end
+  if ~isempty(sinfo.reference_ids), jsinfo.setReferenceIDs(sinfo.reference_ids); end
+  if ~isempty(sinfo.additional_comments), jsinfo.setAdditionalComments(sinfo.additional_comments); end
+  if ~isempty(sinfo.additional_authors), jsinfo.setAdditionalAuthors(sinfo.additional_authors); end
+  
+%   sid = awtcreate('mpipeline.repository.SubmitInfoDialog', 'Lmpipeline.main.MainWindow;Lmpipeline.repository.SubmissionInfo;', [], jsinfo);
+  sid = javaObjectEDT('mpipeline.repository.SubmitInfoDialog', [], jsinfo);
+  
+  h1 = handle(sid.getLoadBtn,'callbackproperties');
+  h1.ActionPerformedCallback = @cb_loadSinfoFromFile;
+  
+  h2 = handle(sid.getSaveBtn,'callbackproperties');
+  h2.ActionPerformedCallback = @cb_saveSinfoToFile;
+  
+  h3 = handle(sid, 'callbackproperties');
+  h3.WindowClosedCallback = @cb_guiClosed;
+  
+  sid.setVisible(true)
+  
+  if sid.isCancelled
+    sinfo = [];
+  else
+    %%% Store the 'sinfo' of the GUI to the output sinfo
+    jsinfo = sid.getSubmissionInfo;
+    sinfo.experiment_title       = char(jsinfo.getExperimentTitle);
+    sinfo.experiment_description = char(jsinfo.getExperimentDescription);
+    sinfo.analysis_description   = char(jsinfo.getAnalysisDescription);
+    sinfo.quantity               = char(jsinfo.getQuantity);
+    sinfo.keywords               = char(jsinfo.getKeywords);
+    sinfo.reference_ids          = char(jsinfo.getReferenceIDs);
+    sinfo.additional_comments    = char(jsinfo.getAdditionalComments);
+    sinfo.additional_authors     = char(jsinfo.getAdditionalAuthors);
+  end
+  
+  jsinfo = [];
+  sid = [];
+  pl = [];
+  prefs = [];
+  java.lang.System.gc();  
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %
+  % nested callback Function: cb_loadSinfoFromFile()
+  %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  function cb_loadSinfoFromFile(varargin)
+    [FileName, PathName, FilterIndex] = uigetfile('*.xml', 'XML File');
+    
+    if (FileName)
+      try
+        sinfoPl = utils.xml.read_sinfo_xml(fullfile(PathName, FileName));
+        
+        % Set the values from the PLIST to the dialog.
+        if ~isempty(sinfoPl.find('experiment title'))
+          sid.setExperimentTitleTxtField(sinfoPl.find('experiment title')); end
+        if ~isempty(sinfoPl.find('experiment_title'))
+          sid.setExperimentTitleTxtField(sinfoPl.find('experiment_title')); end
+        
+        if ~isempty(sinfoPl.find('experiment description'))
+          sid.setExperimentDescriptionTxtField(sinfoPl.find('experiment description')); end
+        if ~isempty(sinfoPl.find('experiment_description'))
+          sid.setExperimentDescriptionTxtField(sinfoPl.find('experiment_description')); end
+        
+        if ~isempty(sinfoPl.find('analysis description'))
+          sid.setAnalysisDescriptionTxtField(sinfoPl.find('analysis description')); end
+        if ~isempty(sinfoPl.find('analysis_description'))
+          sid.setAnalysisDescriptionTxtField(sinfoPl.find('analysis_description')); end
+        
+        if ~isempty(sinfoPl.find('quantity'))
+          sid.setquantityTxtField(sinfoPl.find('quantity')); end
+        
+        if ~isempty(sinfoPl.find('keywords'))
+          sid.setKeywordsTxtField(sinfoPl.find('keywords')); end
+        
+        if ~isempty(sinfoPl.find('reference ids'))
+          sid.setReferenceIDsTxtField(sinfoPl.find('reference ids')); end
+        if ~isempty(sinfoPl.find('reference_ids'))
+          sid.setReferenceIDsTxtField(sinfoPl.find('reference_ids')); end
+        
+        if ~isempty(sinfoPl.find('additional comments'))
+          sid.setAdditionalCommentsTxtField(sinfoPl.find('additional comments')); end
+        if ~isempty(sinfoPl.find('additional_comments'))
+          sid.setAdditionalCommentsTxtField(sinfoPl.find('additional_comments')); end
+        
+        if ~isempty(sinfoPl.find('additional authors'))
+          sid.setAdditionalAuthorsTxtField(sinfoPl.find('additional authors')); end
+        if ~isempty(sinfoPl.find('additional_authors'))
+          sid.setAdditionalAuthorsTxtField(sinfoPl.find('additional_authors')); end
+        
+      catch err
+        utils.helper.err(['### This file doesn''t contain any submission information.' err.message])
+      end
+      
+    end
+  end
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %
+  % nested callback Function: cb_saveSinfoToFile()
+  %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  function cb_saveSinfoToFile(varargin)
+    
+    saveBtn = varargin{1};
+    jsinfo = saveBtn.rootPane.getParent().getSubmissionInfo();
+    
+    sinfo.experiment_title       = char(jsinfo.getExperimentTitle());
+    sinfo.experiment_description = char(jsinfo.getExperimentDescription());
+    sinfo.analysis_description   = char(jsinfo.getAnalysisDescription());
+    sinfo.quantity               = char(jsinfo.getQuantity());
+    sinfo.keywords               = char(jsinfo.getKeywords());
+    sinfo.reference_ids          = char(jsinfo.getReferenceIDs());
+    sinfo.additional_comments    = char(jsinfo.getAdditionalComments());
+    sinfo.additional_authors     = char(jsinfo.getAdditionalAuthors());
+    
+    [FileName, PathName, FilterIndex] = uiputfile('*.xml', 'XML File');
+    
+    if (FileName)
+      try
+        utils.xml.save_sinfo_xml(fullfile(PathName, FileName), sinfo);
+      catch
+      end
+      
+    end
+  end
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %
+  % nested callback Function: cb_guiClosed()
+  %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  function cb_guiClosed(varargin)
+    if ishandle(h1)
+      delete(h1);
+    end
+    if ishandle(h2)
+      delete(h2);
+    end
+    if ishandle(h3) 
+      delete(h3);
+    end
+  end
+  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                               Local Functions                               %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    getDefaultStruct
+%
+% DESCRIPTION: Creates default structure for 'sinfo'
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sinfo = getDefaultStruct()
+  sinfo = struct(...
+    'experiment_title',       '', ...
+    'experiment_description', '', ...
+    'analysis_description',   '', ...
+    'quantity',               '', ...
+    'keywords',               '', ...
+    'reference_ids',          '', ...
+    'additional_comments',    '', ...
+    'additional_authors',     '');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    allMandatoryFieldsFilled
+%
+% DESCRIPTION: Check if all mandatory fields are filled in 'sinfo'.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function res = allMandatoryFieldsFilled(sinfo)
+  res = false;
+  if isstruct(sinfo)
+    if  isfield(sinfo, 'experiment_title')       && ~isempty(sinfo.experiment_title)       && ...
+        isfield(sinfo, 'experiment_description') && ~isempty(sinfo.experiment_description) && ...
+        isfield(sinfo, 'analysis_description')   && ~isempty(sinfo.analysis_description)
+      res = true;
+    end
+  end
+end
+
+
+function res = allFieldsFilled(sinfo)
+  res = false;
+  if isstruct(sinfo)
+    if  isfield(sinfo, 'experiment_title')       && ~isempty(sinfo.experiment_title)       && ...
+        isfield(sinfo, 'experiment_description') && ~isempty(sinfo.experiment_description) && ...
+        isfield(sinfo, 'analysis_description')   && ~isempty(sinfo.analysis_description) && ...
+        isfield(sinfo, 'quantity')   && ~isempty(sinfo.quantity) && ...
+        isfield(sinfo, 'keywords')   && ~isempty(sinfo.keywords) && ...
+        isfield(sinfo, 'reference_ids')   && ~isempty(sinfo.reference_ids) && ...
+        isfield(sinfo, 'additional_comments')   && ~isempty(sinfo.additional_comments) && ...
+        isfield(sinfo, 'additional_authors')   && ~isempty(sinfo.additional_authors)
+      res = true;
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    setField
+%
+% DESCRIPTION:
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sinfo = setField(sinfo, pl, field)
+  struct_field = strrep(field, ' ', '_');
+  
+  % if the fiels doesn't exist in the struct then create this field
+  if ~isfield(sinfo, struct_field)
+    sinfo.(struct_field) = '';
+  end
+  
+  if ~isempty(pl.find(field))
+    sinfo.(struct_field) = pl.find(field);
+  end
+  if ~isempty(pl.find(strrep(field, ' ', '_')))
+    sinfo.(struct_field) = pl.find(strrep(field, ' ', '_'));
+  end
+end
+
+
+
+