//!======================================================================
//! @param sourcePath
//! @param destinationPath
//! @param patchPath
//!
//! @return 0 => OK
//!
int XmlParser::addUsbdmWizard(const char *sourcePath, const char *destinationPath, const char *patchPath) {
int rc = 0;

   if (verbose) {
      cout << "Applying patches: " << patchPath <<"\n"
              " <= " << sourcePath << "\n"
              " => " << destinationPath << "\n";
   }
   try {
      XMLPlatformUtils::Initialize();
   }
   catch (const XMLException& toCatch) {
      char* message = XMLString::transcode(toCatch.getMessage());
      cerr << "Error during XML Initialisation! :\n"
           << message << "\n";
      XMLString::release(&message);
      return -1;
   }
   try {
      XmlParser parser;
      if (verbose)
         cerr << "Opening source: '" << sourcePath << "'" << endl;
      parser.openSourcefile(sourcePath);
      if (verbose)
         cerr << "Opening patch: '" << patchPath << "'" << endl;
      parser.openPatchfile(patchPath);
      if (verbose)
         cerr << "Parsing XML file\n";
      parser.mergePatchfile();
      if (verbose)
         cerr << "Saving result: '" << destinationPath << "'" << endl;
      parser.commit(destinationPath);
   }
   catch (runtime_error *ex) {
      cerr << "Exception while parsing, reason: " << ex->what() << endl;
      rc = -1;
   }
   try {
      xercesc::XMLPlatformUtils::Terminate();
   }
   catch( xercesc::XMLException& e ){

      cerr<< " in catch()\n";
      char* message = xercesc::XMLString::transcode( e.getMessage() ) ;

      cerr << "XML toolkit tear-down error: "
           << message
           << endl;
      XMLString::release( &message ) ;
      rc = -1;
   }
   if (rc == 0)
      cout << "OK\n";
   return rc;
}