001 /* 002 * Copyright 2012-2015 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005 /* 006 * Copyright (C) 2015 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021 package com.unboundid.ldap.sdk.unboundidds.extensions; 022 023 024 025 import java.io.Serializable; 026 import java.util.Date; 027 028 import com.unboundid.util.NotMutable; 029 import com.unboundid.util.StaticUtils; 030 import com.unboundid.util.ThreadSafety; 031 import com.unboundid.util.ThreadSafetyLevel; 032 033 034 035 /** 036 * <BLOCKQUOTE> 037 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 038 * LDAP SDK for Java. It is not available for use in applications that 039 * include only the Standard Edition of the LDAP SDK, and is not supported for 040 * use in conjunction with non-UnboundID products. 041 * </BLOCKQUOTE> 042 * This class defines a data structure with information about a subtree with 043 * restricted access, as may be included in a 044 * {@link GetSubtreeAccessibilityExtendedResult}. 045 */ 046 @NotMutable() 047 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 048 public final class SubtreeAccessibilityRestriction 049 implements Serializable 050 { 051 /** 052 * The serial version UID for this serializable class. 053 */ 054 private static final long serialVersionUID = -1893365464740536092L; 055 056 057 058 // The time the subtree accessibility restriction was created. 059 private final Date effectiveTime; 060 061 // The DN of a user allowed to bypass any associated restrictions. 062 private final String bypassUserDN; 063 064 // The base DN of the affected subtree. 065 private final String subtreeBaseDN; 066 067 // The accessibility state of the affected subtree. 068 private final SubtreeAccessibilityState accessibilityState; 069 070 071 072 /** 073 * Creates a new subtree accessibility restriction object with the provided 074 * information. 075 * 076 * @param subtreeBaseDN The base DN of the affected subtree. 077 * @param accessibilityState The accessibility state of the affected 078 * subtree. 079 * @param bypassUserDN The DN of a user allowed to bypass any 080 * associated restrictions, if defined. 081 * @param effectiveTime The time this restriction was put into place. 082 */ 083 public SubtreeAccessibilityRestriction(final String subtreeBaseDN, 084 final SubtreeAccessibilityState accessibilityState, 085 final String bypassUserDN, final Date effectiveTime) 086 { 087 this.subtreeBaseDN = subtreeBaseDN; 088 this.accessibilityState = accessibilityState; 089 this.bypassUserDN = bypassUserDN; 090 this.effectiveTime = effectiveTime; 091 } 092 093 094 095 /** 096 * Retrieves the base DN for the affected subtree. 097 * 098 * @return The base DN for the affected subtree. 099 */ 100 public String getSubtreeBaseDN() 101 { 102 return subtreeBaseDN; 103 } 104 105 106 107 /** 108 * Retrieves the accessibility state for the affected subtree. 109 * 110 * @return The accessibility state for the affected subtree. 111 */ 112 public SubtreeAccessibilityState getAccessibilityState() 113 { 114 return accessibilityState; 115 } 116 117 118 119 /** 120 * Retrieves the DN of a user that will be allowed to bypass any restrictions 121 * on the affected subtree. 122 * 123 * @return The DN of a user that will be allowed to bypass any restrictions 124 * on the affected subtree, or {@code null} if no bypass user is 125 * defined. 126 */ 127 public String getBypassUserDN() 128 { 129 return bypassUserDN; 130 } 131 132 133 134 /** 135 * Retrieves the time the accessibility restriction was put into place. 136 * 137 * @return The time the accessibility restriction was put into place. 138 */ 139 public Date getEffectiveTime() 140 { 141 return effectiveTime; 142 } 143 144 145 146 /** 147 * Retrieves a string representation of this accessibility restriction. 148 * 149 * @return A string representation of this accessibility restriction. 150 */ 151 @Override() 152 public String toString() 153 { 154 final StringBuilder buffer = new StringBuilder(); 155 toString(buffer); 156 return buffer.toString(); 157 } 158 159 160 161 /** 162 * Appends a string representation of this accessibility restriction to the 163 * provided buffer. 164 * 165 * @param buffer The buffer to which the information should be appended. 166 */ 167 public void toString(final StringBuilder buffer) 168 { 169 buffer.append("SubtreeAccessibilityRestriction(base='"); 170 buffer.append(subtreeBaseDN.replace("\\\"", "\\22")); 171 buffer.append("', state='"); 172 buffer.append(accessibilityState.getStateName()); 173 buffer.append('\''); 174 175 if (bypassUserDN != null) 176 { 177 buffer.append(", bypassUser='"); 178 buffer.append(bypassUserDN.replace("\\\"", "\\22")); 179 buffer.append('\''); 180 } 181 182 buffer.append(", effectiveTime='"); 183 buffer.append(StaticUtils.encodeGeneralizedTime(effectiveTime)); 184 buffer.append("')"); 185 } 186 }