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.dns.store.jndi;
021
022
023 import java.util.Set;
024
025 import org.apache.directory.server.core.DirectoryService;
026 import org.apache.directory.server.dns.DnsException;
027 import org.apache.directory.server.dns.messages.QuestionRecord;
028 import org.apache.directory.server.dns.messages.ResourceRecord;
029 import org.apache.directory.server.dns.store.RecordStore;
030
031
032 /**
033 * A DirectoryService-backed implementation of the RecordStore interface. This RecordStore uses
034 * the Strategy pattern to either serve records based on a single base DN or to lookup
035 * catalog mappings from directory configuration.
036 *
037 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
038 * @version $Rev: 583592 $, $Date: 2007-10-10 22:49:37 +0300 (Wed, 10 Oct 2007) $
039 */
040 public class JndiRecordStoreImpl implements RecordStore
041 {
042 /**
043 * a handle on the searchh strategy
044 */
045 private final SearchStrategy strategy;
046
047
048 /**
049 * Creates a new instance of JndiRecordStoreImpl.
050 *
051 * @param catalogBaseDn base of catalog of searchDns
052 * @param searchBaseDn single search base for when there is no catalog
053 * @param directoryService DirectoryService backend for the searches.
054 */
055 public JndiRecordStoreImpl( String catalogBaseDn, String searchBaseDn, DirectoryService directoryService )
056 {
057
058 strategy = getSearchStrategy( catalogBaseDn, searchBaseDn, directoryService );
059 }
060
061
062 public Set<ResourceRecord> getRecords( QuestionRecord question ) throws DnsException
063 {
064 return strategy.getRecords( question );
065 }
066
067
068 private SearchStrategy getSearchStrategy( String catalogBaseDn, String searchBaseDn, DirectoryService directoryService )
069 {
070 if ( catalogBaseDn != null )
071 {
072 // build catalog from factory
073 return new MultiBaseSearch( catalogBaseDn, directoryService );
074 }
075
076 // use config for catalog baseDN
077 return new SingleBaseSearch( searchBaseDn, directoryService );
078 }
079 }