1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.javagen.agile.core.emitter.context;
17
18 import org.javagen.agile.core.context.ContextHolderStack;
19 import org.javagen.agile.core.context.DefaultContext;
20 import org.javagen.agile.core.emitter.Emitter;
21 import org.javagen.agile.core.emitter.template.NanoTemplateCallback;
22 import org.javagen.agile.core.model.Model;
23 import org.javagen.agile.core.context.Keys;
24
25 /***
26 * Adds a local context to the context stack providing a place to put a standard set of
27 * values from the current model, including:
28 * <ul>
29 * <li><code>model</code> = the current model instance</li>
30 * <li><code>modelName</code> = the current model name</li>
31 * <li><code>nanoTemplate</code> - a NanoTemplate callback instance</li>
32 * </ul>
33 * TODO the ooNamingService provides most of the NanoTemplate functionality - can we refactor NanoTemplate out of the templates?
34 *
35 * @author Richard Easterling
36 */
37 public class EmitterLocalContextLoader extends EmitterContextStackLoader {
38
39 public void pushAll(ContextHolderStack context, Model currentModel, Emitter emitterContextHolder) {
40 super.pushAll(context, currentModel, emitterContextHolder);
41 DefaultContext localContext = new DefaultContext();
42 localContext.put(Keys.MODEL.toString(), currentModel);
43 localContext.put(Keys.MODEL_NAME.toString(), currentModel.getName());
44 localContext.put(Keys.NANO_TEMPLATE.toString(), new NanoTemplateCallback(context));
45 context.push(localContext);
46 }
47
48 public void popAll(ContextHolderStack context, Model modelTree, Emitter emitterContextHolder) {
49 context.pop();
50 super.popAll(context, modelTree, emitterContextHolder);
51 }
52
53 }