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.List ; 27 28 import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages; 29 import org.apache.directory.ldapstudio.browser.core.model.filter.parser.LdapFilterToken; 30 31 32 public class LdapFilter 33 { 34 35 private LdapFilterToken startToken; 36 37 private LdapFilterComponent filterComponent; 38 39 private LdapFilterToken stopToken; 40 41 private List otherTokens; 42 43 44 public LdapFilter() 45 { 46 this.startToken = null; 47 this.filterComponent = null; 48 this.stopToken = null; 49 this.otherTokens = new ArrayList ( 2 ); 50 } 51 52 53 public boolean setStartToken( LdapFilterToken startToken ) 54 { 55 if ( this.startToken == null && startToken != null && startToken.getType() == LdapFilterToken.LPAR ) 56 { 57 this.startToken = startToken; 58 return true; 59 } 60 else 61 { 62 return false; 63 } 64 } 65 66 67 public boolean setFilterComponent( LdapFilterComponent filterComponent ) 68 { 69 if ( this.startToken != null && this.filterComponent == null && filterComponent != null ) 70 { 71 this.filterComponent = filterComponent; 72 return true; 73 } 74 else 75 { 76 return false; 77 } 78 } 79 80 81 public boolean setStopToken( LdapFilterToken stopToken ) 82 { 83 if ( this.startToken != null && this.stopToken == null && stopToken != null 84 && stopToken.getType() == LdapFilterToken.RPAR ) 85 { 86 this.stopToken = stopToken; 87 return true; 88 } 89 else 90 { 91 return false; 92 } 93 } 94 95 96 public void addOtherToken( LdapFilterToken otherToken ) 97 { 98 this.otherTokens.add( otherToken ); 99 } 100 101 102 public LdapFilterToken getStartToken() 103 { 104 return this.startToken; 105 } 106 107 108 public LdapFilterComponent getFilterComponent() 109 { 110 return this.filterComponent; 111 } 112 113 114 public LdapFilterToken getStopToken() 115 { 116 return this.stopToken; 117 } 118 119 120 public LdapFilterToken[] getTokens() 121 { 122 123 List tokenList = new ArrayList (); 125 if ( this.startToken != null ) 126 { 127 tokenList.add( this.startToken ); 128 } 129 if ( this.stopToken != null ) 130 { 131 tokenList.add( this.stopToken ); 132 } 133 if ( this.filterComponent != null ) 134 { 135 tokenList.addAll( Arrays.asList( this.filterComponent.getTokens() ) ); 136 } 137 tokenList.addAll( this.otherTokens ); 138 139 LdapFilterToken[] tokens = ( LdapFilterToken[] ) tokenList.toArray( new LdapFilterToken[tokenList.size()] ); 141 Arrays.sort( tokens ); 142 143 return tokens; 145 } 146 147 148 public boolean isValid() 149 { 150 return this.startToken != null && this.filterComponent != null && this.filterComponent.isValid() 151 && this.stopToken != null; 152 } 153 154 155 public LdapFilter[] getInvalidFilters() 156 { 157 if ( this.startToken == null || this.filterComponent == null || this.stopToken == null ) 158 { 159 return new LdapFilter[] 160 { this }; 161 } 162 else 163 { 164 return this.filterComponent.getInvalidFilters(); 165 } 166 } 167 168 169 public LdapFilter getFilter( int offset ) 170 { 171 if ( this.startToken != null && this.startToken.getOffset() == offset ) 172 { 173 return this; 174 } 175 else if ( this.stopToken != null && this.stopToken.getOffset() == offset ) 176 { 177 return this; 178 } 179 180 if ( this.otherTokens != null && this.otherTokens.size() > 0 ) 181 { 182 for ( int i = 0; i < this.otherTokens.size(); i++ ) 183 { 184 LdapFilterToken otherToken = ( LdapFilterToken ) this.otherTokens.get( i ); 185 if ( otherToken != null && otherToken.getOffset() <= offset 186 && offset < otherToken.getOffset() + otherToken.getLength() ) 187 { 188 return this; 189 } 190 } 191 } 192 193 if ( this.filterComponent != null ) 194 { 195 return this.filterComponent.getFilter( offset ); 196 } 197 198 return this; 199 } 200 201 202 public String getInvalidCause() 203 { 204 if ( this.stopToken == null ) 205 { 206 return BrowserCoreMessages.model_filter_missing_closing_parenthesis; 207 } 208 else if ( this.filterComponent == null ) 209 { 210 return BrowserCoreMessages.model_filter_missing_filter_expression; 211 } 212 else 213 { 214 return this.filterComponent.getInvalidCause(); 215 } 216 } 217 218 219 public String toString() 220 { 221 return ( this.startToken != null ? "(" : "" ) + ( filterComponent != null ? filterComponent.toString() : "" ) + ( this.stopToken != null ? ")" : "" ); } 223 224 } 225 | Popular Tags |