Search in sources :

Example 11 with ApplicationDescriptor

use of org.qi4j.api.structure.ApplicationDescriptor in project qi4j-sdk by Qi4j.

the class Model2XML method map.

@Override
public Document map(ApplicationDescriptor Application) {
    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        final Document document = builder.newDocument();
        final Stack<Node> current = new Stack<Node>();
        current.push(document);
        Application.accept(new HierarchicalVisitor<Object, Object, DOMException>() {

            @Override
            public boolean visitEnter(Object visited) throws DOMException {
                String mapping = simpleMappings.get(visited.getClass().getSimpleName());
                if (mapping != null) {
                    Node node = document.createElement("mapping");
                    current.push(node);
                } else if (visited instanceof ApplicationDescriptor) {
                    ApplicationDescriptor applicationDescriptor = (ApplicationDescriptor) visited;
                    Node application = document.createElement("application");
                    addAttribute("name", applicationDescriptor.name(), application);
                    current.push(application);
                } else if (visited instanceof LayerDescriptor) {
                    LayerDescriptor layerDescriptor = (LayerDescriptor) visited;
                    Node layer = document.createElement("layer");
                    addAttribute("name", layerDescriptor.name(), layer);
                    current.push(layer);
                } else if (visited instanceof ModuleDescriptor) {
                    ModuleDescriptor moduleDescriptor = (ModuleDescriptor) visited;
                    Node module = document.createElement("module");
                    addAttribute("name", moduleDescriptor.name(), module);
                    current.push(module);
                } else if (visited instanceof TransientDescriptor) {
                    TransientDescriptor descriptor = (TransientDescriptor) visited;
                    Node node = document.createElement("transient");
                    addAttribute("type", first(descriptor.types()).getName(), node);
                    addAttribute("visibility", descriptor.visibility().name(), node);
                    current.push(node);
                } else if (visited instanceof MethodDescriptor) {
                    MethodDescriptor descriptor = (MethodDescriptor) visited;
                    Node node = document.createElement("method");
                    addAttribute("name", descriptor.method().getName(), node);
                    current.push(node);
                } else if (visited instanceof MixinDescriptor) {
                    MixinDescriptor descriptor = (MixinDescriptor) visited;
                    Node node = document.createElement("mixin");
                    addAttribute("class", descriptor.mixinClass().getName(), node);
                    current.push(node);
                } else if (visited instanceof DependencyDescriptor) {
                    DependencyDescriptor descriptor = (DependencyDescriptor) visited;
                    Node node = document.createElement("dependency");
                    addAttribute("annotation", descriptor.injectionAnnotation().toString(), node);
                    addAttribute("injection", descriptor.injectionType().toString(), node);
                    addAttribute("optional", Boolean.toString(descriptor.optional()), node);
                    current.push(node);
                } else {
                    Element element = document.createElement(visited.getClass().getSimpleName());
                    current.push(element);
                }
                return true;
            }

            @Override
            public boolean visitLeave(Object visited) throws DOMException {
                Node node = current.pop();
                if (node.getChildNodes().getLength() == 0 && node.getAttributes().getLength() == 0) {
                    return true;
                }
                current.peek().appendChild(node);
                return true;
            }

            @Override
            public boolean visit(Object visited) throws DOMException {
                Element element;
                if (visited instanceof DependencyDescriptor) {
                    DependencyDescriptor descriptor = (DependencyDescriptor) visited;
                    element = document.createElement("dependency");
                    addAttribute("annotation", descriptor.injectionAnnotation().toString(), element);
                    addAttribute("injection", descriptor.injectionType().toString(), element);
                    addAttribute("optional", Boolean.toString(descriptor.optional()), element);
                } else {
                    element = document.createElement(visited.getClass().getSimpleName());
                }
                current.peek().appendChild(element);
                return true;
            }

            private void addAttribute(String name, String value, Node node) {
                Attr attr = document.createAttribute(name);
                attr.setValue(value);
                ((Element) node).setAttributeNode(attr);
            }
        });
        return document;
    } catch (Exception exception) {
        throw new IllegalArgumentException(exception);
    }
}
Also used : DependencyDescriptor(org.qi4j.api.composite.DependencyDescriptor) Node(org.w3c.dom.Node) Element(org.w3c.dom.Element) MixinDescriptor(org.qi4j.api.mixin.MixinDescriptor) Document(org.w3c.dom.Document) MethodDescriptor(org.qi4j.api.composite.MethodDescriptor) ApplicationDescriptor(org.qi4j.api.structure.ApplicationDescriptor) Attr(org.w3c.dom.Attr) DOMException(org.w3c.dom.DOMException) Stack(java.util.Stack) DOMException(org.w3c.dom.DOMException) ModuleDescriptor(org.qi4j.api.structure.ModuleDescriptor) DocumentBuilder(javax.xml.parsers.DocumentBuilder) TransientDescriptor(org.qi4j.api.composite.TransientDescriptor) LayerDescriptor(org.qi4j.api.structure.LayerDescriptor)

Example 12 with ApplicationDescriptor

use of org.qi4j.api.structure.ApplicationDescriptor in project qi4j-sdk by Qi4j.

the class Main method main.

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, AssemblyException {
    String applicationAssemblerName = args[0];
    System.out.println("Assembler:" + applicationAssemblerName);
    Class applicationAssemblerClass = Class.forName(applicationAssemblerName);
    ApplicationAssembler assembler = (ApplicationAssembler) applicationAssemblerClass.newInstance();
    Energy4Java energy4Java = new Energy4Java();
    ApplicationDescriptor application = energy4Java.newApplicationModel(assembler);
    new Envisage().run(application);
}
Also used : ApplicationAssembler(org.qi4j.bootstrap.ApplicationAssembler) Energy4Java(org.qi4j.bootstrap.Energy4Java) ApplicationDescriptor(org.qi4j.api.structure.ApplicationDescriptor)

Aggregations

ApplicationDescriptor (org.qi4j.api.structure.ApplicationDescriptor)12 Energy4Java (org.qi4j.bootstrap.Energy4Java)8 ApplicationAssembler (org.qi4j.bootstrap.ApplicationAssembler)5 Test (org.junit.Test)4 ApplicationAssembly (org.qi4j.bootstrap.ApplicationAssembly)4 ApplicationAssemblyFactory (org.qi4j.bootstrap.ApplicationAssemblyFactory)4 AssemblyException (org.qi4j.bootstrap.AssemblyException)4 Application (org.qi4j.api.structure.Application)3 LayerDescriptor (org.qi4j.api.structure.LayerDescriptor)3 LayerAssembly (org.qi4j.bootstrap.LayerAssembly)3 Envisage (org.qi4j.envisage.Envisage)3 MethodDescriptor (org.qi4j.api.composite.MethodDescriptor)2 TransientDescriptor (org.qi4j.api.composite.TransientDescriptor)2 EntityDescriptor (org.qi4j.api.entity.EntityDescriptor)2 ModuleDescriptor (org.qi4j.api.structure.ModuleDescriptor)2 Document (org.w3c.dom.Document)2 HashMap (java.util.HashMap)1 Stack (java.util.Stack)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 Transformer (javax.xml.transform.Transformer)1