コード例 #1
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /** Cancel upload process and show an error message to the user. */
 private void cancelUpload(String msg) {
   successful = false;
   uploadFinished();
   if (fileInput instanceof IDragAndDropFileInput) {
     ((IDragAndDropFileInput) fileInput).reset();
   }
   statusWidget.setStatus(IUploadStatus.Status.ERROR);
   statusWidget.setError(msg);
 }
コード例 #2
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /** Adds a file to the upload queue. */
 private void addToQueue() {
   statusWidget.setStatus(IUploadStatus.Status.QUEUED);
   statusWidget.setProgress(0, 0);
   if (!fileQueue.contains(getInputName())) {
     onStartUpload();
     fileQueue.add(getInputName());
     if (!multiple && avoidRepeatedFiles) {
       fileUploading.add(getFileName());
     }
   }
 }
コード例 #3
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 private boolean validateExtension(String filename) {
   if (filename == null || filename.length() == 0) {
     return !avoidEmptyFile;
   }
   boolean valid = Utils.validateExtension(validExtensions, filename);
   if (!valid) {
     finished = true;
     statusWidget.setError(i18nStrs.uploaderInvalidExtension() + validExtensionsMsg);
     statusWidget.setStatus(Status.INVALID);
   }
   return valid;
 }
コード例 #4
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /* (non-Javadoc)
  * @see gwtupload.client.IUploader#setI18Constants(gwtupload.client.I18nUploadConstants)
  */
 public void setI18Constants(UploaderConstants strs) {
   this.i18nStrs = strs;
   fileInput.setText(
       fileInput instanceof IDragAndDropFileInput
           ? i18nStrs.uploaderDrop()
           : i18nStrs.uploaderBrowse());
   statusWidget.setI18Constants(strs);
 }
コード例 #5
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /* (non-Javadoc)
  * @see gwtupload.client.IUploader#addOnCancelUploadHandler(gwtupload.client.IUploader.OnCancelUploaderHandler)
  */
 public HandlerRegistration addOnCancelUploadHandler(final OnCancelUploaderHandler handler) {
   assert handler != null;
   return statusWidget.addCancelHandler(
       new IUploadStatus.UploadCancelHandler() {
         public void onCancel() {
           handler.onCancel(thisInstance);
         }
       });
 }
コード例 #6
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
  /**
   * Called when the uploader detects that the upload process has finished: - in the case of submit
   * complete. - in the case of error talking with the server.
   */
  private void uploadFinished() {
    removeFromQueue();
    finished = true;
    uploading = false;
    updateStatusTimer.cancel();
    statusWidget.setVisible(false);

    if (successful) {
      if (avoidRepeatedFiles) {
        fileDone.addAll(fileInput.getFilenames());
        statusWidget.setStatus(IUploadStatus.Status.SUCCESS);
      } else {
        statusWidget.setStatus(IUploadStatus.Status.SUCCESS);
      }
    } else if (canceled) {
      statusWidget.setStatus(IUploadStatus.Status.CANCELED);
    } else {
      statusWidget.setStatus(IUploadStatus.Status.ERROR);
    }
    onFinishUpload();
    reatachIframe(uploadForm.getElement().getAttribute("target"));
  }
コード例 #7
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
  /** Cancel the current upload process. */
  public void cancel() {
    if (getStatus() == Status.UNINITIALIZED) {
      return;
    }

    if (finished && !uploading) {
      if (successful) {
        try {
          sendAjaxRequestToDeleteUploadedFile();
        } catch (Exception e) {
        }
      } else {
        statusWidget.setStatus(Status.DELETED);
      }
      return;
    }

    if (canceled || getStatus() == Status.CANCELING) {
      return;
    }

    canceled = true;
    automaticUploadTimer.cancel();
    if (uploading) {
      updateStatusTimer.cancel();
      try {
        sendAjaxRequestToCancelCurrentUpload();
      } catch (Exception e) {
        log("Exception cancelling request " + e.getMessage(), e);
      }
      statusWidget.setStatus(IUploadStatus.Status.CANCELING);
    } else {
      uploadFinished();
      reuse();
    }
  }
コード例 #8
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /** set the status widget used to display the upload progress. */
 public void setStatusWidget(IUploadStatus stat) {
   if (stat == null) {
     return;
   }
   uploaderPanel.remove(statusWidget.asWidget());
   statusWidget = stat;
   if (!stat.asWidget().isAttached()) {
     uploaderPanel.add(statusWidget.asWidget());
   }
   statusWidget.asWidget().addStyleName(STYLE_STATUS);
   statusWidget.setVisible(false);
   statusWidget.addCancelHandler(cancelHandler);
   statusWidget.setStatusChangedHandler(statusChangedHandler);
 }
コード例 #9
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /** Prepare the uploader for a new upload. */
 public void reuse() {
   this.uploadForm.reset();
   updateStatusTimer.cancel();
   onSubmitComplete = uploading = canceled = finished = successful = false;
   statusWidget.setStatus(Status.UNINITIALIZED);
 }
コード例 #10
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /* (non-Javadoc)
  * @see gwtupload.client.IUploader#getStatus()
  */
 public Status getStatus() {
   return statusWidget.getStatus();
 }
コード例 #11
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 public void setServerMessage(ServerMessage msg) {
   serverMessage = msg;
   successful = true;
   statusWidget.setFileNames(msg.getUploadedFileNames());
   uploadFinished();
 }
コード例 #12
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
  private void parseAjaxResponse(String responseTxt) {
    if (responseTxt == null) {
      return;
    }

    String error = null;
    Document doc = null;
    try {
      doc = XMLParser.parse(responseTxt);
      error = Utils.getXmlNodeValue(doc, "error");
      if (error == null) {
        // Response brings uploaded files info in either:
        // POST response or FINISHED status
        String msg = Utils.getXmlNodeValue(doc, TAG_MESSAGE);
        serverMessage.setMessage(msg);
        String fld = Utils.getXmlNodeValue(doc, TAG_FIELD);
        NodeList list = doc.getElementsByTagName(TAG_FILE);
        for (int i = 0, l = list.getLength(); i < l; i++) {
          UploadedInfo info = new UploadedInfo();
          info.setField(getInputName() + "-" + i);
          info.setName(Utils.getXmlNodeValue(doc, TAG_NAME, i));
          info.setCtype(Utils.getXmlNodeValue(doc, TAG_CTYPE, i));
          // TODO: test
          info.setKey(Utils.getXmlNodeValue(doc, TAG_KEY, i));
          // TODO: remove
          info.message = msg;
          String url = session.composeURL(PARAM_SHOW + "=" + info.getField());
          if (info.getKey() != null) {
            url += "&" + PARAM_BLOBKEY + "=" + info.getKey();
          }
          info.setFileUrl(url);

          String size = Utils.getXmlNodeValue(doc, TAG_SIZE, i);
          if (size != null) {
            info.setSize(Integer.parseInt(size));
          }
          serverMessage.getUploadedInfos().add(info);
        }
      }
    } catch (Exception e) {
      if (responseTxt.toLowerCase().matches("error")) {
        error =
            i18nStrs.uploaderServerError()
                + "\nAction: "
                + getServletPath()
                + "\nException: "
                + e.getMessage()
                + responseTxt;
      }
    }

    if (error != null) {
      successful = false;
      cancelUpload(error);
      return;
    } else if (Utils.getXmlNodeValue(doc, TAG_WAIT) != null) {
      if (serverRawResponse != null) {
        log(
            "server response received, cancelling the upload "
                + getFileNames()
                + " "
                + serverRawResponse,
            null);
        successful = true;
        uploadFinished();
      }
    } else if (Utils.getXmlNodeValue(doc, TAG_CANCELED) != null) {
      log("server response is: canceled " + getFileNames(), null);
      successful = false;
      canceled = true;
      uploadFinished();
      return;
    } else if (Utils.getXmlNodeValue(doc, TAG_FINISHED) != null) {
      log("server response is: finished " + serverMessage.getUploadedFileNames(), null);
      successful = true;
      if (onSubmitComplete) {
        log("POST response from server has been received", null);
        uploadFinished();
      }
      return;
    } else if (Utils.getXmlNodeValue(doc, TAG_PERCENT) != null) {
      lastData = now();
      long transferredKB = Long.valueOf(Utils.getXmlNodeValue(doc, TAG_CURRENT_BYTES)) / 1024;
      long totalKB = Long.valueOf(Utils.getXmlNodeValue(doc, TAG_TOTAL_BYTES)) / 1024;
      statusWidget.setProgress(transferredKB, totalKB);
      log(
          "server response transferred  " + transferredKB + "/" + totalKB + " " + getFileNames(),
          null);
      if (onSubmitComplete) {
        successful = true; // why suppose an error here in this case ?
        String msg = i18nStrs.uploaderBadServerResponse() + "\n" + serverRawResponse;
        if (blobstore) {
          msg += "\n" + i18nStrs.uploaderBlobstoreBilling();
        } else {
          msg += "\n" + i18nStrs.uploaderBadParsing();
        }
        msg += "\n\n" + responseTxt;
        log(msg, null); // keep log message anyway
        //        statusWidget.setError(msg); // disable the user visible error message
        uploadFinished();
      }
      return;
    } else {
      log("incorrect response: " + getFileNames() + " " + responseTxt, null);
    }

    if (uploadTimeout > 0 && now() - lastData > uploadTimeout) {
      successful = false;
      cancelUpload(i18nStrs.uploaderTimeout());
      try {
        sendAjaxRequestToCancelCurrentUpload();
      } catch (Exception e) {
      }
    }
  }
コード例 #13
0
ファイル: Uploader.java プロジェクト: cyrilmhansen/gwtupload
 /**
  * Method called when the file input has changed. This happens when the user selects a file.
  *
  * <p>Override this method if you want to add a customized behavior, but remember to call this in
  * your function
  */
 protected void onChangeInput() {
   statusWidget.setStatus(Status.CHANGED);
   for (IUploader.OnChangeUploaderHandler handler : onChangeHandlers) {
     handler.onChange(this);
   }
 }