001/*
002 * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Nuxeo - initial API and implementation
016 *
017 * $Id$
018 */
019package org.nuxeo.ecm.platform.web.common.admin;
020
021import org.nuxeo.ecm.core.management.api.AdministrativeStatus;
022import org.nuxeo.ecm.core.management.api.AdministrativeStatusManager;
023import org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager;
024import org.nuxeo.ecm.platform.api.login.RestrictedLoginHelper;
025import org.nuxeo.runtime.api.Framework;
026import org.nuxeo.runtime.services.event.Event;
027import org.nuxeo.runtime.services.event.EventListener;
028
029import static org.nuxeo.ecm.core.management.api.AdministrativeStatusManager.ACTIVATED_EVENT;
030import static org.nuxeo.ecm.core.management.api.AdministrativeStatusManager.GLOBAL_INSTANCE_AVAILABILITY;
031import static org.nuxeo.ecm.core.management.api.AdministrativeStatusManager.PASSIVATED_EVENT;
032
033/**
034 * Listen for {@link AdministrativeStatus} changes and set the necessary flag in {@link AdminStatusHelper} so that web
035 * infrastructure can directly use the Helper.
036 *
037 * @author tiry
038 */
039public class AdministrativeStatusListener implements EventListener {
040
041    public static final String ADM_MESSAGE_SERVICE = "org.nuxeo.ecm.administrator.message";
042
043    protected static String localInstanceId;
044
045    @Override
046    public boolean aboutToHandleEvent(Event event) {
047        return false;
048    }
049
050    protected static String getLocalInstanceId() {
051        if (localInstanceId == null) {
052            GlobalAdministrativeStatusManager gasm = Framework.getLocalService(GlobalAdministrativeStatusManager.class);
053            localInstanceId = gasm.getLocalNuxeoInstanceIdentifier();
054        }
055        return localInstanceId;
056    }
057
058    @Override
059    public void handleEvent(Event event) {
060        String eventId = event.getId();
061        String instanceId = (String) event.getSource();
062        String serviceId = (String) event.getData();
063
064        if (!getLocalInstanceId().equals(instanceId)) {
065            return;
066        }
067
068        AdministrativeStatusManager asm = Framework.getLocalService(AdministrativeStatusManager.class);
069
070        if (serviceId.equals(GLOBAL_INSTANCE_AVAILABILITY)) {
071            if (eventId.equals(ACTIVATED_EVENT)) {
072                AdminStatusHelper.instanceInMaintenanceMode = false;
073                RestrictedLoginHelper.setRestrictedModeActivated(false);
074            }
075            if (eventId.equals(PASSIVATED_EVENT)) {
076                AdminStatusHelper.instanceInMaintenanceMode = true;
077                RestrictedLoginHelper.setRestrictedModeActivated(true);
078            }
079
080            AdminStatusHelper.maintenanceMessage = asm.getStatus(GLOBAL_INSTANCE_AVAILABILITY).getMessage();
081        }
082
083        if (serviceId.equals(ADM_MESSAGE_SERVICE)) {
084            if (eventId.equals(ACTIVATED_EVENT)) {
085                AdminStatusHelper.adminMessageActivated = true;
086            }
087            if (eventId.equals(PASSIVATED_EVENT)) {
088                AdminStatusHelper.adminMessageActivated = false;
089            }
090            AdministrativeStatus status = asm.getStatus(ADM_MESSAGE_SERVICE);
091            AdminStatusHelper.adminMessage = status.getMessage();
092            AdminStatusHelper.adminMessageModificationDate = status.getModificationDate();
093
094        }
095    }
096
097}