Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 305C8200CF8 for ; Thu, 14 Sep 2017 09:25:05 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 2F5141609CE; Thu, 14 Sep 2017 07:25:05 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 576BB1609CD for ; Thu, 14 Sep 2017 09:25:04 +0200 (CEST) Received: (qmail 54407 invoked by uid 500); 14 Sep 2017 07:25:03 -0000 Mailing-List: contact commits-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list commits@aries.apache.org Received: (qmail 54396 invoked by uid 99); 14 Sep 2017 07:25:03 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Sep 2017 07:25:03 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id B34E73A0230 for ; Thu, 14 Sep 2017 07:25:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1808318 - /aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java Date: Thu, 14 Sep 2017 07:25:02 -0000 To: commits@aries.apache.org From: csierra@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20170914072502.B34E73A0230@svn01-us-west.apache.org> archived-at: Thu, 14 Sep 2017 07:25:05 -0000 Author: csierra Date: Thu Sep 14 07:25:02 2017 New Revision: 1808318 URL: http://svn.apache.org/viewvc?rev=1808318&view=rev Log: Refactor and get Modified to work Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java?rev=1808318&r1=1808317&r2=1808318&view=diff ============================================================================== --- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java (original) +++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceReferenceOSGi.java Thu Sep 14 07:25:02 2017 @@ -24,6 +24,7 @@ import org.osgi.framework.ServiceReferen import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTrackerCustomizer; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Function; @@ -40,26 +41,18 @@ public class ServiceReferenceOSGi ext Pipe>, Tuple>> added = Pipe.create(); - Consumer>> addedSource = - added.getSource(); - Pipe>, Tuple>> removed = Pipe.create(); - Consumer>> removedSource = - removed.getSource(); - - ServiceTracker>> serviceTracker = - new ServiceTracker<>( + ServiceTracker>>> + serviceTracker = new ServiceTracker<>( bundleContext, buildFilter(bundleContext, filterString, clazz), new DefaultServiceTrackerCustomizer<>( - addedSource, removedSource)); + added.getSource(), removed.getSource())); return new OSGiResultImpl<>( - added, removed, serviceTracker::open, - serviceTracker::close); - + added, removed, serviceTracker::open, serviceTracker::close); }); _filterString = filterString; @@ -75,27 +68,22 @@ public class ServiceReferenceOSGi ext Pipe, Tuple> removed = Pipe.create(); - Consumer> addedSource = added.getSource(); - - Consumer> removedSource = removed.getSource(); - - ServiceTracker> serviceTracker = + ServiceTracker serviceTracker = new ServiceTracker<>( bundleContext, buildFilter( bundleContext, _filterString, _clazz), new FlatMapServiceTrackerCustomizer<>( - fun, bundleContext, addedSource, removedSource)); + fun, bundleContext, added.getSource(), + removed.getSource())); return new OSGiResultImpl<>( - added, removed, serviceTracker::open, - serviceTracker::close); - + added, removed, serviceTracker::open, serviceTracker::close); }); } private static class DefaultServiceTrackerCustomizer - implements ServiceTrackerCustomizer>> { + implements ServiceTrackerCustomizer>>> { private final Consumer>> _addedSource; private final Consumer>> _removedSource; @@ -109,32 +97,41 @@ public class ServiceReferenceOSGi ext } @Override - public Tuple> addingService( + public AtomicReference>> addingService( ServiceReference reference) { Tuple> tuple = Tuple.create(reference); _addedSource.accept(tuple); - return tuple; + return new AtomicReference<>(tuple); } @Override public void modifiedService( - ServiceReference reference, Tuple> service) { + ServiceReference reference, + AtomicReference>> tupleReference) { + + _removedSource.accept(tupleReference.get()); + + Tuple> tuple = Tuple.create(reference); + + tupleReference.set(tuple); + _addedSource.accept(tuple); } @Override public void removedService( - ServiceReference reference, Tuple> tuple) { + ServiceReference reference, + AtomicReference>> tuple) { - _removedSource.accept(tuple); + _removedSource.accept(tuple.get()); } } private static class FlatMapServiceTrackerCustomizer - implements ServiceTrackerCustomizer> { + implements ServiceTrackerCustomizer>> { private final Function, OSGi> _fun; private final BundleContext _bundleContext; @@ -142,7 +139,7 @@ public class ServiceReferenceOSGi ext private final Consumer> _removedSource; - public FlatMapServiceTrackerCustomizer( + FlatMapServiceTrackerCustomizer( Function, OSGi> fun, BundleContext bundleContext, Consumer> addedSource, Consumer> removedSource) { @@ -154,8 +151,16 @@ public class ServiceReferenceOSGi ext } @Override - public OSGiResult addingService(ServiceReference reference) { - OSGiImpl program = (OSGiImpl) _fun.apply(reference); + public AtomicReference> addingService( + ServiceReference reference) { + + OSGiResultImpl osgiResult = doFlatMap(reference); + + return new AtomicReference<>(osgiResult); + } + + private OSGiResultImpl doFlatMap(ServiceReference reference) { + OSGiImpl program = (OSGiImpl) _fun.apply(reference); OSGiResultImpl osgiResult = program._operation.run( _bundleContext); @@ -163,22 +168,24 @@ public class ServiceReferenceOSGi ext osgiResult.pipeTo(_addedSource, _removedSource); return osgiResult; - } + } @Override public void modifiedService( - ServiceReference reference, OSGiResult tracked) { + ServiceReference reference, + AtomicReference> tracked) { - removedService(reference, tracked); + tracked.get().close(); - addingService(reference); + tracked.set(doFlatMap(reference)); } @Override public void removedService( - ServiceReference reference, OSGiResult tracked) { + ServiceReference reference, + AtomicReference> tracked) { - tracked.close(); + tracked.get().close(); } }