Package com.esri.gpt.control.webharvest.client.waf

Source Code of com.esri.gpt.control.webharvest.client.waf.FtpFileIterator

/*
* Copyright 2011 Esri.
*
* 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,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.control.webharvest.client.waf;

import com.esri.gpt.control.webharvest.IterationContext;
import com.esri.gpt.framework.resource.api.Resource;
import com.esri.gpt.framework.resource.query.Criteria;
import com.esri.gpt.framework.util.ReadOnlyIterator;
import com.esri.gpt.framework.util.Val;
import java.util.NoSuchElementException;
import org.apache.commons.net.ftp.FTPFile;

/**
* Ftp file iterator
*/
class FtpFileIterator extends ReadOnlyIterator<Resource> {
  private IterationContext iterationContext;
  private FtpClientRequest ftpClient;
  private Criteria criteria;
  private FTPFile[] files;
  private String folder;
  private int index = -1;
  private Resource nextResource;

  /**
   * Creates instance of the iterator.
   * @param iterationContext iteration context
   * @param url server url
   * @param folder folder
   */
  public FtpFileIterator(IterationContext iterationContext, FtpClientRequest ftpClient, Criteria criteria, FTPFile[] files, String folder) {
    this.iterationContext = iterationContext;
    this.ftpClient = ftpClient;
    this.criteria = criteria;
    this.files = files!=null? files: new FTPFile[]{};
    this.folder = Val.chkStr(folder);
  }

  @Override
  public boolean hasNext() {
    if (nextResource!=null) {
      return true;
    }
    if (index+1>=getFiles().length) {
      return false;
    }
    nextResource = newResource(getFiles()[++index]);
    if (nextResource!=null) {
      return true;
    }
    return hasNext();
  }

  @Override
  public Resource next() {
    if (nextResource==null) {
      throw new NoSuchElementException("No more elements.");
    }
    Resource r = nextResource;
    nextResource = null;
    if (r instanceof FtpFile) {
      try {
        FtpFile f = (FtpFile)r;
        f.getContent();
      } catch (Exception ex) {
        iterationContext.onIterationException(ex);
      }
    }
    return r;
  }

  /**
   * Gets files.
   * @return files
   */
  public final FTPFile[] getFiles() {
    return files;
  }
 
  /**
   * Gets request.
   * @return request
   */
  public final FtpClientRequest getFtpClient() {
    return ftpClient;
  }

  /**
   * Creates new resource.
   * @param file file
   * @return resource
   */
  protected Resource newResource(FTPFile file) {
    if (file.isDirectory()) {
      return new FtpFolder(iterationContext, getFtpClient(), criteria, folder + "/" + file.getName());
    } else if (file.isFile() && file.getName().toLowerCase().endsWith(".xml")) {
      if (criteria==null || criteria.getFromDate()==null || file.getTimestamp()==null
          || (criteria.getFromDate()!=null && file.getTimestamp()!=null && file.getTimestamp().after(criteria.getFromDate()))) {
        return new FtpFile(iterationContext, getFtpClient(), folder + "/" + file.getName());
      }
    }
    return null;
  }
 
}
TOP

Related Classes of com.esri.gpt.control.webharvest.client.waf.FtpFileIterator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.