% LTPDA_UOH is the abstract ltpda base class for ltpda user object classes with history
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: LTPDA_UOH is the ltpda base class for ltpda user object classes
%              This class is an abstract class and it is not possible to create
%              an instance of this class.
%
% SUPER CLASSES: ltpda_uo < ltpda_obj
%
% SUB CLASSES:   ao, filterbank, timespan, ssm, smodel, pest, matrix, collection, ltpda_tf
%
% LTPDA_UOH PROPERTIES:
%
%     Protected Properties (read only)
%       UUID          - Universally Unique Identifier of 128-bit
%       description   - description of the object
%       hist          - history of the object (history object)
%       mdlfile       - model xml file of the LTPDAworkbench
%       name          - name of the object
%       plotinfo      - plist with the plot information
%       procinfo      - plist with additional information for an object.
%
% VERSION:     $Id: ltpda_uoh.m,v 1.65 2011/12/02 09:03:42 hewitson Exp $
%
% SEE ALSO:    ltpda_obj, ltpda_uo, ltpda_tf, ltpda_filter, 
%              ao, miir, mfir, filterbank, timespan, pzmodel, history, ssm, 
%              parfrac, rational, smodel, pest, matrix, collection
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

classdef (Hidden = true) ltpda_uoh < ltpda_uo
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                            Property definition                            %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  %---------- Public (read/write) Properties  ----------
  properties
  end
  
  %---------- Protected read-only Properties ----------
  properties (SetAccess = protected)
    hist        = []; % history of the object (history object)
    procinfo    = []; % plist with additional information for an object.
    plotinfo    = []; % plist with the plot information
  end
  
  %---------- Private Properties ----------
  properties (GetAccess = protected, SetAccess = protected)
  end
  
  %---------- Abstract Properties ----------
  properties (Abstract = true, SetAccess = protected)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                          Check property setting                           %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods
    function set.hist(obj, val)
      if ~(isa(val, 'history') || isempty(val))
        error('### The value for the property ''hist'' must be\n### a history-object or empty but it is\n### from the class %s', class(val));
      end
      obj.hist = val;
    end
    function set.procinfo(obj, val)
      if ~isa(val, 'plist') && ~isempty(val)
        error('### The value for the property ''procinfo'' should be a plist but it is from the class [%s]', class(val));
      end
      if isempty(val) || nparams(val) == 0
        obj.procinfo = [];
      else
        obj.procinfo = val;
      end
    end
    function set.plotinfo(obj, val)
      if ~isa(val, 'plist') && ~isempty(val)
        error('### The value for the property ''plotinfo'' should be a plist but it is from the class [%s]', class(val));
      end
      if isempty(val) || nparams(val) == 0
        obj.plotinfo = [];
      else
        obj.plotinfo = val;
      end
    end
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                                Constructor                                %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods
    function obj = ltpda_uoh(varargin)
    end
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (protected)                          %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods (Access = protected)
    varargout = setPropertyValue(varargin)
    varargout = setObjectProperties(varargin)
    varargout = addHistory(varargin)
    varargout = addHistoryWoChangingUUID(varargin)
    obj = fromFile(pbj, pli)
    obj = fromRepository(obj, pli)
    obj = fromLISO(obj, filename)
    obj = fromDataInMAT(obj, data, filename)
    obj = fromDatafile(obj, pli)
    obj = fromComplexDatafile(obj, pli)
    obj = fromModel(obj,pli)
    obj = fromStruct(obj, a_struct)
    varargout = fromDom(varargin)
    varargout = csvGenerateData(varargin)
  end
  methods (Access = public)
    varargout = setProperties(varargin)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (public)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods
    varargout = index(varargin)
    varargin  = creator(varargin)
    varargin  = created(varargin)
    
    varargout = setPlotinfo(varargin)
    varargout = setProcinfo(varargin)
    varargout = csvexport(varargin)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                          Methods (public, hidden)                         %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods (Hidden = true)
    varargout = testCallerIsMethod(varargin)
    varargout = clearHistory(varargin)
    varargout = setHist(obj, val)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (static)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods (Static)
    
    varargout = update_struct(varargin);
    
    function ii = getInfo(varargin)
      ii = utils.helper.generic_getInfo(varargin{:}, 'ltpda_uoh');
    end
    
    function out = VEROUT()
      out = '$Id: ltpda_uoh.m,v 1.65 2011/12/02 09:03:42 hewitson Exp $';
    end
    
    function out = SETS()
      out = SETS@ltpda_uo;
    end
    
    function out = buildplist(out, set)
      out = buildplist@ltpda_uo(out, set);
      
      switch lower(set)
      end
    end
    
  end
  
  methods (Static, Access=protected)
    
    
    function pl = addGlobalKeys(pl)
      % Name
      p = param({'Name','The name of the constructed object.'}, paramValue.EMPTY_STRING);
      pl.append(p);
      
      % Description
      p = param({'Description','The description of the constructed object.'}, paramValue.EMPTY_STRING);
      pl.append(p);
      
      % Plotinfo
      p = param({'plotinfo',['The plot information for the constructed object. This information is interpreted by iplot. The value should be '...
        'a plist with any or all of the following keys:<ul>'...
        '<li>''linestyle'' - choose a MATLAB linestyle</li>'...
        '<li>''linewidth'' - choose a the line width</li>'...
        '<li>''color'' - choose a color for the resulting trace</li>'...
        '<li>''marker'' - choose a marker for the resulting trace</li>'...
        '<li>''legend_on'' - choose a true or false to include in the legend or not</li>'...
        '</ul>']}, paramValue.EMPTY_DOUBLE);
      pl.append(p);


    end
    
    function pl = removeGlobalKeys(pl)
      pl.remove('name');
      pl.remove('description');
      pl.remove('plotinfo');
    end
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (static)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods (Static, Hidden)
  end  
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (abstract)                           %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  methods (Abstract)
    varargout = generateConstructorPlist(varargin)
  end
  
end

