Worker.java revision d81978a0815d5b8a75633c35e3e1f8708d36f017
// 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
// trunk/opends/resource/legal-notices/OpenDS.LICENSE
// or https://OpenDS.dev.java.net/OpenDS.LICENSE.
// 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
// trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
// add the following below this CDDL HEADER, with the fields enclosed
// information:
// Portions Copyright [yyyy] [name of copyright owner]
//
// CDDL HEADER END
//
//
// Copyright 2008 Sun Microsystems, Inc.
import netscape.ldap.*;
import netscape.ldap.util.*;
import java.util.*;
import java.io.*;
import java.lang.Thread;
public class Worker extends Thread {
Server server;
Client client;
/*****************************************************************/
public Worker(Client client, Server server) {
super();
try {
this.server = server;
this.client = client;
this.start();
} catch (Exception e) {
e.printStackTrace();
}
}
/*****************************************************************/
public void run() {
while (true) {
client.inc_ops_started();
LDAPEntry entry = generateAnEntry();
this.addAnEntry(entry);
this.deleteAnEntry(entry);
client.inc_ops_done();
}
}
/*****************************************************************/
public LDAPEntry generateAnEntry() {
try {
// Build random strings
Random rand = new Random();
int n = 1000000;
int i = rand.nextInt( n + 1 );
ExtendedRandom extendedRandom = new ExtendedRandom();
String sn = extendedRandom.nextLastName();
String cn = extendedRandom.nextFirstName();
String uid = sn.substring(0,1) + cn.substring(0,1) + "_" + i;
// Create entry attributes set
LDAPAttributeSet attrSet = new LDAPAttributeSet();
attrSet.add(new LDAPAttribute("objectClass", "top"));
attrSet.add(new LDAPAttribute("objectClass", "person"));
attrSet.add(new LDAPAttribute("objectClass", "organizationalperson"));
attrSet.add(new LDAPAttribute("objectClass", "inetorgperson"));
attrSet.add(new LDAPAttribute("uid", uid));
attrSet.add(new LDAPAttribute("sn", sn));
attrSet.add(new LDAPAttribute("cn", cn));
attrSet.add(new LDAPAttribute("givenName", sn + " " + cn));
attrSet.add(new LDAPAttribute("mail", uid + "@sun.com"));
// Create the entry
LDAPEntry entry = new LDAPEntry( "uid=" + uid + "," + client.suffix,
attrSet);
// TBD a fixer return pas global a la function
return entry;
}
catch( Exception e ) {
println( "ERROR" , e.toString() );
}
return null;
}
/*****************************************************************/
public void addAnEntry(LDAPEntry entry) {
try {
//************************************
// LDAP CONNECTION
LDAPConnection connection = new LDAPConnection();
connection.connect( server.host, server.port);
// bind if needed
if ( client.bindDN == null ) {
println ("INFO", "Binding as anonymous");
}
else {
connection.bind(client.bindDN, client.bindPW);
}
//************************************
// ADD LDAP ENTRY
try {
connection.add(entry);
// println("INFO","Add entry " + entry.getDN());
} catch (LDAPException e) {
int errorCode = e.getLDAPResultCode();
if ( errorCode == 50 ) {
println ("ERROR", "Insufficent access, errcode : "+ errorCode + ")");
}
else if ( errorCode == 68 ) {
println ("ERROR", "Entry already exists, errcode "+ errorCode + ")");
}
else {
println ("ERROR", "LDAP Returns error code " + errorCode);
}
}
//************************************
// CLOSE LDAP CONNECTION
connection.disconnect();
}
catch( LDAPException e ) {
println( "ERROR" , e.toString() );
}
}
/*****************************************************************/
public void deleteAnEntry(LDAPEntry entry) {
try {
//************************************
// LDAP CONNECTION
LDAPConnection connection = new LDAPConnection();
connection.connect(server.host, server.port);
// bind if needed
if ( client.bindDN == null ) {
println ("INFO", "Binding as anonymous");
}
else {
connection.bind(client.bindDN, client.bindPW);
}
//************************************
// LDAP CONNECTION
try {
connection.delete(entry.getDN());
// println("INFO","Delete entry " + entry.getDN());
} catch (LDAPException e) {
int errorCode = e.getLDAPResultCode();
if ( errorCode == 50 ) {
println ("ERROR", "Insufficent access, errcode : "+ errorCode + ")");
}
else if ( errorCode == 68 ) {
println ("ERROR", "Entry already exists, errcode "+ errorCode + ")");
}
else {
println ("ERROR", "LDAP Returns error code " + errorCode);
}
}
//************************************
// CLOSE LDAP CONNECTION
connection.disconnect();
}
catch( LDAPException e ) {
println( "ERROR" , e.toString() );
}
}
/*****************************************************************/
private String getDate() {
// Initialize the today's date string
String DATE_FORMAT = "yyyy/MM/dd:HH:mm:ss";
java.text.SimpleDateFormat sdf =
new java.text.SimpleDateFormat(DATE_FORMAT);
Calendar c1 = Calendar.getInstance(); // today
return("[" + sdf.format(c1.getTime()) + "]");
}
/*****************************************************************/
private void println(String level, String msg) {
System.out.println (getDate() + " - " + level + ": (" + server + ") "
+ msg );
}
}