blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java [200:426]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        } else if (node instanceof Attr && nodeNameEquals(node, DAMPING_ATTRIBUTE)) {
            return decorateDamping(node, component, context);
        } else if (node instanceof Attr && nodeNameEquals(node, LIFECYCLE_ATTRIBUTE)) {
            return decorateLifecycle(node, component, context);
        } else if (node instanceof Attr && nodeNameEquals(node, RAW_CONVERSION_ATTRIBUTE)) {
            return decorateRawConversion(node, component, context);
        } else if (node instanceof Element && nodeNameEquals(node, ARGUMENT)) {
            return parseBeanArgument(context, (Element) node);
        } else {
            throw new ComponentDefinitionException("Unsupported node: " + node.getNodeName());
        }
    }

    private ComponentMetadata parseNullProxy(Element element, ParserContext context) {
        MutableBeanMetadata mb = context.createMetadata(MutableBeanMetadata.class);
        mb.setRuntimeClass(NullProxy.class);
        mb.addArgument(createRef(context, "blueprintContainer"), null, -1);
        mb.setId(element.hasAttribute(ID_ATTRIBUTE) ? element.getAttribute(ID_ATTRIBUTE) : "null-proxy");
        return mb;
    }

    private ComponentMetadata decorateAdditionalInterfaces(Node node, ComponentMetadata component,
                                                           ParserContext context) {
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableReferenceMetadata");
        }
        MutableReferenceMetadata mrm = (MutableReferenceMetadata) component;
        List<String> list = new ArrayList<String>();
        Node nd = node.getFirstChild();
        while (nd != null) {
            if (nd instanceof Element && nodeNameEquals(nd, INTERFACE_VALUE)) {
                list.add(((Element) nd).getTextContent());
            }
            nd = nd.getNextSibling();
        }
        mrm.setExtraInterfaces(list);
        return component;
    }

    private ComponentMetadata decorateDefaultBean(Node node,
        ComponentMetadata component, ParserContext context) 
    {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
      
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableReferenceMetadata");
        }
        
        String value = ((Attr) node).getValue();
        ((MutableReferenceMetadata) component).setDefaultBean(value);
        return component;
    }

    private ComponentMetadata decorateFieldInjection(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }
        
        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }
        
        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setFieldInjection("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata decorateNonStandardSetters(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }

        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setNonStandardSetters("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata decorateRole(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }
        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableBeanMetadata");
        }
        boolean processor = false;
        String value = ((Attr) node).getValue();
        String[] flags = value.trim().split(" ");
        for (String flag : flags) {
            if (ROLE_PROCESSOR.equals(flag)) {
                processor = true;
            } else {
                throw new ComponentDefinitionException("Unknown proxy method: " + flag);
            }
        }
        ((MutableBeanMetadata) component).setProcessor(processor);
        return component;
    }

    private ComponentMetadata decorateProxyMethod(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> or <reference-list> element");
        }
        if (!(component instanceof MutableServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableServiceReferenceMetadata");
        }
        int method = 0;
        String value = ((Attr) node).getValue();
        String[] flags = value.trim().split(" ");
        for (String flag : flags) {
            if (PROXY_METHOD_DEFAULT.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_DEFAULT;
            } else if (PROXY_METHOD_CLASSES.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_CLASSES;
            } else if (PROXY_METHOD_GREEDY.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_GREEDY;
            } else {
                throw new ComponentDefinitionException("Unknown proxy method: " + flag);
            }
        }
        if ((method & ExtendedReferenceListMetadata.PROXY_METHOD_GREEDY) != 0 && !(component instanceof ReferenceListMetadata)) {
            throw new ComponentDefinitionException("Greedy proxying is only available for <reference-list> element");
        }
        ((MutableServiceReferenceMetadata) component).setProxyMethod(method);
        return component;
    }

    private ComponentMetadata decorateFilter(Node node,
                                             ComponentMetadata component, ParserContext context)
    {
        if (!(component instanceof ServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> or <reference-list> element");
        }

        if (!(component instanceof MutableServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableServiceReferenceMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableServiceReferenceMetadata) component).setExtendedFilter(createValue(context, value));
        return component;
    }

    private ComponentMetadata decorateDamping(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableReferenceMetadata");
        }
        int damping = ExtendedReferenceMetadata.DAMPING_GREEDY;
        String value = ((Attr) node).getValue();
        if (DAMPING_RELUCTANT.equals(value)) {
            damping = ExtendedReferenceMetadata.DAMPING_RELUCTANT;
        } else if (!DAMPING_GREEDY.equals(value)) {
            throw new ComponentDefinitionException("Unknown damping method: " + value);
        }
        ((MutableReferenceMetadata) component).setDamping(damping);
        return component;
    }

    private ComponentMetadata decorateLifecycle(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableReferenceMetadata");
        }
        int lifecycle = ExtendedReferenceMetadata.LIFECYCLE_DYNAMIC;
        String value = ((Attr) node).getValue();
        if (LIFECYCLE_STATIC.equals(value)) {
            lifecycle = ExtendedReferenceMetadata.LIFECYCLE_STATIC;
        } else if (!LIFECYCLE_DYNAMIC.equals(value)) {
            throw new ComponentDefinitionException("Unknown lifecycle method: " + value);
        }
        ((MutableReferenceMetadata) component).setLifecycle(lifecycle);
        return component;
    }

    private ComponentMetadata decorateRawConversion(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }

        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setRawConversion("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata parseBeanArgument(ParserContext context, Element element) {
        MutableBeanMetadata mbm = (MutableBeanMetadata) context.getEnclosingComponent();
        BeanArgument arg = context.parseElement(BeanArgument.class, mbm, element);
        int index = 0;
        for (Node node = element.getPreviousSibling(); node != null; node = node.getPreviousSibling()) {
            if (nodeNameEquals(node, ARGUMENT)) {
                index++;
            }
        }
        List<BeanArgument> args = new ArrayList<BeanArgument>(mbm.getArguments());
        if (index == args.size()) {
            mbm.addArgument(arg);
        } else {
            for (BeanArgument ba : args) {
                mbm.removeArgument(ba);
            }
            args.add(index, arg);
            for (BeanArgument ba : args) {
                mbm.addArgument(ba);
            }
        }
        return mbm;
    }

    private Metadata parsePropertyPlaceholder(ParserContext context, Element element) {
        MutableBeanMetadata metadata = context.createMetadata(MutableBeanMetadata.class);
        metadata.setProcessor(true);
        metadata.setId(getId(context, element));
        metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java [184:410]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        } else if (node instanceof Attr && nodeNameEquals(node, DAMPING_ATTRIBUTE)) {
            return decorateDamping(node, component, context);
        } else if (node instanceof Attr && nodeNameEquals(node, LIFECYCLE_ATTRIBUTE)) {
            return decorateLifecycle(node, component, context);
        } else if (node instanceof Attr && nodeNameEquals(node, RAW_CONVERSION_ATTRIBUTE)) {
            return decorateRawConversion(node, component, context);
        } else if (node instanceof Element && nodeNameEquals(node, ARGUMENT)) {
            return parseBeanArgument(context, (Element) node);
        } else {
            throw new ComponentDefinitionException("Unsupported node: " + node.getNodeName());
        }
    }

    private ComponentMetadata parseNullProxy(Element element, ParserContext context) {
        MutableBeanMetadata mb = context.createMetadata(MutableBeanMetadata.class);
        mb.setRuntimeClass(NullProxy.class);
        mb.addArgument(createRef(context, "blueprintContainer"), null, -1);
        mb.setId(element.hasAttribute(ID_ATTRIBUTE) ? element.getAttribute(ID_ATTRIBUTE) : "null-proxy");
        return mb;
    }

    private ComponentMetadata decorateAdditionalInterfaces(Node node, ComponentMetadata component,
                                                           ParserContext context) {
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableReferenceMetadata");
        }
        MutableReferenceMetadata mrm = (MutableReferenceMetadata) component;
        List<String> list = new ArrayList<String>();
        Node nd = node.getFirstChild();
        while (nd != null) {
            if (nd instanceof Element && nodeNameEquals(nd, INTERFACE_VALUE)) {
                list.add(((Element) nd).getTextContent());
            }
            nd = nd.getNextSibling();
        }
        mrm.setExtraInterfaces(list);
        return component;
    }

    private ComponentMetadata decorateDefaultBean(Node node,
        ComponentMetadata component, ParserContext context) 
    {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
      
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableReferenceMetadata");
        }
        
        String value = ((Attr) node).getValue();
        ((MutableReferenceMetadata) component).setDefaultBean(value);
        return component;
    }

    private ComponentMetadata decorateFieldInjection(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }
        
        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }
        
        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setFieldInjection("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata decorateNonStandardSetters(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }

        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setNonStandardSetters("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata decorateRole(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }
        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableBeanMetadata");
        }
        boolean processor = false;
        String value = ((Attr) node).getValue();
        String[] flags = value.trim().split(" ");
        for (String flag : flags) {
            if (ROLE_PROCESSOR.equals(flag)) {
                processor = true;
            } else {
                throw new ComponentDefinitionException("Unknown proxy method: " + flag);
            }
        }
        ((MutableBeanMetadata) component).setProcessor(processor);
        return component;
    }

    private ComponentMetadata decorateProxyMethod(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> or <reference-list> element");
        }
        if (!(component instanceof MutableServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableServiceReferenceMetadata");
        }
        int method = 0;
        String value = ((Attr) node).getValue();
        String[] flags = value.trim().split(" ");
        for (String flag : flags) {
            if (PROXY_METHOD_DEFAULT.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_DEFAULT;
            } else if (PROXY_METHOD_CLASSES.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_CLASSES;
            } else if (PROXY_METHOD_GREEDY.equals(flag)) {
                method += ExtendedReferenceListMetadata.PROXY_METHOD_GREEDY;
            } else {
                throw new ComponentDefinitionException("Unknown proxy method: " + flag);
            }
        }
        if ((method & ExtendedReferenceListMetadata.PROXY_METHOD_GREEDY) != 0 && !(component instanceof ReferenceListMetadata)) {
            throw new ComponentDefinitionException("Greedy proxying is only available for <reference-list> element");
        }
        ((MutableServiceReferenceMetadata) component).setProxyMethod(method);
        return component;
    }

    private ComponentMetadata decorateFilter(Node node,
                                             ComponentMetadata component, ParserContext context)
    {
        if (!(component instanceof ServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> or <reference-list> element");
        }

        if (!(component instanceof MutableServiceReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableServiceReferenceMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableServiceReferenceMetadata) component).setExtendedFilter(createValue(context, value));
        return component;
    }

    private ComponentMetadata decorateDamping(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableReferenceMetadata");
        }
        int damping = ExtendedReferenceMetadata.DAMPING_GREEDY;
        String value = ((Attr) node).getValue();
        if (DAMPING_RELUCTANT.equals(value)) {
            damping = ExtendedReferenceMetadata.DAMPING_RELUCTANT;
        } else if (!DAMPING_GREEDY.equals(value)) {
            throw new ComponentDefinitionException("Unknown damping method: " + value);
        }
        ((MutableReferenceMetadata) component).setDamping(damping);
        return component;
    }

    private ComponentMetadata decorateLifecycle(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof ReferenceMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <reference> element");
        }
        if (!(component instanceof MutableReferenceMetadata)) {
            throw new ComponentDefinitionException("Expected an instance of MutableReferenceMetadata");
        }
        int lifecycle = ExtendedReferenceMetadata.LIFECYCLE_DYNAMIC;
        String value = ((Attr) node).getValue();
        if (LIFECYCLE_STATIC.equals(value)) {
            lifecycle = ExtendedReferenceMetadata.LIFECYCLE_STATIC;
        } else if (!LIFECYCLE_DYNAMIC.equals(value)) {
            throw new ComponentDefinitionException("Unknown lifecycle method: " + value);
        }
        ((MutableReferenceMetadata) component).setLifecycle(lifecycle);
        return component;
    }

    private ComponentMetadata decorateRawConversion(Node node, ComponentMetadata component, ParserContext context) {
        if (!(component instanceof BeanMetadata)) {
            throw new ComponentDefinitionException("Attribute " + node.getNodeName() + " can only be used on a <bean> element");
        }

        if (!(component instanceof MutableBeanMetadata)) {
            throw new ComponentDefinitionException("Expected an instanceof MutableBeanMetadata");
        }

        String value = ((Attr) node).getValue();
        ((MutableBeanMetadata) component).setRawConversion("true".equals(value) || "1".equals(value));
        return component;
    }

    private ComponentMetadata parseBeanArgument(ParserContext context, Element element) {
        MutableBeanMetadata mbm = (MutableBeanMetadata) context.getEnclosingComponent();
        BeanArgument arg = context.parseElement(BeanArgument.class, mbm, element);
        int index = 0;
        for (Node node = element.getPreviousSibling(); node != null; node = node.getPreviousSibling()) {
            if (nodeNameEquals(node, ARGUMENT)) {
                index++;
            }
        }
        List<BeanArgument> args = new ArrayList<BeanArgument>(mbm.getArguments());
        if (index == args.size()) {
            mbm.addArgument(arg);
        } else {
            for (BeanArgument ba : args) {
                mbm.removeArgument(ba);
            }
            args.add(index, arg);
            for (BeanArgument ba : args) {
                mbm.addArgument(ba);
            }
        }
        return mbm;
    }

    private Metadata parsePropertyPlaceholder(ParserContext context, Element element) {
        MutableBeanMetadata metadata = context.createMetadata(MutableBeanMetadata.class);
        metadata.setProcessor(true);
        metadata.setId(getId(context, element));
        metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



