1 /*=========================================================================
4 Module: $RCSfile: bbtkBlackBoxDescriptor.h,v $
6 Date: $Date: 2008/03/07 08:40:14 $
7 Version: $Revision: 1.6 $
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.
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.
17 =========================================================================*/
21 * \brief Class bbtk::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it.
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.
28 #ifndef __bbtkBlackBoxDescriptor_h__
29 #define __bbtkBlackBoxDescriptor_h__
31 #include "bbtkBlackBoxInputDescriptor.h"
32 #include "bbtkBlackBoxOutputDescriptor.h"
42 //==========================================================================
43 class BBTK_EXPORT BlackBoxDescriptor
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
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;
71 /// Returns the name of the **TYPE** of the black box
72 const std::string& GetTypeName() const { return mTypeName; }
74 /// Returns the description of the BlackBox
75 const std::string& GetDescription() const { return mDescription; }
77 /// Returns the author(s) of the BlackBox
78 const std::string& GetAuthor() const { return mAuthor; }
80 /// Returns the category(s) of the BlackBox
81 const std::string& GetCategory() const { return mCategory; }
83 /// Returns the Package to which the box belongs
84 Package* GetPackage() { return mPackage; }
86 /// Returns the Package to which the box belongs (const pointer)
87 const Package* GetPackage() const { return mPackage; }
89 /// Returns the kind of box
90 Kind GetKind() const { return mKind; }
92 /// Prints help on the black box
93 virtual void GetHelp(bool full=true) const;
95 /// Returns a const ref on the map of input descriptors
96 const InputDescriptorMapType& GetInputDescriptorMap() const
99 /// Returns a const ref on the map of output descriptors
100 const OutputDescriptorMapType& GetOutputDescriptorMap() const
103 /// Returns a const pointer on the descriptor of the input of name <name>
104 const InputDescriptor* GetInputDescriptor(const std::string &name) const;
106 /// Returns a const pointer on the descriptor of the output of name <name>
107 const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
109 /// Sets the name of the **TYPE** of BlackBox
110 void SetTypeName( const std::string& name ) { mTypeName=name; }
112 /// Adds the string to the BlackBox description
113 void AddToDescription( const std::string&, bool clear = false );
115 /// Adds the string to the BlackBox author list
116 void AddToAuthor( const std::string&, bool clear = false );
118 /// Adds the string to the BlackBox category list
119 void AddToCategory( const std::string&, bool clear = false );
121 /// Sets the Package to which the box belongs
122 void SetPackage(Package *package) { mPackage = package; }
124 /// Sets the kind of box
125 void SetKind(Kind kind) { mKind = kind; }
128 virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level,
129 const std::string& output_dir = "" ) { }
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 );
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; }
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
156 /// The category of the black box
157 std::string mCategory;
158 /// The kind of box (standard / adaptor)
160 /// The Package to which the box belongs
163 InputDescriptorMapType mInput;
165 OutputDescriptorMapType mOutput;
168 // class BlackBoxDescriptor
169 //==========================================================================