You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2016/11/24 10:53:45 UTC

[41/50] [abbrv] aries-jax-rs-whiteboard git commit: Update License and packages

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8ed83da
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/SingletonServiceTrackerCustomizer.java
@@ -0,0 +1,162 @@
+/*
+ * 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.jax.rs.whiteboard.internal;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.core.Application;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+class SingletonServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer
+		<Object, SingletonServiceTrackerCustomizer.Tracked> {
+
+	private BundleContext _bundleContext;
+	private Bus _bus;
+
+	public SingletonServiceTrackerCustomizer(
+		BundleContext bundleContext, Bus bus) {
+
+		_bundleContext = bundleContext;
+		_bus = bus;
+	}
+
+	@Override
+	public Tracked addingService(
+		ServiceReference<Object> serviceReference) {
+
+		final Object service = _bundleContext.getService(
+			serviceReference);
+
+		try {
+			String[] propertyKeys = serviceReference.getPropertyKeys();
+
+			Map<String, Object> properties = new HashMap<>(
+				propertyKeys.length);
+
+			for (String propertyKey : propertyKeys) {
+				if (propertyKey.equals("osgi.jaxrs.resource.base")) {
+					continue;
+				}
+				properties.put(
+					propertyKey, serviceReference.getProperty(propertyKey));
+			}
+
+			properties.put(
+				"CXF_ENDPOINT_ADDRESS",
+				serviceReference.getProperty("osgi.jaxrs.resource.base").
+					toString());
+
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+				new CXFJaxRsServiceRegistrator(
+					_bus,
+					new Application() {
+						@Override
+						public Set<Object> getSingletons() {
+							return Collections.singleton(service);
+						}
+					},
+					properties);
+
+			return new Tracked(
+				cxfJaxRsServiceRegistrator, service,
+				_bundleContext.registerService(
+					CXFJaxRsServiceRegistrator.class,
+					cxfJaxRsServiceRegistrator, new Hashtable<>(properties)));
+		}
+		catch (Exception e) {
+			_bundleContext.ungetService(serviceReference);
+
+			throw e;
+		}
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Object> serviceReference, Tracked tracked) {
+
+		removedService(serviceReference, tracked);
+
+		addingService(serviceReference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Object> reference, Tracked tracked) {
+
+		_bundleContext.ungetService(reference);
+
+		Object service = tracked.getService();
+
+		CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+			tracked.getCxfJaxRsServiceRegistrator();
+
+		cxfJaxRsServiceRegistrator.close();
+
+		tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister();
+	}
+
+	public static class Tracked {
+
+		private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator;
+		private final Object _service;
+		private final ServiceRegistration<CXFJaxRsServiceRegistrator>
+			_cxfJaxRsServiceRegistratorServiceRegistration;
+
+		public Object getService() {
+			return _service;
+		}
+
+		public CXFJaxRsServiceRegistrator getCxfJaxRsServiceRegistrator() {
+			return _cxfJaxRsServiceRegistrator;
+		}
+
+		public ServiceRegistration<CXFJaxRsServiceRegistrator>
+			getCxfJaxRsServiceRegistratorServiceRegistration() {
+
+			return _cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+		public Tracked(
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator,
+			Object service,
+			ServiceRegistration<CXFJaxRsServiceRegistrator>
+				cxfJaxRsServiceRegistratorServiceRegistration) {
+
+			_cxfJaxRsServiceRegistrator = cxfJaxRsServiceRegistrator;
+			_service = service;
+			_cxfJaxRsServiceRegistratorServiceRegistration =
+				cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+	}
+
+}
+
+