| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| |
| package org.apache.directory.studio.ldapbrowser.core.model.filter; |
| |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterToken; |
| |
| |
| /** |
| * The LdapFilterExtensibleComponent represents an simple filter. |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| |
| public class LdapFilterItemComponent extends LdapFilterComponent |
| { |
| |
| /** The filtertype token. */ |
| private LdapFilterToken filtertypeToken; |
| |
| /** The value token. */ |
| private LdapFilterToken valueToken; |
| |
| |
| /** |
| * Creates a new instance of LdapFilterItemComponent. |
| * |
| * @param parent the parent filter |
| */ |
| public LdapFilterItemComponent( LdapFilter parent ) |
| { |
| super( parent ); |
| this.filtertypeToken = null; |
| this.valueToken = null; |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#setStartToken(org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterToken) |
| */ |
| public boolean setStartToken( LdapFilterToken attributeToken ) |
| { |
| if ( attributeToken != null && attributeToken.getType() == LdapFilterToken.ATTRIBUTE ) |
| { |
| super.setStartToken( attributeToken ); |
| return true; |
| } |
| else |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Sets the attribute token. |
| * |
| * @param attributeToken the attribute token |
| * |
| * @return true, if setting the attribute token was successful, false otherwise |
| */ |
| public boolean setAttributeToken( LdapFilterToken attributeToken ) |
| { |
| return this.setStartToken( attributeToken ); |
| } |
| |
| |
| /** |
| * Gets the attribute token. |
| * |
| * @return the attribute token, null if not set |
| */ |
| public LdapFilterToken getAttributeToken() |
| { |
| return getStartToken(); |
| } |
| |
| |
| /** |
| * Sets the filtertype token. |
| * |
| * @param filtertypeToken the filtertype token |
| * |
| * @return true, if setting the filtertype token was successful, false otherwise |
| */ |
| public boolean setFiltertypeToken( LdapFilterToken filtertypeToken ) |
| { |
| if ( this.filtertypeToken == null |
| && filtertypeToken != null |
| && ( filtertypeToken.getType() == LdapFilterToken.EQUAL |
| || filtertypeToken.getType() == LdapFilterToken.GREATER |
| || filtertypeToken.getType() == LdapFilterToken.LESS |
| || filtertypeToken.getType() == LdapFilterToken.APROX |
| || filtertypeToken.getType() == LdapFilterToken.PRESENT || filtertypeToken.getType() == LdapFilterToken.SUBSTRING ) ) |
| { |
| this.filtertypeToken = filtertypeToken; |
| return true; |
| } |
| else |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Gets the filter token. |
| * |
| * @return the filter token, null if not set |
| */ |
| public LdapFilterToken getFilterToken() |
| { |
| return filtertypeToken; |
| } |
| |
| |
| /** |
| * Sets the value token. |
| * |
| * @param valueToken the value token |
| * |
| * @return true, if setting the value token was successful, false otherwise |
| */ |
| public boolean setValueToken( LdapFilterToken valueToken ) |
| { |
| if ( this.valueToken == null && valueToken != null && valueToken.getType() == LdapFilterToken.VALUE ) |
| { |
| this.valueToken = valueToken; |
| return true; |
| } |
| else |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Gets the value token. |
| * |
| * @return the value token, null if not set |
| */ |
| public LdapFilterToken getValueToken() |
| { |
| return valueToken; |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#isValid() |
| */ |
| public boolean isValid() |
| { |
| return startToken != null && filtertypeToken != null |
| && ( valueToken != null || filtertypeToken.getType() == LdapFilterToken.PRESENT ); |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#getTokens() |
| */ |
| public LdapFilterToken[] getTokens() |
| { |
| // collect tokens |
| List<LdapFilterToken> tokenList = new ArrayList<LdapFilterToken>(); |
| if ( startToken != null ) |
| { |
| tokenList.add( startToken ); |
| } |
| if ( filtertypeToken != null ) |
| { |
| tokenList.add( filtertypeToken ); |
| } |
| if ( valueToken != null ) |
| { |
| tokenList.add( valueToken ); |
| } |
| |
| // sort tokens |
| LdapFilterToken[] tokens = tokenList.toArray( new LdapFilterToken[tokenList.size()] ); |
| Arrays.sort( tokens ); |
| |
| // return |
| return tokens; |
| } |
| |
| |
| /** |
| * @see java.lang.Object#toString() |
| */ |
| public String toString() |
| { |
| return ( startToken != null ? startToken.getValue() : "" ) //$NON-NLS-1$ |
| + ( filtertypeToken != null ? filtertypeToken.getValue() : "" ) //$NON-NLS-1$ |
| + ( valueToken != null ? valueToken.getValue() : "" ); //$NON-NLS-1$ |
| } |
| |
| |
| /** |
| * This implementation does nothing and returns always false. |
| * |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#addFilter(org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilter) |
| */ |
| public boolean addFilter( LdapFilter filter ) |
| { |
| return false; |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#getInvalidFilters() |
| */ |
| public LdapFilter[] getInvalidFilters() |
| { |
| if ( isValid() ) |
| { |
| return new LdapFilter[0]; |
| } |
| else |
| { |
| return new LdapFilter[] |
| { parent }; |
| } |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#getFilter(int) |
| */ |
| public LdapFilter getFilter( int offset ) |
| { |
| if ( startToken != null && startToken.getOffset() <= offset |
| && offset < startToken.getOffset() + startToken.getLength() ) |
| { |
| return parent; |
| } |
| else if ( filtertypeToken != null && filtertypeToken.getOffset() <= offset |
| && offset < filtertypeToken.getOffset() + filtertypeToken.getLength() ) |
| { |
| return parent; |
| } |
| else if ( valueToken != null && valueToken.getOffset() <= offset |
| && offset < valueToken.getOffset() + valueToken.getLength() ) |
| { |
| return parent; |
| } |
| else |
| { |
| return null; |
| } |
| } |
| |
| |
| /** |
| * @see org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent#getInvalidCause() |
| */ |
| public String getInvalidCause() |
| { |
| if ( startToken == null ) |
| { |
| return Messages.LdapFilterItemComponent_MissingAttributeName; |
| } |
| else if ( filtertypeToken == null ) |
| { |
| return Messages.LdapFilterItemComponent_MissingFilterType; |
| } |
| else if ( valueToken == null ) |
| { |
| return Messages.LdapFilterItemComponent_MissingValue; |
| } |
| else |
| { |
| return null; |
| } |
| } |
| |
| } |