001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.extensions; 028 import org.opends.messages.Message; 029 030 031 032 import java.util.Iterator; 033 import java.util.LinkedList; 034 import java.util.Set; 035 036 import org.opends.server.types.DirectoryConfig; 037 import org.opends.server.types.DirectoryException; 038 import org.opends.server.types.DN; 039 import org.opends.server.types.Entry; 040 import org.opends.server.types.MemberList; 041 import org.opends.server.types.MembershipException; 042 043 import static org.opends.server.loggers.debug.DebugLogger.*; 044 import org.opends.server.loggers.debug.DebugTracer; 045 import org.opends.server.types.DebugLogLevel; 046 import static org.opends.messages.ExtensionMessages.*; 047 import static org.opends.server.util.Validator.*; 048 049 050 051 /** 052 * This class provides an implementation of the {@code MemberList} class that 053 * may be used in conjunction when static groups when no additional criteria is 054 * to be used to select a subset of the group members. 055 */ 056 public class SimpleStaticGroupMemberList 057 extends MemberList 058 { 059 /** 060 * The tracer object for the debug logger. 061 */ 062 private static final DebugTracer TRACER = getTracer(); 063 064 065 066 067 // The DN of the static group with which this member list is associated. 068 private DN groupDN; 069 070 // The iterator used to traverse the set of member DNs. 071 private Iterator<DN> memberDNIterator; 072 073 // The set of DNs for the users that are members of the associated static 074 // group. 075 private LinkedList<DN> memberDNs; 076 077 078 079 /** 080 * Creates a new simple static group member list with the provided set of 081 * member DNs. 082 * 083 * @param groupDN The DN of the static group with which this member list 084 * is associated. 085 * @param memberDNs The set of DNs for the users that are members of the 086 * associated static group. 087 */ 088 public SimpleStaticGroupMemberList(DN groupDN, Set<DN> memberDNs) 089 { 090 ensureNotNull(groupDN, memberDNs); 091 092 this.groupDN = groupDN; 093 this.memberDNs = new LinkedList<DN>(memberDNs); 094 memberDNIterator = memberDNs.iterator(); 095 } 096 097 098 099 /** 100 * {@inheritDoc} 101 */ 102 @Override() 103 public boolean hasMoreMembers() 104 { 105 return memberDNIterator.hasNext(); 106 } 107 108 109 110 /** 111 * {@inheritDoc} 112 */ 113 @Override() 114 public DN nextMemberDN() 115 throws MembershipException 116 { 117 if (memberDNIterator.hasNext()) 118 { 119 return memberDNIterator.next(); 120 } 121 122 return null; 123 } 124 125 126 127 /** 128 * {@inheritDoc} 129 */ 130 @Override() 131 public Entry nextMemberEntry() 132 throws MembershipException 133 { 134 if (memberDNIterator.hasNext()) 135 { 136 DN memberDN = memberDNIterator.next(); 137 138 try 139 { 140 Entry memberEntry = DirectoryConfig.getEntry(memberDN); 141 if (memberEntry == null) 142 { 143 Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get( 144 String.valueOf(memberDN), String.valueOf(groupDN)); 145 throw new MembershipException(message, true); 146 } 147 148 return memberEntry; 149 } 150 catch (DirectoryException de) 151 { 152 if (debugEnabled()) 153 { 154 TRACER.debugCaught(DebugLogLevel.ERROR, de); 155 } 156 157 Message message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY. 158 get(String.valueOf(memberDN), String.valueOf(groupDN), 159 String.valueOf(de.getMessageObject())); 160 throw new MembershipException(message, true, de); 161 } 162 } 163 164 return null; 165 } 166 167 168 169 /** 170 * {@inheritDoc} 171 */ 172 @Override() 173 public void close() 174 { 175 // No implementation is required. 176 } 177 } 178