/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2015 ForgeRock AS. */ package org.forgerock.opendj.examples; import static org.forgerock.util.Utils.closeSilently; import org.forgerock.opendj.ldap.Connection; import org.forgerock.opendj.ldap.LDAPConnectionFactory; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.ldap.ResultCode; import org.forgerock.opendj.ldap.requests.Requests; import org.forgerock.opendj.ldap.responses.BindResult; import org.forgerock.opendj.ldap.responses.Result; import org.forgerock.util.AsyncFunction; import org.forgerock.util.promise.ExceptionHandler; import org.forgerock.util.promise.Promise; import org.forgerock.util.promise.ResultHandler; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; /** * An example client application which applies update operations to a directory server * using the asynchronous APIs. * The update operations are read from an LDIF file, or stdin if no filename is provided. * This example takes the following command line parameters, * reading from stdin if no LDIF file is provided: * *
* {@code []}
*
*/
public final class ModifyAsync {
/** Connection to the LDAP server. */
private static Connection connection;
/** Result for the modify operation. */
private static int resultCode;
/** Count down latch to wait for modify operation to complete. */
private static final CountDownLatch COMPLETION_LATCH = new CountDownLatch(1);
/**
* Main method.
*
* @param args
* The command line arguments: host, port, username, password,
* LDIF file name containing the update operations.
* Stdin is used if no LDIF file name is provided.
*/
public static void main(final String[] args) {
if (args.length < 4 || args.length > 5) {
System.err.println("Usage: host port username password [ldifFileName]");
System.exit(1);
}
// Parse command line arguments.
final String hostName = args[0];
final int port = Integer.parseInt(args[1]);
final String userName = args[2];
final char[] password = args[3].toCharArray();
// Create the LDIF reader using either the named file, if provided, or stdin.
InputStream ldif;
if (args.length > 4) {
try {
ldif = new FileInputStream(args[4]);
} catch (final FileNotFoundException e) {
System.err.println(e.getMessage());
System.exit(ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue());
return;
}
} else {
ldif = System.in;
}
final String[] ldifLines = getInputLines(ldif);
// Connect to the server, bind, and request the modifications.
new LDAPConnectionFactory(hostName, port)
.getConnectionAsync()
.thenAsync(new AsyncFunction