public static String getMaryVersion() {
    String output =
        "Mary TTS server "
            + Version.specificationVersion()
            + " (impl. "
            + Version.implementationVersion()
            + ")";

    return output;
  }
 private void updateVoiceDescription(File rootDir, File packageFile)
     throws MalformedURLException, ParserConfigurationException, MaryConfigurationException,
         IOException {
   logger.debug("writing new voice description...");
   voiceDescription.setVersion(Version.specificationVersion());
   voiceDescription.setDependsVersion(Version.specificationVersion());
   voiceDescription.setPackageFilename(packageFile.getName());
   voiceDescription.setPackageMD5Sum(computeMD5(packageFile));
   voiceDescription.setPackageSize((int) packageFile.length());
   voiceDescription.removeAllLocations();
   voiceDescription.addLocation(
       URI.create("http://mary.dfki.de/download/" + Version.specificationVersion() + "/").toURL());
   Document doc = voiceDescription.createComponentXML();
   File newVoiceDescriptionFile = new File(rootDir, getFilenamePrefix() + "-component.xml");
   DomUtils.document2File(doc, newVoiceDescriptionFile);
   logger.debug("... created " + newVoiceDescriptionFile.getPath());
 }
 private String getFilenamePrefix() {
   return "voice-" + voiceDescription.getName() + "-" + Version.specificationVersion();
 }
  private void convert() throws Exception {
    logger.info("converting...");
    File rootDir = mary4Zip.getParentFile();
    extractedDir =
        new File(rootDir, voiceDescription.getName() + "-" + voiceDescription.getVersion());
    logger.debug("... extracting archive to " + extractedDir.getPath());
    if (extractedDir.exists()) {
      logger.debug("Folder " + extractedDir.getPath() + " exists, trying to delete...");
      extractedDir.delete();
    }
    FileUtils.unzipArchive(mary4Zip, extractedDir);

    loadConfig(findConfigFile());

    compileDir =
        new File(
            rootDir, voiceDescription.getName() + "-" + Version.specificationVersion() + "-maven");

    domain = config.getProperty(getPropertyPrefix() + "domain");
    samplingRate = Integer.parseInt(config.getProperty(getPropertyPrefix() + "samplingRate"));

    filesForResources = getFilesForResources();
    filesForFilesystem = getFilesForFilesystem();
    Map<String, String> extraVariablesToSubstitute = null;

    compiler =
        new VoiceCompiler.MavenVoiceCompiler(
            compileDir,
            getVoiceName(),
            Version.specificationVersion(),
            voiceDescription.getLocale(),
            voiceDescription.getGender(),
            domain,
            samplingRate,
            isUnitSelectionVoice(),
            filesForResources,
            filesForFilesystem,
            extraVariablesToSubstitute);

    logger.debug("Creating directories");
    compiler.createDirectories();

    logger.debug("Copying template files");
    compiler.copyTemplateFiles();

    updateConfig(compiler.getPackageName());
    saveConfig(compiler.getConfigFile());

    logger.debug("Copying voice files");
    compiler.copyVoiceFiles();

    if (!isUnitSelectionVoice()) {
      logger.debug("Converting HMM PDF files from Mary 4.0 to Mary 5.0 format");
      convertMary4ToMary5HmmPdfFiles(compiler.getMainResourcesDir());
    }

    logger.debug("Compiling with Maven");
    compiler.compileWithMaven();

    String convertedZipFilename = getFilenamePrefix() + ".zip";
    File convertedZipFile = new File(compileDir + "/target/" + convertedZipFilename);
    if (!convertedZipFile.exists()) {
      throw new IOException(
          "Maven should have created file "
              + convertedZipFile.getAbsolutePath()
              + " but file does not exist.");
    }

    updateVoiceDescription(rootDir, convertedZipFile);

    File finalZipFile = new File(rootDir, convertedZipFilename);
    if (finalZipFile.exists()) {
      finalZipFile.delete();
    }
    boolean success = convertedZipFile.renameTo(finalZipFile);
    if (!success) {
      throw new IOException(
          "Failure trying to move "
              + convertedZipFile.getAbsolutePath()
              + " to "
              + finalZipFile.getAbsolutePath());
    }
  }