Package com.google.livingstories.client.contentmanager

Source Code of com.google.livingstories.client.contentmanager.ImportManager

/**
* Copyright 2010 Google Inc.
*
* 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.google.livingstories.client.contentmanager;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;

/**
* Page that handles data import.
*
* See comments in DataImportServlet.java for explanation of
* how this page helps spread the import work across multiple
* requests to avoid going over the appengine request timeout.
*/
public class ImportManager extends ManagerPane {
  private FormPanel fileUploadForm;
  private FormPanel progressForm;
  private HTML statusLabel;
 
  private int progress;
 
  public ImportManager() {
    final VerticalPanel contentPanel = new VerticalPanel();
   
    contentPanel.add(createExportLink());
    contentPanel.add(createImportInstructions());
    contentPanel.add(createFileUploadForm());
    contentPanel.add(createProgressForm());
   
    initWidget(contentPanel);
  }
 
  private Widget createExportLink() {
    Label titleLabel = new Label("Export");
    titleLabel.setStylePrimaryName("header");
   
    HTML instructions = new HTML("<a href=\"/export\">Click here</a> to export all living story" +
        " data to a JSON file (does not export user data).");
   
    VerticalPanel exportPanel = new VerticalPanel();
    exportPanel.add(titleLabel);
    exportPanel.add(instructions);
    return exportPanel;
  }
 
  private Widget createImportInstructions() {
    Label titleLabel = new Label("Import");
    titleLabel.setStylePrimaryName("header");
   
    Label instructions = new Label("Import data from a JSON file created via the export link above."
        + " All existing data will be deleted!");

    VerticalPanel exportPanel = new VerticalPanel();
    exportPanel.add(titleLabel);
    exportPanel.add(instructions);
    return exportPanel;
  }
 
  private Widget createFileUploadForm() {
    fileUploadForm = new FormPanel();
    fileUploadForm.setAction("/import");
    fileUploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
    fileUploadForm.setMethod(FormPanel.METHOD_POST);

    VerticalPanel fileUploadPanel = new VerticalPanel();
    fileUploadForm.setWidget(fileUploadPanel);
   
    FileUpload upload = new FileUpload();
    upload.setName("data");
    fileUploadPanel.add(upload);
   
    CheckBox override = new CheckBox("Check this box if the previous import attempt resulted in " +
        "an error.");
    override.setName("override");
    override.setFormValue("true");
    fileUploadPanel.add(override);
   
    Button submit = new Button("Submit");
    submit.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent e) {
        fileUploadForm.submit();
        statusLabel.setHTML("Uploading...");
        progress = 0;
      }
    });
    fileUploadPanel.add(submit);
   
    fileUploadForm.addSubmitCompleteHandler(new SubmitCompleteHandler() {
      @Override
      public void onSubmitComplete(SubmitCompleteEvent e) {
        processResult(e.getResults());
      }
    });
    return fileUploadForm;
  }

  private Widget createProgressForm() {
    progressForm = new FormPanel();
    progressForm.setAction("/import");
    progressForm.setEncoding(FormPanel.ENCODING_URLENCODED);
    progressForm.setMethod(FormPanel.METHOD_POST);

    VerticalPanel progressPanel = new VerticalPanel();
    progressForm.setWidget(progressPanel);
   
    statusLabel = new HTML();
    progressPanel.add(statusLabel);

    progressForm.addSubmitCompleteHandler(new SubmitCompleteHandler() {
      @Override
      public void onSubmitComplete(SubmitCompleteEvent e) {
        processResult(e.getResults());
      }
    });
    return progressForm;
  }
 
  private void processResult(String result) {
    if (result.contains("RUNNING")) {
      progressForm.submit();
      StringBuilder sb = new StringBuilder(result);
      for (int i = 0; i < progress; i++) {
        sb.append(".");
      }
      statusLabel.setHTML(sb.toString());
      progress++;
    } else {
      statusLabel.setHTML(result);
    }
  }
}
TOP

Related Classes of com.google.livingstories.client.contentmanager.ImportManager

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.