Author: davidb
Date: Sat Nov 15 17:37:07 2014
New Revision: 1639908

URL: http://svn.apache.org/r1639908
Log:
ARIES-1263 Allow '*' wildcard as classname in Subsystem-ImportService and 
Subsystem-ExportService

Integration test (CompositeServiceTest.java) added.

Added:
    aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/
    aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
    aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/
    aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/
    
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
    
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
    aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/
    
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
Modified:
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
    aries/trunk/subsystem/subsystem-itests/pom.xml

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
 Sat Nov 15 17:37:07 2014
@@ -15,17 +15,17 @@ package org.apache.aries.subsystem.core.
 
 
 public interface Grammar {
-//       section:                       *header +newline 
-//       nonempty-section:      +header +newline 
-//       newline:                      CR LF | LF | CR (not followed by LF) 
-//       header:                       name : value 
-//       name:                         alphanum *headerchar 
-//       value:                          SPACE *otherchar newline 
*continuation 
-//       continuation:              SPACE *otherchar newline 
-//       alphanum:                  {A-Z} | {a-z} | {0-9} 
-//       headerchar:                alphanum | - | _ 
+//       section:                       *header +newline
+//       nonempty-section:      +header +newline
+//       newline:                      CR LF | LF | CR (not followed by LF)
+//       header:                       name : value
+//       name:                         alphanum *headerchar
+//       value:                          SPACE *otherchar newline *continuation
+//       continuation:              SPACE *otherchar newline
+//       alphanum:                  {A-Z} | {a-z} | {0-9}
+//       headerchar:                alphanum | - | _
 //       otherchar:                  any UTF-8 character except NUL, CR and LF
-       
+
 //     public static final String ALPHA = "[A-Za-z]";
 //     public static final String DIGIT = "[0-9]";
 //     public static final String ALPHANUM = ALPHA + '|' + DIGIT;
@@ -39,16 +39,16 @@ public interface Grammar {
 //     public static final String HEADER = NAME + ':' + VALUE;
 //     public static final String SECTION = "(?:" + HEADER + ")*(?:" + NEWLINE 
+ ")+";
 //     public static final String NONEMPTY_SECTION = "(?:" + HEADER + ")+(?:" 
+ NEWLINE + ")+";
-       
-//       manifest-file:                    main-section newline 
*individual-section 
-//       main-section:                    version-info newline *main-attribute 
-//       version-info:                      Manifest-Version : version-number 
-//       version-number :               digit+{.digit+}* 
-//       main-attribute:                 (any legitimate main attribute) 
newline 
-//       individual-section:             Name : value newline 
*perentry-attribute 
-//       perentry-attribute:            (any legitimate perentry attribute) 
newline  
+
+//       manifest-file:                    main-section newline 
*individual-section
+//       main-section:                    version-info newline *main-attribute
+//       version-info:                      Manifest-Version : version-number
+//       version-number :               digit+{.digit+}*
+//       main-attribute:                 (any legitimate main attribute) 
newline
+//       individual-section:             Name : value newline 
*perentry-attribute
+//       perentry-attribute:            (any legitimate perentry attribute) 
newline
 //        digit:                                {0-9}
-       
+
 //     public static final String VERSION_NUMBER = DIGIT + "+(?:\\." + DIGIT + 
"+)*";
 //     public static final String VERSION_INFO = "Manifest-Version: " + 
VERSION_NUMBER;
 //     public static final String MAIN_ATTRIBUTE = HEADER + NEWLINE;
@@ -56,7 +56,7 @@ public interface Grammar {
 //     public static final String PERENTRY_ATTRIBUTE = HEADER + NEWLINE;
 //     public static final String INDIVIDUAL_SECTION = "Name: " + VALUE + 
NEWLINE + "(?:" + PERENTRY_ATTRIBUTE + ")*";
 //     public static final String MANIFEST_FILE = MAIN_SECTION + NEWLINE + 
"(?:" + INDIVIDUAL_SECTION + ")*";
-       
+
 //     digit ::= [0..9]
 //     alpha ::= [a..zA..Z]
 //     alphanum ::= alpha | digit
@@ -72,7 +72,7 @@ public interface Grammar {
 //     path-sep ::= /
 //     header ::= clause ( , clause ) *
 //     clause ::= path ( ; path ) * ( ; parameter ) *
-       
+
        public static final String DIGIT = "[0-9]";
        public static final String ALPHA = "[A-Za-z]";
        public static final String ALPHANUM = DIGIT + '|' + ALPHA;
@@ -93,7 +93,7 @@ public interface Grammar {
        public static final String HEADERCHAR = ALPHANUM + "|_|-";
        public static final String NAME = ALPHANUM + "(?:" + HEADERCHAR + ")*";
        public static final String HEADER = NAME + ": " + CLAUSE + "(?:," + 
CLAUSE + ")*";
-       
+
        /*
         * jletter ::= a character for which the method 
Character.isJavaIdentifierStart(int) returns true
         * jletterordigit::= a character for which the method 
Character.isJavaIdentifierPart(int) returns true
@@ -104,7 +104,7 @@ public interface Grammar {
         * import ::= package-names ( ';' parameter )*
         * package-names ::= package-name ( ';' package-name )* // See 1.3.2
         */
-       
+
        public static final String JLETTER = "\\p{javaJavaIdentifierStart}";
        public static final String JLETTERORDIGIT = 
"\\p{javaJavaIdentifierPart}";
        public static final String IDENTIFIER = JLETTER + "(?:" + 
JLETTERORDIGIT + ")*";
@@ -114,32 +114,33 @@ public interface Grammar {
        public static final String PACKAGENAMES = PACKAGENAME + 
"\\s*(?:\\;\\s*" + PACKAGENAME + ")*";
        public static final String IMPORT = PACKAGENAMES + "(?:;\\s*(?:" + 
PARAMETER + "))*";
        public static final String IMPORTPACKAGE = IMPORT + "(?:\\,\\s*" + 
IMPORT + ")*";
-       
+
        public static final String NAMESPACE = SYMBOLICNAME;
        public static final String REQUIREMENT = NAMESPACE + "(?:;\\s*(?:" + 
PARAMETER + "))*";
        public static final String REQUIRE_CAPABILITY = REQUIREMENT + 
"(?:,\\s*(?:" + REQUIREMENT + "))*";
-       
+
        public static final String BUNDLE_DESCRIPTION = SYMBOLICNAME + 
"(?:;\\s*(?:" + PARAMETER + "))*";
        public static final String REQUIRE_BUNDLE = BUNDLE_DESCRIPTION + 
"(?:,\\s*(?:" + BUNDLE_DESCRIPTION + "))*";
-       
+
        public static final String EXPORT = PACKAGENAMES + "(?:;\\s*(?:" + 
PARAMETER + "))*";
        public static final String EXPORT_PACKAGE = EXPORT + "(?:,\\s*(?:" + 
EXPORT + "))*";
-       
+
        public static final String SCALAR = "String|Version|Long|Double";
        public static final String LIST = "List<(?:" + SCALAR + ")>";
        public static final String TYPE = "(?:" + SCALAR + ")|" + LIST;
        public static final String TYPED_ATTR = EXTENDED + "(?:\\:" + TYPE + 
")?=(?:" + ARGUMENT + ')';
        public static final String CAPABILITY = NAMESPACE + "(?:;\\s*(?:(?:" + 
DIRECTIVE + ")|(?:" + TYPED_ATTR + ")))*";
        public static final String PROVIDE_CAPABILITY = CAPABILITY + 
"(?:,\\s*(?:" + CAPABILITY + "))*";
-       
+
        public static final String OBJECTCLASS = PACKAGENAME;
-       public static final String SERVICE = OBJECTCLASS + "(?:;\\s*(?:" + 
PARAMETER + "))*";
-       public static final String SUBSYSTEM_EXPORTSERVICE = SERVICE + 
"(?:,\\s*(?:" + SERVICE + "))*";
-       public static final String SUBSYSTEM_IMPORTSERVICE = SERVICE + 
"(?:,\\s*(?:" + SERVICE + "))*";
-       
+       public static final String SERVICE_OR_WILDCARD = "(" + OBJECTCLASS + 
"|[*])(?:;\\s*(?:" + PARAMETER + "))*";
+       public static final String SUBSYSTEM_IMPORTEXPORTSERVICE = 
SERVICE_OR_WILDCARD + "(?:,\\s*(?:" + SERVICE_OR_WILDCARD + "))*";
+    public static final String SUBSYSTEM_EXPORTSERVICE = 
SUBSYSTEM_IMPORTEXPORTSERVICE;
+       public static final String SUBSYSTEM_IMPORTSERVICE = 
SUBSYSTEM_IMPORTEXPORTSERVICE;
+
        public static final String RESOURCE = SYMBOLICNAME + "(?:;\\s*(?:" + 
PARAMETER + "))*";
        public static final String PREFERRED_PROVIDER = RESOURCE + 
"(?:,\\s*(?:" + RESOURCE + "))*";
-       
+
        /*
         * number ::= digit+
         * version ::= major( '.' minor ( '.' micro ( '.' qualifier )? )? )?
@@ -153,7 +154,7 @@ public interface Grammar {
         * floor ::= version
         * ceiling ::= version
         */
-       
+
        public static final String NUMBER = DIGIT + '+';
        public static final String MAJOR = NUMBER;
        public static final String MINOR = NUMBER;

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
 Sat Nov 15 17:37:07 2014
@@ -36,19 +36,19 @@ import org.osgi.service.subsystem.Subsys
 public class SubsystemExportServiceHeader implements 
Header<SubsystemExportServiceHeader.Clause> {
        public static class Clause implements 
org.apache.aries.subsystem.core.archive.Clause {
                public static final String DIRECTIVE_FILTER = 
Constants.FILTER_DIRECTIVE;
-               
-               private static final Pattern PATTERN_OBJECTCLASS = 
Pattern.compile('(' + Grammar.OBJECTCLASS + ")(?=;|\\z)");
+
+               private static final Pattern PATTERN_OBJECTCLASS_OR_STAR = 
Pattern.compile("((" + Grammar.OBJECTCLASS + ")|[*])(?=;|\\z)");
                private static final Pattern PATTERN_PARAMETER = 
Pattern.compile('(' + Grammar.PARAMETER + ")(?=;|\\z)");
-               
+
                private static void fillInDefaults(Map<String, Parameter> 
parameters) {
                        // No defaults.
                }
-               
+
                private final String path;
                private final Map<String, Parameter> parameters = new 
HashMap<String, Parameter>();
-               
+
                public Clause(String clause) {
-                       Matcher main = PATTERN_OBJECTCLASS.matcher(clause);
+                       Matcher main = 
PATTERN_OBJECTCLASS_OR_STAR.matcher(clause);
                        if (!main.find())
                                throw new IllegalArgumentException("Missing 
objectClass path: " + clause);
                        path = main.group();
@@ -59,7 +59,7 @@ public class SubsystemExportServiceHeade
                        }
                        fillInDefaults(parameters);
                }
-               
+
                @Override
                public Attribute getAttribute(String name) {
                        Parameter result = parameters.get(name);
@@ -101,7 +101,7 @@ public class SubsystemExportServiceHeade
                        directives.trimToSize();
                        return directives;
                }
-               
+
                public String getObjectClass() {
                        return path;
                }
@@ -115,12 +115,12 @@ public class SubsystemExportServiceHeade
                public Collection<Parameter> getParameters() {
                        return 
Collections.unmodifiableCollection(parameters.values());
                }
-               
+
                @Override
                public String getPath() {
                        return path;
                }
-               
+
                public List<Capability> toCapabilities(Resource resource) 
throws InvalidSyntaxException {
                        List<Capability> capabilities = 
resource.getCapabilities(ServiceNamespace.SERVICE_NAMESPACE);
                        if (capabilities.isEmpty())
@@ -133,7 +133,7 @@ public class SubsystemExportServiceHeade
                        result.trimToSize();
                        return result;
                }
-               
+
                @Override
                public String toString() {
                        StringBuilder builder = new StringBuilder()
@@ -143,11 +143,11 @@ public class SubsystemExportServiceHeade
                        }
                        return builder.toString();
                }
-               
+
                private Filter computeFilter() throws InvalidSyntaxException {
                        return 
FrameworkUtil.createFilter(computeFilterString());
                }
-               
+
                private String computeFilterString() {
                        Directive directive = getDirective(DIRECTIVE_FILTER);
                        return new StringBuilder()
@@ -161,13 +161,13 @@ public class SubsystemExportServiceHeade
                                        .toString();
                }
        }
-       
+
        public static final String NAME = 
SubsystemConstants.SUBSYSTEM_EXPORTSERVICE;
-       
-       private static final Pattern PATTERN = Pattern.compile('(' + 
Grammar.SERVICE + ")(?=,|\\z)");
-       
+
+    private static final Pattern PATTERN = Pattern.compile("(" + 
Grammar.SUBSYSTEM_EXPORTSERVICE + ")(?=,|\\z)");
+
        private final Set<Clause> clauses = new HashSet<Clause>();
-       
+
        public SubsystemExportServiceHeader(String value) {
                Matcher matcher = PATTERN.matcher(value);
                while (matcher.find())
@@ -175,7 +175,7 @@ public class SubsystemExportServiceHeade
                if (clauses.isEmpty())
                        throw new IllegalArgumentException("A " + NAME + " 
header must have at least one clause");
        }
-       
+
        @Override
        public Collection<SubsystemExportServiceHeader.Clause> getClauses() {
                return Collections.unmodifiableSet(clauses);
@@ -190,14 +190,14 @@ public class SubsystemExportServiceHeade
        public String getValue() {
                return toString();
        }
-       
+
        public List<Capability> toCapabilities(Resource resource) throws 
InvalidSyntaxException {
                List<Capability> result = new ArrayList<Capability>();
                for (Clause clause : clauses)
                        result.addAll(clause.toCapabilities(resource));
                return result;
        }
-       
+
        @Override
        public String toString() {
                StringBuilder builder = new StringBuilder();

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
 Sat Nov 15 17:37:07 2014
@@ -35,10 +35,10 @@ public class SubsystemImportServiceHeade
                public static final String DIRECTIVE_EFFECTIVE = 
Constants.EFFECTIVE_DIRECTIVE;
                public static final String DIRECTIVE_FILTER = 
Constants.FILTER_DIRECTIVE;
                public static final String DIRECTIVE_RESOLUTION = 
Constants.RESOLUTION_DIRECTIVE;
-               
-               private static final Pattern PATTERN_NAMESPACE = 
Pattern.compile('(' + Grammar.NAMESPACE + ")(?=;|\\z)");
+
+               private static final Pattern PATTERN_OBJECTCLASS_OR_STAR = 
Pattern.compile("((" + Grammar.OBJECTCLASS + ")|[*])(?=;|\\z)");
                private static final Pattern PATTERN_PARAMETER = 
Pattern.compile('(' + Grammar.PARAMETER + ")(?=;|\\z)");
-               
+
                private static void fillInDefaults(Map<String, Parameter> 
parameters) {
                        Parameter parameter = 
parameters.get(DIRECTIVE_EFFECTIVE);
                        if (parameter == null)
@@ -47,12 +47,12 @@ public class SubsystemImportServiceHeade
                        if (parameter == null)
                                parameters.put(DIRECTIVE_RESOLUTION, 
ResolutionDirective.MANDATORY);
                }
-               
+
                private final String path;
                private final Map<String, Parameter> parameters = new 
HashMap<String, Parameter>();
-               
+
                public Clause(String clause) {
-                       Matcher matcher = PATTERN_NAMESPACE.matcher(clause);
+                       Matcher matcher = 
PATTERN_OBJECTCLASS_OR_STAR.matcher(clause);
                        if (!matcher.find())
                                throw new IllegalArgumentException("Missing 
namespace path: " + clause);
                        path = matcher.group();
@@ -63,13 +63,13 @@ public class SubsystemImportServiceHeade
                        }
                        fillInDefaults(parameters);
                }
-               
+
                public Clause(Requirement requirement) {
                        path = requirement.getNamespace();
                        for (Entry<String, String> directive : 
requirement.getDirectives().entrySet())
                                parameters.put(directive.getKey(), 
DirectiveFactory.createDirective(directive.getKey(), directive.getValue()));
                }
-               
+
                @Override
                public Attribute getAttribute(String name) {
                        Parameter result = parameters.get(name);
@@ -126,11 +126,11 @@ public class SubsystemImportServiceHeade
                public String getPath() {
                        return path;
                }
-               
+
                public SubsystemImportServiceRequirement toRequirement(Resource 
resource) {
                        return new SubsystemImportServiceRequirement(this, 
resource);
                }
-               
+
                @Override
                public String toString() {
                        StringBuilder builder = new StringBuilder()
@@ -141,12 +141,11 @@ public class SubsystemImportServiceHeade
                        return builder.toString();
                }
        }
-       
+
        public static final String NAME = 
SubsystemConstants.SUBSYSTEM_IMPORTSERVICE;
-       
-       // TODO Subsystem-ImportService currently does not have its own 
grammar, but it's similar to Require-Capability.
-       private static final Pattern PATTERN = Pattern.compile('(' + 
Grammar.REQUIREMENT + ")(?=,|\\z)");
-       
+
+    private static final Pattern PATTERN = Pattern.compile("(" + 
Grammar.SUBSYSTEM_IMPORTSERVICE + ")(?=,|\\z)");
+
        private static Collection<Clause> processHeader(String header) {
                Matcher matcher = PATTERN.matcher(header);
                Set<Clause> clauses = new HashSet<Clause>();
@@ -154,19 +153,19 @@ public class SubsystemImportServiceHeade
                        clauses.add(new Clause(matcher.group()));
                return clauses;
        }
-       
+
        private final Set<Clause> clauses;
-       
+
        public SubsystemImportServiceHeader(String value) {
                this(processHeader(value));
        }
-       
+
        public SubsystemImportServiceHeader(Collection<Clause> clauses) {
                if (clauses.isEmpty())
                        throw new IllegalArgumentException("A " + NAME + " 
header must have at least one clause");
                this.clauses = new HashSet<Clause>(clauses);
        }
-       
+
        @Override
        public Collection<SubsystemImportServiceHeader.Clause> getClauses() {
                return Collections.unmodifiableSet(clauses);
@@ -181,7 +180,7 @@ public class SubsystemImportServiceHeade
        public String getValue() {
                return toString();
        }
-       
+
        @Override
        public List<SubsystemImportServiceRequirement> toRequirements(Resource 
resource) {
                List<SubsystemImportServiceRequirement> requirements = new 
ArrayList<SubsystemImportServiceRequirement>(clauses.size());
@@ -189,7 +188,7 @@ public class SubsystemImportServiceHeade
                        requirements.add(clause.toRequirement(resource));
                return requirements;
        }
-       
+
        @Override
        public String toString() {
                StringBuilder builder = new StringBuilder();

Modified: aries/trunk/subsystem/subsystem-itests/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/pom.xml?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/pom.xml (original)
+++ aries/trunk/subsystem/subsystem-itests/pom.xml Sat Nov 15 17:37:07 2014
@@ -448,6 +448,24 @@
                         </configuration>
                         <phase>process-test-classes</phase>
                     </execution>
+                    <execution>
+                        <id>tb4-composite2</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                        <configuration>
+                            <archive>
+                                
<manifestFile>src/test/bundles/tb4/META-INF/MANIFEST.MF</manifestFile>
+                            </archive>
+                            
<classesDirectory>${project.build.directory}/test-classes</classesDirectory>
+                            <includes>
+                                
<include>org/apache/aries/subsystem/itests/tb4/**</include>
+                            </includes>
+                            
<outputDirectory>${project.build.directory}/test-classes/composite2</outputDirectory>
+                            <finalName>tb4</finalName>
+                        </configuration>
+                        <phase>process-test-classes</phase>
+                    </execution>
 
                     <!-- New pom for hello + related tests, part 1 -->
 
@@ -534,6 +552,18 @@
                             </sources>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>add-source-tb4</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-test-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>src/test/bundles/tb4</source>
+                            </sources>
+                        </configuration>
+                    </execution>
 
                     <!-- New pom for hello tests, part 2 -->
 

Added: 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF?rev=1639908&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
 (added)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
 Sat Nov 15 17:37:07 2014
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TB4
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.tb4
+Bundle-Version: 1.0.0
+Bundle-Activator: org.apache.aries.subsystem.itests.tb4.Activator
+Import-Package: org.osgi.framework,org.osgi.util.tracker

Added: 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java?rev=1639908&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
 (added)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
 Sat Nov 15 17:37:07 2014
@@ -0,0 +1,46 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aries.subsystem.itests.tb4;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+    private ServiceTracker<String, String> st;
+
+    @Override
+    public void start(BundleContext context) throws Exception {
+        Filter filter = context.createFilter(
+                
"(&(objectClass=java.lang.String)(test=testCompositeServiceImports))");
+        st = new ServiceTracker<String, String>(context, filter, null);
+        st.open();
+
+        String svc = st.waitForService(5000);
+        if ("testCompositeServiceImports".equals(svc)) {
+            Dictionary<String, Object> props = new Hashtable<String, Object>();
+            props.put("test", "tb4");
+            context.registerService(String.class, "tb4", props);
+        }
+    }
+
+    @Override
+    public void stop(BundleContext context) throws Exception {
+        st.close();
+    }
+}

Added: 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java?rev=1639908&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
 (added)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
 Sat Nov 15 17:37:07 2014
@@ -0,0 +1,61 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aries.subsystem.itests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.junit.Test;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.subsystem.Subsystem;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class CompositeServiceTest extends SubsystemTest {
+
+    @Override
+    protected void createApplications() throws Exception {
+        createApplication("composite2", "tb4.jar");
+    }
+
+    @Test
+    public void testCompositeServiceImportExportWildcards() throws Exception {
+        Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put("test", "testCompositeServiceImports");
+        ServiceRegistration<String> reg = 
bundleContext.registerService(String.class, "testCompositeServiceImports", 
props);
+
+        Filter filter = 
bundleContext.createFilter("(&(objectClass=java.lang.String)(test=tb4))");
+        ServiceTracker<String, String> st = new ServiceTracker<String, 
String>(bundleContext, filter, null);
+        st.open();
+
+        Subsystem subsystem = installSubsystemFromFile("composite2.esa");
+        try {
+            assertEquals(Subsystem.State.INSTALLED, subsystem.getState());
+            subsystem.start();
+
+            String svc = st.waitForService(5000);
+            assertNotNull("The service registered by the bundle inside the 
composite cannot be found", svc);
+
+            assertEquals(Subsystem.State.ACTIVE, subsystem.getState());
+        } finally {
+            subsystem.stop();
+            uninstallSubsystem(subsystem);
+            reg.unregister();
+            st.close();
+        }
+    }
+}

Added: 
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF?rev=1639908&view=auto
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
 (added)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
 Sat Nov 15 17:37:07 2014
@@ -0,0 +1,6 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.composite2
+Subsystem-Type: osgi.subsystem.composite
+Subsystem-Content: 
org.apache.aries.subsystem.itests.tb4;version="[1.0.0,1.0.0]"
+Import-Package: org.osgi.framework,org.osgi.util.tracker
+Subsystem-ExportService: *;filter:="(test=tb4)"
+Subsystem-ImportService: *;filter:="(test=testCompositeServiceImports)"
\ No newline at end of file


Reply via email to