001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     matic
011 */
012package org.nuxeo.ecm.core.management;
013
014import org.nuxeo.ecm.core.event.EventStats;
015import org.nuxeo.ecm.core.management.api.AdministrativeStatusManager;
016import org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager;
017import org.nuxeo.ecm.core.management.api.ProbeManager;
018import org.nuxeo.ecm.core.management.events.EventStatsHolder;
019import org.nuxeo.ecm.core.management.events.EventStatsImpl;
020import org.nuxeo.ecm.core.management.probes.ProbeDescriptor;
021import org.nuxeo.ecm.core.management.probes.ProbeManagerImpl;
022import org.nuxeo.ecm.core.management.statuses.AdministrableServiceDescriptor;
023import org.nuxeo.ecm.core.management.statuses.AdministrativeStatusManagerImpl;
024import org.nuxeo.ecm.core.management.statuses.GlobalAdministrativeStatusManagerImpl;
025import org.nuxeo.ecm.core.management.storage.DocumentStoreConfigurationDescriptor;
026import org.nuxeo.ecm.core.management.storage.DocumentStoreHandlerDescriptor;
027import org.nuxeo.ecm.core.management.storage.DocumentStoreManager;
028import org.nuxeo.runtime.model.ComponentContext;
029import org.nuxeo.runtime.model.ComponentInstance;
030import org.nuxeo.runtime.model.ComponentName;
031import org.nuxeo.runtime.model.DefaultComponent;
032
033/**
034 * @author Stephane Lacoin (Nuxeo EP Software Engineer)
035 */
036public class CoreManagementComponent extends DefaultComponent {
037
038    public static final ComponentName NAME = new ComponentName(CoreManagementComponent.class.getCanonicalName());
039
040    public static final String PROBES_EP = "probes";
041
042    public static final String SERVICE_DEF_EP = "serviceDefinition";
043
044    public static final String STORAGE_HANDLERS_EP = "storageHandlers";
045
046    public static final String STORAGE_CONFIG_EP = "storageConfiguration";
047
048    protected static CoreManagementComponent defaultComponent;
049
050    protected final GlobalAdministrativeStatusManager globalManager = new GlobalAdministrativeStatusManagerImpl();
051
052    protected final EventStats eventStats = new EventStatsImpl();
053
054    protected final ProbeManagerImpl probeRunner = new ProbeManagerImpl();
055
056    protected final DocumentStoreManager storageManager = new DocumentStoreManager();
057
058    public CoreManagementComponent() {
059        super(); // enables breaking
060    }
061
062    public AdministrativeStatusManagerImpl getLocalManager() {
063        return (AdministrativeStatusManagerImpl) globalManager.getStatusManager(globalManager.getLocalNuxeoInstanceIdentifier());
064    }
065
066    @Override
067    public <T> T getAdapter(Class<T> adapter) {
068        if (adapter == EventStats.class) {
069            return adapter.cast(eventStats);
070        }
071        if (adapter.isAssignableFrom(GlobalAdministrativeStatusManager.class)) {
072            return adapter.cast(globalManager);
073        }
074        if (adapter.isAssignableFrom(AdministrativeStatusManager.class)) {
075            return adapter.cast(getLocalManager());
076        }
077        if (adapter.isAssignableFrom(ProbeManager.class)) {
078            return adapter.cast(probeRunner);
079        }
080        return super.getAdapter(adapter);
081    }
082
083    @Override
084    public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) {
085        if (extensionPoint.equals(PROBES_EP)) {
086            probeRunner.registerProbe((ProbeDescriptor) contribution);
087        } else if (extensionPoint.equals(SERVICE_DEF_EP)) {
088            globalManager.registerService((AdministrableServiceDescriptor) contribution);
089        } else if (extensionPoint.equals(STORAGE_HANDLERS_EP)) {
090            storageManager.registerHandler((DocumentStoreHandlerDescriptor) contribution);
091        } else if (extensionPoint.equals(STORAGE_CONFIG_EP)) {
092            storageManager.registerConfig((DocumentStoreConfigurationDescriptor) contribution);
093        } else {
094            super.registerContribution(contribution, extensionPoint, contributor);
095        }
096    }
097
098    @Override
099    public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) {
100        if (extensionPoint.equals("probes")) {
101            probeRunner.unregisterProbe((ProbeDescriptor) contribution);
102        }
103    }
104
105    public static CoreManagementComponent getDefault() {
106        return defaultComponent;
107    }
108
109    @Override
110    public void activate(ComponentContext context) {
111        defaultComponent = this;
112        storageManager.install();
113        EventStatsHolder.clearStats();
114    }
115
116    @Override
117    public void deactivate(ComponentContext context) {
118        defaultComponent = null;
119        storageManager.uninstall();
120        getLocalManager().onNuxeoServerShutdown();
121        EventStatsHolder.clearStats();
122    }
123
124    public void onNuxeoServerStartup() {
125        getLocalManager().onNuxeoServerStartup();
126    }
127
128}