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