001/* 002 * (C) Copyright 2014 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 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-2.1.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 * Vladimir Pasquier <vpasquier@nuxeo.com> 016 */ 017package org.nuxeo.binary.metadata.internals; 018 019import org.apache.commons.logging.Log; 020import org.apache.commons.logging.LogFactory; 021import org.nuxeo.binary.metadata.api.BinaryMetadataConstants; 022import org.nuxeo.binary.metadata.api.BinaryMetadataService; 023import org.nuxeo.runtime.api.Framework; 024import org.nuxeo.runtime.management.metrics.MetricInvocationHandler; 025import org.nuxeo.runtime.model.ComponentContext; 026import org.nuxeo.runtime.model.ComponentInstance; 027import org.nuxeo.runtime.model.DefaultComponent; 028 029/** 030 * Binary metadata component which registers all binary metadata contributions. 031 * 032 * @since 7.1 033 */ 034public class BinaryMetadataComponent extends DefaultComponent { 035 036 private static final Log log = LogFactory.getLog(BinaryMetadataComponent.class); 037 038 protected static BinaryMetadataComponent self; 039 040 protected BinaryMetadataService metadataService = new BinaryMetadataServiceImpl(); 041 042 protected final MetadataMappingRegistry mappingRegistry = new MetadataMappingRegistry(); 043 044 protected final MetadataProcessorRegistry processorRegistry = new MetadataProcessorRegistry(); 045 046 protected final MetadataRuleRegistry ruleRegistry = new MetadataRuleRegistry(); 047 048 @Override 049 public void activate(ComponentContext context) { 050 super.activate(context); 051 if (Boolean.valueOf(Framework.getProperty(BinaryMetadataConstants.BINARY_METADATA_MONITOR, 052 Boolean.toString(log.isTraceEnabled())))) { 053 metadataService = MetricInvocationHandler.newProxy(metadataService, BinaryMetadataService.class); 054 } 055 self = this; 056 } 057 058 @Override 059 public void deactivate(ComponentContext context) { 060 self = null; 061 super.deactivate(context); 062 } 063 064 @Override 065 public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 066 if (BinaryMetadataConstants.METADATA_MAPPING_EP.equals(extensionPoint)) { 067 mappingRegistry.addContribution((MetadataMappingDescriptor) contribution); 068 } else if (BinaryMetadataConstants.METADATA_RULES_EP.equals(extensionPoint)) { 069 ruleRegistry.addContribution((MetadataRuleDescriptor) contribution); 070 } else if (BinaryMetadataConstants.METADATA_PROCESSORS_EP.equals(extensionPoint)) { 071 processorRegistry.addContribution((MetadataProcessorDescriptor) contribution); 072 } else { 073 log.error("Unknown extension point " + extensionPoint); 074 } 075 } 076 077 @Override 078 public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 079 if (BinaryMetadataConstants.METADATA_MAPPING_EP.equals(extensionPoint)) { 080 mappingRegistry.removeContribution((MetadataMappingDescriptor) contribution); 081 } else if (BinaryMetadataConstants.METADATA_RULES_EP.equals(extensionPoint)) { 082 ruleRegistry.removeContribution((MetadataRuleDescriptor) contribution); 083 } else if (BinaryMetadataConstants.METADATA_PROCESSORS_EP.equals(extensionPoint)) { 084 processorRegistry.removeContribution((MetadataProcessorDescriptor) contribution); 085 } else { 086 log.error("Unknown extension point " + extensionPoint); 087 } 088 } 089 090 @Override 091 public void applicationStarted(ComponentContext context) { 092 super.applicationStarted(context); 093 ruleRegistry.handleApplicationStarted(); 094 } 095 096 @Override 097 public <T> T getAdapter(Class<T> adapter) { 098 if (adapter.isAssignableFrom(BinaryMetadataService.class)) { 099 return adapter.cast(metadataService); 100 } 101 return null; 102 } 103 104}