* JPPF.
 * Copyright (C) 2005-2019 JPPF Team.
 * http://www.jppf.org
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * See the License for the specific language governing permissions and
 * limitations under the License.
package org.jppf.example.ftp.runner;

import org.jppf.example.ftp.service.FTPClientWrapper;
import org.jppf.node.protocol.*;
import org.jppf.utils.FileUtils;

 * This task processes a text file downloaded from an FTP server embedded within the JPPF driver.
 * The text file is transformed into a resulting html file which is then uploaded to the same FTP server.
 * @author Laurent Cohen
public class FTPTask extends AbstractTask<String> {
   * The file to download from the driver.
  private String inFile;
   * The resulting file to upload to the server.
  private String outFile;

   * Initialize this task with the specified in and out files.
   * @param inFile the file to download from the driver.
   * @param outFile the place where to store the downloaded file.
  public FTPTask(final String inFile, final String outFile) {
    this.inFile = inFile;
    this.outFile = outFile;

   * Download a text file from the driver, process it, store the result in an HTML file and upload it to the driver.
  public void run() {
    try {
      // retrieve the FTP host from the data provider
      final DataProvider dataProvider = getDataProvider();
      final String host = dataProvider.getParameter("ftp.host");
      final FTPClientWrapper client = new FTPClientWrapper();
      // this is just for demonstration purposes, the password should never be exposed like this!
      client.open(host, 12222, "admin", "admin");

      // download the input text file
      client.download(inFile, inFile);
      String text = FileUtils.readTextFile(inFile);
      // transform double line breaks into paragraphs
      text = text.replace("\n\n", "<p>");
      // transform remaining line breaks into html line breaks
      text = text.replace("\n", "<br/>");
      // set all occurrences of JPPF in bold
      text = text.replace("JPPF", "<b>JPPF</b>");
      // add barebone HTML header and footer
      final StringBuilder sb = new StringBuilder();
      FileUtils.writeTextFile(outFile, sb.toString());
      // upload the HTML file to the server.
      client.upload(outFile, outFile);

      setResult("execution successful");
    } catch (final Exception e) {
      setResult("execution failed: " + e.getClass().getName() + ": " + e.getMessage());