2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ */
28 /*=========================================================================
30 Module: $RCSfile: bbtkBlackBoxDescriptor.h,v $
32 Date: $Date: 2012/11/16 08:49:01 $
33 Version: $Revision: 1.13 $
34 =========================================================================*/
39 * \brief Class bbtk::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it.
42 * \class bbtk::BlackBoxDescriptor
43 * \brief (Abstract) Contains information on a BlackBox type (name, description, author, inputs, outputs) and is able to create an instance of it.
46 #ifndef __bbtkBlackBoxDescriptor_h__
47 #define __bbtkBlackBoxDescriptor_h__
49 #include "bbtkObject.h"
50 #include "bbtkBlackBoxInputDescriptor.h"
51 #include "bbtkBlackBoxOutputDescriptor.h"
60 BBTK_FORWARD_DECLARE_POINTER(BlackBox);
61 BBTK_FORWARD_DECLARE_POINTER(Package);
63 //==========================================================================
64 class BBTK_EXPORT BlackBoxDescriptor : public Object
66 BBTK_ABSTRACT_OBJECT_INTERFACE(BlackBoxDescriptor);
68 /// The type of descriptor of inputs
69 typedef BlackBoxInputDescriptor InputDescriptor;
70 /// The type of descriptor of outputs
71 typedef BlackBoxOutputDescriptor OutputDescriptor;
72 /// The type of dictionnary of inputs = map of input descriptors pointers
73 typedef std::map<std::string, InputDescriptor*> InputDescriptorMapType;
74 /// The type of dictionnary of outputs= map of output descriptors pointers
75 typedef std::map<std::string, OutputDescriptor*> OutputDescriptorMapType;
76 /// The kinds of black box
90 TS_SCRIPT_COMPLEXBOX=1,
91 TS_SCRIPT_APPLICATION=2
94 /// Releases a descriptor
95 // static void Release(BlackBoxDescriptor::WeakPointer);
97 /// Creates an instance with name boxname of the BlackBox
98 /// of which this is the descriptor
99 virtual BlackBoxPointer NewBlackBox(const std::string& boxname) = 0;
101 /// Returns the name of the **TYPE** of the black box
102 const std::string& GetTypeName() const { return mTypeName; }
104 /// Returns the full name of the **TYPE** of the black box (+package name)
105 std::string GetFullTypeName() const;
107 /// Returns the description of the BlackBox
108 const std::string& GetDescription() const { return mDescription; }
110 /// Returns the author(s) of the BlackBox
111 const std::string& GetAuthor() const { return mAuthor; }
113 /// Returns the category(s) of the BlackBox
114 const std::string& GetCategory() const { return mCategory; }
116 /// Returns the Package to which the box belongs (const pointer)
117 PackagePointer GetPackage() const { return mPackage; }
119 /// Returns the kind of box
120 Kind GetKind() const { return mKind; }
122 /// Prints help on the black box
123 virtual void GetHelp(bool full=true) const;
125 /// Returns a const ref on the map of input descriptors
126 const InputDescriptorMapType& GetInputDescriptorMap() const
129 /// Returns a const ref on the map of output descriptors
130 const OutputDescriptorMapType& GetOutputDescriptorMap() const
133 /// Returns a const pointer on the descriptor of the input of name <name>
134 const InputDescriptor* GetInputDescriptor(const std::string &name) const;
136 /// Returns a const pointer on the descriptor of the output of name <name>
137 const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
139 /// Sets the name of the **TYPE** of BlackBox
140 void SetTypeName( const std::string& name ) { mTypeName=name; }
142 /// Adds the string to the BlackBox description
143 void AddToDescription( const std::string&, bool clear = false );
145 /// Adds the string to the BlackBox author list
146 void AddToAuthor( const std::string&, bool clear = false );
148 /// Adds the string to the BlackBox category list
149 void AddToCategory( const std::string&, bool clear = false );
151 /// Sets the Package to which the box belongs
152 void SetPackage(PackagePointer package) { mPackage = package; }
154 /// Sets the kind of box
155 void SetKind(Kind kind) { mKind = kind; }
158 virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level,
159 const std::string& output_dir = "" ) { }
161 /// Writes html formatted help into the output file stream.
162 /// detail and level are used for graphical representation of
163 /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph)
164 /// output_dir is the directory in which to write auxilliary files
165 /// (.dot/.png/.cmap)
166 virtual void InsertHtmlHelp ( std::ofstream& s,
167 int detail, int level,
168 const std::string& output_dir = "",
169 bool relative_link = false );
171 virtual void Check(bool recursive=true) const;
175 /// Sets the name of the script file from which it is defined
176 void SetScriptFileName(const std::string& n) { mScriptFileName = n; }
177 /// Gets the name of the script file from which it is defined
178 std::string GetScriptFileName() const { return mScriptFileName; }
183 /// Gets the type of script BINARY, SCRIPT_COMPLEXBOX, SCRIPT_APPLICATION
184 TypeOfScript GetTypeOfScript() { return mTypeOfScript; };
185 void SetTypeOfScript(TypeOfScript type) { mTypeOfScript=type; };
186 bool IsTypeOfScript_Application();
187 bool IsTypeOfScript_ComplexBox();
188 void SetTypeOfScript_Application();
195 TypeOfScript mTypeOfScript;
197 /// The name of the script file from which it was created
198 std::string mScriptFileName;
203 /// Adds an input descriptor
204 void AddInputDescriptor( BlackBoxInputDescriptor *d )
205 { mInput[d->GetName()] = d; }
206 /// Adds an output descriptor
207 void AddOutputDescriptor( BlackBoxOutputDescriptor *d )
208 { mOutput[d->GetName()] = d; }
211 /// The name of the type of black box
212 std::string mTypeName;
213 /// The description of the black box
214 std::string mDescription;
215 /// The author of the black box
217 /// The category of the black box
218 std::string mCategory;
219 /// The kind of box (standard / adaptor)
221 /// The Package to which the box belongs
222 PackagePointer mPackage;
224 InputDescriptorMapType mInput;
226 OutputDescriptorMapType mOutput;
229 // class BlackBoxDescriptor
230 //==========================================================================