Example #1
0
  /**
   * Returns list of mapped files, that should be transformed. Files can by specified via attributes
   * (srcFile, srcDir) or resources (FileSet, FileList, DirSet, etc). Mapped file represents input
   * and output file for transformation.
   *
   * @return list of mapped files
   */
  public List<MappedFile> getMappedFiles() {
    mappedFiles.clear();

    // one src file
    if (getSrcFile() != null) {
      addMappedFile(getSrcFile());
    }

    if (getSrcDir() != null) {
      addMappedFile(getSrcDir());
    }

    Iterator element = resources.iterator();
    while (element.hasNext()) {
      ResourceCollection rc = (ResourceCollection) element.next();
      if (rc instanceof FileSet && rc.isFilesystemOnly()) {
        FileSet fs = (FileSet) rc;
        File fromDir = fs.getDir(getProject());

        DirectoryScanner ds;
        try {
          ds = fs.getDirectoryScanner(getProject());
        } catch (BuildException ex) {
          log("Could not scan directory " + fromDir, ex, Project.MSG_ERR);
          continue;
        }

        for (String f : ds.getIncludedFiles()) {
          addMappedFile(new File(fromDir + System.getProperty("file.separator") + f), fromDir);
        }
      } else {
        if (!rc.isFilesystemOnly()) {
          log("Only filesystem resources are supported", Project.MSG_WARN);
          continue;
        }
        Iterator rcIt = rc.iterator();
        while (rcIt.hasNext()) {
          Resource r = (Resource) rcIt.next();
          if (!r.isExists()) {
            log("Could not find resource " + r.toLongString(), Project.MSG_VERBOSE);
            continue;
          }

          if (r instanceof FileResource) {
            FileResource fr = (FileResource) r;
            addMappedFile(fr.getFile(), fr.getBaseDir());
          } else {
            log(
                "Only file resources are supported (" + r.getClass().getSimpleName() + " found)",
                Project.MSG_WARN);
            continue;
          }
        }
      }
    }

    return mappedFiles;
  }
Example #2
0
  /**
   * Protected method for simplyfied addinng of mapped files
   *
   * @param file file to add
   * @param baseDir base directory for file
   */
  protected void addMappedFile(File file, File baseDir) {
    if (file.isFile()) {
      if (baseDir == null) {
        baseDir = file.getParentFile();
      }
      MappedFile mappedFile = new MappedFile();
      mappedFile.setFrom(file);
      String filename = file.getName();

      String[] names = getMapper().mapFileName(filename);
      // we don't use original filename if no mapping is available
      if (names == null || names.length == 0) {
        return;
      }

      File newFile = new File(file.getParent() + System.getProperty("file.separator") + names[0]);
      if (getDestDir() != null) {
        try {
          newFile =
              new File(
                  newFile
                      .getCanonicalPath()
                      .replace(baseDir.getCanonicalPath(), getDestDir().getCanonicalPath()));
        } catch (IOException ex) {
          log("Couldn't map file", ex, Project.MSG_WARN);
          return;
        }
      }
      mappedFile.setTo(newFile);
      mappedFiles.add(mappedFile);
    } else if (file.isDirectory()) {
      if (baseDir == null) {
        baseDir = file;
      }
      DirectoryScanner ds = new DirectoryScanner();
      ds.setBasedir(file);
      ds.scan();

      for (String fileName : ds.getIncludedFiles()) {
        addMappedFile(new File(file + System.getProperty("file.separator") + fileName), baseDir);
      }
    }
  }
Example #3
0
 /**
  * Add resource collection
  *
  * @param rc resource collection to add
  */
 public void add(ResourceCollection rc) {
   resources.add(rc);
 }
Example #4
0
  /**
   * Main entry point for this task. It creates transformation specified by classname attribute,
   * passes all parameters and executes it.
   *
   * @throws BuildException if an error occured
   */
  @Override
  public void execute() throws BuildException {
    if (getClassname() == null) {
      throw new BuildException("Classname of transformation is not set.");
    }

    if (getSrcFile() != null && getSrcDir() != null) {
      throw new BuildException("Both srcFile and srcDir were set.");
    }

    if (getDestFile() != null && getDestDir() != null) {
      throw new BuildException("Both destFile and destDir were set.");
    }

    if (!resources.isEmpty() && (getSrcFile() != null || getSrcDir() != null)) {
      throw new BuildException("Resources can't be combined with srcFile or srcDir.");
    }

    initClassloader();

    try {
      TransformationLoader loader =
          new TransformationLoader(Thread.currentThread().getContextClassLoader());
      Transformation transObj = null;
      try {
        transObj = loader.getInstance(getClassname());
      } catch (InstantiationException ex) {
        throw new BuildException("Transformation couldn't be instanciated", ex);
      } catch (IllegalAccessException ex) {
        throw new BuildException("Transformation couldn't be accessed", ex);
      }

      if (transObj == null) {
        throw new BuildException("Transformation " + getClassname() + " couldn't be loaded");
      }

      List<MappedFile> files = getMappedFiles();
      if (files.isEmpty()) {
        log(
            "No files specified, " + transObj.getClass().getSimpleName() + " skipped",
            Project.MSG_INFO);
        return;
      }
      for (MappedFile mf : files) {
        log("Mapped file " + mf.getFrom() + " to " + mf.getTo(), Project.MSG_VERBOSE);
      }

      transObj.setParam("baseDir", getProject().getBaseDir().getPath());
      transObj.setMappedFiles(files);
      transObj.setParams(parameters);

      for (String key : parameters.keySet())
        log(
            "Parsed parameter "
                + key
                + " = "
                + parameters.get(key)
                + " ("
                + parameters.get(key).getClass().getName()
                + ")",
            Project.MSG_VERBOSE);

      try {
        log(
            "Executing transformation "
                + transObj.getClass().getSimpleName()
                + " on "
                + mappedFiles.size()
                + " files");
        transObj.execute();
      } catch (TransformationException ex) {
        log("Transformation has failed", ex, Project.MSG_ERR);
        if (isFailonerror()) {
          throw new BuildException("Transformation has failed.", ex);
        }
      }
    } finally {
      restoreClassloader();
    }
  }