001 /* 002 * Copyright 2014-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.ArrayList; 027 import java.util.Collection; 028 import java.util.Collections; 029 import java.util.Iterator; 030 import java.util.List; 031 032 import com.unboundid.asn1.ASN1OctetString; 033 import com.unboundid.util.NotMutable; 034 import com.unboundid.util.ThreadSafety; 035 import com.unboundid.util.ThreadSafetyLevel; 036 import com.unboundid.util.Validator; 037 038 039 040 /** 041 * <BLOCKQUOTE> 042 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 043 * LDAP SDK for Java. It is not available for use in applications that 044 * include only the Standard Edition of the LDAP SDK, and is not supported for 045 * use in conjunction with non-UnboundID products. 046 * </BLOCKQUOTE> 047 * This class represents a data structure with information about a notification 048 * destination defined in an UnboundID server instance. 049 */ 050 @NotMutable() 051 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 052 public final class NotificationDestinationDetails 053 implements Serializable 054 { 055 /** 056 * The serial version UID for this serializable class. 057 */ 058 private static final long serialVersionUID = -6596207374277234834L; 059 060 061 062 // The encoded details for this notification destination. 063 private final List<ASN1OctetString> details; 064 065 // The subscriptions defined for this notification destination. 066 private final List<NotificationSubscriptionDetails> subscriptions; 067 068 // The unique ID for this notification destination. 069 private final String id; 070 071 072 073 /** 074 * Creates a new notification destination details object with the provided 075 * information. 076 * 077 * @param id The unique ID for this notification destination. It 078 * must not be {@code null}. 079 * @param details The encoded details for this notification 080 * destination. It must not be {@code null} or empty. 081 * @param subscriptions The subscriptions defined for this notification 082 * destination. It may be {@code null} or empty if 083 * there are no subscriptions for this destination. 084 */ 085 public NotificationDestinationDetails(final String id, 086 final Collection<ASN1OctetString> details, 087 final Collection<NotificationSubscriptionDetails> subscriptions) 088 { 089 Validator.ensureNotNull(id); 090 Validator.ensureNotNull(details); 091 Validator.ensureFalse(details.isEmpty()); 092 093 this.id = id; 094 this.details = 095 Collections.unmodifiableList(new ArrayList<ASN1OctetString>(details)); 096 097 if (subscriptions == null) 098 { 099 this.subscriptions = Collections.emptyList(); 100 } 101 else 102 { 103 this.subscriptions = Collections.unmodifiableList( 104 new ArrayList<NotificationSubscriptionDetails>(subscriptions)); 105 } 106 } 107 108 109 110 /** 111 * Retrieves the unique ID for this destination details object. 112 * 113 * @return The unique ID for this destination details object. 114 */ 115 public String getID() 116 { 117 return id; 118 } 119 120 121 122 /** 123 * Retrieves the encoded details for this destination details object. 124 * 125 * @return The encoded details for this destination details object. 126 */ 127 public List<ASN1OctetString> getDetails() 128 { 129 return details; 130 } 131 132 133 134 /** 135 * Retrieves the subscriptions defined for this notification destination, if 136 * any. 137 * 138 * @return The subscriptions defined for this notification destination, or 139 * an empty list if there are no subscriptions for this destination. 140 */ 141 public List<NotificationSubscriptionDetails> getSubscriptions() 142 { 143 return subscriptions; 144 } 145 146 147 148 /** 149 * Retrieves a string representation of this notification subscription details 150 * object. 151 * 152 * @return A string representation of this notification subscription details 153 * object. 154 */ 155 @Override() 156 public String toString() 157 { 158 final StringBuilder buffer = new StringBuilder(); 159 toString(buffer); 160 return buffer.toString(); 161 } 162 163 164 165 /** 166 * Appends a string representation of this notification subscription details 167 * object to the provided buffer. 168 * 169 * @param buffer The buffer to which the information should be appended. 170 */ 171 public void toString(final StringBuilder buffer) 172 { 173 buffer.append("NotificationDestination(id='"); 174 buffer.append(id); 175 buffer.append("', subscriptionIDs={"); 176 177 final Iterator<NotificationSubscriptionDetails> subscriptionIterator = 178 subscriptions.iterator(); 179 while (subscriptionIterator.hasNext()) 180 { 181 buffer.append('\''); 182 buffer.append(subscriptionIterator.next().getID()); 183 buffer.append('\''); 184 185 if (subscriptionIterator.hasNext()) 186 { 187 buffer.append(", "); 188 } 189 } 190 191 buffer.append("})"); 192 } 193 }