// 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 java.util.*; import java.io.*; import java.lang.Thread; import javax.naming.*; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.directory.Attributes; import javax.naming.directory.Attribute; import javax.naming.directory.DirContext; import javax.naming.Context; import javax.naming.directory.InitialDirContext; import javax.naming.directory.BasicAttributes; public class Worker extends Thread { Server server; Client client; long myId = this.getId(); /** ** Constructor for Worker thread **/ public Worker(Client client2, Server server2) { super(); try { server = server2; client = client2; start(); } catch (Exception e) { e.printStackTrace(); } } /** * Connect to the server * wait a notify from the main thread to startthe modify operations **/ public void run() { String value=""; String DNtoModify; String attrVal1; ArrayList mailEXT_values= new ArrayList(); Random random_cpt= new Random(); try { /* Define the list of values for mailEXT attribute */ mailEXT_values.add("group1"); mailEXT_values.add("group2"); mailEXT_values.add("group3"); DirContext ctx = null; // Set the properties Hashtable envLdap = client.set_properties_LDAP(); println("INFO","THREAD " + myId + " is waiting "); // Waiting a notify from the main thread client.inc_thread_ready(); /* * Start modify operations */ String[] attrIds = { (String)client.attributeName }; while (true) { // no sasl authentication // use a random DN to bind if ( client.authentication.equals("simple")) { String bindDN=(String) client.DNList.get(client.random.nextInt(client.DNList.size())); String bindPW="userpassword"; envLdap.put(Context.SECURITY_PRINCIPAL, bindDN); envLdap.put(Context.SECURITY_CREDENTIALS, bindPW); //println("INFO","THREAD " + myId + "BIND as " + bindDN); } // bind ctx = new InitialDirContext(envLdap); while (true) { try { //String value=String.valueOf(client.random.nextInt(10000)); DNtoModify=(String) client.DNList.get(client.random.nextInt(client.DNList.size())); // If attributeName to modify is mailEXT, we get the new value from the list // group1, group2, group2 // this list is the list used to define the dynamic groups if (client.attributeName.equals("mailEXT")) { attrVal1 = (String) mailEXT_values.get(random_cpt.nextInt(3)); } else { String value_cpt=String.valueOf(random_cpt.nextInt(10000)); long cur_date=System.currentTimeMillis(); String scur_date = String.valueOf(cur_date); attrVal1 = "new description"+scur_date+"-"+value_cpt; } Attributes attrs = new BasicAttributes(attrIds[0], attrVal1, true); // if the Max_nb_mod is reached, counters are initialized // disconnect cnx // Wait the main to wake up if ( client.nb_mod_started_reached() == false) { if (client.operation.equals("modify")) { ctx.modifyAttributes(DNtoModify, DirContext.REPLACE_ATTRIBUTE, attrs); } else { ctx.modifyAttributes(DNtoModify, DirContext.ADD_ATTRIBUTE, attrs); } client.inc_mod_done(); } else { ctx.close(); client.thread_go_to_sleep(); break; } } catch (Exception ex) { println("INFO","THREAD " + myId + " ERROR " + ex); } // update the total number of searchs client.inc_mod_done(); } } } catch (Exception e) { println("INFO","THREAD " + myId + " ERROR " + e); e.printStackTrace(); System.exit(1); } } 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 ); } }