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