package com.constellio.app.modules.es.sdk; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; import com.constellio.app.modules.es.connectors.spi.ConnectorEventObserver; import com.constellio.app.modules.es.model.connectors.ConnectorDocument; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.modules.es.services.crawler.DeleteEventOptions; import com.constellio.model.entities.records.Transaction; public class TestConnectorEventObserver implements ConnectorEventObserver { ConnectorEventObserver nestedObserver; ESSchemasRecordsServices es; private List<TestConnectorEvent> events = new ArrayList<>(); private int addNewDocumentCount; private int updateDocumentCount; private int deleteDocumentCount; public TestConnectorEventObserver(ESSchemasRecordsServices es, ConnectorEventObserver nestedObserver) { this.nestedObserver = nestedObserver; this.es = es; } public List<TestConnectorEvent> getEvents() { return events; } int quantityBeforeClosing = -1; public int getQuantityBeforeClosing() { return quantityBeforeClosing; } public TestConnectorEventObserver setQuantityBeforeClosing(int quantityBeforeClosing) { this.quantityBeforeClosing = quantityBeforeClosing; return this; } @Override public void addUpdateEvents(ConnectorDocument... documents) { addUpdateEvents(asList(documents)); } @Override public void addUpdateEvents(List<ConnectorDocument> documents) { for (ConnectorDocument document : documents) { if (document.getWrappedRecord().isSaved()) { events.add(TestConnectorEvent.modifyEvent(document)); updateDocumentCount++; } else { events.add(TestConnectorEvent.addEvent(document)); addNewDocumentCount++; } } nestedObserver.addUpdateEvents(documents); } @Override public void deleteEvents(ConnectorDocument... documents) { deleteEvents(new DeleteEventOptions(), asList(documents)); } @Override public void deleteEvents(DeleteEventOptions deleteEventOptions, ConnectorDocument... documents) { deleteEvents(deleteEventOptions, asList(documents)); } @Override public void push(List<ConnectorDocument> documents) { for (ConnectorDocument document : documents) { if (document.getWrappedRecord().isSaved()) { events.add(TestConnectorEvent.modifyEvent(document)); updateDocumentCount++; } else { events.add(TestConnectorEvent.addEvent(document)); addNewDocumentCount++; } } nestedObserver.push(documents); } @Override public void close() { nestedObserver.close(); } @Override public void deleteEvents(List<ConnectorDocument> documents) { deleteEvents(new DeleteEventOptions(), documents); } @Override public void deleteEvents(DeleteEventOptions deleteEventOptions, List<ConnectorDocument> documents) { Transaction transaction = new Transaction(); for (ConnectorDocument document : documents) { deleteDocumentCount++; events.add(TestConnectorEvent.deleteEvent(document)); } nestedObserver.deleteEvents(deleteEventOptions, documents); } public int getAddNewDocumentCount() { return addNewDocumentCount; } public int getUpdateDocumentCount() { return updateDocumentCount; } public int getDeleteDocumentCount() { return deleteDocumentCount; } @Override public void flush() { nestedObserver.flush(); } public List<TestConnectorEvent> newEvents() { List<TestConnectorEvent> newEvents = new ArrayList<>(events); events.clear(); return newEvents; } @Override public void cleanup() { nestedObserver.cleanup(); } }