Package org.rstudio.studio.client.common.fileexport

Source Code of org.rstudio.studio.client.common.fileexport.FileExport

/*
* FileExport.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/

package org.rstudio.studio.client.common.fileexport;

import java.util.ArrayList;

import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.core.client.widget.ProgressIndicator;
import org.rstudio.core.client.widget.ProgressOperationWithInput;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.common.GlobalDisplay;
import org.rstudio.studio.client.workbench.views.files.model.FilesServerOperations;

import com.google.inject.Inject;

public class FileExport
{
   public FileExport()
   {
      RStudioGinjector.INSTANCE.injectMembers(this);
   }
  
   @Inject
   void initialize(GlobalDisplay globalDisplay,
                   FilesServerOperations server)
   {
      globalDisplay_ = globalDisplay;
      server_ = server;
   }
  
   public void export(String caption, String description, FileSystemItem file)
   {
      ArrayList<FileSystemItem> files = new ArrayList<FileSystemItem>();
      files.add(file);
      export(caption, description, null, files);
   }
  
   public void export(String caption,
                      String description,
                      final FileSystemItem parentDir,
                      final ArrayList<FileSystemItem> files)
   {
      // validation: some files provided
      if  (files.size() == 0)
         return ;
        
      // case: single file which is not a folder
      if ((files.size()) == 1 && !files.get(0).isDirectory())
      {
         final FileSystemItem file = files.get(0);
        
         showFileExport(caption,
                        description,
                        file.getStem(),
                        file.getExtension(),    
                        new ProgressOperationWithInput<String>(){
            public void execute(String name, ProgressIndicator progress)
            {
               // progress complete
               progress.onCompleted();
              
               // execute the download (open in a new window)
               globalDisplay_.openWindow(server_.getFileExportUrl(name, file));
              
            }
         });
      }
     
      // case: folder or multiple files
      else
      {
         // determine the default zip file name based on the selection
         String defaultArchiveName;
         if (files.size() == 1)
            defaultArchiveName = files.get(0).getStem();
         else
            defaultArchiveName = "rstudio-export";
        
         // prompt user
         final String ZIP = ".zip";
         showFileExport(caption,
                        description,
                        defaultArchiveName,
                        ZIP,
                        new ProgressOperationWithInput<String>(){
           
            public void execute(String archiveName, ProgressIndicator progress)
            {
               // progress complete
               progress.onCompleted();
              
               // force zip extension in case the user deleted it
               if (!archiveName.endsWith(ZIP))
                  archiveName += ZIP;
              
               // build list of filenames
               ArrayList<String> filenames = new ArrayList<String>();
               for (FileSystemItem file : files)
                  filenames.add(file.getName());
              
               // execute the download (open in a new window)
               globalDisplay_.openWindow(server_.getFileExportUrl(archiveName,
                                                                  parentDir,
                                                                  filenames));
            }
         });
        
      }
   }
  
   private void showFileExport(String caption,
                               String description,
                               String defaultName,
                               String defaultExtension,
                               ProgressOperationWithInput<String> operation)
   {
      globalDisplay_.promptForText(
            caption,
            "The " + description + " will be downloaded to your " +
            "computer. Please specify a name for the downloaded file:",
            defaultName + defaultExtension,
            -1, -1,
            "Download",
             operation);
   }
  
   private GlobalDisplay globalDisplay_;
   private FilesServerOperations server_;
}
TOP

Related Classes of org.rstudio.studio.client.common.fileexport.FileExport

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.