package org.safehaus.penrose.partition;
import org.ietf.ldap.LDAPException;
import org.safehaus.penrose.ldap.*;
import org.safehaus.penrose.pipeline.Pipeline;
import org.safehaus.penrose.Penrose;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* @author Endi S. Dewata
*/
public class ParallelSearchResponse extends Pipeline {
public Logger log = LoggerFactory.getLogger(getClass());
int counter;
Set<DN> dns = new HashSet<DN>();
public ParallelSearchResponse(SearchResponse response, int counter) {
super(response);
//log.debug("Counter = "+counter);
this.counter = counter;
}
public void add(SearchResult result) throws Exception {
DN dn = result.getDn();
if (dns.contains(dn)) return;
dns.add(dn);
super.add(result);
}
public void setException(LDAPException exception) {
if (getReturnCode() == LDAP.SUCCESS) super.setException(exception);
}
public synchronized void close() throws Exception {
if (counter > 0) counter--;
//log.debug("Counter = "+counter);
if (counter > 0) return;
super.close();
notifyAll();
}
public synchronized int waitFor() {
while (counter > 0) {
try {
wait();
} catch (Exception e) {
Penrose.errorLog.error(e.getMessage(), e);
}
}
return getReturnCode();
}
}