    importPackage(Packages.de.elo.ix.client);
    importPackage(java.awt);
    importPackage(java.awt.event);
    importPackage(java.io);
    importPackage(java.lang);
    importPackage(java.util);
    importPackage(javax.imageio);
    importPackage(javax.swing);
    importPackage(javax.swing.filechooser);

    //@include lib_Class.js
    //@include lib_sol.common.Cache.js
    //@include lib_sol.common.Config.js
    //@include lib_sol.common.IxUtils.js

    /**
     * Provides a converter from a Java filechooser dialog selected FILE to a base64 javascript string
     *
     * Displays the Java filechooser. If a file is selected, it will be validated against the rules (see eloReceiveBrowserMessage)
     * If the file is accepted, it will be converter to a base64 String
     *
     * @author ESt, ELO Digital Office GmbH
     * @version 1
     *
     * @requires sol.common.IxUtils
     */

    /**
     *
     * @param {java.FILE} file
     * @param {Object} rules
     * @param {Number} rules.maxSize maximum filesize in Megabyte (floats possible)
     * @param {String} rules.accept comma separated image-types to accept ("image/jpeg, image/jpg, image/png")
     */
    function preconditionsFulfilled(file, rules) {
      var result = {}, is, mimeType;
      result.size = +(file.length());
      result.type = (function (f) {
        is = new Packages.java.io.BufferedInputStream(new FileInputStream(f));
        mimeType = Packages.java.net.URLConnection.guessContentTypeFromStream(is);
        return String(mimeType);
      })(file);
      result.ok = false;

      if (!rules) {
        result.ok = true;
        return result;
      }

      if (file.length() <= (rules.maxSize * 1000000)) {
        if ((rules.accept.split(",").map(function (s) {
          return String(s.trim());
        })).indexOf(String(result.type)) > -1) {
          result.ok = true;
        }
      }
      return result;
    }

    /**
     *
     * @param {*} msg
     * @param {String} msg.name must contain "workspace.showFileChooserDialog_"
     * @param {Object} msg.rules see preconditionsFulfilled's rules parameter
     */
    function eloReceiveBrowserMessage(msg, compName, browserComponent) {
      var dialogTitle, files, file, byteArray, re = /.*_(\{.*\})/g, match, result;

      if (msg.name.indexOf("workspace.showFileChooserDialog_") > -1) {
        dialogTitle = msg.data.dialogTitle || "Wählen Sie ein Mitarbeiterfoto aus";
        files = workspace.showFileChooserDialog(dialogTitle, false, true, "");
        if (files && files.length && (files.length > 0)) {
          file = files[0];
          match = re.exec(msg.name);
          result = preconditionsFulfilled(file, (match && JSON.parse(match[1])) || msg.data.rules);
          result.base64 = "";
          if (result.ok) {
            byteArray = Packages.org.apache.commons.io.FileUtils.readFileToByteArray(file);
            result.base64 = String(Packages.org.apache.commons.codec.binary.Base64.encodeBase64String(byteArray));
            result.name = Packages.org.apache.commons.io.FilenameUtils.removeExtension(file.name) + "";
            result.extension = Packages.org.apache.commons.io.FilenameUtils.getExtension(file.name) + "";
          }
        }
        browserComponent.sendCustomResponse(msg, { response: result });
      }
    }