VMware Aria Automation offers a mime attachment class, to describe mime attachments in the context of the JavaScript runtime environment. The Multipurpose Internet Mail Extensions (MIME) is a standard that extends the format of messages to support text in character sets other than ASCII. To use the methods of the this class outside of Aria Automation, a library is available here to emulate it.

This mock-up of the mime attachment class bases on the same JavaScript engine used in Aria Automation, the Mozilla Rhino engine. To use this file classes it is necessary to use the Rhino engine, because their constructor and method access Java classes directly. This ensures us a consistent basis for simulation and operation.

To use this library in your code it is necessary to add e.g.  load("mimeattachment.class.js");  at the beginning of the program. After that, all functions can be used seamlessly just like in Aria Automation.

You can download the source from my GitHub account.

To get the source code move your mouse pointer into the source code section and press on the upper right side the copy button. This copies the source code to the clipboard and now it can be pasted and saved into your target.
/**
 * Mock-up of the MimeAttachment class from VMware Aria Automation.
 * Describe a mime attachment.
 *
 * @author Stefan Schnell <mail@stefan-schnell.de>
 * @license MIT
 * @version 0.2.0
 *
 * Hint: This mock-up works only with the Mozilla Rhino JavaScript
 * engine.
 *
 * Checked with Rhino engines version 1.7R4 and 1.7.14
 */

var MimeAttachment = function(file) {

  if (
    typeof file !== "undefined" &&
    file !== null &&
    String(file).trim() !== ""
  ) {

    this.mimeType = "";

    try {
      this.name = System.extractFileName(file);
      var path = java.nio.file.FileSystems.getDefault().getPath("", file);
      this.buffer = java.nio.file.Files.readAllBytes(path);
      this.content = String(java.lang.String(this.buffer));
    } catch (exception) {
      System.error(exception);
    }

  }

};

MimeAttachment.prototype = {

  /**
   * Returns the class name.<br>
   * Hint: This method is a standard.
   *
   * @function getClassName
   * @returns {string}
   *
   * @example
   * var mimeAttachment = new MimeAttachment();
   * var result = mimeAttachment.getClassName();
   * System.log(result);
   */
  getClassName : function() {
    return "MimeAttachment";
  },

  /**
   * Write the content of the mime attachment to file.
   *
   * @function write
   * @param {string} directory - Directory where to store the file.
   * @param {string} filename - Optional filename<br>
   *                            If null, it uses the mime attachment name.
   * @returns {File}
   */
  write : function(directory, filename) {

    try {

      if (
        typeof directory === "undefined" ||
        directory === null ||
        String(directory).trim() === ""
      ) {
        throw new Error("directory argument can not be undefined or null");
      }

      if (
        typeof filename === "undefined" ||
        filename === null ||
        String(filename).trim() === ""
      ) {
        filename = this.name;
      }

      var fullPath = System.appendToPath(String(directory), String(filename));

      var contextFactory = org.mozilla.javascript.ContextFactory();
      var context = contextFactory.getGlobal().enterContext();

      var path = java.nio.file.Paths.get(fullPath);
      java.nio.file.Files.deleteIfExists(path);
      java.nio.file.Files.createFile(path);
      var outputStream = java.nio.file.Files.newOutputStream(path);
      if (this.buffer.getClassName() === "ByteBuffer") {
        outputStream.write(this.buffer._byteBuffer);
      } else {
        outputStream.write(this.buffer);
      }
      outputStream.close();

    } catch (exception) {
      System.log(exception)
    } finally {
      context.exit();
    }

  }

};



This site is part of blog.stschnell.de