use of org.xwiki.bridge.event.DocumentDeletedEvent in project xwiki-platform by xwiki.
the class XWikiTest method testDeleteDocumentSendsObservationEvents.
/**
* We only verify here that the deleteDocument API calls the Observation component.
*/
public void testDeleteDocumentSendsObservationEvents() throws Exception {
Mock mockListener = mock(EventListener.class);
mockListener.stubs().method("getName").will(returnValue("testlistener"));
DocumentReference ref = new DocumentReference("xwikitest", "Another", "Document");
mockListener.expects(once()).method("getEvents").will(returnValue(Arrays.asList(new DocumentDeletedEvent(ref), new DocumentDeletingEvent(ref))));
ObservationManager om = getComponentManager().getInstance(ObservationManager.class);
om.addListener((EventListener) mockListener.proxy());
XWikiDocument document = new XWikiDocument(new DocumentReference("xwikitest", "Another", "Document"));
document.setContent("the content");
// Not expectation on mock Listener since we're not subscribed to Document save events
this.xwiki.saveDocument(document, getContext());
// Ensure that the onEvent method has been called before and after the deletion
mockListener.expects(once()).method("onEvent").with(isA(DocumentDeletingEvent.class), isA(XWikiDocument.class), isA(XWikiContext.class));
mockListener.expects(once()).method("onEvent").with(isA(DocumentDeletedEvent.class), isA(XWikiDocument.class), isA(XWikiContext.class));
this.xwiki.deleteDocument(document, false, getContext());
}
use of org.xwiki.bridge.event.DocumentDeletedEvent in project xwiki-platform by xwiki.
the class SolrIndexEventListener method onEvent.
@Override
public void onEvent(Event event, Object source, Object data) {
try {
if (event instanceof DocumentUpdatedEvent) {
XWikiDocument document = (XWikiDocument) source;
if (Locale.ROOT.equals(document.getLocale())) {
// Index all the translations of a document when its default translation has been updated because
// the default translation holds meta data shared by all translations (attachments, objects).
indexTranslations(document, (XWikiContext) data);
} else {
// Index only the updated translation.
this.solrIndexer.get().index(document.getDocumentReferenceWithLocale(), false);
}
} else if (event instanceof DocumentCreatedEvent) {
XWikiDocument document = (XWikiDocument) source;
if (!Locale.ROOT.equals(document.getLocale())) {
// If a new translation is added to a document reindex the whole document (could be optimized a bit
// by reindexing only the parent locales but that would always include objects and attachments
// anyway)
indexTranslations(document, (XWikiContext) data);
} else {
this.solrIndexer.get().index(document.getDocumentReferenceWithLocale(), false);
}
} else if (event instanceof DocumentDeletedEvent) {
XWikiDocument document = ((XWikiDocument) source).getOriginalDocument();
// We must pass the document reference with the REAL locale because when the indexer is going to delete
// the document from the Solr index (later, on a different thread) the real locale won't be accessible
// anymore since the XWiki document has been already deleted from the database. The real locale (taken
// from the XWiki document) is used to compute the id of the Solr document when the document reference
// locale is ROOT (i.e. for default document translations).
// Otherwise the document won't be deleted from the Solr index (because the computed id won't match any
// document from the Solr index) and we're going to have deleted documents that are still in the Solr
// index. These documents will be filtered from the search results but not from the facet counts.
// See XWIKI-10003: Cache problem with Solr facet filter results count
this.solrIndexer.get().delete(new DocumentReference(document.getDocumentReference(), document.getRealLocale()), false);
} else if (event instanceof AttachmentUpdatedEvent || event instanceof AttachmentAddedEvent) {
XWikiDocument document = (XWikiDocument) source;
String fileName = ((AbstractAttachmentEvent) event).getName();
XWikiAttachment attachment = document.getAttachment(fileName);
this.solrIndexer.get().index(attachment.getReference(), false);
} else if (event instanceof AttachmentDeletedEvent) {
XWikiDocument document = ((XWikiDocument) source).getOriginalDocument();
String fileName = ((AbstractAttachmentEvent) event).getName();
XWikiAttachment attachment = document.getAttachment(fileName);
this.solrIndexer.get().delete(attachment.getReference(), false);
} else if (event instanceof XObjectUpdatedEvent || event instanceof XObjectAddedEvent) {
EntityEvent entityEvent = (EntityEvent) event;
this.solrIndexer.get().index(entityEvent.getReference(), false);
} else if (event instanceof XObjectDeletedEvent) {
EntityEvent entityEvent = (EntityEvent) event;
this.solrIndexer.get().delete(entityEvent.getReference(), false);
} else if (event instanceof XObjectPropertyUpdatedEvent || event instanceof XObjectPropertyAddedEvent) {
EntityEvent entityEvent = (EntityEvent) event;
this.solrIndexer.get().index(entityEvent.getReference(), false);
} else if (event instanceof XObjectPropertyDeletedEvent) {
EntityEvent entityEvent = (EntityEvent) event;
this.solrIndexer.get().delete(entityEvent.getReference(), false);
} else if (event instanceof WikiDeletedEvent) {
String wikiName = (String) source;
WikiReference wikiReference = new WikiReference(wikiName);
this.solrIndexer.get().delete(wikiReference, false);
}
} catch (Exception e) {
this.logger.error("Failed to handle event [{}] with source [{}]", event, source, e);
}
}
use of org.xwiki.bridge.event.DocumentDeletedEvent in project xwiki-platform by xwiki.
the class SolrIndexEventListenerTest method onDocumentDeleted.
@Test
public void onDocumentDeleted() throws Exception {
DocumentReference documentReference = new DocumentReference("aWiki", "aSpace", "aPage");
XWikiDocument document = mock(XWikiDocument.class);
when(document.getOriginalDocument()).thenReturn(document);
when(document.getDocumentReference()).thenReturn(documentReference);
when(document.getRealLocale()).thenReturn(Locale.FRENCH);
mocker.getComponentUnderTest().onEvent(new DocumentDeletedEvent(), document, null);
verify(indexer).delete(new DocumentReference(documentReference, Locale.FRENCH), false);
}
use of org.xwiki.bridge.event.DocumentDeletedEvent in project xwiki-platform by xwiki.
the class WikiMacroEventListener method onEvent.
@Override
public void onEvent(Event event, Object source, Object data) {
if (event instanceof AbstractDocumentEvent) {
DocumentModelBridge document = (DocumentModelBridge) source;
DocumentReference documentReference = document.getDocumentReference();
if (event instanceof DocumentCreatedEvent || event instanceof DocumentUpdatedEvent) {
registerMacro(documentReference);
} else if (event instanceof DocumentDeletedEvent) {
unregisterMacro(documentReference);
}
}
}
use of org.xwiki.bridge.event.DocumentDeletedEvent in project xwiki-platform by xwiki.
the class RealtimeNotificationGenerator method getWatchListEvent.
/**
* @param event the current event
* @param currentDoc the affected document
* @param context the context of the event
* @return the {@link WatchListEvent} to use to notify watchers of the current document
*/
private WatchListEvent getWatchListEvent(Event event, XWikiDocument currentDoc, XWikiContext context) {
String type = null;
DocumentReference documentReference = currentDoc.getDocumentReference();
DocumentReference userReference = context.getUserReference();
String version = currentDoc.getVersion();
Date date = currentDoc.getDate();
if (event instanceof DocumentCreatedEvent) {
type = WatchListEventType.CREATE;
} else if (event instanceof DocumentUpdatedEvent) {
type = WatchListEventType.UPDATE;
} else if (event instanceof DocumentDeletedEvent) {
version = currentDoc.getOriginalDocument().getVersion();
type = WatchListEventType.DELETE;
}
WatchListEvent watchListEvent = new WatchListEvent(documentReference, type, userReference, version, date);
return watchListEvent;
}
Aggregations