Author: gnodet
Date: Thu Mar 11 12:38:58 2010
New Revision: 921827
URL: http://svn.apache.org/viewvc?rev=921827&view=rev
Log:
FELIX-2175: Improve the Blueprint component to parse / introspect blueprint
configuration files and generate OBR service requirements / capabilities
accordingly
Modified:
felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
felix/trunk/bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/BundleInfo.java
felix/trunk/bundleplugin/src/main/resources/org/apache/felix/bundleplugin/blueprint.xsl
felix/trunk/bundleplugin/src/test/resources/OSGI-INF/blueprint/bp.xml
Modified:
felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
URL:
http://svn.apache.org/viewvc/felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java?rev=921827&r1=921826&r2=921827&view=diff
==============================================================================
---
felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
(original)
+++
felix/trunk/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BlueprintPlugin.java
Thu Mar 11 12:38:58 2010
@@ -140,7 +140,14 @@ public class BlueprintPlugin implements
sb.append(a.getName());
for (Map.Entry<String, String> prop :
a.getProperties().entrySet())
{
-
sb.append(';').append(prop.getKey()).append("=").append(prop.getValue());
+ sb.append(';').append(prop.getKey()).append("=");
+ if (prop.getValue().matches("[0-9a-zA-Z_-]+")) {
+ sb.append(prop.getValue());
+ } else {
+ sb.append("\"");
+ sb.append(prop.getValue().replace("\"", "\\\""));
+ sb.append("\"");
+ }
}
}
analyzer.setProperty(header, sb.toString());
Modified:
felix/trunk/bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/BundleInfo.java
URL:
http://svn.apache.org/viewvc/felix/trunk/bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/BundleInfo.java?rev=921827&r1=921826&r2=921827&view=diff
==============================================================================
---
felix/trunk/bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/BundleInfo.java
(original)
+++
felix/trunk/bundleplugin/src/main/java/org/osgi/impl/bundle/obr/resource/BundleInfo.java
Thu Mar 11 12:38:58 2010
@@ -340,10 +340,18 @@ public class BundleInfo {
}
String createServiceFilter(ManifestEntry pack) {
+ String f = pack.getAttribute("filter");
StringBuffer filter = new StringBuffer();
+ if (f != null) {
+ filter.append("(&");
+ }
filter.append("(service=");
filter.append(pack.getName());
filter.append(")");
+ if (f != null) {
+ filter.append(f);
+ filter.append(")");
+ }
return filter.toString();
}
@@ -480,6 +488,13 @@ public class BundleInfo {
CapabilityImpl createServiceCapability(ManifestEntry pack) {
CapabilityImpl capability = new CapabilityImpl("service");
capability.addProperty("service", pack.getName());
+ Map attributes = pack.getAttributes();
+ if (attributes != null)
+ for (Iterator at = attributes.keySet().iterator(); at.hasNext();) {
+ String key = (String) at.next();
+ Object value = attributes.get(key);
+ capability.addProperty(key, value);
+ }
return capability;
}
Modified:
felix/trunk/bundleplugin/src/main/resources/org/apache/felix/bundleplugin/blueprint.xsl
URL:
http://svn.apache.org/viewvc/felix/trunk/bundleplugin/src/main/resources/org/apache/felix/bundleplugin/blueprint.xsl?rev=921827&r1=921826&r2=921827&view=diff
==============================================================================
---
felix/trunk/bundleplugin/src/main/resources/org/apache/felix/bundleplugin/blueprint.xsl
(original)
+++
felix/trunk/bundleplugin/src/main/resources/org/apache/felix/bundleplugin/blueprint.xsl
Thu Mar 11 12:38:58 2010
@@ -33,7 +33,7 @@
<xsl:if test="not(namespace-uri() =
'http://www.osgi.org/xmlns/blueprint/v1.0.0'
or namespace-uri() =
'http://www.w3.org/2001/XMLSchema-instance'
or namespace-uri() = '')">
- <xsl:value-of select="concat('Import-Service:',
$nsh_interface, ';', $nsh_namespace, '="', namespace-uri(), '"')" />
+ <xsl:value-of select="concat('Import-Service:',
$nsh_interface, ';filter="(', $nsh_namespace, '=', namespace-uri(),
')"')" />
<xsl:text>
</xsl:text>
</xsl:if>
@@ -89,19 +89,36 @@
</xsl:for-each>
<xsl:for-each select="//bp:referen...@interface] |
//bp:reference-li...@interface]">
+ <xsl:value-of select="concat('Import-Service:', @interface)" />
<xsl:choose>
<xsl:when test="@availability">
- <xsl:value-of select="concat('Import-Service:',
@interface, ';availability:=', @availability)"/>
+ <xsl:value-of select="concat(';availability:=',
@availability)"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="/bp:blueprint/@default-availability">
- <xsl:value-of select="concat('Import-Service:',
@interface, ';availability:=', /bp:blueprint/@default-availability)"/>
+ <xsl:value-of select="concat(';availability:=',
/bp:blueprint/@default-availability)"/>
</xsl:when>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="@filter">
+ <xsl:choose>
+ <xsl:when test="@component-name">
+ <xsl:value-of
select="concat(';filter="(&', @filter,
')(osgi.service.blueprint.compname=', @component-name, ')"')" />
+ </xsl:when>
<xsl:otherwise>
- <xsl:value-of select="concat('Import-Service:',
@interface, ';availability:=mandatory')"/>
+ <xsl:value-of select="concat(';filter="',
@filter, '"')" />
</xsl:otherwise>
</xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="@component-name">
+ <xsl:value-of
select="concat(';filter="(osgi.service.blueprint.compname=',
@component-name, ')"')" />
+ </xsl:when>
+ </xsl:choose>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
Modified: felix/trunk/bundleplugin/src/test/resources/OSGI-INF/blueprint/bp.xml
URL:
http://svn.apache.org/viewvc/felix/trunk/bundleplugin/src/test/resources/OSGI-INF/blueprint/bp.xml?rev=921827&r1=921826&r2=921827&view=diff
==============================================================================
--- felix/trunk/bundleplugin/src/test/resources/OSGI-INF/blueprint/bp.xml
(original)
+++ felix/trunk/bundleplugin/src/test/resources/OSGI-INF/blueprint/bp.xml Thu
Mar 11 12:38:58 2010
@@ -34,7 +34,7 @@
</property>
</bean>
- <reference interface="p4.Foo" availability="optional"/>
+ <reference interface="p4.Foo" availability="optional" filter="(prop=a,b)"
component-name="boo"/>
<reference-list interface="p5.Foo">
</reference-list>