Tulip  4.0.0
Better Visualization Through Research
 All Classes Files Functions Variables Enumerations Enumerator Properties Groups Pages
WithDependency.h
1 /*
2  *
3  * This file is part of Tulip (www.tulip-software.org)
4  *
5  * Authors: David Auber and the Tulip development Team
6  * from LaBRI, University of Bordeaux 1 and Inria Bordeaux - Sud Ouest
7  *
8  * Tulip is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation, either version 3
11  * of the License, or (at your option) any later version.
12  *
13  * Tulip is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  */
19 
20 #ifndef _TULIPWITHDEPENDENCY
21 #define _TULIPWITHDEPENDENCY
22 
23 #include <list>
24 #include <string>
25 #include <typeinfo>
26 #include <tulip/tulipconf.h>
27 #include <tulip/TlpTools.h>
28 
29 namespace tlp {
30 
31 /**
32  * @ingroup Plugins
33  *
34  * @brief Represents a plugin's dependency to another plugin.
35  * In addition to maganing plugin registration, Tulip also handles a dependency mechanism between plugins.
36  * Every Tulip plugin inherits from the tlp::WithDependency interface which allows to declare that another plugin should be loaded in order for this plugin to run.
37  * When declaring a dependency, a plugin state the name and the version of the dependecy. This is done by calling tlp::WithDependency::addDependency()
38  *
39  * @see tlp::WithDependency
40  */
41 struct Dependency {
42  /**
43  * @brief The name of the plug-in, as registered in the Tulip plug-in system.
44  */
45  std::string pluginName;
46  /**
47  * @brief The required version of the plug-in.
48  */
49  std::string pluginRelease;
50 
51  /**
52  * @brief Constructs a new dependency.
53  *
54  * @param fName The typename of the dependency (e.g. DoubleAlgorithm)
55  * @param pName The name of the plug-in, as registered in the Tulip plug-in system.
56  * @param pRelease The required version of the plug-in.
57  */
58  Dependency(std::string pName,
59  std::string pRelease) {
60  pluginName = pName;
61  pluginRelease = pRelease;
62  }
63 };
64 
65 /**
66  * @ingroup Plugins
67  * @brief Describes the dependencies of a plug-in on other plug-ins, identified by their name and their version number.
68  *
69  * This allows to have a plug-in inner workings depend on other plug-ins without linking them statically, or hoping depended plug-in will be there.
70  */
72 protected:
73  /**
74  * @brief The inner list of dependencies.
75  */
76  std::list<Dependency> _dependencies;
77 public:
78  /**
79  * @brief Adds a dependency upon another plug-in.
80  *
81  * @param factory The type name of the plug-in (e.g. 'DoubleAlgorithm')
82  * @param name The name of the plug-in, as registered in the Tulip plug-in system.
83  * @param release The required version of the depended plug-in.
84  */
85  void addDependency(const char *name,const char *release) {
86  _dependencies.push_back(Dependency(name, release));
87  }
88 
89  /**
90  * @brief Gets the list of Dependencies of this plug-in.
91  *
92  * @return list<Dependency> The list of dependencies of this plug-in.
93  */
94  const std::list<Dependency>& dependencies() const {
95  return _dependencies;
96  }
97 
98 };
99 
100 
101 }
102 #endif