001/* 002 * (C) Copyright 2015 Nuxeo SA (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-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 * Anahide Tchertchian 016 */ 017package org.nuxeo.ecm.web.resources.wro.provider; 018 019import java.util.Collections; 020import java.util.HashMap; 021import java.util.List; 022import java.util.Map; 023 024import org.apache.commons.logging.Log; 025import org.apache.commons.logging.LogFactory; 026import org.nuxeo.ecm.web.resources.api.Processor; 027import org.nuxeo.ecm.web.resources.api.service.WebResourceManager; 028import org.nuxeo.runtime.api.Framework; 029 030import ro.isdc.wro.model.resource.locator.UriLocator; 031import ro.isdc.wro.model.resource.processor.ResourcePostProcessor; 032import ro.isdc.wro.model.resource.processor.ResourcePreProcessor; 033import ro.isdc.wro.util.provider.ConfigurableProviderSupport; 034 035/** 036 * Nuxeo contributor to wro processors and locators, registered as a service. 037 * 038 * @since 7.3 039 */ 040public class NuxeoConfigurableProvider extends ConfigurableProviderSupport { 041 042 private static final Log log = LogFactory.getLog(NuxeoConfigurableProvider.class); 043 044 public static final String PRE_TYPE = "wroPre"; 045 046 public static final String POST_TYPE = "wroPost"; 047 048 @Override 049 public Map<String, UriLocator> provideLocators() { 050 Map<String, UriLocator> map = new HashMap<String, UriLocator>(); 051 map.put(NuxeoUriLocator.ALIAS, new NuxeoUriLocator()); 052 return map; 053 } 054 055 public Map<String, ResourcePreProcessor> providePreProcessors() { 056 Map<String, ResourcePreProcessor> map = new HashMap<String, ResourcePreProcessor>(); 057 // extend with runtime service processors registration 058 List<? extends Processor> processors = resolveProcessors(PRE_TYPE); 059 for (Processor p : processors) { 060 Class<?> klass = p.getTargetProcessorClass(); 061 if (klass == null) { 062 // assume alias references a native wro processor 063 continue; 064 } 065 ResourcePreProcessor proc; 066 try { 067 proc = (ResourcePreProcessor) klass.newInstance(); 068 map.put(p.getName(), proc); 069 } catch (ReflectiveOperationException e) { 070 log.error("Caught error when instanciating resource pre processor", e); 071 continue; 072 } 073 } 074 return map; 075 } 076 077 @Override 078 public Map<String, ResourcePostProcessor> providePostProcessors() { 079 Map<String, ResourcePostProcessor> map = new HashMap<String, ResourcePostProcessor>(); 080 // extend with runtime service processors registration 081 List<Processor> processors = resolveProcessors(POST_TYPE); 082 for (Processor p : processors) { 083 Class<?> klass = p.getTargetProcessorClass(); 084 if (klass == null) { 085 // assume alias references a native wro processor 086 continue; 087 } 088 ResourcePostProcessor proc; 089 try { 090 proc = (ResourcePostProcessor) klass.newInstance(); 091 map.put(p.getName(), proc); 092 } catch (ReflectiveOperationException e) { 093 log.error("Caught error when instanciating resource post processor", e); 094 continue; 095 } 096 } 097 return map; 098 } 099 100 public static List<Processor> resolveProcessors(String type) { 101 WebResourceManager service = Framework.getService(WebResourceManager.class); 102 List<Processor> processors = service.getProcessors(type); 103 if (processors != null) { 104 return processors; 105 } 106 return Collections.emptyList(); 107 } 108 109}