]> Creatis software - bbtk.git/blob - kernel/src/bbtkBlackBoxDescriptor.h
6443d50ac93469b756cf5541393c54bf65de6c49
[bbtk.git] / kernel / src / bbtkBlackBoxDescriptor.h
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkBlackBoxDescriptor.h,v $
5   Language:  C++
6   Date:      $Date: 2008/03/07 08:40:14 $
7   Version:   $Revision: 1.6 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 /**
20  *  \file 
21  *  \brief Class bbtk::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it.
22  */
23 /**
24  * \class bbtk::BlackBoxDescriptor
25  * \brief (Abstract) Contains information on a BlackBox type (name, description, author, inputs, outputs) and is able to create an instance of it.
26  */
27
28 #ifndef __bbtkBlackBoxDescriptor_h__
29 #define __bbtkBlackBoxDescriptor_h__
30
31 #include "bbtkBlackBoxInputDescriptor.h"
32 #include "bbtkBlackBoxOutputDescriptor.h"
33 #include <map>
34 #include <fstream>
35
36 namespace bbtk
37 {
38
39   class BlackBox;
40   class Package;
41
42   //==========================================================================
43   class BBTK_EXPORT BlackBoxDescriptor
44   {
45   public:
46     /// The type of descriptor of inputs 
47     typedef BlackBoxInputDescriptor InputDescriptor;
48     /// The type of descriptor of outputs 
49     typedef BlackBoxOutputDescriptor OutputDescriptor;
50     /// The type of dictionnary of inputs = map of input descriptors pointers 
51     typedef std::map<std::string, InputDescriptor*> InputDescriptorMapType;
52     /// The type of dictionnary of outputs= map of output descriptors pointers 
53     typedef std::map<std::string, OutputDescriptor*> OutputDescriptorMapType;
54     /// The kinds of black box
55     typedef enum
56     {
57       STANDARD,
58       ADAPTOR,
59       DEFAULT_ADAPTOR
60     }
61     Kind;
62
63     /// Default ctor
64     BlackBoxDescriptor(); 
65     /// Default dtor
66     virtual ~BlackBoxDescriptor();
67     /// Creates an instance with name boxname of the BlackBox
68     /// of which this is the descriptor 
69     virtual BlackBox* CreateInstance(const std::string& boxname) = 0;
70
71     /// Returns the name of the **TYPE** of the black box
72     const std::string& GetTypeName() const { return mTypeName; }
73     
74     /// Returns the description of the BlackBox 
75     const std::string& GetDescription() const { return mDescription; }
76     
77     /// Returns the author(s) of the BlackBox
78     const std::string& GetAuthor() const { return mAuthor; }
79     
80     /// Returns the category(s) of the BlackBox
81     const std::string& GetCategory() const { return mCategory; }
82     
83     /// Returns the Package to which the box belongs
84     Package* GetPackage() { return mPackage; }
85     
86     /// Returns the Package to which the box belongs (const pointer)
87     const Package* GetPackage() const { return mPackage; }
88     
89     /// Returns the kind of box 
90     Kind GetKind() const { return mKind; }
91
92     /// Prints help on the black box
93     virtual void GetHelp(bool full=true) const;
94
95     /// Returns a const ref on the map of input descriptors
96     const InputDescriptorMapType& GetInputDescriptorMap() const 
97       { return mInput; }
98       
99     /// Returns a const ref on the map of output descriptors
100     const OutputDescriptorMapType& GetOutputDescriptorMap() const 
101       { return mOutput; }
102       
103     /// Returns a const pointer on the descriptor of the input of name <name> 
104     const InputDescriptor* GetInputDescriptor(const std::string &name) const;
105
106     /// Returns a const pointer on the descriptor of the output of name <name> 
107     const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
108
109     /// Sets the name of the **TYPE** of BlackBox
110     void SetTypeName( const std::string& name ) { mTypeName=name; }
111
112     /// Adds the string to the BlackBox description
113     void AddToDescription( const std::string&, bool clear = false );
114     
115     /// Adds the string to the BlackBox author list
116     void AddToAuthor( const std::string&, bool clear = false );
117     
118     /// Adds the string to the BlackBox category list
119     void AddToCategory( const std::string&, bool clear = false );
120     
121     /// Sets the Package to which the box belongs
122     void SetPackage(Package *package) { mPackage = package; }
123     
124     /// Sets the kind of box 
125     void SetKind(Kind kind) { mKind = kind; }
126
127     /* 
128    virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level, 
129                                   const std::string& output_dir = "" ) { }
130     */
131     /// Writes html formatted help into the output file stream. 
132     /// detail and level are used for graphical representation of 
133     /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph)
134     /// output_dir is the directory in which to write auxilliary files 
135     /// (.dot/.png/.cmap)
136     virtual void InsertHtmlHelp ( std::ofstream& s, 
137                                   int detail, int level,
138                                   const std::string& output_dir = "",
139                                   bool relative_link = false );
140
141   protected:
142     /// Adds an input descriptor
143     void AddInputDescriptor( BlackBoxInputDescriptor *d ) 
144     { mInput[d->GetName()] = d; }
145     /// Adds an output descriptor
146     void AddOutputDescriptor( BlackBoxOutputDescriptor *d ) 
147     { mOutput[d->GetName()] = d; }
148
149     //  private:
150     /// The name of the type of black box
151     std::string mTypeName;
152     /// The description of the black box
153     std::string mDescription;
154     /// The author of the black box
155     std::string mAuthor;
156     /// The category of the black box
157     std::string mCategory;    
158     /// The kind of box (standard / adaptor)
159     Kind mKind;
160     /// The Package to which the box belongs
161     Package *mPackage;
162     /// The inputs 
163     InputDescriptorMapType mInput;
164     /// The outputs 
165     OutputDescriptorMapType mOutput;
166     
167   };
168   // class BlackBoxDescriptor
169   //==========================================================================
170
171
172  
173 }
174 // namespace bbtk
175 #endif