1 15 package org.apache.tapestry.contrib.inspector; 16 17 import java.util.ArrayList ; 18 import java.util.Collections ; 19 import java.util.HashSet ; 20 import java.util.List ; 21 import java.util.Set ; 22 23 import org.apache.tapestry.BaseComponent; 24 import org.apache.tapestry.IComponent; 25 import org.apache.tapestry.INamespace; 26 import org.apache.tapestry.IRequestCycle; 27 import org.apache.tapestry.engine.ISpecificationSource; 28 import org.apache.tapestry.form.IPropertySelectionModel; 29 import org.apache.tapestry.form.StringPropertySelectionModel; 30 31 38 39 public abstract class Selector extends BaseComponent 40 { 41 47 48 public void formSubmit(IRequestCycle cycle) 49 { 50 Inspector inspector = (Inspector) getPage(); 51 52 inspector.selectComponent((String ) null); 53 } 54 55 60 61 public IPropertySelectionModel getPageModel() 62 { 63 return new StringPropertySelectionModel(getPageNames()); 64 } 65 66 71 72 public List getCrumbTrail() 73 { 74 List result = null; 75 76 Inspector inspector = (Inspector) getPage(); 77 IComponent component = inspector.getInspectedComponent(); 78 IComponent container = null; 79 80 while (true) 81 { 82 container = component.getContainer(); 83 if (container == null) 84 break; 85 86 if (result == null) 87 result = new ArrayList (); 88 89 result.add(component); 90 91 component = container; 92 } 93 94 if (result == null) 95 return null; 96 97 100 Collections.reverse(result); 101 102 return result; 103 } 104 105 private String [] getPageNames() 106 { 107 Set names = new HashSet (); 108 109 ISpecificationSource source = getPage().getEngine().getSpecificationSource(); 110 111 addPageNames(names, source.getFrameworkNamespace()); 112 addPageNames(names, source.getApplicationNamespace()); 113 114 List l = new ArrayList (names); 115 Collections.sort(l); 116 117 return (String []) l.toArray(new String [l.size()]); 118 } 119 120 private void addPageNames(Set names, INamespace namespace) 121 { 122 String idPrefix = namespace.getExtendedId(); 123 124 List pageNames = namespace.getPageNames(); 125 int count = pageNames.size(); 126 127 for (int i = 0; i < count; i++) 128 { 129 String name = (String ) pageNames.get(i); 130 131 if (idPrefix == null) 132 names.add(name); 133 else 134 names.add(idPrefix + ":" + name); 135 } 136 137 List ids = namespace.getChildIds(); 138 count = ids.size(); 139 140 for (int i = 0; i < count; i++) 141 { 142 String id = (String ) ids.get(i); 143 144 addPageNames(names, namespace.getChildNamespace(id)); 145 } 146 } 147 148 } | Popular Tags |