All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PluginInfo.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/plugin/PluginInfo.cpp
22 
23  \brief The basic information about a plugin.
24 */
25 
26 // TerraLib
27 #include "../xml/Reader.h"
28 #include "../xml/ReaderFactory.h"
29 #include "PluginInfo.h"
30 
31 // STL
32 #include <cassert>
33 #include <cstdlib>
34 
36 {
37  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
38  assert(xmlReader.getElementLocalName() == "PluginInfo");
39 
40  if(xmlReader.hasAttrs())
41  {
42  pInfo.m_engine = xmlReader.getAttr("engine");
43  pInfo.m_release = xmlReader.getAttr("release");
44  pInfo.m_version = xmlReader.getAttr("version");
45  }
46 
47 // Name
48  xmlReader.next();
49  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
50  assert(xmlReader.getElementLocalName() == "Name");
51 
52  xmlReader.next();
53  assert(xmlReader.getNodeType() == te::xml::VALUE);
54  pInfo.m_name = xmlReader.getElementValue();
55  xmlReader.next();
56  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Name element
57 
58 // DisplayName
59  xmlReader.next();
60  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
61  assert(xmlReader.getElementLocalName() == "DisplayName");
62 
63  xmlReader.next();
64  assert(xmlReader.getNodeType() == te::xml::VALUE);
65  pInfo.m_displayName = xmlReader.getElementValue();
66  xmlReader.next();
67  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of DisplayName element
68 
69 // Description
70  xmlReader.next();
71  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
72  assert(xmlReader.getElementLocalName() == "Description");
73 
74  xmlReader.next();
75  assert(xmlReader.getNodeType() == te::xml::VALUE);
76  pInfo.m_description = xmlReader.getElementValue();
77  xmlReader.next();
78  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Description element
79 
80 // TerraLibVersion
81  xmlReader.next();
82  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
83  assert(xmlReader.getElementLocalName() == "TerraLibVersion");
84 
85  xmlReader.next();
86  assert(xmlReader.getNodeType() == te::xml::VALUE);
87  pInfo.m_terralibVersion = xmlReader.getElementValue();
88  xmlReader.next();
89  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of TerraLibVersion element
90 
91 // License
92  xmlReader.next();
93  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
94  assert(xmlReader.getElementLocalName() == "License");
95 
96  if(xmlReader.hasAttrs())
97  {
98  pInfo.m_licenseURL = xmlReader.getAttr("xlink:href");
99  }
100 
101  xmlReader.next();
102  assert(xmlReader.getNodeType() == te::xml::VALUE);
103  pInfo.m_licenseDescription = xmlReader.getElementValue();
104  xmlReader.next();
105  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of License element
106 
107 // Category
108  xmlReader.next();
109  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
110  assert(xmlReader.getElementLocalName() == "Category");
111 
112  xmlReader.next();
113  assert(xmlReader.getNodeType() == te::xml::VALUE);
114  pInfo.m_category = xmlReader.getElementValue();
115  xmlReader.next();
116  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Category element
117 
118 // Site
119  xmlReader.next();
120  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
121  assert(xmlReader.getElementLocalName() == "Site");
122 
123  if(xmlReader.hasAttrs())
124  {
125  pInfo.m_site = xmlReader.getAttr("xlink:href");
126  }
127  xmlReader.next();
128  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Site element
129 
130 // Provider
131  xmlReader.next();
132  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
133  assert(xmlReader.getElementLocalName() == "Provider");
134 
135  xmlReader.next();
136  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
137  assert(xmlReader.getElementLocalName() == "Name");
138 
139  xmlReader.next();
140  assert(xmlReader.getNodeType() == te::xml::VALUE);
141  pInfo.m_provider.m_name = xmlReader.getElementValue();
142  xmlReader.next();
143  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Provider/Name element
144 
145  xmlReader.next();
146  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
147  assert(xmlReader.getElementLocalName() == "Site");
148 
149  if(xmlReader.hasAttrs())
150  {
151  pInfo.m_provider.m_site = xmlReader.getAttr("xlink:href");
152  }
153  xmlReader.next();
154  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Provider/Site element
155 
156  xmlReader.next();
157  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
158  assert(xmlReader.getElementLocalName() == "Email");
159 
160  xmlReader.next();
161  assert(xmlReader.getNodeType() == te::xml::VALUE);
162  pInfo.m_provider.m_email = xmlReader.getElementValue();
163  xmlReader.next();
164  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Provider/Email element
165 
166  xmlReader.next();
167  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT); // End of Provider
168 
169 // RequiredPlugins
170  xmlReader.next();
171 
172  if((xmlReader.getNodeType() == te::xml::START_ELEMENT) &&
173  (xmlReader.getElementLocalName() == "RequiredPlugins"))
174  {
175  while(xmlReader.next())
176  {
177  if((xmlReader.getNodeType() != te::xml::START_ELEMENT) ||
178  (xmlReader.getElementLocalName() != "PluginId"))
179  {
180  xmlReader.next();
181  break;
182  }
183 
184  xmlReader.next();
185  assert(xmlReader.getNodeType() == te::xml::VALUE);
186  std::string pluginId = xmlReader.getElementValue();
187  pInfo.m_requiredPlugins.push_back(pluginId);
188  xmlReader.next();
189  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
190  }
191  }
192 
193 // RequiredPluginCategory
194  if((xmlReader.getNodeType() == te::xml::START_ELEMENT) &&
195  (xmlReader.getElementLocalName() == "RequiredPluginCategory"))
196  {
197  while(xmlReader.next())
198  {
199  if((xmlReader.getNodeType() != te::xml::START_ELEMENT) ||
200  (xmlReader.getElementLocalName() != "CategoryId"))
201  {
202  xmlReader.next();
203  break;
204  }
205 
206  xmlReader.next();
207  assert(xmlReader.getNodeType() == te::xml::VALUE);
208  std::string categoryId = xmlReader.getElementValue();
209  pInfo.m_requiredPluginCategories.push_back(categoryId);
210  xmlReader.next();
211  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
212  }
213  }
214 
215 // RequiredModules
216  if((xmlReader.getNodeType() == te::xml::START_ELEMENT) &&
217  (xmlReader.getElementLocalName() == "RequiredModules"))
218  {
219  while(xmlReader.next())
220  {
221  if((xmlReader.getNodeType() != te::xml::START_ELEMENT) ||
222  (xmlReader.getElementLocalName() != "ModuleId"))
223  {
224  xmlReader.next();
225  break;
226  }
227 
228  xmlReader.next();
229  assert(xmlReader.getNodeType() == te::xml::VALUE);
230  std::string moduleId = xmlReader.getElementValue();
231  pInfo.m_requiredModules.push_back(moduleId);
232  xmlReader.next();
233  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
234  }
235  }
236 
237 // Resources
238  if((xmlReader.getNodeType() == te::xml::START_ELEMENT) &&
239  (xmlReader.getElementLocalName() == "Resources"))
240  {
241  while(xmlReader.next())
242  {
243  if((xmlReader.getNodeType() != te::xml::START_ELEMENT) ||
244  (xmlReader.getElementLocalName() != "Resource"))
245  {
246  xmlReader.next();
247  break;
248  }
249 
250  std::string name = xmlReader.getAttr("name");
251  std::string href = xmlReader.getAttr("xlink:href");
252 
253  pInfo.m_resources.push_back(te::plugin::PluginInfo::Resource(name, href));
254  xmlReader.next();
255  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
256  }
257  }
258 
259 // Parameters
260  if((xmlReader.getNodeType() == te::xml::START_ELEMENT) &&
261  (xmlReader.getElementLocalName() == "Parameters"))
262  {
263  while(xmlReader.next())
264  {
265  if((xmlReader.getNodeType() != te::xml::START_ELEMENT) ||
266  (xmlReader.getElementLocalName() != "Parameter"))
267  {
268  xmlReader.next();
269  break;
270  }
271 
272  xmlReader.next();
273  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
274  assert(xmlReader.getElementLocalName() == "Name");
275 
276  xmlReader.next();
277  assert(xmlReader.getNodeType() == te::xml::VALUE);
278  std::string paramName = xmlReader.getElementValue();
279  xmlReader.next();
280  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
281 
282  xmlReader.next();
283  assert(xmlReader.getNodeType() == te::xml::START_ELEMENT);
284  assert(xmlReader.getElementLocalName() == "Value");
285 
286  xmlReader.next();
287  assert(xmlReader.getNodeType() == te::xml::VALUE);
288  std::string paramValue = xmlReader.getElementValue();
289  xmlReader.next();
290  assert(xmlReader.getNodeType() == te::xml::END_ELEMENT);
291 
292  pInfo.m_parameters.push_back(te::plugin::PluginInfo::Parameter(paramName, paramValue));
293  }
294  }
295 
296  assert(xmlReader.getNodeType() == te::xml::END_DOCUMENT);
297 
298  return pInfo;
299 }
te::plugin::PluginInfo & operator<<(te::plugin::PluginInfo &pInfo, te::xml::Reader &xmlReader)
It deserializes the plugin info using the given XML reader.
Definition: PluginInfo.cpp:35
std::string m_name
The plugin name: an internal value used to identify the plugin in the system. Must be a unique value...
Definition: PluginInfo.h:66
std::vector< std::string > m_requiredPlugins
The list of required plugins in order to lunch the plugin.
Definition: PluginInfo.h:78
This class models a XML reader object.
Definition: Reader.h:55
std::vector< std::string > m_requiredModules
The list of required category of plugins in order to lunch the plugin.
Definition: PluginInfo.h:80
std::string m_site
The provider home page.
Definition: Provider.h:48
std::string m_licenseDescription
A brief description about the plugin license.
Definition: PluginInfo.h:73
std::string m_displayName
The plugin name to be displayed in a graphical interface.
Definition: PluginInfo.h:67
std::string m_terralibVersion
The TerraLib version this plugin depends on.
Definition: PluginInfo.h:72
virtual std::string getElementLocalName() const =0
It returns the local part of the element name in the case of an element node.
std::string m_engine
The type of plugin execution engine: C++, JAVA.
Definition: PluginInfo.h:71
Provider m_provider
Information about the plugin provider.
Definition: PluginInfo.h:77
std::string m_version
The plugin version.
Definition: PluginInfo.h:69
std::string m_site
An URL pointing to the plugin site.
Definition: PluginInfo.h:76
std::vector< std::string > m_requiredPluginCategories
The list of required category of plugins in order to lunch the plugin.
Definition: PluginInfo.h:79
virtual std::string getAttr(const std::string &name) const =0
It returns the attribute value in the case of an element node with valid attributes.
std::string m_email
The provider contact e-mail.
Definition: Provider.h:49
std::string m_release
The release date of the plugin. This may be used to identify new versions of a given plugin...
Definition: PluginInfo.h:70
virtual NodeType getNodeType() const =0
It return the type of node read.
std::vector< Resource > m_resources
The list of resources used by plugin.
Definition: PluginInfo.h:81
virtual std::string getElementValue() const =0
It returns the element data value in the case of VALUE node.
std::vector< Parameter > m_parameters
Any configuration parameter that can be informed to plugin (map: parameter-name -> parameter-value)...
Definition: PluginInfo.h:82
std::pair< std::string, std::string > Resource
Definition: PluginInfo.h:63
std::string m_description
A brief explanation about the plugin.
Definition: PluginInfo.h:68
std::string m_name
Provider name: may be a person or a company.
Definition: Provider.h:47
The basic information about a plugin.
Definition: PluginInfo.h:61
The basic information about a plugin.
virtual bool hasAttrs() const =0
It tells if the element has attributes in the case of an element node.
virtual bool next()=0
It gets the next event to be read.
std::string m_category
The plugin category.
Definition: PluginInfo.h:75
std::pair< std::string, std::string > Parameter
Definition: PluginInfo.h:64
std::string m_licenseURL
An URL where someone can find more information on the license.
Definition: PluginInfo.h:74