KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jfun > yan > xml > nuts > ArrayNut


1 package jfun.yan.xml.nuts;
2
3 import java.lang.reflect.Array JavaDoc;
4
5 import jfun.util.Misc;
6 import jfun.util.StringUtils;
7 import jfun.yan.Component;
8 import jfun.yan.Components;
9 import jfun.yan.SimpleComponent;
10 import jfun.yan.util.ReflectionUtil;
11
12
13 /**
14  * Nut class for <array> tag.
15  * <p>
16  * @author Ben Yu
17  * Nov 9, 2005 11:39:29 PM
18  */

19 public class ArrayNut extends CollectionNut {
20   private void checkTypeMatch(Class JavaDoc expected, Class JavaDoc actual){
21     if(!ReflectionUtil.isAssignableFrom(expected, actual)){
22       throw raise(Misc.getTypeName(actual)
23           + " is not subtype of "+Misc.getTypeName(expected));
24     }
25   }
26   public void setType(Class JavaDoc type){
27     if(!type.isArray()){
28       raise(Misc.getTypeName(type)+" is not an array.");
29     }
30     final Class JavaDoc etype = type.getComponentType();
31     final Class JavaDoc of = getOf();
32     if(of==null){
33       super.setOf(etype);
34     }
35     else{
36       checkTypeMatch(etype, of);
37     }
38     super.setType(type);
39   }
40   public void setOf(Class JavaDoc oftype){
41     final Class JavaDoc of = getOf();
42     if(of==null){
43       super.setType(Misc.getArrayType(oftype));
44     }
45     else{
46       checkTypeMatch(of, oftype);
47     }
48     super.setOf(oftype);
49   }
50   /*
51   private Component convert(final int ind, final Class elem_type, Component c){
52     return c.map(new Map(){
53       public Object map(Object obj){
54         return convert(elem_type, obj);
55       }
56     });
57   }
58   private Component[] convert(final Class elem_type, Component[] ccs){
59     if(String.class.equals(elem_type)){
60       return ccs;
61     }
62     else{
63       final Component[] ret = new Component[ccs.length];
64       for(int i=0; i<ret.length; i++){
65         ret[i] = convert(i, elem_type, ccs[i]);
66       }
67       return ret;
68     }
69   }*/

70   public Component eval(){
71     final Component[] elements = getMandatoryElements();
72     final Class JavaDoc type = getType(Object JavaDoc[].class);
73     final Class JavaDoc oftype = getOf();
74     final Class JavaDoc etype = oftype==null?Object JavaDoc.class:oftype;
75     final Component step1 = new SimpleComponent(type){
76       public Object JavaDoc create(){
77         return Array.newInstance(etype, elements.length);
78       }
79       public String JavaDoc toString(){
80         return StringUtils.listArray("[",",","]",elements);
81       }
82     };
83     return Components.storeArray(step1, elements);
84     /*
85     if(elem_type!=null){
86       return Components.array(convert(elem_type, elements), elem_type);
87     }
88     else{
89       return Components.array(elements);
90     }*/

91   }
92 }
93
Popular Tags