View Javadoc

1   /*
2    * This file is part of Pease Plate Template Engine.
3    * 
4    * Pease Plate Template Engine is free software: you can redistribute
5    * it and/or modify it under the terms of the GNU Lesser General 
6    * Public License as published by the Free Software Foundation, 
7    * either version 3 of the License, or any later version.
8    * 
9    * Pease Plate Template Engine is distributed in the hope that it 
10   * will be useful, but WITHOUT ANY WARRANTY; without even the implied
11   * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12   * See the GNU Lesser General Public License for more details.
13   * 
14   * You should have received a copy of the GNU Lesser General Public 
15   * License along with Pease Plate Template Engine. If not, see 
16   * <http://www.gnu.org/licenses/>.
17   * 
18   * Copyright (c) 2008 Manfred HANTSCHEL
19   */
20  package org.peaseplate.service;
21  
22  import java.lang.reflect.Method;
23  
24  import org.peaseplate.DefaultTransformer;
25  import org.peaseplate.RenderContext;
26  import org.peaseplate.Transformer;
27  
28  /**
29   * The transformer service stores and hold predefined transformers.
30   * 
31   * @author Manfred HANTSCHEL
32   */
33  public interface TransformerService {
34  
35  	/**
36  	 * Scans the specified class loaders for transformer service definitions.
37  	 * The definitions are located in a resource with the name
38  	 * "META-INF/services/org.peaseplate.service.TransformerService".
39  	 * The file contains class names of transformers, one class name per line.
40  	 * The name of the transformers will be the name of each class 
41  	 * trimming "Transformer" and "Transformers" at the end. This can be 
42  	 * overruled by using the {@link Transformer} annotation.
43  	 * 
44  	 * The class must contains at lease one method annotated as {@link Transformer}
45  	 * or {@link DefaultTransformer} and conform the following rules:
46  	 * 
47  	 * <ul>
48  	 * 	<li>The method must have a return value</li>
49  	 * 	<li>The first parameter must be a {@link RenderContext}</li>
50  	 * 	<li>There must be a second parameter that can be of any type. It contains the value to be transformed.</li>
51  	 * </ul>
52  	 * 
53  	 * @param classLoaders the class loaders
54  	 * @throws IllegalArgumentException if a class could not be instantiated
55  	 */
56  	public void add(ClassLoader... classLoaders);
57  	
58  	/**
59  	 * Adds the transformer specified by the class.
60  	 * Creates an instance immediately and calls the add method.
61  	 * The name of the transformer will be the name of the class 
62  	 * trimming "Transformer" and "Transformers" at the end. This can be 
63  	 * overruled by using the {@link Transformer} annotation.
64  	 * 
65  	 * The class must contains at lease one method annotated as {@link Transformer}
66  	 * or {@link DefaultTransformer} and conform the following rules:
67  	 * 
68  	 * <ul>
69  	 * 	<li>The method must have a return value</li>
70  	 * 	<li>The first parameter must be a {@link RenderContext}</li>
71  	 * 	<li>There must be a second parameter that can be of any type. It contains the value to be transformed.</li>
72  	 * </ul>
73  
74  	 * 
75  	 * @param transformerClass the transformer class
76  	 * @throws IllegalArgumentException if the instance could not be created
77  	 */
78  	public void add(Class<?> transformerClass) throws IllegalArgumentException;
79  	
80  	/**
81  	 * Adds the specified transformer class. The name of the transformer will be the name
82  	 * of the class trimming "Transformer" and "Transformers" at the end. This can be 
83  	 * overruled by using the {@link Transformer} annotation.
84  	 * 
85  	 * The class must contains at lease one method annotated as {@link Transformer}
86  	 * or {@link DefaultTransformer} and conform the following rules:
87  	 * 
88  	 * <ul>
89  	 * 	<li>The method must have a return value</li>
90  	 * 	<li>The first parameter must be a {@link RenderContext}</li>
91  	 * 	<li>There must be a second parameter that can be of any type. It contains the value to be transformed.</li>
92  	 * </ul>
93  	 * 
94  	 * @param transformer the transformer class
95  	 * @throws IllegalArgumentException on occasion
96  	 */
97  	public void add(Object transformer) throws IllegalArgumentException;
98  	
99  	public Object getInstance(String name);
100 	
101 	public Method getMethod(String name, String extension, int numberOfParameters);
102 	
103 }