001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 package org.apache.directory.server.core.event; 021 022 023 import org.apache.directory.shared.ldap.constants.SchemaConstants; 024 import org.apache.directory.shared.ldap.filter.ExprNode; 025 import org.apache.directory.shared.ldap.filter.FilterParser; 026 import org.apache.directory.shared.ldap.filter.PresenceNode; 027 import org.apache.directory.shared.ldap.filter.SearchScope; 028 import org.apache.directory.shared.ldap.message.AliasDerefMode; 029 import org.apache.directory.shared.ldap.message.internal.InternalSearchRequest; 030 import org.apache.directory.shared.ldap.name.DN; 031 032 033 /** 034 * Contains the set of notification criteria required for triggering the 035 * delivery of change notifications notifications to {@link DirectoryListener}s. 036 * 037 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 038 * @version $Rev$, $Date$ 039 */ 040 public class NotificationCriteria 041 { 042 public static final SearchScope DEFAULT_SCOPE = SearchScope.ONELEVEL; 043 public static final AliasDerefMode DEFAULT_ALIAS_DEREF_MODE = AliasDerefMode.DEREF_ALWAYS; 044 public static final DN DEFAULT_BASE = new DN(); 045 public static final ExprNode DEFAULT_FILTER = new PresenceNode( SchemaConstants.OBJECT_CLASS_AT_OID ); 046 047 private SearchScope scope = DEFAULT_SCOPE; 048 private AliasDerefMode aliasDerefMode = DEFAULT_ALIAS_DEREF_MODE; 049 private DN base = DEFAULT_BASE; 050 private ExprNode filter = DEFAULT_FILTER; 051 private int eventMask = EventType.ALL_EVENT_TYPES_MASK; 052 053 054 public NotificationCriteria() 055 { 056 } 057 058 059 public NotificationCriteria( InternalSearchRequest req ) 060 { 061 this.scope = req.getScope(); 062 this.aliasDerefMode = req.getDerefAliases(); 063 this.base = req.getBase(); 064 this.filter = req.getFilter(); 065 } 066 067 068 /** 069 * @param scope the scope to set 070 */ 071 public void setScope( SearchScope scope ) 072 { 073 this.scope = scope; 074 } 075 076 077 /** 078 * @return the scope 079 */ 080 public SearchScope getScope() 081 { 082 return scope; 083 } 084 085 086 /** 087 * @param aliasDerefMode the aliasDerefMode to set 088 */ 089 public void setAliasDerefMode( AliasDerefMode aliasDerefMode ) 090 { 091 this.aliasDerefMode = aliasDerefMode; 092 } 093 094 095 /** 096 * @return the aliasDerefMode 097 */ 098 public AliasDerefMode getAliasDerefMode() 099 { 100 return aliasDerefMode; 101 } 102 103 104 /** 105 * @param base the base to set 106 */ 107 public void setBase( DN base ) 108 { 109 this.base = base; 110 } 111 112 113 /** 114 * @param base the base to set 115 */ 116 public void setBase( String base ) throws Exception 117 { 118 this.base = new DN( base ); 119 } 120 121 122 /** 123 * @return the base 124 */ 125 public DN getBase() 126 { 127 return base; 128 } 129 130 131 /** 132 * @param filter the filter to set 133 */ 134 public void setFilter( ExprNode filter ) 135 { 136 this.filter = filter; 137 } 138 139 140 /** 141 * @param filter the filter to set 142 */ 143 public void setFilter( String filter ) throws Exception 144 { 145 this.filter = FilterParser.parse( filter ); 146 } 147 148 149 /** 150 * @return the filter 151 */ 152 public ExprNode getFilter() 153 { 154 return filter; 155 } 156 157 158 /** 159 * @param eventMask the eventMask to set 160 */ 161 public void setEventMask( int eventMask ) 162 { 163 this.eventMask = eventMask; 164 } 165 166 167 /** 168 * @param eventMask the eventMask to set 169 */ 170 public void setEventMask( EventType ...eventTypes ) 171 { 172 this.eventMask = EventType.getMask( eventTypes ); 173 } 174 175 176 /** 177 * @return the eventMask 178 */ 179 public int getEventMask() 180 { 181 return eventMask; 182 } 183 }