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}