event-publisher-library/src/main/java/org/gcube/event/publisher/AbstractEventPublisher.java

117 lines
3.1 KiB
Java

package org.gcube.event.publisher;
import java.net.HttpURLConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractEventPublisher implements EventPublisher {
protected static final Logger logger = LoggerFactory.getLogger(AbstractEventPublisher.class);
private EventSender eventSender;
private ResultsParser resultsParser;
public AbstractEventPublisher() {
this.eventSender = createEventSender();
this.resultsParser = createResultsParser();
}
@Override
public void publish(Event event) {
publish(event, false);
}
@Override
public String publish(Event event, boolean waitForResult) {
if (event != null) {
if (waitForResult) {
return getEventSender().sendAndGetResult(event);
} else {
getEventSender().send(event);
}
} else {
logger.warn("Cannot publish a null event");
}
return null;
}
@Override
public boolean isLastPublishOK() {
return getLastPublishEventHTTPResponseCode() == HttpURLConnection.HTTP_OK
|| getLastPublishEventHTTPResponseCode() == HttpURLConnection.HTTP_CREATED;
}
@Override
public int getLastPublishEventHTTPResponseCode() {
return eventSender.getLastSendHTTPResponseCode();
}
@Override
public EventStatus publishAndCheck(Event event) {
return publishAndCheck(event, 0);
}
@Override
public EventStatus publishAndCheck(Event event, int delayMS) {
String instanceId = publish(event, true);
try {
if (delayMS > 0) {
Thread.sleep(delayMS);
}
return check(instanceId);
} catch (InterruptedException e) {
logger.error("Sleeping before performing the event status check", e);
return null;
}
}
@Override
public EventStatus check(String instanceId) {
if (instanceId != null) {
return getResultsParser().parseResults(instanceId, eventSender.retrive(instanceId));
} else {
logger.warn("Cannot check with a null instance ID");
return EventStatus.NOT_FOUND(instanceId);
}
}
@Override
public EventStatus refresh(EventStatus eventStatus) {
return check(eventStatus.getInstanceId());
}
@Override
public boolean isLastCheckOK() {
return getLastCheckHTTPResponseCode() == 200;
}
@Override
public int getLastCheckHTTPResponseCode() {
return eventSender.getLastRetrieveHTTPResponseCode();
}
protected abstract EventSender createEventSender();
protected ResultsParser createResultsParser() {
return new ConductorResultsParser();
}
public EventSender getEventSender() {
return eventSender;
}
public void setEventSender(EventSender eventSender) {
this.eventSender = eventSender;
}
public ResultsParser getResultsParser() {
return resultsParser;
}
public void setResultsParser(ResultsParser resultsParser) {
this.resultsParser = resultsParser;
}
}