private static String createOsgiFilter()

in blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/AbstractServiceReferenceRecipe.java [603:662]


    private static String createOsgiFilter(ServiceReferenceMetadata metadata, String extendedFilter) {
        List<String> members = new ArrayList<String>();
        // Handle filter
        String flt = metadata.getFilter();
        if (flt != null && flt.length() > 0) {
            if (!flt.startsWith("(")) {
                flt = "(" + flt + ")";
            }
            members.add(flt);
        }
        // Handle extended filter
        if (extendedFilter != null && extendedFilter.length() > 0) {
            if (!extendedFilter.startsWith("(")) {
                extendedFilter = "(" + extendedFilter + ")";
            }
            members.add(extendedFilter);
        }
        // Handle interfaces
        String interfaceName = metadata.getInterface();
        Class runtimeClass = getRuntimeClass(metadata);
        if (runtimeClass != null) {
            interfaceName = runtimeClass.getName();
        }
        if (interfaceName != null && interfaceName.length() > 0) {
            if (metadata instanceof ExtendedReferenceMetadata) {
                ExtendedReferenceMetadata erm = (ExtendedReferenceMetadata) metadata;
                if (!erm.getExtraInterfaces().isEmpty()) {
                    StringBuilder sb = new StringBuilder("(&");
                    sb.append("(" + Constants.OBJECTCLASS + "=" + interfaceName + ")");
                    for (String s : erm.getExtraInterfaces()) {
                        sb.append("(" + Constants.OBJECTCLASS + "=" + s + ")");                        
                    }
                    sb.append(")");
                    members.add(sb.toString());
                } else {
                    members.add("(" + Constants.OBJECTCLASS + "=" + interfaceName + ")");                    
                }
            } else {
                members.add("(" + Constants.OBJECTCLASS + "=" + interfaceName + ")");
            }
        }
        // Handle component name
        String componentName = metadata.getComponentName();
        if (componentName != null && componentName.length() > 0) {
            members.add("(" + BlueprintConstants.COMPONENT_NAME_PROPERTY + "=" + componentName + ")");
        }
        // Create filter
        if (members.isEmpty()) {
            throw new IllegalStateException("No constraints were specified on the service reference");
        }
        if (members.size() == 1) {
            return members.get(0);
        }
        StringBuilder sb = new StringBuilder("(&");
        for (String member : members) {
            sb.append(member);
        }
        sb.append(")");
        return sb.toString();
    }