Author: csierra
Date: Fri Nov 25 14:37:43 2016
New Revision: 1771324

URL: http://svn.apache.org/viewvc?rev=1771324&view=rev
Log:
Added tests for buildFilterString and add filter only methods

Added:
    aries/trunk/component-dsl/src/test/
    aries/trunk/component-dsl/src/test/java/
    aries/trunk/component-dsl/src/test/java/org/
    aries/trunk/component-dsl/src/test/java/org/apache/
    aries/trunk/component-dsl/src/test/java/org/apache/aries/
    aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/
    aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/
    
aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/
    
aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/OSGiImplTest.java
Modified:
    aries/trunk/component-dsl/pom.xml
    
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
    
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java

Modified: aries/trunk/component-dsl/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/pom.xml?rev=1771324&r1=1771323&r2=1771324&view=diff
==============================================================================
--- aries/trunk/component-dsl/pom.xml (original)
+++ aries/trunk/component-dsl/pom.xml Fri Nov 25 14:37:43 2016
@@ -65,5 +65,11 @@
             <artifactId>org.osgi.service.cm</artifactId>
             <version>1.5.0</version>
         </dependency>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <version>4.12</version>
+                       <scope>test</scope>
+               </dependency>
     </dependencies>
 </project>
\ No newline at end of file

Modified: 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java?rev=1771324&r1=1771323&r2=1771324&view=diff
==============================================================================
--- 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
 (original)
+++ 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
 Fri Nov 25 14:37:43 2016
@@ -89,6 +89,10 @@ public interface OSGi<T> extends OSGiRun
                return new JustOSGiImpl<>(s);
        }
 
+       static MOSGi<ServiceObjects<Object>> prototypes(String filterString) {
+               return prototypes(null, filterString);
+       }
+
        static <T> MOSGi<ServiceObjects<T>> prototypes(Class<T> clazz) {
                return prototypes(clazz, null);
        }
@@ -110,11 +114,27 @@ public interface OSGi<T> extends OSGiRun
                return services(clazz, null);
        }
 
+       static <T> MOSGi<Object> services(String filterString) {
+               return services(null, filterString);
+       }
+
        static <T> MOSGi<T> services(Class<T> clazz, String filterString) {
                return new ServicesMOSGi<>(clazz, filterString);
        }
 
        static <T> OSGi<ServiceReference<T>> serviceReferences(
+               Class<T> clazz) {
+
+               return new ServiceReferenceOSGi<>(null, clazz);
+       }
+
+       static OSGi<ServiceReference<Object>> serviceReferences(
+               String filterString) {
+
+               return new ServiceReferenceOSGi<>(filterString, null);
+       }
+
+       static <T> OSGi<ServiceReference<T>> serviceReferences(
                Class<T> clazz, String filterString) {
 
                return new ServiceReferenceOSGi<>(filterString, clazz);

Modified: 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java?rev=1771324&r1=1771323&r2=1771324&view=diff
==============================================================================
--- 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java
 (original)
+++ 
aries/trunk/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/OSGiImpl.java
 Fri Nov 25 14:37:43 2016
@@ -146,16 +146,10 @@ public class OSGiImpl<T> implements OSGi
 
                Filter filter;
 
+               String string = buildFilterString(filterString, clazz);
+
                try {
-                       if (filterString == null) {
-                               filter = bundleContext.createFilter(
-                                       "(objectClass=" + clazz.getName() + 
")");
-                       }
-                       else {
-                               filter = bundleContext.createFilter(
-                                       "(&(objectClass=" + clazz.getName() + 
")" +
-                                               filterString + ")");
-                       }
+                       filter = bundleContext.createFilter(string);
                }
                catch (InvalidSyntaxException e) {
                        throw new RuntimeException(e);
@@ -164,6 +158,38 @@ public class OSGiImpl<T> implements OSGi
                return filter;
        }
 
+       static String buildFilterString(String filterString, Class<?> clazz) {
+               if (filterString == null && clazz == null) {
+                       throw new IllegalArgumentException(
+                               "Both filterString and clazz can't be null");
+               }
+
+               StringBuilder stringBuilder = new StringBuilder();
+
+               if (filterString != null) {
+                       stringBuilder.append(filterString);
+               }
+
+               if (clazz != null) {
+                       boolean extend = !(stringBuilder.length() == 0);
+                       if (extend) {
+                               stringBuilder.insert(0, "(&");
+                       }
+
+                       stringBuilder.
+                               append("(objectClass=").
+                               append(clazz.getName()).
+                               append(")");
+
+                       if (extend) {
+                               stringBuilder.append(")");
+                       }
+
+               }
+
+               return stringBuilder.toString();
+       }
+
 }
 
 

Added: 
aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/OSGiImplTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/OSGiImplTest.java?rev=1771324&view=auto
==============================================================================
--- 
aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/OSGiImplTest.java
 (added)
+++ 
aries/trunk/component-dsl/src/test/java/org/apache/aries/osgi/functional/internal/OSGiImplTest.java
 Fri Nov 25 14:37:43 2016
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.osgi.functional.internal;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Carlos Sierra Andrés
+ */
+public class OSGiImplTest {
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testBuildFilterThrowsIllegalArgument() {
+               OSGiImpl.buildFilterString(null, null);
+       }
+
+       @Test
+       public void testBuildFilterWithBothArguments() {
+               assertEquals(
+                       "(&(filter=*)(objectClass=java.lang.String))",
+                       OSGiImpl.buildFilterString("(filter=*)", String.class));
+       }
+
+       @Test
+       public void testBuildFilterWithFilterOnly() {
+               assertEquals(
+                       "(filter=*)", OSGiImpl.buildFilterString("(filter=*)", 
null));
+       }
+
+       @Test
+       public void testBuildFilterWithClassOnly() {
+               assertEquals(
+                       "(objectClass=java.lang.String)",
+                       OSGiImpl.buildFilterString(null, String.class));
+       }
+
+}


Reply via email to