Search in sources :

Example 1 with MethodDescriptor

use of org.qi4j.api.composite.MethodDescriptor in project qi4j-sdk by Qi4j.

the class ApplicationVisitor method visitEnter.

@Override
public boolean visitEnter(Object visited) throws RuntimeException {
    if (visited instanceof ApplicationDescriptor) {
        ApplicationDescriptor applicationDescriptor = (ApplicationDescriptor) visited;
        appUri = context.createApplicationUri(applicationDescriptor.name());
        context.setNameAndType(appUri, applicationDescriptor.name(), Qi4jRdf.TYPE_APPLICATION);
    }
    if (visited instanceof LayerDescriptor) {
        LayerDescriptor layerDescriptor = (LayerDescriptor) visited;
        layerUri = context.createLayerUri(appUri, layerDescriptor.name());
        context.setNameAndType(layerUri, layerDescriptor.name(), Qi4jRdf.TYPE_LAYER);
        context.addRelationship(appUri, Qi4jRdf.RELATIONSHIP_LAYER, layerUri);
    }
    if (visited instanceof ModuleDescriptor) {
        ModuleDescriptor moduleDescriptor = (ModuleDescriptor) visited;
        moduleUri = context.createModuleUri(layerUri, moduleDescriptor.name());
        context.setNameAndType(layerUri, moduleDescriptor.name(), Qi4jRdf.TYPE_MODULE);
        context.addRelationship(layerUri, Qi4jRdf.RELATIONSHIP_MODULE, moduleUri);
    }
    if (visited instanceof TransientDescriptor) {
        TransientDescriptor transientDescriptor = (TransientDescriptor) visited;
        compositeUri = context.createCompositeUri(moduleUri, first(transientDescriptor.types()));
        context.addType(compositeUri, Qi4jRdf.TYPE_COMPOSITE);
        context.addRelationship(moduleUri, Qi4jRdf.RELATIONSHIP_COMPOSITE, compositeUri);
    }
    if (visited instanceof EntityDescriptor) {
        EntityDescriptor entityDescriptor = (EntityDescriptor) visited;
        compositeUri = context.createCompositeUri(moduleUri, first(entityDescriptor.types()));
        context.addType(compositeUri, Qi4jRdf.TYPE_ENTITY);
        context.addRelationship(moduleUri, Qi4jRdf.RELATIONSHIP_ENTITY, compositeUri);
    }
    if (visited instanceof ObjectDescriptor) {
        ObjectDescriptor objectDescriptor = (ObjectDescriptor) visited;
        compositeUri = context.createCompositeUri(moduleUri, first(objectDescriptor.types()));
        context.addType(compositeUri, Qi4jRdf.TYPE_OBJECT);
        context.addRelationship(moduleUri, Qi4jRdf.RELATIONSHIP_OBJECT, compositeUri);
    }
    if (visited instanceof MethodDescriptor) {
        MethodDescriptor compositeMethodDescriptor = (MethodDescriptor) visited;
        String compositeMethodUri = context.createCompositeMethodUri(compositeUri, compositeMethodDescriptor.method());
        context.addType(compositeMethodUri, Qi4jRdf.TYPE_METHOD);
        context.addRelationship(compositeUri, Qi4jRdf.RELATIONSHIP_METHOD, compositeMethodUri);
    }
    return true;
}
Also used : ModuleDescriptor(org.qi4j.api.structure.ModuleDescriptor) EntityDescriptor(org.qi4j.api.entity.EntityDescriptor) TransientDescriptor(org.qi4j.api.composite.TransientDescriptor) ObjectDescriptor(org.qi4j.api.object.ObjectDescriptor) MethodDescriptor(org.qi4j.api.composite.MethodDescriptor) ApplicationDescriptor(org.qi4j.api.structure.ApplicationDescriptor) LayerDescriptor(org.qi4j.api.structure.LayerDescriptor)

Example 2 with MethodDescriptor

use of org.qi4j.api.composite.MethodDescriptor 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 3 with MethodDescriptor

use of org.qi4j.api.composite.MethodDescriptor in project qi4j-sdk by Qi4j.

the class CompositeDetailDescriptor method getMethodDescriptor.

/**
     * Return method detail descriptor of the requested method. Returns {@code null} if not found.
     *
     * @param aMethod Method to look up. This argument must not be {@code null}.
     *
     * @return method detail descriptor of the requested method.
     *
     * @since 0.5
     */
public final CompositeMethodDetailDescriptor getMethodDescriptor(Method aMethod) {
    for (CompositeMethodDetailDescriptor descriptor : methods) {
        MethodDescriptor methodDescriptor = descriptor.descriptor();
        Method method = methodDescriptor.method();
        if (method.equals(aMethod)) {
            return descriptor;
        }
    }
    return null;
}
Also used : Method(java.lang.reflect.Method) MethodDescriptor(org.qi4j.api.composite.MethodDescriptor)

Aggregations

MethodDescriptor (org.qi4j.api.composite.MethodDescriptor)3 TransientDescriptor (org.qi4j.api.composite.TransientDescriptor)2 ApplicationDescriptor (org.qi4j.api.structure.ApplicationDescriptor)2 LayerDescriptor (org.qi4j.api.structure.LayerDescriptor)2 ModuleDescriptor (org.qi4j.api.structure.ModuleDescriptor)2 Method (java.lang.reflect.Method)1 Stack (java.util.Stack)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 DependencyDescriptor (org.qi4j.api.composite.DependencyDescriptor)1 EntityDescriptor (org.qi4j.api.entity.EntityDescriptor)1 MixinDescriptor (org.qi4j.api.mixin.MixinDescriptor)1 ObjectDescriptor (org.qi4j.api.object.ObjectDescriptor)1 Attr (org.w3c.dom.Attr)1 DOMException (org.w3c.dom.DOMException)1 Document (org.w3c.dom.Document)1 Element (org.w3c.dom.Element)1 Node (org.w3c.dom.Node)1