1 12 13 17 package com.openedit.util.strainer; 18 19 import java.util.Iterator ; 20 import java.util.List ; 21 22 import javax.naming.ConfigurationException ; 23 24 import com.openedit.OpenEditException; 25 import com.openedit.config.Configuration; 26 27 28 33 public class FilterReader 34 { 35 48 public Filter readFilterCollection(Configuration inConfig) throws OpenEditException 49 { 50 Filter filter = null; 51 52 if (inConfig != null) 53 { 54 List elements = inConfig.getChildren(); 55 switch (elements.size()) 56 { 57 case 0: 58 filter = new BlankFilter(); 60 break; 61 62 case 1: 63 filter = readFilter((Configuration) elements.get(0)); 64 65 break; 66 67 default: 68 69 Filter[] filters = new Filter[elements.size()]; 70 71 for (int i = 0; i < filters.length; i++) 72 { 73 filters[i] = readFilter((Configuration) elements.get(i)); 74 } 75 76 filter = new AndFilter(filters); 77 78 break; 79 } 80 } 81 82 return filter; 83 } 84 85 94 protected Filter readFilter(Configuration inConfig) throws OpenEditException 95 { 96 if (inConfig == null) 97 { 98 return null; 99 } 100 101 Filter result = null; 103 String elemName = inConfig.getName(); 104 List elements = inConfig.getChildren(); 105 if (elemName.equals("and")) 106 { 107 result = new AndFilter(readSubFilters(inConfig)); 108 } 109 else if (elemName.equals("or")) 110 { 111 result = new OrFilter(readSubFilters(inConfig)); 112 } 113 else if (elemName.equals("not")) 114 { 115 if (elements.size() > 1) 116 { 117 throw new OpenEditException("<not> element must have one or less children"); 118 } 119 if ( elements.size() == 0) 120 { 121 result = new NotFilter(); 122 } 123 else 124 { 125 result = new NotFilter(readFilter((Configuration) elements.get(0))); 126 } 127 } 128 else if (elemName.equals("user")) 129 { 130 result = new UserFilter(inConfig.getAttribute("name")); 131 } 132 else if (elemName.equals("group")) 133 { 134 result = new GroupFilter(inConfig.getAttribute("name")); 135 } 136 else if (elemName.equals("permission")) 137 { 138 result = new PermissionFilter(inConfig.getAttribute("name")); 139 } 140 else if (elemName.equals("path")) 141 { 142 result = new PathFilter(inConfig.getAttribute("name")); 143 } 144 else if (elemName.equals("page-property")) 145 { 146 result = new PagePropertyFilter( 147 inConfig.getAttribute("name"), inConfig.getAttribute("equals")); 148 } 149 else if (elemName.equals("context-variable")) 150 { 151 result = new ContextVariableFilter( 152 inConfig.getAttribute("name"), inConfig.getAttribute("equals")); 153 } 154 else if (elemName.equals("request-attribute")) 155 { 156 result = new RequestAttributeFilter( 157 inConfig.getAttribute("name"), inConfig.getAttribute("equals")); 158 } 159 else if (elemName.equals("blank")) 160 { 161 result = new BlankFilter(); 162 } 163 else 164 { 165 throw new OpenEditException("Unrecognized filter element <" + elemName + ">"); 166 } 167 168 return result; 169 } 170 171 180 protected Filter[] readSubFilters(Configuration inConfig) throws OpenEditException 181 { 182 List elements = inConfig.getChildren(); 183 Filter[] subFilters = new Filter[elements.size()]; 184 int index = 0; 185 186 for (Iterator iter = elements.iterator(); iter.hasNext();) 187 { 188 subFilters[index] = readFilter((Configuration) iter.next()); 189 index++; 190 } 191 192 return subFilters; 193 } 194 } 195 | Popular Tags |