Search in sources :

Example 11 with DocumentCreatedEvent

use of org.xwiki.bridge.event.DocumentCreatedEvent in project xwiki-platform by xwiki.

the class LegacyEventDispatcherTest method testLegacyDocumentSaveEventGetsDispatched.

@Test
public void testLegacyDocumentSaveEventGetsDispatched() throws Exception {
    this.registerListenerWithLegacyEvent(new DocumentSaveEvent());
    this.om.notify(new DocumentCreatedEvent(new DocumentReference("wiki", "space", "name")), null);
    // The notification is synchronous, so the following assertion will only be tested
    // once all matching event listeners have been notified.
    Assert.assertNotNull("Should have been notified by legacy event dispatcher", this.receivedEvent);
    Assert.assertEquals("Wrong event filter", "wiki:space.name", ((FilterableEvent) this.receivedEvent).getEventFilter().getFilter());
}
Also used : FilterableEvent(org.xwiki.observation.event.FilterableEvent) DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) DocumentSaveEvent(org.xwiki.observation.event.DocumentSaveEvent) DocumentReference(org.xwiki.model.reference.DocumentReference) Test(org.junit.Test)

Example 12 with DocumentCreatedEvent

use of org.xwiki.bridge.event.DocumentCreatedEvent 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);
    }
}
Also used : XObjectPropertyUpdatedEvent(com.xpn.xwiki.internal.event.XObjectPropertyUpdatedEvent) AttachmentAddedEvent(com.xpn.xwiki.internal.event.AttachmentAddedEvent) XObjectAddedEvent(com.xpn.xwiki.internal.event.XObjectAddedEvent) XObjectPropertyDeletedEvent(com.xpn.xwiki.internal.event.XObjectPropertyDeletedEvent) DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) XWikiContext(com.xpn.xwiki.XWikiContext) DocumentUpdatedEvent(org.xwiki.bridge.event.DocumentUpdatedEvent) XWikiAttachment(com.xpn.xwiki.doc.XWikiAttachment) XWikiException(com.xpn.xwiki.XWikiException) XObjectUpdatedEvent(com.xpn.xwiki.internal.event.XObjectUpdatedEvent) XWikiDocument(com.xpn.xwiki.doc.XWikiDocument) DocumentDeletedEvent(org.xwiki.bridge.event.DocumentDeletedEvent) XObjectPropertyAddedEvent(com.xpn.xwiki.internal.event.XObjectPropertyAddedEvent) EntityEvent(com.xpn.xwiki.internal.event.EntityEvent) AttachmentUpdatedEvent(com.xpn.xwiki.internal.event.AttachmentUpdatedEvent) AbstractAttachmentEvent(com.xpn.xwiki.internal.event.AbstractAttachmentEvent) XObjectDeletedEvent(com.xpn.xwiki.internal.event.XObjectDeletedEvent) AttachmentDeletedEvent(com.xpn.xwiki.internal.event.AttachmentDeletedEvent) WikiDeletedEvent(org.xwiki.bridge.event.WikiDeletedEvent) WikiReference(org.xwiki.model.reference.WikiReference) DocumentReference(org.xwiki.model.reference.DocumentReference)

Example 13 with DocumentCreatedEvent

use of org.xwiki.bridge.event.DocumentCreatedEvent in project xwiki-platform by xwiki.

the class XClassPropertyEventGeneratorListenerTest method testAddDocument.

@Test
public void testAddDocument() throws ComponentLookupException {
    this.xclass.addTextField("property", "Property", 30);
    final Event event = new XClassPropertyAddedEvent(this.xclass.getField("property").getReference());
    this.mocker.getComponentUnderTest().onEvent(new DocumentCreatedEvent(this.document.getDocumentReference()), this.document, this.oldcore.getXWikiContext());
    // Make sure the listener generated a xobject added event
    verify(this.mockObservation).notify(eq(event), same(this.document), same(this.oldcore.getXWikiContext()));
}
Also used : DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) Event(org.xwiki.observation.event.Event) DocumentUpdatedEvent(org.xwiki.bridge.event.DocumentUpdatedEvent) DocumentDeletedEvent(org.xwiki.bridge.event.DocumentDeletedEvent) Test(org.junit.Test)

Example 14 with DocumentCreatedEvent

use of org.xwiki.bridge.event.DocumentCreatedEvent in project xwiki-platform by xwiki.

the class XObjectEventGeneratorListenerTest method testAddDocument.

@Test
public void testAddDocument() throws ComponentLookupException {
    this.document.addXObject(this.xobject);
    final Event event = new XObjectAddedEvent(this.xobject.getReference());
    this.mocker.getComponentUnderTest().onEvent(new DocumentCreatedEvent(this.document.getDocumentReference()), this.document, this.oldcore.getXWikiContext());
    // Make sure the listener generated a xobject added event
    verify(this.mockObservation).notify(eq(event), same(this.document), same(this.oldcore.getXWikiContext()));
}
Also used : DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) Event(org.xwiki.observation.event.Event) DocumentUpdatedEvent(org.xwiki.bridge.event.DocumentUpdatedEvent) DocumentDeletedEvent(org.xwiki.bridge.event.DocumentDeletedEvent) Test(org.junit.Test)

Example 15 with DocumentCreatedEvent

use of org.xwiki.bridge.event.DocumentCreatedEvent 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);
        }
    }
}
Also used : DocumentDeletedEvent(org.xwiki.bridge.event.DocumentDeletedEvent) DocumentModelBridge(org.xwiki.bridge.DocumentModelBridge) AbstractDocumentEvent(org.xwiki.bridge.event.AbstractDocumentEvent) DocumentCreatedEvent(org.xwiki.bridge.event.DocumentCreatedEvent) DocumentUpdatedEvent(org.xwiki.bridge.event.DocumentUpdatedEvent) DocumentReference(org.xwiki.model.reference.DocumentReference)

Aggregations

DocumentCreatedEvent (org.xwiki.bridge.event.DocumentCreatedEvent)26 DocumentUpdatedEvent (org.xwiki.bridge.event.DocumentUpdatedEvent)18 DocumentDeletedEvent (org.xwiki.bridge.event.DocumentDeletedEvent)17 Test (org.junit.Test)11 XWikiDocument (com.xpn.xwiki.doc.XWikiDocument)10 DocumentReference (org.xwiki.model.reference.DocumentReference)10 XWikiContext (com.xpn.xwiki.XWikiContext)8 Event (org.xwiki.observation.event.Event)5 ArrayList (java.util.ArrayList)4 DocumentCreatingEvent (org.xwiki.bridge.event.DocumentCreatingEvent)4 Date (java.util.Date)3 ActionExecutedEvent (org.xwiki.bridge.event.ActionExecutedEvent)3 XWiki (com.xpn.xwiki.XWiki)2 XWikiException (com.xpn.xwiki.XWikiException)2 XWikiAttachment (com.xpn.xwiki.doc.XWikiAttachment)2 AttachmentAddedEvent (com.xpn.xwiki.internal.event.AttachmentAddedEvent)2 AttachmentDeletedEvent (com.xpn.xwiki.internal.event.AttachmentDeletedEvent)2 AttachmentUpdatedEvent (com.xpn.xwiki.internal.event.AttachmentUpdatedEvent)2 DocumentModelBridge (org.xwiki.bridge.DocumentModelBridge)2 DocumentUpdatingEvent (org.xwiki.bridge.event.DocumentUpdatingEvent)2