import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPExtendedRequest;
import com.novell.ldap.LDAPMessage;
import com.novell.ldap.LDAPResponseQueue;
import com.novell.ldap.events.edir.EdirEventConstant;
import com.novell.ldap.events.edir.EdirEventIntermediateResponse;
import com.novell.ldap.events.edir.EdirEventSpecifier;
import com.novell.ldap.events.edir.EventResponseData;
import com.novell.ldap.events.edir.MonitorEventRequest;
import com.novell.ldap.events.edir.MonitorEventResponse;
import com.novell.ldap.events.edir.eventdata.ValueEventData;
public class EdirEventSample {
static final String QUIT_PROMPT =
"\nMonitoring changes. Enter a 'q' to quit: ";
static private boolean checkForAChange(LDAPResponseQueue queue) {
LDAPMessage message;
boolean result = true;
try {
if (queue.isResponseReceived()) {
message = queue.getResponse();
if (message != null) {
if (message instanceof MonitorEventResponse) {
MonitorEventResponse eventerrorresponse =
(MonitorEventResponse) message;
System.out.println(
"\nError in Registration ResultCode="
+ eventerrorresponse.getResultCode());
EdirEventSpecifier specifiers[] =
eventerrorresponse.getSpecifierList();
for (int i = 0; i < specifiers.length; i++) {
System.out.println(
"Specifier: EventClassification="
+ specifiers[i].getEventclassification()
+ "EventType="
+ specifiers[i].getEventtype());
}
System.exit(-1);
}
else if (
message
instanceof EdirEventIntermediateResponse) {
System.out.println("Edir Event Occured");
EdirEventIntermediateResponse eventresponse =
(EdirEventIntermediateResponse) message;
System.out.println(
"Event Type=" + eventresponse.getEventtype());
System.out.println(
"Event Result="
+ eventresponse.getEventResult());
processEventData(
eventresponse.getResponsedata(),
eventresponse.getEventtype());
System.out.print(QUIT_PROMPT);
}
else {
System.out.println("UnKnown Message =" + message);
}
}
}
} catch (LDAPException e) {
System.out.println("Error: " + e.toString());
result = false;
}
return result;
}
public static void main(String[] args) {
if (args.length != 3) {
System.err.println(
"Usage: java EdirEventSample <host name> <login dn>"
+ " <password> ");
System.err.println(
"Example: java EdirEventSample Acme.com \"cn=admin,o=Acme\""
+ " secret ");
System.exit(0);
}
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
String ldapHost = args[0];
String loginDN = args[1];
String password = args[2];
LDAPResponseQueue queue = null;
LDAPConnection lc = new LDAPConnection();
try {
lc.connect(ldapHost, ldapPort);
lc.bind(ldapVersion, loginDN, password.getBytes("UTF8"));
EdirEventSpecifier specifier[] = new EdirEventSpecifier[1];
specifier[0] =
new EdirEventSpecifier(EdirEventConstant.EVT_ADD_VALUE,
EdirEventConstant.EVT_STATUS_ALL
);
MonitorEventRequest requestoperation =
new MonitorEventRequest(specifier);
LDAPExtendedRequest request =
new LDAPExtendedRequest(requestoperation, null);
queue = lc.extendedOperation(requestoperation, null, null);
} catch (LDAPException e) {
System.out.println("Error: " + e.toString());
try {
lc.disconnect();
} catch (LDAPException e2) {
}
System.exit(1);
} catch (UnsupportedEncodingException e) {
System.out.println("Error: " + e.toString());
}
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print(QUIT_PROMPT);
String input;
while (true) {
if (in.ready()) {
input = in.readLine();
if (input.startsWith("q") || input.startsWith("Q"))
break;
else
System.out.print(QUIT_PROMPT);
}
if (!checkForAChange(queue))
break;
Thread.sleep(10);
}
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (InterruptedException e) {
}
try {
lc.abandon(queue);
lc.disconnect();
} catch (LDAPException e) {
System.out.println();
System.out.println("Error: " + e.toString());
}
System.exit(0);
}
static private void processEventData(
EventResponseData data,
int type) {
switch (type) {
case EdirEventConstant.EVT_ADD_VALUE :
ValueEventData valueevent = (ValueEventData) data;
System.out.println("Entry =" + valueevent.getEntry());
System.out.println(
"attribute =" + valueevent.getAttribute());
System.out.println("Class id =" + valueevent.getClassid());
System.out.println("Data=" + valueevent.getData());
System.out.println(
"prepetratorDN=" + valueevent.getPrepetratorDN());
System.out.println("Syntax=" + valueevent.getSyntax());
System.out.println(
"timeStamp=" + valueevent.getTimeStamp());
break;
default :
break;
}
}
}