KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > script > groovy > GroovyScriptGenerator


1 package org.nanocontainer.script.groovy;
2
3 import org.picocontainer.ComponentAdapter;
4 import org.picocontainer.MutablePicoContainer;
5
6 import java.util.Collection JavaDoc;
7 import java.util.Iterator JavaDoc;
8
9 /**
10  * This class can generate a Groovy script from a preconfigured container.
11  * This script can be passed to {@link GroovyContainerBuilder} to recreate
12  * a new container with the same configuration.
13  * <p/>
14  * This is practical in situations where a container configuration needs
15  * to be saved.
16  *
17  * @author Aslak Helles&oslash;y
18  * @version $Revision: 3144 $
19  */

20 public class GroovyScriptGenerator {
21     // This implementation is ugly and naive. But it's all I need for now.
22
// When there are more requirements (in the form of tests), we can improve this.
23
public String JavaDoc generateScript(MutablePicoContainer pico) {
24         StringBuffer JavaDoc groovy = new StringBuffer JavaDoc();
25         groovy.append("pico = new org.nanocontainer.reflection.DefaultNanoPicoContainer()\n");
26
27         Collection JavaDoc componentAdapters = pico.getComponentAdapters();
28         for (Iterator JavaDoc iterator = componentAdapters.iterator(); iterator.hasNext();) {
29             ComponentAdapter componentAdapter = (ComponentAdapter) iterator.next();
30
31             Object JavaDoc componentKey = componentAdapter.getComponentKey();
32             String JavaDoc groovyKey = null;
33             if (componentKey instanceof Class JavaDoc) {
34                 groovyKey = ((Class JavaDoc) componentKey).getName();
35             } else if (componentKey instanceof String JavaDoc) {
36                 groovyKey = "\"" + componentKey + "\"";
37             }
38
39             Object JavaDoc componentInstance = componentAdapter.getComponentInstance(pico);
40
41             if (componentInstance instanceof String JavaDoc) {
42                 groovy.append("pico.registerComponentInstance(" + groovyKey + ", \"" + componentInstance + "\")\n");
43             } else {
44                 groovy.append("pico.registerComponentImplementation(" + groovyKey + ", " + componentInstance.getClass().getName() + ")\n");
45             }
46         }
47         return groovy.toString();
48     }
49 }
Popular Tags