diff m-toolbox/classes/@LTPDAworkbench/LTPDAworkbench.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children a26669b59d7e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@LTPDAworkbench/LTPDAworkbench.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,418 @@
+% LTPDAWORKBENCH creates a new LTPDA Workbench.
+%
+% CALL:
+%         >> LTPDAworkbench
+%         >> wb = LTPDAworkbench  % returns a handle to the object
+%
+% M Hewitson 23-11-08
+%
+% $Id: LTPDAworkbench.m,v 1.52 2011/02/22 15:47:04 hewitson Exp $
+%
+
+%         >> wb = LTPDAworkbench('foo.lwb') % load a workbench from file
+%         >> wb = LTPDAworkbench('foo.m')   % Create a workbench with a
+%                 pipeline constructed from the M-file of LTPDA commands.
+%         >> wb = LTPDAworkbench(objs) % create a workbench with one
+%                 pipeline for each of the objects.
+
+
+classdef LTPDAworkbench < handle
+  %------------------------------------------------
+  %---------- Private read-only Properties --------
+  %------------------------------------------------
+  properties (SetAccess = public)
+    mp   = [];
+    name = '';
+    executing = false;
+    UUID = [];
+  end
+  
+  %-----------------------------------------
+  %  Public methods
+  %-----------------------------------------
+  methods
+    
+    % Construct a new workbench
+    function wb = LTPDAworkbench(varargin)
+      
+%       c = mfilename('fullpath');
+%       d = fileparts(c);
+%       % add jar file to the java path
+%       mpipelineJar = fullfile(d, 'MPipeline.jar');
+%       javaaddpath(mpipelineJar);
+      
+      twb = [];
+      twb = getappdata(0, 'LTPDAworkbench');
+      wb.UUID = ['LWB_' num2str(round(cputime.*100))];
+      
+      if isa(twb, 'LTPDAworkbench')
+        
+        disp('*** Found existing workbench.')
+        wb = twb;
+        awtinvoke(wb.mp, 'setVisible', 'true');
+        
+      else
+        
+        wfile = which(mfilename);
+        [path, name, ext] = fileparts(wfile);
+        libpath = fullfile(path, '');
+        libfile = fullfile(libpath, 'lib.mat');
+        
+        switch nargin
+          case 0
+            % Create a new LTPDAworkbench
+            prefs = getappdata(0, 'LTPDApreferences');
+            wb.mp = awtcreate('mpipeline.main.MainWindow', 'Ljava.lang.String;Lmpipeline.ltpdapreferences.LTPDAPreferences;', prefdir, prefs);
+            if isempty(wb.mp)
+              error('Failed to create the workbench java object. Contact your nearest LTPDA developer.');
+            end
+            pause(0.1);
+            % load library 'lib'
+            try
+              in = load(libfile);
+              % set library
+              awtinvoke(wb.mp, 'setLibrary', in.lib);
+%               javaMethodEDT('setLibrary', wb.mp, in.lib);
+              pause(0.1);
+            catch
+              warning('!!! Can''t open library, rebuilding it');
+              lib = wb.rebuildLibrary();
+              pause(0.1);
+              save(libfile, 'lib')
+            end
+            
+            % Set the repository manager to the workbench
+            rm = LTPDARepositoryManager();
+            awtinvoke(wb.mp, 'setRepositoryManager', rm.manager);
+%             javaMethodEDT('setRepositoryManager', wb.mp, rm.manager);
+            pause(0.1);
+            
+            % refresh library tree
+            awtinvoke(wb.mp, 'refreshLibraryTree');
+%             javaMethodEDT('refreshLibraryTree', wb.mp);
+            pause(0.1);
+            
+            % set instance identifier to the workbench
+            awtinvoke(wb.mp, 'setInstanceIdentifier', wb.UUID);
+%             javaMethodEDT('setInstanceIdentifier', wb.mp, wb.UUID);
+            pause(0.1);
+            
+            % Set the instance identifier
+            awtinvoke(wb.mp, 'setInstanceIdentifier', wb.UUID);
+            
+            % Show the workbench
+            awtinvoke(wb.mp, 'setVisible', 'true');
+%             javaMethodEDT('setVisible', wb.mp, true);
+            pause(0.1);
+            
+            
+            
+        end
+        
+        %%%%%%%%%%   Controls-tab (main) buttons   %%%%%%%%%%
+        
+        %--- Run button
+        h = handle(wb.mp.getRunBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_runPipeline});
+        
+        %--- Stepforward button
+        h = handle(wb.mp.getStepForwardBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_stepForward});
+        
+        %--- Stepbackward button
+        h = handle(wb.mp.getStepBackwardsBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_stepBackwards});
+        
+        %--- Skipforward button
+        h = handle(wb.mp.getSkipForwardBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_skipForward});
+        
+        %--- Reset button
+        h = handle(wb.mp.getResetBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_reset});
+        
+        %%%%%%%%%%   Controls-tab (helper) buttons   %%%%%%%%%%
+        
+        %----Save objects button
+        h = handle(wb.mp.getSaveObjectBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_saveObjects});
+        
+        %---- Export to WS button
+        h = handle(wb.mp.getExportWorkspaceBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_exportWS});
+        
+        %--- Explore button
+        h = handle(wb.mp.getExploreBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_explore});
+        
+        %--- Plot button
+        h = handle(wb.mp.getPlotBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_plot});
+        
+        %---- Plot history of selected object button
+        h = handle(wb.mp.getHistoryBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_plotHistory});
+        
+        %---- Display selected objects to terminal button
+        h = handle(wb.mp.getDisplayBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_display});
+        
+        %----Table button
+        h = handle(wb.mp.getTableBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_table});
+        
+        %----Report
+        h = handle(wb.mp.getReportBtn, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_report});
+        
+%         %---- Verbosity combo
+%         h = handle(wb.mp.getVebosityCombo, 'callbackproperties');
+%         set(h, 'ActionPerformedCallback', {@wb.cb_changeVerbosity});
+        
+        %%%%%%%%%%   'Tools' Menu   %%%%%%%%%%
+        
+        %---- 'Plot selected' menu item
+        h = handle(wb.mp.getPlotSelectedMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_plot});
+        
+        %---- 'Explore selected' menu item
+        h = handle(wb.mp.getExploreSelectedMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_explore});
+        
+        %---- 'LTPDA Preferences' menu item
+        h = handle(wb.mp.getLtpdaPreferencesMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_launchLTPDApreferences});
+        
+        %---- 'LTPDA Repository GUI' menu item
+        h = handle(wb.mp.getLtpdaRepoGuiMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_launchRepogui});
+        
+        %---- 'Spectral Window Viewer' menu item
+        h = handle(wb.mp.getLtpdaSpecwinViewerMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_launchSpecwinViewer});
+        
+        %---- 'Object Constructor Helper' menu item
+        h = handle(wb.mp.getLtpdaConstructorHelperMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_launchConstructor});
+        
+        %---- 'LTPDA Signal Builder' menu item
+        h = handle(wb.mp.getLtpdaSignalBuilderMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_launchSigBuilder});
+        
+        %---- 'Rebuild LTPDA Library' menu item
+        h = handle(wb.mp.getRebuildLibraryMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_rebuildLibrary});
+        
+        %%%%%%%%%%   'Pipeline' Menu   %%%%%%%%%%
+        
+        %---- Export pipeline to terminal item
+        h = handle(wb.mp.getExportToTerminalMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_export2terminal});
+        
+        %---- Export pipeline to m-file
+        h = handle(wb.mp.getExportToMFileMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_export2mfile});
+        
+        %%%%%%%%%%   'Help' Menu   %%%%%%%%%%
+        
+        %---- Block Doc
+        h = handle(wb.mp.getHelpBlockDocMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_blockdoc});
+        
+        %%%%%%%%%%   'File' Menu   %%%%%%%%%%
+        
+        %----Run execution plan
+        h = handle(wb.mp.getPlanRunMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_executePlan});
+        
+        %----Import from objects
+        h = handle(wb.mp.getWBOpenFromObjectMenuItem, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_importWBfromObjects});
+        
+        %---- Import pipeline from M-file
+        h = handle(wb.mp.getImportFromMfileMenuItem, 'callbackproperties');
+%         set(h, 'ActionPerformedCallback', {@wb.cb_importFromMfile});
+        
+        %---- Import pipeline from workspace
+        h = handle(wb.mp.getImportFromWorkspaceMenuItem, 'callbackproperties');
+%         set(h, 'ActionPerformedCallback', {@wb.cb_importFromWorkspace});
+        
+        %%%%%%%%%%   Repository buttons    %%%%%%%%%%
+        
+        %----Submit to workspace
+        h = handle(wb.mp.getRepoSubmitTBB, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_submitObjects});
+        
+        %----Open repository manager
+        h = handle(wb.mp.getRepoConnectTBB, 'callbackproperties');
+        set(h, 'ActionPerformedCallback', {@wb.cb_openRepoManagerGUI});
+        
+        %%%%%%%%%%   other    %%%%%%%%%%
+        
+        %--- called when window is closed
+        h = handle(wb.mp, 'callbackproperties');
+        set(h, 'WindowClosedCallback', {@wb.cb_guiClosed});
+        set(h, 'PropertyChangeCallback', {@wb.cb_applyprefs});
+        
+        % set the spectral window types
+        wtl = wb.mp.getWindowTypes();
+        wtl.clear();
+        winTypes = specwin.getTypes;
+        for kk=1:numel(winTypes)
+          wtl.add(winTypes{kk});
+        end
+        
+        % create progress bar when loading built-in models
+        pd = mpipeline.dialogs.ProgressDialog(wb.mp, false, 'starting', 1);
+        warning('off', 'MATLAB:JavaEDTAutoDelegation')
+        pd.setTitle('Uploading built-in models...');
+        pd.setVisible(true);
+        warning('on', 'MATLAB:JavaEDTAutoDelegation')
+        
+        amdls = wb.mp.getBuiltinModels('');
+        amdls.clear();
+        cls = utils.helper.ltpda_userclasses;
+        for jj=1:numel(cls)
+          cl = cls{jj};
+          if ~any(strcmp(cl, {'plist'}))
+            mdls = eval([cl '.getBuiltInModels;']);
+            pd.setMessage(['Adding ' cl ' models']);
+            pd.setMaxValue(size(mdls,1));
+            pd.setValue(0);
+            for kk=1:size(mdls,1)
+              pd.increment();
+              htxt = help([cl '_model_' mdls{kk,1}]);
+              pl = [];
+              try
+                pl = eval([cl '_model_' mdls{kk,1} '(''plist'')']);
+              end
+              if ~isa(pl, 'plist')
+                pl = plist;
+              end
+              try
+                wb.mp.addBuiltInModel(cl, mdls{kk,1}, ['<html><p>' htxt '</p></html>'], LTPDAworkbench.mpl2jpl(pl))
+              catch err
+                fprintf(2, '\n### Failure in uploading the model %s.\n\n', mdls{kk,1});
+              end
+            end
+          end
+        end
+        % get rid of progress bar
+        pd.dispose();
+        clear pd;
+        
+        % Set LTPDA prefs
+%         pl = LTPDAprefs.getPrefsPlist();
+%         wb.mp.uploadLtpdaPreferences(LTPDAworkbench.mpl2jpl(pl));
+        
+        % Set units
+        units = unit.supportedUnits;
+        prefixes = unit.supportedPrefixes;
+        wb.mp.clearUnits;
+        wb.mp.clearPrefixes;
+        for ii=1:numel(units)
+          wb.mp.addUnit(units{ii});
+        end
+        for ii=1:numel(prefixes)
+          wb.mp.addPrefix(prefixes{ii});
+        end
+        
+        
+        % set working directory
+        wb.mp.setWorkingDir(pwd);
+        
+      end
+      
+%       setappdata(0, 'LTPDAworkbench', wb);
+    end % End constructor
+    
+  end % End public methods
+  
+  methods (Access=public)
+    varargout = addErrorMessage(varargin)
+    varargout = addMessage(varargin)
+    varargout = addWarningMessage(varargin)
+
+    % Display method to make a quiet output
+    function display(varargin)
+      wb = varargin{1};
+    end
+  end
+  
+  methods(Access=private)
+    
+    % Controls tab (main) buttons
+    varargout = cb_runPipeline(varargin)
+    varargout = cb_stepForward(varargin)
+    varargout = cb_skipForward(varargin)
+    varargout = cb_stepBackwards(varargin)
+    varargout = cb_reset(varargin)
+    
+    % Controls tab (helper) buttons
+    varargout = cb_saveObjects(varargin)
+    varargout = cb_exportWS(varargin)
+    varargout = cb_explore(varargin)
+    varargout = cb_plot(varargin)
+    varargout = cb_plotHistory(varargin)
+    varargout = cb_display(varargin)
+    varargout = cb_table(varargin)
+    varargout = cb_report(varargin)
+    varargout = cb_changeVerbosity(varargin)
+    
+    % 'Tools' Menu
+    varargout = cb_launchLTPDApreferences(varargin)
+    varargout = cb_launchRepogui(varargin)
+    varargout = cb_launchSpecwinViewer(varargin)
+    varargout = cb_launchConstructor(varargin)
+    varargout = cb_launchSigBuilder(varargin)
+    varargout = cb_rebuildLibrary(varargin)
+    
+    % 'Pipeline' Menu
+    varargout = cb_export2terminal(varargin)
+    varargout = cb_export2mfile(varargin)
+    
+    % 'File' Menu
+    varargout = cb_importFromMfile(varargin)
+    varargout = cb_importFromWorkspace(varargin)
+    varargout = cb_executePlan(varargin)
+    varargout = cb_importWBfromObjects(varargin)
+    
+    % 'Help' Menu
+    varargout = cb_blockdoc(varargin)
+    
+    % Repository Buttons
+    varargout = cb_submitObjects(varargin)
+    varargout = cb_openRepoManagerGUI(varargin)
+    
+    % other
+    varargout = cb_guiClosed(varargin)
+    varargout = cb_applyprefs(varargin);
+    
+  end
+  
+  methods (Static=true)
+    
+    varargout = getWS_VarName(varargin);
+    
+    varargout = parseBlocks(varargin);
+    varargout = clearBlockVariables(varargin);
+    varargout = executeCommands(varargin)
+    varargout = executeConstants(varargin)
+    varargout = run(varargin)
+    
+    varargout = mpl2jpl(varargin)
+    varargout = jpl2mpl(varargin)
+    varargout = parseCmd(varargin)
+    varargout = rebuildLibrary(varargin);
+    
+  end
+  %------------------------------------------------
+  % Private static methods
+  %------------------------------------------------
+  methods(Access=private, Static=true)
+    varargout = minfo2algo(varargin)
+    varargout = parse(varargin)
+  end
+  
+end
+