001/* 002 * The contents of this file are subject to the terms of the Common Development and 003 * Distribution License (the License). You may not use this file except in compliance with the 004 * License. 005 * 006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 007 * specific language governing permission and limitations under the License. 008 * 009 * When distributing Covered Software, include this CDDL Header Notice in each file and include 010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 011 * Header, with the fields enclosed by brackets [] replaced by your own identifying 012 * information: "Portions Copyright [year] [name of copyright owner]". 013 * 014 * Copyright 2009 Sun Microsystems, Inc. 015 * Portions Copyright 2016 ForgeRock AS. 016 */ 017package org.forgerock.opendj.ldap; 018 019import java.util.List; 020 021/** 022 * An abstract filter visitor whose default implementation for all 023 * {@code Visitor} methods is to invoke {@link #visitDefaultFilter(Object)}. 024 * <p> 025 * Implementations can override the methods on a case by case behavior. 026 * 027 * @param <R> 028 * The return type of this visitor's methods. Use 029 * {@link java.lang.Void} for visitors that do not need to return 030 * results. 031 * @param <P> 032 * The type of the additional parameter to this visitor's methods. 033 * Use {@link java.lang.Void} for visitors that do not need an 034 * additional parameter. 035 */ 036public abstract class AbstractFilterVisitor<R, P> implements FilterVisitor<R, P> { 037 /** Default constructor. */ 038 protected AbstractFilterVisitor() { 039 // Nothing to do. 040 } 041 042 /** 043 * {@inheritDoc} 044 * <p> 045 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 046 */ 047 @Override 048 public R visitAndFilter(final P p, final List<Filter> subFilters) { 049 return visitDefaultFilter(p); 050 } 051 052 /** 053 * {@inheritDoc} 054 * <p> 055 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 056 */ 057 @Override 058 public R visitApproxMatchFilter(final P p, final String attributeDescription, 059 final ByteString assertionValue) { 060 return visitDefaultFilter(p); 061 } 062 063 /** 064 * Visits any filters which are not explicitly handled by other visitor 065 * methods. 066 * <p> 067 * The default implementation of this method is to return {@code null}. 068 * 069 * @param p 070 * A visitor specified parameter. 071 * @return A visitor specified result. 072 */ 073 public R visitDefaultFilter(final P p) { 074 return null; 075 } 076 077 /** 078 * {@inheritDoc} 079 * <p> 080 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 081 */ 082 @Override 083 public R visitEqualityMatchFilter(final P p, final String attributeDescription, 084 final ByteString assertionValue) { 085 return visitDefaultFilter(p); 086 } 087 088 /** 089 * {@inheritDoc} 090 * <p> 091 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 092 */ 093 @Override 094 public R visitExtensibleMatchFilter(final P p, final String matchingRule, 095 final String attributeDescription, final ByteString assertionValue, 096 final boolean dnAttributes) { 097 return visitDefaultFilter(p); 098 } 099 100 /** 101 * {@inheritDoc} 102 * <p> 103 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 104 */ 105 @Override 106 public R visitGreaterOrEqualFilter(final P p, final String attributeDescription, 107 final ByteString assertionValue) { 108 return visitDefaultFilter(p); 109 } 110 111 /** 112 * {@inheritDoc} 113 * <p> 114 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 115 */ 116 @Override 117 public R visitLessOrEqualFilter(final P p, final String attributeDescription, 118 final ByteString assertionValue) { 119 return visitDefaultFilter(p); 120 } 121 122 /** 123 * {@inheritDoc} 124 * <p> 125 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 126 */ 127 @Override 128 public R visitNotFilter(final P p, final Filter subFilter) { 129 return visitDefaultFilter(p); 130 } 131 132 /** 133 * {@inheritDoc} 134 * <p> 135 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 136 */ 137 @Override 138 public R visitOrFilter(final P p, final List<Filter> subFilters) { 139 return visitDefaultFilter(p); 140 } 141 142 /** 143 * {@inheritDoc} 144 * <p> 145 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 146 */ 147 @Override 148 public R visitPresentFilter(final P p, final String attributeDescription) { 149 return visitDefaultFilter(p); 150 } 151 152 /** 153 * {@inheritDoc} 154 * <p> 155 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 156 */ 157 @Override 158 public R visitSubstringsFilter(final P p, final String attributeDescription, 159 final ByteString initialSubstring, final List<ByteString> anySubstrings, 160 final ByteString finalSubstring) { 161 return visitDefaultFilter(p); 162 } 163 164 /** 165 * {@inheritDoc} 166 * <p> 167 * The default implementation is to call {@link #visitDefaultFilter(Object)}. 168 */ 169 @Override 170 public R visitUnrecognizedFilter(final P p, final byte filterTag, final ByteString filterBytes) { 171 return visitDefaultFilter(p); 172 } 173}