KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jfun > yan > xml > ModuleBuilder


1 package jfun.yan.xml;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Arrays JavaDoc;
5 import java.util.HashMap JavaDoc;
6 import java.util.HashSet JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.Map JavaDoc;
9 import java.util.Set JavaDoc;
10
11 import jfun.util.dict.Dict;
12 import jfun.yan.Component;
13 import jfun.yan.Components;
14
15 class ModuleBuilder {
16   private final Import[] parents;
17   private final Statements stmts;
18   private final String JavaDoc[] dependencies;
19   private final String JavaDoc name;
20   private final String JavaDoc description;
21   private final Object JavaDoc module_id;
22   private final StringPredicate exported;
23
24   public String JavaDoc getDescription() {
25     return description;
26   }
27
28   public Object JavaDoc getModuleId() {
29     return module_id;
30   }
31
32   public String JavaDoc getName() {
33     return name;
34   }
35   /*
36   private static void filter(StringPredicate exported, String prefix,
37       String[] keys, List result){
38     for(int i=0; i<keys.length; i++){
39       final String key = prefix+keys[i];
40       if(exported.isString(key))
41         result.add(key);
42     }
43   }
44   
45   public String[] getExports(Body body){
46     final int sz = body.size();
47     final ArrayList result = new ArrayList(sz);
48     for(int i=0; i<parents.length; i++){
49       final Import parent = parents[i];
50       final String[] keys = parent.getKeys();
51       filter(exported, parent.getPrefix(), keys, result);
52     }
53     for(int i=0; i<sz; i++){
54       final Object key = body.getKey(i);
55       if(key instanceof String && exported.isString((String)key))
56         result.add(key);
57     }
58     final String[] ret = new String[result.size()];
59     result.toArray(ret);
60     return ret;
61   }*/

62   ModuleBuilder(Object JavaDoc module_id, String JavaDoc name, String JavaDoc description,
63       String JavaDoc[] dependencies, Import[] imports, Statements stmts,
64       StringPredicate exported) {
65     this.name = name;
66     this.description = description;
67     this.module_id = module_id;
68     this.dependencies = dependencies;
69     this.parents = imports;
70     this.stmts = stmts;
71     this.exported = exported;
72   }
73
74
75   public String JavaDoc[] getDependencies(){
76     final Set JavaDoc result = new HashSet JavaDoc();
77     for(int i=0; i<parents.length; i++){
78       result.addAll(Arrays.asList(parents[i].getImported().getDependencies()));
79     }
80     result.addAll(Arrays.asList(dependencies));
81     final String JavaDoc[] ret = new String JavaDoc[result.size()];
82     result.toArray(ret);
83     return ret;
84   }
85
86   private static Registry toRegistry(final Map JavaDoc map){
87     return new Map2Registry(map);
88   }
89   private Dict withDependencies(Dict initial_frame){
90     final Component[] deps = new Component[dependencies.length];
91     for(int i=0; i<dependencies.length; i++){
92       deps[i] = Components.useKey(dependencies[i]);
93     }
94     return initial_frame.puts(dependencies, deps);
95   
96   }
97   public Module build(Runtime JavaDoc runtime, Dict initial_frame){
98     final Map JavaDoc imported = new HashMap JavaDoc();
99     final Registry locals = toRegistry(imported);
100     for(int i=0; i<parents.length; i++){
101       parents[i].register(locals);
102     }
103     final Object JavaDoc[] keys = imported.keySet().toArray();
104     final Object JavaDoc[] vals = new Object JavaDoc[keys.length];
105     for(int i=0; i<keys.length; i++){
106       vals[i] = imported.get(keys[i]);
107     }
108     final Dict with_deps = withDependencies(initial_frame);
109     Dict myframe = with_deps.puts(keys, vals);
110     final Body body = BodyCompiler.evaluate(
111         stmts.getKeys(), stmts.getStmts(),
112         runtime, //new FilteringRegistry(exported, reg),
113
myframe);
114     return new SimpleModule(module_id, name, description,
115         getDependencies(), parents, body, exported);
116   }
117   public StringPredicate getExportFilter() {
118     return exported;
119   }
120
121 }
122
Popular Tags