1 /* 2 * Copyright 2010 - org.tinyjee.maven 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.tinyjee.maven.dim.spi; 18 19 import org.tinyjee.maven.dim.spi.backport.ServiceLoader; 20 21 import java.util.Map; 22 23 /** 24 * {@link RequestParameterTransformer} defines an interface that may be implemented and registered via service loading 25 * to plug parameter transformers that adjust macro parameters on the fly before any other operation is triggered. 26 * <p/> 27 * <b>Implementation</b>:<code><pre> 28 * package my.package; 29 * public class MyRequestParameterTransformer implements RequestParameterTransformer { 30 * public void transformParameters(Map<String, Object> requestParams) { 31 * Object value = requestParams.get("my-input-param"); 32 * if (value != null) { 33 * requestParams.put("myText", value); 34 * requestParams.put("source", "classpath:my-template.vm"); 35 * } 36 * } 37 * } 38 * </pre></code> 39 * <p/> 40 * <b>Register the implementation using service loading</b>:<ul> 41 * <li> 42 * Create the following file:<code><pre> 43 * META-INF/services/ 44 * org.tinyjee.maven.dim.spi.RequestParameterTransformer 45 * </pre></code></li> 46 * <li>Add the fully qualified class name of your implementation to the file 47 * "org.tinyjee.maven.dim.spi.RequestParameterTransformer":<code><pre> 48 * my.package.MyRequestParameterTransformer 49 * </pre></code></li> 50 * </ul> 51 * 52 * @version 1.1 53 * @since 1.0 54 * @author Juergen_Kellerer, 2010-09-08 55 */ 56 public interface RequestParameterTransformer { 57 58 /** 59 * Is an iterable over all transformers within the classpath. 60 */ 61 Iterable<RequestParameterTransformer> TRANSFORMERS = ServiceLoader.load(RequestParameterTransformer.class); 62 63 /** 64 * Transforms the specified request parameters. 65 * 66 * @param requestParams the request params to modify. 67 */ 68 void transformParameters(Map<String, Object> requestParams); 69 }