チェンジセット 224

差分発生行の前後
無視リスト:
コミット日時:
2008/04/14 22:26:14 (14 年前)
コミッタ:
shinomiya
ログメッセージ:
  • convertJsObject2JavaBeans()のWrapper型対応。
  • サンプルデータ用変数をpublic static に変更。
ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-jssp/src/main/java/org/intra_mart/jssp/util/JavaScriptUtility.java

    r223 r224  
    2525import org.mozilla.javascript.ScriptableObject; 
    2626import org.mozilla.javascript.Undefined; 
     27import org.mozilla.javascript.Wrapper; 
    2728 
    2829public class JavaScriptUtility { 
     
    7778                } 
    7879                catch (Exception e) { 
     80                        // TODO 例外整理(JSから呼ばれることが主目的のクラスではないのにContext.throwAsScriptRuntimeEx(e)は間違え) 
    7981                        throw Context.throwAsScriptRuntimeEx(e); 
    8082                } 
     
    9496                } 
    9597                catch (Exception e) { 
     98                        // TODO 例外整理(JSから呼ばれることが主目的のクラスではないのにContext.throwAsScriptRuntimeEx(e)は間違え) 
    9699                        throw Context.throwAsScriptRuntimeEx(e); 
    97100                } 
     
    337340                         
    338341                        return returnObj; 
     342                } 
     343 
     344                // Wrapper型 
     345                else if(jsObject instanceof Wrapper){ 
     346                        Wrapper wrapper = (Wrapper)jsObject; 
     347                        Object wrappedValue = wrapper.unwrap(); 
     348                         
     349                        if(type.isInstance(wrappedValue)){ 
     350                                return wrappedValue; 
     351                        } 
     352                        else{ 
     353                                return null; 
     354                        } 
    339355                } 
    340356                 
     
    495511                Logger.getLogger(JavaScriptUtility.class.getName() + ".newInstanceFilledProperty"); 
    496512         
    497         // TODO 配列要素数を設定可能に 
    498         private static int _sampleDataArrayLength = 1; // 配列要素数 
    499          
    500513        private static Object newInstanceFilledProperty(final Class<?> beanType, 
    501514                                                                                                        final String defaultValue, 
     
    579592 
    580593                                if(isRecursive){ 
    581                                         data = Array.newInstance(componentType, _sampleDataArrayLength); 
    582                                         for(int idx = 0; idx < _sampleDataArrayLength; idx++){ 
     594                                        data = Array.newInstance(componentType, SAMPLE_DATA_ARRAY_LENGTH); 
     595                                        for(int idx = 0; idx < SAMPLE_DATA_ARRAY_LENGTH; idx++){ 
    583596                                                // 再帰 
    584597                                                _logger4newInstance.trace("--ARRAY-- [RECURSIVE] newInstanceFilledProperty()"); 
     
    719732        } 
    720733         
    721         private static String SAMPLE_DATA_FOR_STRING; 
    722         private static Number SAMPLE_DATA_FOR_NUMBER; 
    723         private static Boolean SAMPLE_DATA_FOR_BOOLEAN; 
    724         private static Date SAMPLE_DATA_FOR_DATE; 
     734        private static final String SAMPLE_DATA_FOR_STRING_DEFAULT = "__default__"; 
     735        private static final Number SAMPLE_DATA_FOR_NUMBER_DEFAULT = new Double(123); 
     736        private static final Boolean SAMPLE_DATA_FOR_BOOLEAN_DEFAULT = Boolean.TRUE; 
     737        private static final Date SAMPLE_DATA_FOR_DATE_DEFAULT = new Date(1213846496000L); // "Mon June 19 2008 12:34:56 GMT+0900 (JST)" 
     738        private static final int SAMPLE_DATA_ARRAY_LENGTH_DEFAULT = 1; // 配列要素数 
     739 
     740        public static String SAMPLE_DATA_FOR_STRING = SAMPLE_DATA_FOR_STRING_DEFAULT; 
     741        public static Number SAMPLE_DATA_FOR_NUMBER = SAMPLE_DATA_FOR_NUMBER_DEFAULT; 
     742        public static Boolean SAMPLE_DATA_FOR_BOOLEAN = SAMPLE_DATA_FOR_BOOLEAN_DEFAULT; 
     743        public static Date SAMPLE_DATA_FOR_DATE = SAMPLE_DATA_FOR_DATE_DEFAULT; 
     744        public static int SAMPLE_DATA_ARRAY_LENGTH = SAMPLE_DATA_ARRAY_LENGTH_DEFAULT; 
    725745 
    726746        static{ 
     
    742762                } 
    743763                else { 
    744                         SAMPLE_DATA_FOR_STRING = "__default__"
     764                        SAMPLE_DATA_FOR_STRING = SAMPLE_DATA_FOR_STRING_DEFAULT
    745765                } 
    746766                 
     
    750770                } 
    751771                else{ 
    752                         SAMPLE_DATA_FOR_NUMBER = new Double(123)
     772                        SAMPLE_DATA_FOR_NUMBER = SAMPLE_DATA_FOR_NUMBER_DEFAULT
    753773                } 
    754774                 
     
    758778                } 
    759779                else{ 
    760                         SAMPLE_DATA_FOR_BOOLEAN = Boolean.TRUE
     780                        SAMPLE_DATA_FOR_BOOLEAN = SAMPLE_DATA_FOR_BOOLEAN_DEFAULT
    761781                } 
    762782                 
     
    766786                } 
    767787                else{ 
    768                         SAMPLE_DATA_FOR_DATE = new Date(1213846496000L); // "Mon June 19 2008 12:34:56 GMT+0900 (JST)" 
     788                        SAMPLE_DATA_FOR_DATE = SAMPLE_DATA_FOR_DATE_DEFAULT; 
    769789                } 
    770790        } 
  • trunk/im-jssp/src/test/java/org/intra_mart/jssp/util/JavaScriptUtilityTest.java

    r221 r224  
    22 
    33import java.beans.PropertyDescriptor; 
     4import java.lang.reflect.Array; 
    45import java.util.ArrayList; 
    56import java.util.Calendar; 
     
    78import java.util.HashMap; 
    89import java.util.HashSet; 
    9 import java.util.Iterator; 
    1010import java.util.List; 
    1111import java.util.Map; 
     
    1414import junit.framework.TestCase; 
    1515 
     16import org.intra_mart.jssp.script.FoundationScriptScope; 
    1617import org.mozilla.javascript.Context; 
    1718import org.mozilla.javascript.NativeArray; 
     19import org.mozilla.javascript.NativeJavaArray; 
     20import org.mozilla.javascript.NativeJavaObject; 
    1821import org.mozilla.javascript.ScriptRuntime; 
     22import org.mozilla.javascript.Scriptable; 
     23import org.mozilla.javascript.Undefined; 
    1924 
    2025public class JavaScriptUtilityTest extends TestCase { 
     
    964969        } 
    965970         
     971        public void testConvertJsObject2JavaBeansObjectClassOfQ_Undifinedの場合() throws Exception { 
     972                Object jsObject = Undefined.instance; 
     973                Object actual = JavaScriptUtility.convertJsObject2JavaBeans(jsObject, JavaScriptUtilityTestModelA.class); 
     974                assertNull("Undefinedはnullに変換される", actual); 
     975        } 
     976 
     977        public void testConvertJsObject2JavaBeansObjectClassOfQ_NativeJavaObject_正常系_Stringの場合() throws Exception { 
     978                Scriptable scope = FoundationScriptScope.instance(); 
     979                NativeJavaObject jsObject = new NativeJavaObject(scope, new String("あいうえお"), String.class); 
     980                Object actual = JavaScriptUtility.convertJsObject2JavaBeans(jsObject, String.class); 
     981 
     982                assertEquals("あいうえお", actual); 
     983        } 
     984                 
     985        public void testConvertJsObject2JavaBeansObjectClassOfQ_NativeJavaObject_異常系_Stringの場合() throws Exception { 
     986                Scriptable scope = FoundationScriptScope.instance(); 
     987                NativeJavaObject jsObject = new NativeJavaObject(scope, new String("あいうえお"), String.class); 
     988                Object actual = JavaScriptUtility.convertJsObject2JavaBeans(jsObject, Number.class); 
     989 
     990                assertNull("型が異なるのでnullが返却される", actual); 
     991        } 
     992 
     993 
     994        public void testConvertJsObject2JavaBeansObjectClassOfQ_NativeJavaArray_正常系_Stringの場合() throws Exception { 
     995                String[] array = {"123", "あいう", "abc"}; 
     996                 
     997                Scriptable scope = FoundationScriptScope.instance(); 
     998                NativeJavaArray jsObject = new NativeJavaArray(scope, array); 
     999                Object actual = JavaScriptUtility.convertJsObject2JavaBeans(jsObject, array.getClass()); 
     1000 
     1001                assertTrue(actual.getClass().isArray()); 
     1002                assertEquals(String.class, actual.getClass().getComponentType()); 
     1003                assertEquals("123", Array.get(actual, 0)); 
     1004                assertEquals("あいう", Array.get(actual, 1)); 
     1005                assertEquals("abc", Array.get(actual, 2)); 
     1006        } 
     1007                 
     1008        public void testConvertJsObject2JavaBeansObjectClassOfQ_NativeJavaArray_異常系_Stringの場合() throws Exception { 
     1009                String[] array = {"123", "あいう", "abc"}; 
     1010                 
     1011                Scriptable scope = FoundationScriptScope.instance(); 
     1012                NativeJavaArray jsObject = new NativeJavaArray(scope, array); 
     1013                Object actual = JavaScriptUtility.convertJsObject2JavaBeans(jsObject, String.class); // 配列ではない! 
     1014 
     1015                assertNull("型が異なるのでnullが返却される", actual); 
     1016        } 
     1017 
    9661018 
    9671019        public void testGetBeansPropertyMap_対象外_List() throws Exception {