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 * bstefanescu 011 */ 012package org.nuxeo.ecm.webengine.jaxrs.servlet.config; 013 014import javax.servlet.ServletException; 015 016import org.nuxeo.runtime.model.ComponentContext; 017import org.nuxeo.runtime.model.ComponentInstance; 018import org.nuxeo.runtime.model.DefaultComponent; 019import org.nuxeo.ecm.webengine.jaxrs.ApplicationManager; 020import org.osgi.service.http.NamespaceException; 021 022/** 023 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 024 */ 025public class ServletRegistryComponent extends DefaultComponent { 026 027 public static final String XP_SERVLETS = "servlets"; 028 029 public static final String XP_FILTERS = "filters"; 030 031 public static final String XP_RESOURCES = "resources"; 032 033 public static final String XP_SUBRESOURCES = "subresources"; 034 035 protected ServletRegistry registry; 036 037 public ServletRegistryComponent() { 038 } 039 040 @Override 041 public void activate(ComponentContext context) { 042 registry = ServletRegistry.getInstance(); 043 } 044 045 @Override 046 public void deactivate(ComponentContext context) { 047 ServletRegistry.dispose(); 048 registry = null; 049 } 050 051 @Override 052 public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 053 if (XP_SERVLETS.equals(extensionPoint)) { 054 ((ServletDescriptor) contribution).setBundle(contributor.getContext().getBundle()); 055 try { 056 registry.addServlet((ServletDescriptor) contribution); 057 } catch (ServletException | NamespaceException e) { 058 throw new RuntimeException(e); 059 } 060 } else if (XP_FILTERS.equals(extensionPoint)) { 061 registry.addFilterSet((FilterSetDescriptor) contribution); 062 } else if (XP_RESOURCES.equals(extensionPoint)) { 063 ResourcesDescriptor rd = (ResourcesDescriptor) contribution; 064 rd.setBundle(contributor.getContext().getBundle()); 065 registry.addResources(rd); 066 } else if (XP_SUBRESOURCES.equals(extensionPoint)) { 067 ResourceExtension rxt = (ResourceExtension) contribution; 068 rxt.setBundle(contributor.getContext().getBundle()); 069 ApplicationManager.getInstance().getOrCreateApplication(rxt.getApplication()).addExtension(rxt); 070 } 071 } 072 073 @Override 074 public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { 075 if (XP_SERVLETS.equals(extensionPoint)) { 076 registry.removeServlet((ServletDescriptor) contribution); 077 } else if (XP_FILTERS.equals(extensionPoint)) { 078 registry.removeFilterSet((FilterSetDescriptor) contribution); 079 } else if (XP_RESOURCES.equals(extensionPoint)) { 080 ResourcesDescriptor rd = (ResourcesDescriptor) contribution; 081 rd.setBundle(contributor.getContext().getBundle()); 082 registry.removeResources(rd); 083 } else if (XP_SUBRESOURCES.equals(extensionPoint)) { 084 ResourceExtension rxt = (ResourceExtension) contribution; 085 rxt.setBundle(contributor.getContext().getBundle()); 086 ApplicationManager.getInstance().getOrCreateApplication(rxt.getApplication()).removeExtension(rxt); 087 } 088 } 089 090}