01: package org.apache.velocity.app.event;
02:
03: /*
04: * Licensed to the Apache Software Foundation (ASF) under one
05: * or more contributor license agreements. See the NOTICE file
06: * distributed with this work for additional information
07: * regarding copyright ownership. The ASF licenses this file
08: * to you under the Apache License, Version 2.0 (the
09: * "License"); you may not use this file except in compliance
10: * with the License. You may obtain a copy of the License at
11: *
12: * http://www.apache.org/licenses/LICENSE-2.0
13: *
14: * Unless required by applicable law or agreed to in writing,
15: * software distributed under the License is distributed on an
16: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17: * KIND, either express or implied. See the License for the
18: * specific language governing permissions and limitations
19: * under the License.
20: */
21:
22: import org.apache.velocity.context.Context;
23: import org.apache.velocity.util.ContextAware;
24:
25: /**
26: * Reference 'Stream insertion' event handler. Called with object
27: * that will be inserted into stream via value.toString().
28: *
29: * Please return an Object that will toString() nicely :)
30: *
31: * @author <a href="mailto:wglass@forio.com">Will Glass-Husain</a>
32: * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
33: * @version $Id: ReferenceInsertionEventHandler.java 470256 2006-11-02 07:20:36Z wglass $
34: */
35: public interface ReferenceInsertionEventHandler extends EventHandler {
36: /**
37: * A call-back which is executed during Velocity merge before a reference
38: * value is inserted into the output stream. All registered
39: * ReferenceInsertionEventHandlers are called in sequence. If no
40: * ReferenceInsertionEventHandlers are are registered then reference value
41: * is inserted into the output stream as is.
42: *
43: * @param reference Reference from template about to be inserted.
44: * @param value Value about to be inserted (after its <code>toString()</code>
45: * method is called).
46: * @return Object on which <code>toString()</code> should be called for
47: * output.
48: */
49: public Object referenceInsert(String reference, Object value);
50:
51: /**
52: * Defines the execution strategy for referenceInsert
53: */
54: static class referenceInsertExecutor implements
55: EventHandlerMethodExecutor {
56: private Context context;
57: private String reference;
58: private Object value;
59:
60: referenceInsertExecutor(Context context, String reference,
61: Object value) {
62: this .context = context;
63: this .reference = reference;
64: this .value = value;
65: }
66:
67: /**
68: * Call the method referenceInsert()
69: *
70: * @param handler call the appropriate method on this handler
71: */
72: public void execute(EventHandler handler) {
73: ReferenceInsertionEventHandler eh = (ReferenceInsertionEventHandler) handler;
74:
75: if (eh instanceof ContextAware)
76: ((ContextAware) eh).setContext(context);
77:
78: /**
79: * Every successive call will alter the same value
80: */
81: value = ((ReferenceInsertionEventHandler) handler)
82: .referenceInsert(reference, value);
83: }
84:
85: public Object getReturnValue() {
86: return value;
87: }
88:
89: /**
90: * Continue to end of event handler iteration
91: *
92: * @return always returns false
93: */
94: public boolean isDone() {
95: return false;
96: }
97: }
98:
99: }
|