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();
}