76ad422356a176a459b251dab22660cdc0bb5195csovant/*
76ad422356a176a459b251dab22660cdc0bb5195csovant * CDDL HEADER START
76ad422356a176a459b251dab22660cdc0bb5195csovant *
76ad422356a176a459b251dab22660cdc0bb5195csovant * The contents of this file are subject to the terms of the
76ad422356a176a459b251dab22660cdc0bb5195csovant * Common Development and Distribution License, Version 1.0 only
76ad422356a176a459b251dab22660cdc0bb5195csovant * (the "License"). You may not use this file except in compliance
76ad422356a176a459b251dab22660cdc0bb5195csovant * with the License.
76ad422356a176a459b251dab22660cdc0bb5195csovant *
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * or http://forgerock.org/license/CDDLv1.0.html.
76ad422356a176a459b251dab22660cdc0bb5195csovant * See the License for the specific language governing permissions
76ad422356a176a459b251dab22660cdc0bb5195csovant * and limitations under the License.
76ad422356a176a459b251dab22660cdc0bb5195csovant *
76ad422356a176a459b251dab22660cdc0bb5195csovant * When distributing Covered Code, include this CDDL HEADER in each
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * file and include the License file at legal-notices/CDDLv1_0.txt.
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * If applicable, add the following below this CDDL HEADER, with the
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * fields enclosed by brackets "[]" replaced with your own identifying
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * information:
76ad422356a176a459b251dab22660cdc0bb5195csovant * Portions Copyright [yyyy] [name of copyright owner]
76ad422356a176a459b251dab22660cdc0bb5195csovant *
76ad422356a176a459b251dab22660cdc0bb5195csovant * CDDL HEADER END
76ad422356a176a459b251dab22660cdc0bb5195csovant *
76ad422356a176a459b251dab22660cdc0bb5195csovant *
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp * Copyright 2009-2010 Sun Microsystems, Inc.
76ad422356a176a459b251dab22660cdc0bb5195csovant */
76ad422356a176a459b251dab22660cdc0bb5195csovant
76ad422356a176a459b251dab22660cdc0bb5195csovantimport netscape.ldap.util.GetOpt;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicpimport com.ibm.staf.STAFHandle;
76ad422356a176a459b251dab22660cdc0bb5195csovant
76ad422356a176a459b251dab22660cdc0bb5195csovantpublic class PSearch {
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp public static void main(String[] args) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String usage = "Usage: psearch -h <hostname> -p <port> -b <suffix>" + "[-D bindDN] [-w bindPW]" + "-f <fileURL+file name>" + "-s" + "-n <number of thread>" + " -o <add,modify,delete,moddn>"+ " -l";
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String hostname = "localhost";
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp int portnumber = 1389; //LDAPv3.DEFAULT_PORT;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp int nbThreads = 1;//number of thread by default
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // Check for these options. -H means to print out a usage message.
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp GetOpt options = new GetOpt("h:p:b:D:w:H:f:n:o:s:l", args);
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // Get the arguments specified for each option.
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String host = options.getOptionParam('h');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // host
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (options.hasOption('h')) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (host == null) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // usage
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println(usage);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.exit(1);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp hostname = host;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String port = options.getOptionParam('p');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // If a port number was specified, convert the port value
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // to an integer.
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (port != null) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp try {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp portnumber = java.lang.Integer.parseInt(port);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } catch (java.lang.Exception e) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println("Invalid port number: " + port);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println(usage);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.exit(1);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp //number of thread
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String nbT = options.getOptionParam('n');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (nbT != null) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp try {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp nbThreads = java.lang.Integer.parseInt(nbT);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } catch (java.lang.Exception e) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println("Invalid Thread number: " + nbT);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println(usage);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.exit(1);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // PSearch suffix
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String suffix = options.getOptionParam('b');
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String bindDN = options.getOptionParam('D');
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String bindPW = options.getOptionParam('w');
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp //operations all by default
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String operation = PSearchOperations.ALL;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (options.hasOption('o')) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String opParam = options.getOptionParam('o');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (opParam.equals("add")) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp operation = PSearchOperations.ADD;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else if (opParam.equals("modify")) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp operation = PSearchOperations.MODIFY;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else if (opParam.equals("delete")) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp operation = PSearchOperations.DELETE;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else if (opParam.equals("moddn")) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp operation = PSearchOperations.MODDN;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else if (opParam.equals("all")) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp operation = PSearchOperations.ALL;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } else {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println("Invalid operation type: " + opParam);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println(usage);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.exit(1);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // to disable the log files
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp boolean useFile = false;
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp String fileName = "logLile";
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (options.hasOption('f')) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp useFile = options.hasOption('f');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp fileName = options.getOptionParam('f');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // to enable diff format
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp boolean ldifFormat = options.hasOption('l');
76ad422356a176a459b251dab22660cdc0bb5195csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp // to enable system out logs
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp boolean output = options.hasOption('s');
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println("Connecting to " + hostname + ":" + portnumber +
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp " as \"" + bindDN + "\"" +
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp " on suffix \"" + suffix + "\"" +
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp " on operation \"" + operation + "\"" +
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp " use file: \"" + useFile + "\" output: \"" + output + "\"");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp //start all thread
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp for (int i = 0; i < nbThreads; i++) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp PSearchOperations ps = new PSearchOperations(i, hostname, portnumber, bindDN, bindPW, suffix);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp if (useFile) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.useLogFile(useFile);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.setLogFile(fileName);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.setOutput(output);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.setLdifFormat(ldifFormat);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.setOperation(operation);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp ps.start();
76ad422356a176a459b251dab22660cdc0bb5195csovant }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
248ed6026dad06a3596549af7f5177c7fb25f26eludovicp try {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp STAFHandle handle = new STAFHandle("PSearch listener");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp handle.submit2(hostname, "SEM", "PULSE EVENT PSearch/Ready");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp handle.submit2(hostname, "SEM", "WAIT EVENT PSearch tests/Completed");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp handle.submit2(hostname, "SEM", "DELETE EVENT PSearch tests/Completed");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.exit(0);
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp } catch (Exception e) {
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp System.out.println("STAF Handle fail");
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp }
76ad422356a176a459b251dab22660cdc0bb5195csovant}