code: public void run()
      {
          // Check parameters are initialized.
          try
          {
              checkParameters();
          }
          catch ( ExecutionException e )
          {
              logger.error( e.getMessage() );
              return;
          }
  
          // Initialize targets
          for ( ExecutionTarget target : getTargets() )
          {
              try
              {
                  target.init();
              }
              catch ( Exception e )
              {
                  // Remove the target in fault
                  removeTarget( target );
                  logger.warn( e.getMessage() );
  
                  // If this was the last target, cancel the execution.
                  if ( getTargets().isEmpty() )
                  {
                      logger.warn( "No output target for computed hashcodes, execution canceled." );
                      return;
                  }
              }
          }
  
          // Process files
          for ( ChecksumFile file : files )
          {
              for ( String algorithm : getAlgorithms() )
              {
                  try
                  {
                      // Calculate the hash for the file/algo
                      FileDigester digester = DigesterFactory.getInstance().getFileDigester( algorithm );
                      String hash = digester.calculate( file.getFile() );
  
                      // Write it to each target defined
                      for ( ExecutionTarget target : getTargets() )
                      {
                          try
                          {
                              target.write( hash, file, algorithm );
                          }
                          catch ( ExecutionTargetWriteException e )
                          {
                              logger.warn( e.getMessage() );
                          }
                      }
                  }
                  catch ( NoSuchAlgorithmException e )
                  {
                      logger.warn( "Unsupported algorithm " + algorithm + "." );
                  }
                  catch ( DigesterException e )
                  {
                      logger.warn(
                          "Unable to calculate " + algorithm + " hash for " + file.getFile().getName() + ": " + e.getMessage() );
                  }
              }
          }
  
          // Close targets
          for ( ExecutionTarget target : getTargets() )
          {
              try
              {
                  target.close( subPath );
              }
              catch ( Exception e )
              {
                  logger.warn( e.getMessage() );
              }
          }
      }
docs: {@inheritDoc}