001/* 002 * (C) Copyright 2006-2008 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 * Alexandre Russel 016 * 017 * $Id$ 018 */ 019 020package org.nuxeo.ecm.platform.annotations.service; 021 022import org.nuxeo.ecm.platform.annotations.api.AnnotationsService; 023import org.nuxeo.ecm.platform.annotations.api.UriResolver; 024import org.nuxeo.ecm.platform.annotations.api.AnnotationsConstants.ExtensionPoint; 025import org.nuxeo.ecm.platform.annotations.descriptors.AnnotabilityManagerDescriptor; 026import org.nuxeo.ecm.platform.annotations.descriptors.AnnotationIDGeneratorDescriptor; 027import org.nuxeo.ecm.platform.annotations.descriptors.EventListenerDescriptor; 028import org.nuxeo.ecm.platform.annotations.descriptors.MetadataMapperDescriptor; 029import org.nuxeo.ecm.platform.annotations.descriptors.PermissionManagerDescriptor; 030import org.nuxeo.ecm.platform.annotations.descriptors.PermissionMapperDescriptor; 031import org.nuxeo.ecm.platform.annotations.descriptors.URLPatternFilterDescriptor; 032import org.nuxeo.ecm.platform.annotations.descriptors.UriResolverDescriptor; 033import org.nuxeo.ecm.platform.annotations.proxy.AnnotationServiceProxy; 034import org.nuxeo.runtime.model.ComponentContext; 035import org.nuxeo.runtime.model.ComponentInstance; 036import org.nuxeo.runtime.model.ComponentName; 037import org.nuxeo.runtime.model.DefaultComponent; 038 039/** 040 * @author Alexandre Russel 041 */ 042public class AnnotationsComponent extends DefaultComponent { 043 044 public static final ComponentName NAME = new ComponentName( 045 "org.nuxeo.ecm.platform.annotations.services.annotationServiceFactory"); 046 047 private AnnotationServiceProxy annotationServiceProxy; 048 049 private final AnnotationConfigurationService configuration = new AnnotationConfigurationServiceImpl(); 050 051 @Override 052 public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 053 ExtensionPoint point = Enum.valueOf(ExtensionPoint.class, extensionPoint); 054 switch (point) { 055 case uriResolver: 056 UriResolver resolver = newInstance(((UriResolverDescriptor) contribution).getKlass()); 057 configuration.setUriResolver(resolver); 058 break; 059 case urlPatternFilter: 060 URLPatternFilterDescriptor descriptor = (URLPatternFilterDescriptor) contribution; 061 boolean order = descriptor.getOrder().equalsIgnoreCase("Allow,Deny"); 062 URLPatternFilter filter = new URLPatternFilter(order, descriptor.getDenies(), descriptor.getAllows()); 063 configuration.setFilter(filter); 064 break; 065 case metadataMapper: 066 MetadataMapper mapper = newInstance(((MetadataMapperDescriptor) contribution).getKlass()); 067 configuration.setMetadataMapper(mapper); 068 break; 069 case permissionManager: 070 PermissionManager manager = newInstance(((PermissionManagerDescriptor) contribution).getKlass()); 071 configuration.setPermissionManager(manager); 072 break; 073 case annotabilityManager: 074 AnnotabilityManager annotabilityManager = newInstance(((AnnotabilityManagerDescriptor) contribution).getKlass()); 075 configuration.setAnnotabilityManager(annotabilityManager); 076 break; 077 case eventListener: 078 Class<? extends EventListener> listener = ((EventListenerDescriptor) contribution).getListener(); 079 configuration.addListener(newInstance(listener)); 080 break; 081 case annotationIDGenerator: 082 AnnotationIDGenerator generator = newInstance(((AnnotationIDGeneratorDescriptor) contribution).getKlass()); 083 configuration.setIDGenerator(generator); 084 break; 085 case permissionMapper: 086 configuration.setPermissionMapper((PermissionMapperDescriptor) contribution); 087 break; 088 } 089 } 090 091 protected <T> T newInstance(Class<T> klass) { 092 try { 093 return klass.newInstance(); 094 } catch (ReflectiveOperationException e) { 095 throw new RuntimeException(e); 096 } 097 } 098 099 @Override 100 public void activate(ComponentContext context) { 101 } 102 103 @Override 104 public void deactivate(ComponentContext context) { 105 } 106 107 @SuppressWarnings("unchecked") 108 @Override 109 public <T> T getAdapter(Class<T> adapter) { 110 if (AnnotationsService.class.isAssignableFrom(adapter)) { 111 return (T) getAnnotationServiceProxy(); 112 } else if (AnnotationConfigurationService.class.isAssignableFrom(adapter)) { 113 return (T) configuration; 114 } 115 return null; 116 } 117 118 private AnnotationsService getAnnotationServiceProxy() { 119 if (annotationServiceProxy == null) { 120 annotationServiceProxy = new AnnotationServiceProxy(); 121 annotationServiceProxy.initialise(); 122 } 123 return annotationServiceProxy; 124 } 125 126}