//@include lib_Class.js

importPackage(java.io);

/**
 * This class provides common dialogs
 * e.g for saving files
 *
 * @author Michael Weiler, ELO Digital Office GmbH
 * @version 1.0
 *
 * @elojc
 */
sol.define("sol.common.jc.CommonDialogs", {

  singleton: true,

  /**
   * Shows a save dialog
   * @param {Object} dialogConfig Configuration for the dialog
   * @param {String} dialogConfig.title Title of the dialog
   * @param {String} dialogConfig.filterName Name of the file filter.
   * @param {String} dialogConfig.filterExtension Extension of the file filter.
   * @param {String} dialogConfig.dir Destination folder
   * @param {String} dialogConfig.fileName File name
   * @return {java.io.File} selected File
   */
  showSaveDialog: function (dialogConfig) {
    var me = this,
        fileChooser, returnCode;

    fileChooser = me.createFileChooser(dialogConfig),
    fileChooser.dialogType = javax.swing.JFileChooser.SAVE_DIALOG;
    returnCode = fileChooser.showSaveDialog(null);
    if (returnCode == javax.swing.JFileChooser.APPROVE_OPTION) {
      return fileChooser.selectedFile;
    }
  },

  /**
   * Shows a open dialog
   * @param {Object} dialogConfig Configuration for the dialog
   * @param {String} dialogConfig.title Title of the dialog
   * @param {String} dialogConfig.filterName Name of the file filter.
   * @param {String} dialogConfig.filterExtension Extension of the file filter.
   * @param {String} dialogConfig.dir Destination folder
   * @param {String} dialogConfig.fileName File name
   * @return {java.io.File} selected File
   */
  showOpenDialog: function (dialogConfig) {
    var me = this,
        fileChooser, returnCode;

    fileChooser = me.createFileChooser(dialogConfig),
    fileChooser.dialogType = javax.swing.JFileChooser.OPEN_DIALOG;
    returnCode = fileChooser.showOpenDialog(null);
    if (returnCode == javax.swing.JFileChooser.APPROVE_OPTION) {
      return fileChooser.selectedFile;
    }
  },

  /**
   * @private
   * Creates a file chooser dialog
   * @param {Object} dialogConfig Configuration for the dialog
   * @return {javax.swing.JFileChooser}
   */
  createFileChooser: function (dialogConfig) {
    var fileChooser = new javax.swing.JFileChooser(),
        fileFilter;
    if (dialogConfig.title) {
      fileChooser.dialogTitle = dialogConfig.title;
    }

    if (dialogConfig.filterName && dialogConfig.filterExtension) {
      fileFilter = new javax.swing.filechooser.FileNameExtensionFilter(dialogConfig.filterName, dialogConfig.filterExtension);
      fileChooser.fileFilter = fileFilter;
    }

    if (dialogConfig.dir) {
      fileChooser.currentDirectory = dialogConfig.dir;
    }

    if (dialogConfig.fileName) {
      fileChooser.selectedFile = new File(dialogConfig.fileName);
    }

    if (dialogConfig.directoriesOnly) {
      fileChooser.fileSelectionMode = javax.swing.JFileChooser.DIRECTORIES_ONLY;
    }

    return fileChooser;
  }
});