/*
* WebFileDialogs.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.impl;
import org.rstudio.core.client.files.FileSystemContext;
import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.core.client.files.filedialog.ChooseFolderDialog2;
import org.rstudio.core.client.files.filedialog.FileDialog;
import org.rstudio.core.client.files.filedialog.OpenFileDialog;
import org.rstudio.core.client.files.filedialog.OpenProjectDialog;
import org.rstudio.core.client.files.filedialog.SaveFileDialog;
import org.rstudio.core.client.widget.ProgressOperationWithInput;
import org.rstudio.studio.client.common.FileDialogs;
import org.rstudio.studio.client.projects.model.OpenProjectParams;
public class WebFileDialogs implements FileDialogs
{
public void openFile(String caption,
FileSystemContext fsContext,
FileSystemItem initialFilePath,
ProgressOperationWithInput<FileSystemItem> operation)
{
openFile(caption, fsContext, initialFilePath, "", false, operation);
}
public void openFile(String caption,
FileSystemContext fsContext,
FileSystemItem initialFilePath,
String filter,
ProgressOperationWithInput<FileSystemItem> operation)
{
openFile(caption, fsContext, initialFilePath, filter, false, operation);
}
public void openFile(String caption,
FileSystemContext fsContext,
FileSystemItem initialFilePath,
String filter,
boolean canChooseDirectories,
ProgressOperationWithInput<FileSystemItem> operation)
{
OpenFileDialog dialog = new OpenFileDialog(caption,
fsContext,
filter,
canChooseDirectories,
operation);
dialog.setInvokeOperationEvenOnCancel(true);
finishInit(fsContext, initialFilePath, dialog);
}
public void openProject(FileSystemContext fsContext,
FileSystemItem initialFilePath,
int defaultType,
boolean showNewSession,
ProgressOperationWithInput<OpenProjectParams> operation)
{
OpenProjectDialog dialog = new OpenProjectDialog(fsContext, defaultType,
showNewSession, operation);
dialog.setInvokeOperationEvenOnCancel(true);
finishInit(fsContext, initialFilePath, dialog);
}
public void saveFile(String caption,
FileSystemContext fsContext,
FileSystemItem initialFilePath,
String defaultExtension,
boolean forceDefaultExtension,
ProgressOperationWithInput<FileSystemItem> operation)
{
SaveFileDialog dialog = new SaveFileDialog(caption,
fsContext,
defaultExtension,
forceDefaultExtension,
operation);
dialog.setInvokeOperationEvenOnCancel(true);
finishInit(fsContext, initialFilePath, dialog);
}
public void chooseFolder(String caption,
FileSystemContext fsContext,
FileSystemItem initialDir,
ProgressOperationWithInput<FileSystemItem> operation)
{
ChooseFolderDialog2 dialog = new ChooseFolderDialog2(caption,
fsContext,
true,
operation);
dialog.setInvokeOperationEvenOnCancel(true);
if (initialDir != null)
fsContext.cd(initialDir.getPath());
else
fsContext.refresh();
dialog.showModal();
}
private void finishInit(FileSystemContext fsContext,
FileSystemItem initialFilePath,
FileDialog dialog)
{
if (initialFilePath != null)
{
if (initialFilePath.isDirectory())
{
fsContext.cd(initialFilePath.getPath());
}
else
{
dialog.setFilename(initialFilePath.getName());
fsContext.cd(initialFilePath.getParentPathString());
}
}
else
{
fsContext.refresh();
}
dialog.showModal();
}
}