#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <stdlib.h>
#ifdef LIBSBML_HAS_PACKAGE_RENDER
#include "sbml/packages/render/common/RenderExtensionTypes.h"
#endif
#if (!defined LIBSBML_HAS_PACKAGE_LAYOUT)
#error "This example requires libSBML to be built with the layout extension."
#endif
class LayoutConverter
{
public:
_doc = doc;
}
LayoutConverter(const char* filename) {
}
~LayoutConverter(){
delete _doc;
}
void convertLayout()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
if (_doc->getPlugin("layout") == NULL)
return;
if (_doc->getLevel() == 3)
convertLayoutToL2();
else
convertLayoutToL3();
}
void convertLayoutToL2()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
layoutNsUri = "http://projects.eml.org/bcb/sbml/level2";
#ifdef LIBSBML_HAS_PACKAGE_RENDER
foundRenderElements = false;
renderNsUri = "http://projects.eml.org/bcb/sbml/render/level2";
renderNs = new RenderPkgNamespaces(2, 1);
#endif
if (plugin == NULL)
return;
{
cout << "Conversion failed!" << endl;
_doc->printErrors();
exit(2);
}
if (docPlugin != NULL)
_doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "layout", 1);
#ifdef LIBSBML_HAS_PACKAGE_RENDER
if (rdocPlugin!= NULL)
_doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "render", 1);
#endif
}
void convertLayoutToL3()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
layoutNsUri = "http://www.sbml.org/sbml/level3/version1/layout/version1";
#ifdef LIBSBML_HAS_PACKAGE_RENDER
foundRenderElements = false;
renderNsUri = "http://www.sbml.org/sbml/level3/version1/render/version1";
renderNs = new RenderPkgNamespaces(3, 1, 1);
#endif
if (plugin == NULL)
return;
{
cout << "Conversion failed!" << endl;
_doc->printErrors();
exit(2);
}
if (docPlugin != NULL)
_doc->getSBMLNamespaces()->addPackageNamespace("layout", 1);
_doc->setPackageRequired("layout", false);
#ifdef LIBSBML_HAS_PACKAGE_RENDER
if (!foundRenderElements)
return;
if (rdocPlugin != NULL)
{
_doc->getSBMLNamespaces()->addPackageNamespace("render", 1);
}
else
{
_doc->enablePackage(renderNsUri, "render", true);
}
_doc->setPackageRequired("render", false);
#endif
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
#ifdef LIBSBML_HAS_PACKAGE_RENDER
RenderListOfLayoutsPlugin* lolPlugin
= (RenderListOfLayoutsPlugin*)list->
getPlugin(
"render");
if (lolPlugin != NULL)
{
updateNs(lolPlugin->getListOfGlobalRenderInformation());
}
#endif
}
#ifdef LIBSBML_HAS_PACKAGE_RENDER
void updateNs(ListOfGlobalRenderInformation *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((GlobalRenderInformation*)(list->get(i)));
}
void updateNs(ListOfLocalRenderInformation *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((LocalRenderInformation*)(list->get(i)));
}
void updateNs(GlobalRenderInformation *info)
{
foundRenderElements = true;
info->setSBMLNamespaces(renderNs);
updateNs(info->getListOfColorDefinitions());
updateNs(info->getListOfGradientDefinitions());
updateNs(info->getListOfLineEndings());
updateNs(info->getListOfStyles());
}
void updateNs(LocalRenderInformation *info)
{
foundRenderElements = true;
info->setSBMLNamespaces(renderNs);
updateNs(info->getListOfColorDefinitions());
updateNs(info->getListOfGradientDefinitions());
updateNs(info->getListOfLineEndings());
updateNs(info->getListOfStyles());
}
void updateNs(ListOfColorDefinitions *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((ColorDefinition*)(list->get(i)));
}
void updateNs(ColorDefinition *color)
{
color->setSBMLNamespaces(renderNs);
}
void updateNs(ListOfGradientDefinitions *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
{
GradientBase* current = list->get(i);
if (current->getTypeCode() == SBML_RENDER_LINEARGRADIENT)
updateNs((LinearGradient*)(current));
else
updateNs((RadialGradient*)(current));
}
}
void updateNs(GradientBase *gradient)
{
gradient->setSBMLNamespaces(renderNs);
updateNs(gradient->getListOfGradientStops());
}
void updateNs(ListOfGradientStops *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((GradientStop*)(list->get(i)));
}
void updateNs(GradientStop *stop)
{
stop->setSBMLNamespaces(renderNs);
}
void updateNs(ListOfLineEndings *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((LineEnding*)(list->get(i)));
}
void updateNs(LineEnding *line)
{
line->setSBMLNamespaces(renderNs);
updateNs(line->getBoundingBox());
updateNs(line->getGroup());
}
void updateNs(ListOfGlobalStyles *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((GlobalStyle*)(list->get(i)));
}
void updateNs(GlobalStyle *style)
{
style->setSBMLNamespaces(renderNs);
updateNs(style->getGroup());
}
void updateNs(LocalStyle *style)
{
style->setSBMLNamespaces(renderNs);
updateNs(style->getGroup());
}
void updateNs(RenderGroup *group)
{
group->setSBMLNamespaces(renderNs);
updateNs(group->getListOfElements());
}
void updateNs(ListOfDrawables *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
{
Transformation2D* current = list->get(i);
switch(current->getTypeCode())
{
case SBML_RENDER_CURVE:
updateNs((RenderCurve*)(current));
break;
case SBML_RENDER_ELLIPSE:
updateNs((Ellipse*)(current));
break;
case SBML_RENDER_GROUP:
updateNs((RenderGroup*)(current));
break;
case SBML_RENDER_IMAGE:
updateNs((Image*)(current));
break;
case SBML_RENDER_POLYGON:
updateNs((Polygon*)(current));
break;
case SBML_RENDER_RECTANGLE:
updateNs((Rectangle*)(current));
break;
case SBML_RENDER_TEXT:
updateNs((Text*)(current));
break;
}
}
}
void updateNs(RenderCurve *curve)
{
curve->setSBMLNamespaces(renderNs);
updateNs(curve->getListOfElements());
}
void updateNs(Transformation2D *element)
{
element->setSBMLNamespaces(renderNs);
}
void updateNs(Polygon *element)
{
element->setSBMLNamespaces(renderNs);
updateNs(element->getListOfElements());
}
void updateNs(ListOfCurveElements *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((RenderPoint*)(list->get(i)));
}
void updateNs(RenderPoint *element)
{
element->setSBMLNamespaces(renderNs);
}
void updateNs(ListOfLocalStyles *list)
{
list->setSBMLNamespaces(renderNs);
for (unsigned int i = 0; i < list->size(); i++)
updateNs((LocalStyle*)(list->get(i)));
}
#endif
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
{
else
updateNs(current);
}
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
list->setSBMLNamespaces(layoutNs);
for (
unsigned int i = 0; i < list->
size(); i++)
}
{
cubic->setSBMLNamespaces(layoutNs);
}
{
segment->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
void updateNs(
Curve *curve)
{
curve->setSBMLNamespaces(layoutNs);
}
{
glyph->setSBMLNamespaces(layoutNs);
}
{
box->setSBMLNamespaces(layoutNs);
}
{
dim->setSBMLNamespaces(layoutNs);
}
void updateNs(
Point *point)
{
point->setSBMLNamespaces(layoutNs);
}
{
layout->setSBMLNamespaces(layoutNs);
#ifdef LIBSBML_HAS_PACKAGE_RENDER
RenderLayoutPlugin* layoutPlugin
= (RenderLayoutPlugin*)layout->
getPlugin(
"render");
if (layoutPlugin != NULL)
{
updateNs(layoutPlugin->getListOfLocalRenderInformation());
}
#endif
}
protected:
#ifdef LIBSBML_HAS_PACKAGE_RENDER
string renderNsUri;
bool foundRenderElements;
#endif
string layoutNsUri;
};
class SimpleLayoutConverter
{
public:
_doc = doc;
}
SimpleLayoutConverter(const char* filename) {
}
~SimpleLayoutConverter(){
delete _doc;
}
void convertLayout()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
if (_doc->getPlugin("layout") == NULL)
return;
if (_doc->getLevel() == 3)
convertLayoutToL2();
else
convertLayoutToL3();
}
void convertLayoutToL2()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
layoutNsUri = "http://projects.eml.org/bcb/sbml/level2";
#ifdef LIBSBML_HAS_PACKAGE_RENDER
renderNsUri = "http://projects.eml.org/bcb/sbml/render/level2";
renderNs = new RenderPkgNamespaces(2, 1);
#endif
if (plugin == NULL)
return;
{
cout << "Conversion failed!" << endl;
_doc->printErrors();
exit(2);
}
if (docPlugin != NULL)
_doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "layout", 1);
_doc->getSBMLNamespaces()->addPackageNamespace("layout", 1);
#ifdef LIBSBML_HAS_PACKAGE_RENDER
if (rdocPlugin!= NULL)
_doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "render", 1);
_doc->getSBMLNamespaces()->addPackageNamespace("render", 1);
#endif
}
void convertLayoutToL3()
{
if (_doc == NULL || _doc->getModel() == NULL)
return;
layoutNsUri = "http://www.sbml.org/sbml/level3/version1/layout/version1";
#ifdef LIBSBML_HAS_PACKAGE_RENDER
renderNsUri = "http://www.sbml.org/sbml/level3/version1/render/version1";
renderNs = new RenderPkgNamespaces(3, 1, 1);
#endif
if (plugin == NULL)
return;
{
cout << "Conversion failed!" << endl;
_doc->printErrors();
exit(2);
}
if (docPlugin != NULL)
_doc->getSBMLNamespaces()->addPackageNamespace("layout", 1);
_doc->setPackageRequired("layout", false);
#ifdef LIBSBML_HAS_PACKAGE_RENDER
if (rdocPlugin != NULL)
{
_doc->getSBMLNamespaces()->addPackageNamespace("render", 1);
}
else
{
_doc->enablePackage(renderNsUri, "render", true);
}
_doc->setPackageRequired("render", false);
#endif
}
protected:
#ifdef LIBSBML_HAS_PACKAGE_RENDER
string renderNsUri;
#endif
string layoutNsUri;
};
int main(int argc,char** argv)
{
if (argc != 3)
{
cerr << "usage convertLayout <input> <output>" << endl << endl;
cerr << "This converter converts the SBML Layout ";
#ifdef LIBSBML_HAS_PACKAGE_RENDER
cerr << "and Render ";
#endif
cerr << "package information between SBML Level 2 and Level 3." << endl << endl;
exit(1);
}
SimpleLayoutConverter converter(argv[1]);
converter.convertLayout();
}