Name

global.j2js

Description

If the given value is a Java object that can be converted to an equivalent JavaScript object, that conversion is performed and the result is returned. Otherwise the original Java object is returned.

Script

/*
* If the given value is a Java object that can be converted to an equivalent JavaScript object, that conversion is performed and
* the result is returned.  Otherwise the original Java object is returned.
* 
* The specific conversions performed (in the order they are checked):
*   -- Java Strings     -> JavaScript strings
*   -- Java Booleans    -> JavaScript booleans
*   -- Java Integers    -> JavaScript numbers
*   -- Java Longs       -> JavaScript numbers
*   -- Java Doubles     -> JavaScript numbers
*   -- Java Bytes       -> JavaScript numbers
*   -- Java Floats      -> JavaScript numbers
*   -- Java Shorts      -> JavaScript numbers
*   -- Java Characters  -> JavaScript numbers
*   -- Java arrays      -> JavaScript Arrays with order preserved
*   -- Java Lists       -> JavaScript Arrays with order preserved
*   -- Java Maps        -> JavaScript Objects with the key/value pairs translated into property/value pairs
*   -- Java Sets        -> JavaScript Arrays in arbitrary order
*   
* Note that the conversions are performed recursively on the elements of arrays, lists, or collections. For example, given a Java ArrayList of
* ArrayLists of Strings, this will return a JavaScript Array of Arrays of strings.
*/
j2js = function(val) {
  if (!isJavaObject(val))
      return val;
  	
  val = GlideRhinoHelper.getNativeFromRhino(val);
  
  var klassName = '' + GlideJSUtil.getJavaClassName(val);
  
  // if it's one of our simple classes, take the funky and run...
  var func = $__j2js_conversion_map[klassName];
  if (func)
      return func(val);
     
  // if it's an array, handle it...
  if (GlideJSUtil.isJavaArray(val))
  	return handleArray(val);

  // not a simple class or an array, so now let's see if it's a collection type we can deal with...
  if (val instanceof Packages.java.util.List)
  	return handleList(val);

  if (val instanceof Packages.java.util.Map)
  	return handleMap(val);

  if (val instanceof Packages.java.util.Set)
  	return handleSet(val);

  // it's not something we can morph, so return the original Java object...
  return val;
      
  function handleArray(val) {
      var result = [];
      var len = Packages.java.lang.reflect.Array.getLength(val);
      for (var i = 0; i < len; i++)
          result.push(j2js(Packages.java.lang.reflect.Array.get(val, i)));
      return result;
  }
  
  function handleList(val) {
      var result = [];
      for (var i = 0; i < val.size(); i++)
          result.push(j2js(val.get(i)));
      return result;
  }
  
  function handleMap(val) {
      var result = {};
      var it = val.keySet().iterator();
      while (it.hasNext()) {
          var key = it.next();
          var jsKey = j2js(key);
          var jsVal = j2js(val.get(key));
          result[jsKey] = jsVal;
      }
      return result;
  }
  
  function handleSet(val) {
      var result = [];
      var it = val.iterator();
      while (it.hasNext())
          result.push(j2js(it.next()));
      return result;
  }
}

$__j2js_conversion_map = {
  'java.lang.Boolean': function(val) {
      return val.booleanValue();
  },
  
  'java.lang.String': function(val) {
      return '' + val;
  },
  
  'java.lang.Integer': function(val) {
      return val.intValue();
  },
  
  'java.lang.Long': function(val) {
      return val.longValue();
  },
  
  'java.lang.Double': function(val) {
      return val.doubleValue();
  },
  
  'java.lang.Byte': function(val) {
      return val.byteValue();
  },
  
  'java.lang.Float': function(val) {
      return val.floatValue();
  },
  
  'java.lang.Character': function(val) {
      return val.charValue();
  },
  
  'java.lang.Short': function(val) {
      return val.shortValue();
  }
}

Sys ID

595cfcd50ab301570068b5007a26bd1c

Offical Documentation

Official Docs: