1 package jfun.yan.xml; 2 3 import java.util.ArrayList ; 4 import java.util.List ; 5 6 7 8 final class SimpleModule implements Module { 9 private final Import[] parents; 10 private final String [] dependencies; 11 private final Body body; 12 private final String name; 13 private final String description; 14 private final Object module_id; 15 private final StringPredicate exported; 16 17 public String getDescription() { 18 return description; 19 } 20 21 public Object getModuleId() { 22 return module_id; 23 } 24 25 public String getName() { 26 return name; 27 } 28 private static void filter(StringPredicate exported, String prefix, 29 String [] keys, List result){ 30 for(int i=0; i<keys.length; i++){ 31 final String key = prefix+keys[i]; 32 if(exported.isString(key)) 33 result.add(key); 34 } 35 } 36 public String [] getExports(){ 37 final int sz = body.size(); 38 final ArrayList result = new ArrayList (sz); 39 for(int i=0; i<parents.length; i++){ 40 final Import parent = parents[i]; 41 final String [] keys = parent.getKeys(); 42 filter(exported, parent.getPrefix(), keys, result); 43 } 44 for(int i=0; i<sz; i++){ 45 final Object key = body.getKey(i); 46 if(key instanceof String && exported.isString((String )key)) 47 result.add(key); 48 } 49 final String [] ret = new String [result.size()]; 50 result.toArray(ret); 51 return ret; 52 } 53 SimpleModule(Object module_id, String name, String description, 54 String [] dependencies, Import[] imports, 55 Body body, 56 StringPredicate exported) { 57 this.name = name; 58 this.description = description; 59 this.module_id = module_id; 60 this.dependencies = dependencies; 61 this.parents = imports; 62 this.body = body; 63 this.exported = exported; 64 } 65 public String [] getDependencies(){ 66 return dependencies; 67 } 68 79 80 public void register(Registry reg){ 81 final Registry myreg = new FilteringRegistry(exported, reg); 82 for(int i=0; i<parents.length; i++){ 83 parents[i].register(myreg); 84 } 85 body.register(myreg); 86 } 87 public StringPredicate getExportFilter() { 88 return exported; 89 } 90 91 } 92 | Popular Tags |