}
}
}
private EventBundle[] poll(String uri, String subscriptionId, long timeout, SessionInfoImpl sessionInfo) throws RepositoryException {
PollMethod method = null;
try {
method = new PollMethod(uri, subscriptionId, timeout);
getClient(sessionInfo).executeMethod(method);
method.checkSuccess();
EventDiscovery disc = method.getResponseAsEventDiscovery();
EventBundle[] events;
if (disc.isEmpty()) {
events = new EventBundle[0];
} else {
Element discEl = disc.toXml(DomUtil.createDocument());
ElementIterator it = DomUtil.getChildren(discEl,
ObservationConstants.XML_EVENTBUNDLE,
ObservationConstants.NAMESPACE);
List<EventBundle> bundles = new ArrayList<EventBundle>();
while (it.hasNext()) {
Element bundleElement = it.nextElement();
String value = DomUtil.getAttribute(bundleElement,
ObservationConstants.XML_EVENT_TRANSACTION_ID,
ObservationConstants.NAMESPACE);
// check if it matches a batch id recently submitted
boolean isLocal = false;
if (value != null) {
isLocal = value.equals(sessionInfo.getLastBatchId());
}
bundles.add(new EventBundleImpl(
buildEventList(bundleElement, sessionInfo),
isLocal));
}
events = bundles.toArray(new EventBundle[bundles.size()]);
}
return events;
} catch (IOException e) {
throw new RepositoryException(e);
} catch (ParserConfigurationException e) {
throw new RepositoryException(e);
} catch (DavException e) {
throw ExceptionConverter.generate(e);
} finally {
if (method != null) {
method.releaseConnection();
}
}
}