package com.constellio.app.modules.es.sdk;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDateTime;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.model.entities.CollectionObject;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.RecordWrapper;
import com.constellio.model.entities.schemas.Metadata;
public class TestConnectorEvent {
public static final String ADD_EVENT = "add";
public static final String MODIFY_EVENT = "addmodify";
public static final String DELETE_EVENT = "delete";
ESSchemasRecordsServices es;
String eventType;
Record record;
String url;
LocalDateTime fetchedDateTime;
List<Metadata> toStringMetadatas = new ArrayList<>();
private TestConnectorEvent(String eventType, Record record, ESSchemasRecordsServices es) {
this.es = es;
this.eventType = eventType;
this.record = record;
this.url = record.get(es.connectorDocument.url());
this.fetchedDateTime = record.get(es.connectorDocument.fetchedDateTime());
}
public void setToStringMetadatas(List<Metadata> toStringMetadatas) {
this.toStringMetadatas = toStringMetadatas;
}
public String getEventType() {
return eventType;
}
public Record getRecord() {
return record;
}
public String getUrl() {
return url;
}
public LocalDateTime getFetchedDateTime() {
return fetchedDateTime;
}
private static ESSchemasRecordsServices es(CollectionObject object) {
return new ESSchemasRecordsServices(object.getCollection(), ConstellioFactories.getInstance().getAppLayerFactory());
}
public static TestConnectorEvent addEvent(Record record) {
return new TestConnectorEvent(ADD_EVENT, record, es(record));
}
public static TestConnectorEvent addEvent(RecordWrapper recordWrapper) {
return new TestConnectorEvent(ADD_EVENT, recordWrapper.getWrappedRecord(), es(recordWrapper));
}
public static TestConnectorEvent modifyEvent(Record record) {
return new TestConnectorEvent(MODIFY_EVENT, record, es(record));
}
public static TestConnectorEvent modifyEvent(RecordWrapper recordWrapper) {
return new TestConnectorEvent(MODIFY_EVENT, recordWrapper.getWrappedRecord(), es(recordWrapper));
}
public static TestConnectorEvent deleteEvent(Record record) {
return new TestConnectorEvent(DELETE_EVENT, record, es(record));
}
public static TestConnectorEvent deleteEvent(RecordWrapper recordWrapper) {
return new TestConnectorEvent(DELETE_EVENT, recordWrapper.getWrappedRecord(), es(recordWrapper));
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder(eventType + " record[");
boolean first = true;
for (Metadata metadata : toStringMetadatas) {
Object value;
if (metadata.isMultivalue()) {
value = record.getList(metadata);
} else {
value = record.get(metadata);
}
if (!first) {
sb.append(", ");
}
sb.append(metadata.getLocalCode() + "=" + value);
first = false;
}
sb.append("]");
return sb.toString();
}
}