import com.google.gwt.user.client.DeferredCommand;\r
import com.google.gwt.user.client.ui.Button;\r
import com.google.gwt.user.client.ui.ClickListener;\r
-import com.google.gwt.user.client.ui.Grid;\r
+import com.google.gwt.user.client.ui.FlexTable;\r
import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
import com.google.gwt.user.client.ui.HorizontalPanel;\r
-import com.google.gwt.user.client.ui.TextBox;\r
import com.google.gwt.user.client.ui.VerticalPanel;\r
import com.google.gwt.user.client.ui.Widget;\r
\r
\r
private final Factory factory = Factory.getInstance();\r
\r
+ /**\r
+ * The array of files to upload.\r
+ */\r
+ private File[] fileObjects;\r
+\r
+ /**\r
+ * A list of files to upload, created from files array. Used to signal\r
+ * finished state when empty.\r
+ */\r
private List<File> selectedFiles = new ArrayList<File>();\r
\r
- private TextBox selected;\r
+ /**\r
+ * The list of progress bars for individual files.\r
+ */\r
+ private List<ProgressBar> progressBars = new ArrayList<ProgressBar>();\r
+\r
+ private Button browse;\r
+\r
+ private Button submit;\r
+\r
+ private FlexTable generalTable;\r
\r
/**\r
* The widget's constructor.\r
// Add an informative label with the folder name.\r
Object selection = GSS.get().getFolders().getCurrent().getUserObject();\r
folder = (FolderResource) selection;\r
- filenameLabel.setText("");\r
- filenameLabel.setVisible(false);\r
- filenameLabel.setStyleName("props-labels");\r
\r
- final Button browse = new Button("Browse...");\r
-\r
- selected = new TextBox();\r
- selected.setEnabled(false);\r
+ browse = new Button("Browse...");\r
\r
HorizontalPanel fileUploadPanel = new HorizontalPanel();\r
- fileUploadPanel.add(filenameLabel);\r
- fileUploadPanel.add(selected);\r
fileUploadPanel.add(browse);\r
\r
- Grid generalTable = new Grid(2, 2);\r
+ generalTable = new FlexTable();\r
generalTable.setText(0, 0, "Folder");\r
generalTable.setText(1, 0, "File");\r
generalTable.setText(0, 1, folder.getName());\r
// Create a panel to hold the buttons.\r
HorizontalPanel buttons = new HorizontalPanel();\r
\r
- // Create the 'upload' button, along with a listener that submits the\r
- // form.\r
- final Button submit = new Button("Upload");\r
+ submit = new Button("Upload");\r
submit.addClickListener(new ClickListener() {\r
\r
public void onClick(Widget sender) {\r
- GSS app = GSS.get();\r
- if (selectedFiles.size() == 0) {\r
- app.displayError("You must select a file!");\r
- hide();\r
- return;\r
- }\r
- for(File file: selectedFiles)\r
- if (!canContinue(file)) {\r
- app.displayError("The specified file name already exists in this folder");\r
- hide();\r
- return;\r
- }\r
- submit.setEnabled(false);\r
- browse.setVisible(false);\r
prepareAndSubmit();\r
}\r
});\r
desktop.openFiles(new OpenFilesHandler() {\r
\r
public void onOpenFiles(OpenFilesEvent event) {\r
- selectedFiles.addAll(Arrays.asList(event.getFiles()));\r
- selected.setText(selectedFiles.get(0).getName());\r
+ fileObjects = event.getFiles();\r
+ selectedFiles.addAll(Arrays.asList(fileObjects));\r
+ for (int i = 0; i< selectedFiles.size(); i++) {\r
+ generalTable.setText(i+1, 0, "File");\r
+ generalTable.setText(i+1, 1, selectedFiles.get(i).getName());\r
+ ProgressBar progress = new ProgressBar(20, 0);\r
+ generalTable.setWidget(i+1, 2, progress);\r
+ progressBars.add(progress);\r
+ generalTable.getCellFormatter().setStyleName(i+1, 0, "props-labels");\r
+ generalTable.getCellFormatter().setStyleName(i+1, 1, "props-values");\r
+ }\r
submit.setEnabled(true);\r
}\r
});\r
});\r
\r
panel.add(buttons);\r
- progressBar = new ProgressBar(50, ProgressBar.SHOW_TIME_REMAINING);\r
- panel.add(progressBar);\r
- progressBar.setVisible(false);\r
panel.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);\r
- panel.setCellHorizontalAlignment(progressBar, HasHorizontalAlignment.ALIGN_CENTER);\r
panel.addStyleName("gss-DialogBox");\r
addStyleName("gss-DialogBox");\r
setWidget(panel);\r
}\r
\r
@Override\r
- public void prepareAndSubmit(){\r
+ public void prepareAndSubmit() {\r
+ GSS app = GSS.get();\r
+ if (selectedFiles.size() == 0) {\r
+ app.displayError("You must select a file!");\r
+ hide();\r
+ return;\r
+ }\r
+ for(File file: selectedFiles)\r
+ if (!canContinue(file)) {\r
+ app.displayError("The file name " + file.getName() +\r
+ " already exists in this folder");\r
+ hide();\r
+ return;\r
+ }\r
+ submit.setEnabled(false);\r
+ browse.setVisible(false);\r
final String fname = getFilename(selectedFiles.get(0).getName());\r
if (getFileForName(fname) == null) {\r
// We are going to create a file, so we check to see if there is a\r
\r
@Override\r
public void cancel() {\r
- FileUploadGearsDialog.this.hide();\r
+ hide();\r
}\r
\r
@Override\r
};\r
confirm.center();\r
}\r
- }\r
- else {\r
+ } else {\r
// We are going to update an existing file, so show a confirmation dialog.\r
ConfirmationDialog confirm = new ConfirmationDialog("Are you sure " +\r
"you want to update " + fname + "?", "Update"){\r
\r
@Override\r
public void cancel() {\r
- FileUploadGearsDialog.this.hide();\r
+ hide();\r
}\r
\r
@Override\r
* Schedule the PUT requests to upload the files.\r
*/\r
private void uploadFiles() {\r
- for (final File file: selectedFiles)\r
+ for (int i = 0; i< fileObjects.length; i++) {\r
+ final int index = i;\r
DeferredCommand.addCommand(new Command() {\r
public void execute() {\r
- doPut(file);\r
+ doPut(fileObjects[index], index);\r
}\r
});\r
+ }\r
}\r
\r
/**\r
* Perform the HTTP PUT requests to upload the specified file.\r
*/\r
- protected void doPut(final File file) {\r
+ protected void doPut(final File file, final int index) {\r
GSS app = GSS.get();\r
HttpRequest request = factory.createHttpRequest();\r
String method = "PUT";\r
\r
- fileNameToUse = getFilename(file.getName());\r
- selected.setVisible(false);\r
- filenameLabel.setText(fileNameToUse);\r
- filenameLabel.setVisible(true);\r
- progressBar.setVisible(true);\r
-\r
String path;\r
- FileResource selectedResource = getFileForName(fileNameToUse);\r
+ String filename = getFilename(file.getName());\r
+ FileResource selectedResource = getFileForName(filename);\r
if (selectedResource == null ) {\r
// We are going to create a file.\r
path = folder.getUri();\r
if (!path.endsWith("/"))\r
path = path + "/";\r
- path = path + encodeComponent(fileNameToUse);\r
+ path = path + encodeComponent(filename);\r
} else\r
path = selectedResource.getUri();\r
\r
request.getUpload().setProgressHandler(new ProgressHandler() {\r
public void onProgress(ProgressEvent event) {\r
double pcnt = (double) event.getLoaded() / event.getTotal();\r
- progressBar.setProgress((int) Math.floor(pcnt * 100));\r
+ progressBars.get(index).setProgress((int) Math.floor(pcnt * 100));\r
}\r
});\r
request.send(file.getBlob());\r