1 20 21 package org.apache.directory.ldapstudio.browser.core.model.filter; 22 23 24 import java.util.ArrayList ; 25 import java.util.Arrays ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 29 import org.apache.directory.ldapstudio.browser.core.model.filter.parser.LdapFilterToken; 30 31 32 public abstract class LdapFilterComponent 33 { 34 35 protected final LdapFilter parent; 36 37 protected LdapFilterToken startToken; 38 39 protected List filterList; 40 41 42 48 public LdapFilterComponent( LdapFilter parent ) 49 { 50 if ( parent == null ) 51 throw new IllegalArgumentException ( "parent is null" ); 52 53 this.parent = parent; 54 this.startToken = null; 55 this.filterList = new ArrayList ( 2 ); 56 } 57 58 59 64 public final LdapFilter getParent() 65 { 66 return this.parent; 67 } 68 69 70 78 public boolean setStartToken( LdapFilterToken startToken ) 79 { 80 if ( this.startToken == null && startToken != null ) 81 { 82 this.startToken = startToken; 83 return true; 84 } 85 else 86 { 87 return false; 88 } 89 } 90 91 92 97 public final LdapFilterToken getStartToken() 98 { 99 return this.startToken; 100 } 101 102 103 110 public boolean addFilter( LdapFilter filter ) 111 { 112 if ( this.startToken != null && filter != null ) 113 { 114 this.filterList.add( filter ); 115 return true; 116 } 117 else 118 { 119 return false; 120 } 121 } 122 123 124 129 public LdapFilter[] getFilters() 130 { 131 LdapFilter[] filters = new LdapFilter[this.filterList.size()]; 132 this.filterList.toArray( filters ); 133 return filters; 134 } 135 136 137 142 public boolean isValid() 143 { 144 if ( this.startToken == null ) 145 { 146 return false; 147 } 148 149 if ( this.filterList.isEmpty() ) 150 { 151 return false; 152 } 153 154 for ( Iterator it = filterList.iterator(); it.hasNext(); ) 155 { 156 LdapFilter filter = ( LdapFilter ) it.next(); 157 if ( filter == null || !filter.isValid() ) 158 { 159 return false; 160 } 161 } 162 163 return true; 164 } 165 166 167 172 public abstract String getInvalidCause(); 173 174 175 182 public LdapFilter[] getInvalidFilters() 183 { 184 if ( this.startToken == null || this.filterList.isEmpty() ) 185 { 186 return new LdapFilter[] 187 { this.parent }; 188 } 189 else 190 { 191 List invalidFilterList = new ArrayList (); 192 for ( Iterator it = this.filterList.iterator(); it.hasNext(); ) 193 { 194 LdapFilter filter = ( LdapFilter ) it.next(); 195 if ( filter != null ) 196 { 197 invalidFilterList.addAll( Arrays.asList( filter.getInvalidFilters() ) ); 198 } 199 } 200 return ( LdapFilter[] ) invalidFilterList.toArray( new LdapFilter[invalidFilterList.size()] ); 201 } 202 } 203 204 205 210 public LdapFilterToken[] getTokens() 211 { 212 List tokenList = new ArrayList (); 214 if ( this.startToken != null ) 215 { 216 tokenList.add( this.startToken ); 217 } 218 for ( Iterator it = this.filterList.iterator(); it.hasNext(); ) 219 { 220 LdapFilter filter = ( LdapFilter ) it.next(); 221 if ( filter != null ) 222 { 223 tokenList.addAll( Arrays.asList( filter.getTokens() ) ); 224 } 225 } 226 227 LdapFilterToken[] tokens = ( LdapFilterToken[] ) tokenList.toArray( new LdapFilterToken[tokenList.size()] ); 229 Arrays.sort( tokens ); 230 231 return tokens; 233 } 234 235 236 244 public LdapFilter getFilter( int offset ) 245 { 246 if ( this.startToken != null && this.startToken.getOffset() == offset ) 247 { 248 return this.parent; 249 } 250 else if ( this.filterList != null || !this.filterList.isEmpty() ) 251 { 252 for ( Iterator it = this.filterList.iterator(); it.hasNext(); ) 253 { 254 LdapFilter filter = ( LdapFilter ) it.next(); 255 if ( filter != null && filter.getFilter( offset ) != null ) 256 { 257 return filter.getFilter( offset ); 258 } 259 } 260 return null; 261 } 262 else 263 { 264 return null; 265 } 266 } 267 268 } 269 | Popular Tags |