1 29 30 package com.caucho.quercus.function; 31 32 import com.caucho.quercus.env.Env; 33 import com.caucho.quercus.env.Value; 34 import com.caucho.quercus.expr.Expr; 35 import com.caucho.quercus.program.JavaClassDef; 36 import com.caucho.util.L10N; 37 38 41 public class JavaMarshal extends Marshal { 42 private static final L10N L = new L10N(JavaMarshal.class); 43 44 protected final JavaClassDef _def; 45 protected final boolean _isNotNull; 46 protected final boolean _isUnmarshalNullAsFalse; 47 48 public JavaMarshal(JavaClassDef def, 49 boolean isNotNull) 50 { 51 this(def, isNotNull, false); 52 } 53 54 public JavaMarshal(JavaClassDef def, 55 boolean isNotNull, 56 boolean isUnmarshalNullAsFalse) 57 { 58 _def = def; 59 _isNotNull = isNotNull; 60 _isUnmarshalNullAsFalse = isUnmarshalNullAsFalse; 61 } 62 63 public Object marshal(Env env, Expr expr, Class argClass) 64 { 65 Value value = expr.eval(env); 66 67 return marshal(env, value, argClass); 68 } 69 70 public Object marshal(Env env, Value value, Class argClass) 71 { 72 if (! value.isset()) { 73 if (_isNotNull) { 74 env.warning(L.l("null is an unexpected argument, expected {0}", 75 shortName(argClass))); 76 } 77 78 return null; 79 } 80 81 Object obj = value.toJavaObject(); 82 83 if (obj == null) { 84 if (_isNotNull) { 85 env.warning(L.l("null is an unexpected argument, expected {0}", 86 shortName(argClass))); 87 } 88 89 return null; 90 } 91 else if (! argClass.isAssignableFrom(obj.getClass())) { 92 env.warning(L.l("'{0}' of type '{1}' is an unexpected argument, expected {2}", value, shortName(value.getClass()), shortName(argClass))); 94 return null; 95 } 96 97 return obj; 98 } 99 100 public Value unmarshal(Env env, Object value) 101 { 102 return env.wrapJava(value, _def, _isUnmarshalNullAsFalse); 103 } 104 105 protected final static String shortName(Class cl) 106 { 107 String name = cl.getName(); 108 109 int p = name.lastIndexOf('.'); 110 111 if (p > 0) 112 return name.substring(p + 1); 113 else 114 return name; 115 } 116 } 117 118 | Popular Tags |