PageRenderTime 39ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/core/src/java/com/objetdirect/tatami/client/JSHelper.java

http://tatami.googlecode.com/
Java | 196 lines | 108 code | 31 blank | 57 comment | 19 complexity | ca63f6f3fc6e165ed6fc1218bcfdf86b MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause, LGPL-2.0, MIT
  1. package com.objetdirect.tatami.client;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Date;
  5. import java.util.Map;
  6. import com.google.gwt.core.client.JavaScriptObject;
  7. import com.objetdirect.tatami.client.data.Item;
  8. public class JSHelper {
  9. /**
  10. * @param obj : Java Object to convert. It can be :
  11. * - a Map
  12. * - a String
  13. * - a Number
  14. * - a Collection of any of the above , including a Collection of Collections
  15. *
  16. * @return a JavaScripObject equivalent to the Java Object to convert
  17. * @throws NotJSONIzableObjectException
  18. */
  19. private native static JavaScriptObject convertMapToJSObject(Map<?, ?> map)/*-{
  20. var obj = {};
  21. var keys = map.@java.util.Map::keySet()();
  22. var iterator = keys.@java.util.Set::iterator()();
  23. while(iterator.@java.util.Iterator::hasNext()()){
  24. var string = iterator.@java.util.Iterator::next()();
  25. var value = map.@java.util.Map::get(Ljava/lang/Object;)(string);
  26. var newvalue;
  27. if(@com.objetdirect.tatami.client.JSHelper::isString(Ljava/lang/Object;)(value)){
  28. newvalue = value;
  29. }
  30. else if(@com.objetdirect.tatami.client.JSHelper::isNumber(Ljava/lang/Object;)(value)){
  31. newvalue = value.@java.lang.Number::doubleValue()();
  32. }else if(@com.objetdirect.tatami.client.JSHelper::isDate(Ljava/lang/Object;)(value)){
  33. newvalue = @com.objetdirect.tatami.client.DateUtil::getJSDate(Ljava/util/Date;)(value);
  34. }else if(@com.objetdirect.tatami.client.JSHelper::isBoolean(Ljava/lang/Object;)(value)){
  35. newvalue = value.@java.lang.Boolean::booleanValue()();
  36. }else {
  37. newvalue = @com.objetdirect.tatami.client.JSHelper::convertObjectToJSObject(Ljava/lang/Object;)(value);
  38. newvalue = newvalue == null ? value : newvalue;
  39. }
  40. obj[string] = newvalue;
  41. }
  42. return obj;
  43. }-*/;
  44. public static boolean isString(Object object){
  45. if(object instanceof String)
  46. return true;
  47. else
  48. return false;
  49. }
  50. public static boolean isNumber(Object object){
  51. if(object instanceof Number)
  52. return true;
  53. else
  54. return false;
  55. }
  56. public static boolean isDate(Object object){
  57. if(object instanceof Date)
  58. return true;
  59. else
  60. return false;
  61. }
  62. public static boolean isBoolean(Object object){
  63. if(object instanceof Boolean)
  64. return true;
  65. else
  66. return false;
  67. }
  68. public static Collection<Object> convertJSArrayToCollection(JavaScriptObject array){
  69. Collection<Object> collec = new ArrayList<Object>();
  70. int length = getArraySize(array);
  71. for (int i = 0; i < length; i++) {
  72. collec.add(getElementAtIndex(array, i));
  73. }
  74. return collec;
  75. }
  76. public static native Object getElementAtIndex(JavaScriptObject array , int index)/*-{
  77. return array[index];
  78. }-*/;
  79. public static native Object getElementAtIndex(JavaScriptObject array , String index)/*-{
  80. return array[index];
  81. }-*/;
  82. public static Number getNumberElementAtIndex(JavaScriptObject array , String index){
  83. return (Number) jsGetNumberElementAtIndex(array, index);
  84. }
  85. private static native double jsGetNumberElementAtIndex(JavaScriptObject array , String index)/*-{
  86. return array[index];
  87. }-*/;
  88. public static native int getArraySize(JavaScriptObject array)/*-{
  89. return array ? array.length : 0;
  90. }-*/;
  91. private static JavaScriptObject convertArrayToJSObject(Object[] collec){
  92. JavaScriptObject array = JavaScriptObject.createArray();
  93. for (int i = 0; i < collec.length; i++) {
  94. if(collec[i] instanceof String){
  95. array = addStringToArray(array, i , (String) collec[i] );
  96. }else if(collec[i] instanceof Number){
  97. array = addNumberToArray(array, i , ((Number) collec[i]).doubleValue() );
  98. }else if(collec[i] instanceof Date){
  99. array = addDateToArray(array, i , (Date) collec[i] );
  100. }else if(collec[i] instanceof Boolean){
  101. array = addBooleanToArray(array, i , ((Boolean) collec[i]).booleanValue() );
  102. }else if(collec[i] instanceof Item){
  103. array = addObjectToArray(array, i , collec[i] );
  104. }else{
  105. array = addObjectToArray(array, i , convertObjectToJSObject(collec[i]) );
  106. }
  107. }
  108. return array;
  109. };
  110. public static JavaScriptObject convertObjectToJSObject(Object object){
  111. if(object instanceof JavaScriptObject){
  112. return (JavaScriptObject) object;
  113. }else if(object instanceof ConvertibleToJSObject){
  114. return (((ConvertibleToJSObject)object).toJSObject());
  115. }else if(object instanceof Map){
  116. return convertMapToJSObject((Map<?, ?>)object);
  117. }else if(object instanceof Object[]){
  118. return convertArrayToJSObject((Object [])object);
  119. }else if(object instanceof Collection){
  120. return convertArrayToJSObject(((Collection<?>)object).toArray());
  121. }else{
  122. return null ;
  123. }
  124. }
  125. public static native JavaScriptObject encapsulateObjectInArray(JavaScriptObject jsObject)/*-{
  126. var toReturn = @com.google.gwt.core.client.JavaScriptObject::createArray()();
  127. toReturn[0] = jsObject;
  128. return toReturn;
  129. }-*/;
  130. private native static JavaScriptObject addObjectToArray(JavaScriptObject array , int index , JavaScriptObject toAdd)/*-{
  131. array.push(toAdd);
  132. return array;
  133. }-*/;
  134. private native static JavaScriptObject addObjectToArray(JavaScriptObject array , int index , Object toAdd)/*-{
  135. array.push(toAdd);
  136. return array;
  137. }-*/;
  138. private native static JavaScriptObject addStringToArray(JavaScriptObject array , int index , String toAdd)/*-{
  139. array.push(toAdd);
  140. return array;
  141. }-*/;
  142. private native static JavaScriptObject addNumberToArray(JavaScriptObject array , int index , double toAdd)/*-{
  143. array.push(toAdd);
  144. return array;
  145. }-*/;
  146. private native static JavaScriptObject addDateToArray(JavaScriptObject array , int index , Date toAdd)/*-{
  147. array.push(toAdd);
  148. return array;
  149. }-*/;
  150. private native static JavaScriptObject addBooleanToArray(JavaScriptObject array , int index , boolean toAdd)/*-{
  151. array.push(toAdd);
  152. return array;
  153. }-*/;
  154. public static native JavaScriptObject addAttribute(JavaScriptObject toModify , String attrName , JavaScriptObject attrValue)/*-{
  155. array.push(toAdd);
  156. return toModify;
  157. }-*/;
  158. public static native JavaScriptObject addAttribute(JavaScriptObject toModify , String attrName , String attrValue)/*-{
  159. array.push(toAdd);
  160. return toModify;
  161. }-*/;
  162. public static native JavaScriptObject getBooleanValue(Boolean bool)/*-{
  163. return bool.@java.lang.Boolean::booleanValue()();
  164. }-*/;
  165. }