package com.airlock.iam.plugin.configeditor.ui.dialog;

import com.airlock.iam.plugin.configeditor.util.TempFileReceiver;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Notification.Type;
import com.vaadin.v7.ui.Upload;
import com.vaadin.v7.ui.Upload.FailedEvent;
import com.vaadin.v7.ui.Upload.FailedListener;
import com.vaadin.v7.ui.Upload.SucceededEvent;
import com.vaadin.v7.ui.Upload.SucceededListener;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;

public class FileUploadDialog extends Window implements SucceededListener, FailedListener {
   private TempFileReceiver uploadReceiver;

   @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "See ALIAM-15315")
   public FileUploadDialog() {
      this.setWidth(300.0F, Unit.PIXELS);
      this.setCaption("Upload an IAM configuration");
      this.setModal(true);
      this.setResizable(false);
      VerticalLayout vl = new VerticalLayout();
      vl.addComponent(new Label("Select the file to be uploaded:"));
      this.uploadReceiver = new TempFileReceiver("medusa-config-upload-");
      Upload upload = new Upload(null, this.uploadReceiver);
      upload.setId("uploadButton");
      upload.setImmediate(true);
      upload.addSucceededListener(this);
      upload.addFailedListener(this);
      vl.addComponent(upload);
      vl.setComponentAlignment(upload, Alignment.MIDDLE_RIGHT);
      this.setContent(vl);
   }

   public File getUploadedFile() {
      return this.uploadReceiver.getTempFile();
   }

   public String getFilename() {
      return this.uploadReceiver.getOrigFileName();
   }

   public String getMimeType() {
      return this.uploadReceiver.getFileMimeType();
   }

   public void uploadSucceeded(SucceededEvent event) {
      UI.getCurrent().removeWindow(this);
   }

   public void uploadFailed(FailedEvent event) {
      this.uploadReceiver = new TempFileReceiver();
      Notification.show("Upload failed: " + event.getReason().getMessage(), Type.ERROR_MESSAGE);
   }
}
