Fixed two issues with Requirement when converting attributes to an LDAP
filter it was adding an unnecessary "&" operator for single attributes
and it was accidentally renaming all attributes with a value of type
Version to "version" rather than keeping the actual name of the
attribute.
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@517056 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
index 9c41ea7..7a2d97b 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/Requirement.java
@@ -243,8 +243,11 @@
private Filter convertToFilter()
{
- StringBuffer sb = new StringBuffer("(&");
-
+ StringBuffer sb = new StringBuffer();
+ if ((m_attributes != null) && (m_attributes.length > 1))
+ {
+ sb.append("(&");
+ }
for (int i = 0; (m_attributes != null) && (i < m_attributes.length); i++)
{
// If this is a package import, then convert wild-carded
@@ -265,13 +268,17 @@
VersionRange vr = (VersionRange) m_attributes[i].getValue();
if (vr.isLowInclusive())
{
- sb.append("(version>=");
+ sb.append("(");
+ sb.append(m_attributes[i].getName());
+ sb.append(">=");
sb.append(vr.getLow().toString());
sb.append(")");
}
else
{
- sb.append("(!(version<=");
+ sb.append("(!(");
+ sb.append(m_attributes[i].getName());
+ sb.append("<=");
sb.append(vr.getLow().toString());
sb.append("))");
}
@@ -280,13 +287,17 @@
{
if (vr.isHighInclusive())
{
- sb.append("(version<=");
+ sb.append("(");
+ sb.append(m_attributes[i].getName());
+ sb.append("<=");
sb.append(vr.getHigh().toString());
sb.append(")");
}
else
{
- sb.append("(!(version>=");
+ sb.append("(!(");
+ sb.append(m_attributes[i].getName());
+ sb.append(">=");
sb.append(vr.getHigh().toString());
sb.append("))");
}
@@ -302,7 +313,10 @@
}
}
- sb.append(")");
+ if ((m_attributes != null) && (m_attributes.length > 1))
+ {
+ sb.append(")");
+ }
try
{
@@ -320,4 +334,4 @@
{
return getNamespace() + "; " + getFilter().toString();
}
-}
\ No newline at end of file
+}