/*******************************************************************************
 * Copyright (c) 2011, 2014 EclipseSource and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    EclipseSource - initial API and implementation
 ******************************************************************************/
package org.eclipse.rap.addons.fileupload.internal;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.rap.addons.fileupload.FileDetails;
import org.eclipse.rap.addons.fileupload.FileUploadEvent;
import org.eclipse.rap.addons.fileupload.FileUploadHandler;


final class FileUploadTracker {

  private final FileUploadHandler handler;
  private final List<FileDetails> files;
  private long contentLength;
  private long bytesRead;
  private Exception exception;

  FileUploadTracker( FileUploadHandler handler ) {
    this.handler = handler;
    files = new ArrayList<FileDetails>();
  }

  void addFile( FileDetails details ) {
    files.add( details );
  }

  boolean isEmpty() {
    return files.isEmpty();
  }

  void setContentLength( long contentLength ) {
    this.contentLength = contentLength;
  }

  void setBytesRead( long bytesRead ) {
    this.bytesRead = bytesRead;
  }

  void setException( Exception exception ) {
    this.exception = exception;
  }

  void handleProgress() {
    new InternalFileUploadEvent( handler ).dispatchAsProgress();
  }

  void handleFinished() {
    new InternalFileUploadEvent( handler ).dispatchAsFinished();
  }

  void handleFailed() {
    new InternalFileUploadEvent( handler ).dispatchAsFailed();
  }

  private final class InternalFileUploadEvent extends FileUploadEvent {

    private static final long serialVersionUID = 1L;

    private InternalFileUploadEvent( FileUploadHandler source ) {
      super( source );
    }

    @Override
    public FileDetails[] getFileDetails() {
      return files.toArray( new FileDetails[ 0 ] );
    }

    @Override
    public long getContentLength() {
      return contentLength;
    }

    @Override
    public long getBytesRead() {
      return bytesRead;
    }

    @Override
    public Exception getException() {
      return exception;
    }

    void dispatchAsProgress() {
      super.dispatchProgress();
    }

    void dispatchAsFinished() {
      super.dispatchFinished();
    }

    void dispatchAsFailed() {
      super.dispatchFailed();
    }
  }
}
