/* * Copyright 2014 Loic Merckel * * 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 io.uploader.drive.gui.controller; import io.uploader.drive.drive.DriveDirectoryImpl; import io.uploader.drive.gui.dlg.DriveDirectoryChooser; import io.uploader.drive.gui.dlg.MessageDialogs; import io.uploader.drive.gui.factory.DriveTaskFactory; import io.uploader.drive.gui.factory.DriveUiFactory; import io.uploader.drive.gui.model.DriveTaskModel; import io.uploader.drive.gui.util.UiUtils; import io.uploader.drive.util.Callback; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.CheckBox; import javafx.scene.control.TextField; import javafx.stage.DirectoryChooser; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.api.services.drive.model.File; public class TaskAddPanelViewController implements Initializable { private static final Logger logger = LoggerFactory.getLogger(TaskAddPanelViewController.class); @FXML private TextField srcField ; @FXML private TextField destField ; @FXML private CheckBox checkBoxOverwrite ; private DriveTaskFactory taskFactory = null ; private DriveUiFactory driveUiFactory = null ; DriveDirectoryImpl drivedir = null ; private Callback<DriveTaskModel> callback = null; private void checkController () { if (taskFactory == null) { throw new IllegalStateException ("The DriveTaskFactory must be set before using the controller") ; } if (driveUiFactory == null) { throw new IllegalStateException ("The DriveUiFactory must be set before using the controller") ; } if (callback == null) { throw new IllegalStateException ("The Callback must be set before using the controller") ; } } @Override public void initialize(URL arg0, ResourceBundle arg1) { srcField.setEditable(false); destField.setEditable(false); destField.setText("Backups"); drivedir = new DriveDirectoryImpl (destField.getText()) ; } @FXML protected void onAdd(ActionEvent event) { String srcDir = srcField.getText().trim() ; String destDir = destField.getText().trim() ; boolean overwrite = checkBoxOverwrite.isSelected() ; if (StringUtils.isEmpty(srcDir)) { MessageDialogs.showMessageDialog(UiUtils.getStage(event), "A source folder must be specified", "Error", MessageDialogs.MessageType.ERROR); return ; } if (StringUtils.isEmpty(destDir)) { MessageDialogs.showMessageDialog(UiUtils.getStage(event), "A destination folder must be specified", "Error", MessageDialogs.MessageType.ERROR); return ; } // if overwrite ask confirmation if (overwrite) { if (MessageDialogs.Response.NO == MessageDialogs.showConfirmDialog(UiUtils.getStage(event), "Are you sure you want to overwrite existing files?", "Confirmation", MessageDialogs.MessageType.WARNING)) { return ; } } DriveTaskModel driveTaskModel = new DriveTaskModel (taskFactory, drivedir, srcDir, overwrite) ; callback.onSuccess(driveTaskModel) ; //close the dialog UiUtils.closeDialog (event) ; } @FXML protected void onCancel(ActionEvent event) { //close the dialog UiUtils.closeDialog (event) ; } @FXML protected void onSelectSourceDirectory(ActionEvent event) { DirectoryChooser dirChooser = new DirectoryChooser () ; dirChooser.setTitle("Select Directory to Upload"); java.io.File dir = dirChooser.showDialog(UiUtils.getStage(event)); if (dir != null) { srcField.setText(dir.getPath()); } } @FXML protected void onChangeDestinationDirectory(ActionEvent event) { checkController () ; DriveDirectoryChooser driveChooser = driveUiFactory .buildDriveDirectoryChooser(UiUtils.getStage(event), new Callback<File> () { @Override public void onSuccess(File result) { if (result != null) { destField.setText(result.getTitle()); drivedir = DriveDirectoryImpl.newDriveDirectory(result.getTitle(), result.getId()) ; } } @Override public void onFailure(Throwable cause) { logger.error("Error occurred while selecting drive directory", cause); }}); driveChooser.showDialog() ; } public void setTaskFactory (DriveTaskFactory taskFactory) { this.taskFactory = taskFactory ; } public void setDriveUiFactory (DriveUiFactory driveUiFactory) { this.driveUiFactory = driveUiFactory ; } public void setCallback (Callback<DriveTaskModel> callback) { this.callback = callback ; } //public void setTaskList (ObservableList<DriveTaskModel> taskList) { // this.taskList = taskList ; //} }