001 /* 002 * Copyright 2013-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 com.unboundid.ldap.sdk.Control; 026 import com.unboundid.ldap.sdk.ExtendedRequest; 027 import com.unboundid.ldap.sdk.ExtendedResult; 028 import com.unboundid.ldap.sdk.LDAPConnection; 029 import com.unboundid.ldap.sdk.LDAPException; 030 import com.unboundid.ldap.sdk.ResultCode; 031 import com.unboundid.util.ThreadSafety; 032 import com.unboundid.util.ThreadSafetyLevel; 033 034 import static com.unboundid.ldap.sdk.unboundidds.extensions.ExtOpMessages.*; 035 036 037 038 /** 039 * <BLOCKQUOTE> 040 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 041 * LDAP SDK for Java. It is not available for use in applications that 042 * include only the Standard Edition of the LDAP SDK, and is not supported for 043 * use in conjunction with non-UnboundID products. 044 * </BLOCKQUOTE> 045 * This class provides an implementation of an extended request that can be used 046 * to retrieve a list of all available versions of the configuration within a 047 * server. This may include not only the currently-active configuration, but 048 * also former configurations that have been archived, and the baseline 049 * configuration for the current server version. 050 * <BR><BR> 051 * The OID for this extended request is 1.3.6.1.4.1.30221.2.6.26. It does not 052 * have a value. 053 * <BR><BR> 054 * <H2>Example</H2> 055 * The following example demonstrates the process for using the list 056 * configurations and get configuration extended requests to obtain the oldest 057 * archived configuration from the server: 058 * <PRE> 059 * // Get a list of the available configurations from the server. 060 * ListConfigurationsExtendedResult listConfigsResult = 061 * (ListConfigurationsExtendedResult) 062 * connection.processExtendedOperation( 063 * new ListConfigurationsExtendedRequest()); 064 * String archivedConfigFileName = 065 * listConfigsResult.getArchivedFileNames().get(0); 066 * 067 * // Retrieve the first archived configuration from the list configurations 068 * // result. 069 * GetConfigurationExtendedResult getConfigResult = 070 * (GetConfigurationExtendedResult) 071 * connection.processExtendedOperation(GetConfigurationExtendedRequest. 072 * createGetArchivedConfigurationRequest(archivedConfigFileName)); 073 * 074 * InputStream fileDataStream = getConfigResult.getFileDataInputStream(); 075 * // Read data from the file. 076 * fileDataStream.close(); 077 * </PRE> 078 * 079 * @see GetConfigurationExtendedRequest 080 */ 081 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 082 public final class ListConfigurationsExtendedRequest 083 extends ExtendedRequest 084 { 085 /** 086 * The OID (1.3.6.1.4.1.30221.2.6.26) for the list configurations extended 087 * request. 088 */ 089 public static final String LIST_CONFIGS_REQUEST_OID = 090 "1.3.6.1.4.1.30221.2.6.26"; 091 092 093 094 /** 095 * The serial version UID for this serializable class. 096 */ 097 private static final long serialVersionUID = -5511054471842622735L; 098 099 100 101 /** 102 * Creates a new list configurations extended request with the provided 103 * information. 104 * 105 * @param controls An optional set of controls to include in the request. 106 * This may be {@code null} or empty if no controls should 107 * be included in the request. 108 */ 109 public ListConfigurationsExtendedRequest(final Control... controls) 110 { 111 super(LIST_CONFIGS_REQUEST_OID, controls); 112 } 113 114 115 116 /** 117 * Creates a new list configurations extended request that has been decoded 118 * from the provided generic extended request. 119 * 120 * @param r The generic extended request to decode as a list configurations 121 * extended request. 122 * 123 * @throws LDAPException If the provided request cannot be decoded as a 124 * valid list configurations extended request. 125 */ 126 public ListConfigurationsExtendedRequest(final ExtendedRequest r) 127 throws LDAPException 128 { 129 super(r); 130 131 if (r.hasValue()) 132 { 133 throw new LDAPException(ResultCode.DECODING_ERROR, 134 ERR_LIST_CONFIGS_REQUEST_HAS_VALUE.get()); 135 } 136 } 137 138 139 140 /** 141 * {@inheritDoc} 142 */ 143 @Override() 144 public ListConfigurationsExtendedResult process( 145 final LDAPConnection connection, final int depth) 146 throws LDAPException 147 { 148 final ExtendedResult extendedResponse = super.process(connection, depth); 149 return new ListConfigurationsExtendedResult(extendedResponse); 150 } 151 152 153 154 /** 155 * {@inheritDoc} 156 */ 157 @Override() 158 public ListConfigurationsExtendedRequest duplicate() 159 { 160 return duplicate(getControls()); 161 } 162 163 164 165 /** 166 * {@inheritDoc} 167 */ 168 @Override() 169 public ListConfigurationsExtendedRequest duplicate( 170 final Control[] controls) 171 { 172 final ListConfigurationsExtendedRequest r = 173 new ListConfigurationsExtendedRequest(controls); 174 r.setResponseTimeoutMillis(getResponseTimeoutMillis(null)); 175 return r; 176 } 177 178 179 180 /** 181 * {@inheritDoc} 182 */ 183 @Override() 184 public String getExtendedRequestName() 185 { 186 return INFO_EXTENDED_REQUEST_NAME_LIST_CONFIGS.get(); 187 } 188 189 190 191 /** 192 * {@inheritDoc} 193 */ 194 @Override() 195 public void toString(final StringBuilder buffer) 196 { 197 buffer.append("ListConfigurationsExtendedRequest("); 198 199 final Control[] controls = getControls(); 200 if (controls.length > 0) 201 { 202 buffer.append("controls={"); 203 for (int i=0; i < controls.length; i++) 204 { 205 if (i > 0) 206 { 207 buffer.append(", "); 208 } 209 210 buffer.append(controls[i]); 211 } 212 buffer.append('}'); 213 } 214 215 buffer.append(')'); 216 } 217 }