001package org.nuxeo.ecm.multi.tenant;
002
003import org.nuxeo.ecm.core.api.DocumentModel;
004import org.nuxeo.ecm.core.api.event.DocumentEventTypes;
005import org.nuxeo.ecm.core.api.model.Property;
006import org.nuxeo.ecm.core.event.Event;
007import org.nuxeo.ecm.core.event.EventListener;
008import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
009import org.nuxeo.ecm.platform.usermanager.UserManagerImpl;
010import org.nuxeo.runtime.api.Framework;
011import org.nuxeo.runtime.services.event.EventService;
012
013/**
014 * Listeners invalidating the principals cache when the tenant administrators are changed.
015 *
016 * @since 5.9.2
017 */
018public class TenantAdministratorsListener implements EventListener {
019
020    @Override
021    public void handleEvent(Event event) {
022        String eventName = event.getName();
023        if (!DocumentEventTypes.BEFORE_DOC_UPDATE.equals(eventName)
024                || !(event.getContext() instanceof DocumentEventContext)) {
025            return;
026        }
027
028        DocumentEventContext docCtx = (DocumentEventContext) event.getContext();
029        DocumentModel doc = docCtx.getSourceDocument();
030        if (doc.hasFacet(Constants.TENANT_CONFIG_FACET)) {
031            Property property = doc.getProperty(Constants.TENANT_ADMINISTRATORS_PROPERTY);
032            if (property.isDirty()) {
033                // flush the principals cache
034                EventService eventService = Framework.getLocalService(EventService.class);
035                eventService.sendEvent(new org.nuxeo.runtime.services.event.Event(UserManagerImpl.USERMANAGER_TOPIC,
036                        "invalidateAllPrincipals", null, null));
037            }
038        }
039    }
040
041}