Tulip  4.3.0
Better Visualization Through Research
 All Classes Namespaces 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 
28 namespace tlp {
29 
30 /**
31  * @ingroup Plugins
32  *
33  * @brief Represents a plugin's dependency to another plugin.
34  * In addition to maganing plugin registration, Tulip also handles a dependency mechanism between plugins.
35  * 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.
36  * When declaring a dependency, a plugin state the name and the version of the dependecy. This is done by calling tlp::WithDependency::addDependency()
37  *
38  * @see tlp::WithDependency
39  */
40 struct Dependency {
41  /**
42  * @brief The name of the plug-in, as registered in the Tulip plug-in system.
43  */
44  std::string pluginName;
45  /**
46  * @brief The required version of the plug-in.
47  */
48  std::string pluginRelease;
49 
50  /**
51  * @brief Constructs a new dependency.
52  *
53  * @param pName The name of the plug-in, as registered in the Tulip plug-in system.
54  * @param pRelease The required version of the plug-in.
55  */
56  Dependency(std::string pName,
57  std::string pRelease):pluginName(pName),pluginRelease(pRelease) {
58 
59  }
60 };
61 
62 /**
63  * @ingroup Plugins
64  * @brief Describes the dependencies of a plug-in on other plug-ins, identified by their name and their version number.
65  *
66  * 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.
67  */
69 protected:
70  /**
71  * @brief The inner list of dependencies.
72  */
73  std::list<Dependency> _dependencies;
74 public:
75  /**
76  * @brief Adds a dependency upon another plug-in.
77  *
78  * @param factory The type name of the plug-in (e.g. 'DoubleAlgorithm')
79  * @param name The name of the plug-in, as registered in the Tulip plug-in system.
80  * @param release The required version of the depended plug-in.
81  */
82  void addDependency(const char *name,const char *release) {
83  _dependencies.push_back(Dependency(name, release));
84  }
85 
86  /**
87  * @brief Gets the list of Dependencies of this plug-in.
88  *
89  * @return list<Dependency> The list of dependencies of this plug-in.
90  */
91  const std::list<Dependency>& dependencies() const {
92  return _dependencies;
93  }
94 
95 };
96 
97 
98 }
99 #endif