Return-Path: X-Original-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 37D638507 for ; Tue, 30 Aug 2011 13:57:08 +0000 (UTC) Received: (qmail 27455 invoked by uid 500); 30 Aug 2011 13:57:08 -0000 Delivered-To: apmail-incubator-celix-commits-archive@incubator.apache.org Received: (qmail 27433 invoked by uid 500); 30 Aug 2011 13:57:07 -0000 Mailing-List: contact celix-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: celix-dev@incubator.apache.org Delivered-To: mailing list celix-commits@incubator.apache.org Received: (qmail 27425 invoked by uid 99); 30 Aug 2011 13:57:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 30 Aug 2011 13:57:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 30 Aug 2011 13:57:03 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 4579C23889DE; Tue, 30 Aug 2011 13:56:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1163212 - in /incubator/celix/trunk: dependency_manager/ examples/whiteboard/publisherA/ examples/whiteboard/publisherB/ examples/whiteboard/tracker_depman/ framework/private/include/ framework/private/src/ Date: Tue, 30 Aug 2011 13:56:41 -0000 To: celix-commits@incubator.apache.org From: abroekhuis@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110830135642.4579C23889DE@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: abroekhuis Date: Tue Aug 30 13:56:41 2011 New Revision: 1163212 URL: http://svn.apache.org/viewvc?rev=1163212&view=rev Log: Added filter support to the dependency manager Modified: incubator/celix/trunk/dependency_manager/service_dependency.c incubator/celix/trunk/dependency_manager/service_dependency.h incubator/celix/trunk/examples/whiteboard/publisherA/activator.c incubator/celix/trunk/examples/whiteboard/publisherB/activator.c incubator/celix/trunk/examples/whiteboard/tracker_depman/dependency_activator.c incubator/celix/trunk/framework/private/include/service_tracker.h incubator/celix/trunk/framework/private/src/service_tracker.c Modified: incubator/celix/trunk/dependency_manager/service_dependency.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/dependency_manager/service_dependency.c?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/dependency_manager/service_dependency.c (original) +++ incubator/celix/trunk/dependency_manager/service_dependency.c Tue Aug 30 13:56:41 2011 @@ -28,6 +28,7 @@ #include "service_dependency.h" #include "service_tracker.h" #include "bundle_context.h" +#include "constants.h" void * serviceDependency_addingService(void * handle, SERVICE_REFERENCE reference); void serviceDependency_addedService(void * handle, SERVICE_REFERENCE reference, void * service); @@ -41,6 +42,7 @@ SERVICE_DEPENDENCY serviceDependency_cre dependency->autoConfigureField = NULL; dependency->tracker = NULL; dependency->trackedServiceName = NULL; + dependency->trackedServiceFilter = NULL; dependency->service = NULL; dependency->serviceInstance = NULL; dependency->reference = NULL; @@ -68,15 +70,18 @@ void * serviceDependency_getService(SERV void serviceDependency_start(SERVICE_DEPENDENCY dependency, SERVICE service) { dependency->service = service; - if (dependency->trackedServiceName != NULL) { - SERVICE_TRACKER_CUSTOMIZER cust = (SERVICE_TRACKER_CUSTOMIZER) malloc(sizeof(*cust)); - cust->handle = dependency; - cust->addingService = serviceDependency_addingService; - cust->addedService = serviceDependency_addedService; - cust->modifiedService = serviceDependency_modifiedService; - cust->removedService = serviceDependency_removedService; + SERVICE_TRACKER_CUSTOMIZER cust = (SERVICE_TRACKER_CUSTOMIZER) malloc(sizeof(*cust)); + cust->handle = dependency; + cust->addingService = serviceDependency_addingService; + cust->addedService = serviceDependency_addedService; + cust->modifiedService = serviceDependency_modifiedService; + cust->removedService = serviceDependency_removedService; - dependency->tracker = NULL; + dependency->tracker = NULL; + + if (dependency->trackedServiceFilter != NULL) { + tracker_createWithFilter(dependency->context, dependency->trackedServiceFilter, cust, &dependency->tracker); + } else if (dependency->trackedServiceName != NULL) { tracker_create(dependency->context, dependency->trackedServiceName, cust, &dependency->tracker); } else { @@ -152,7 +157,24 @@ void serviceDependency_invokeRemoved(SER SERVICE_DEPENDENCY serviceDependency_setService(SERVICE_DEPENDENCY dependency, char * serviceName, char * filter) { dependency->trackedServiceName = serviceName; -// dependency->filter = filter; + + if (filter != NULL) { + if (serviceName != NULL) { + int len = strlen(serviceName) + strlen(OBJECTCLASS) + strlen(filter) + 7; + char *nfilter = malloc(sizeof(char) * len); + strcpy(nfilter, "(&("); + strcat(nfilter, OBJECTCLASS); + strcat(nfilter, "="); + strcat(nfilter, serviceName); + strcat(nfilter, ")"); + strcat(nfilter, filter); + strcat(nfilter, ")\0"); + dependency->trackedServiceFilter = nfilter; + } else { + dependency->trackedServiceFilter = filter; + } + } + return dependency; } Modified: incubator/celix/trunk/dependency_manager/service_dependency.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/dependency_manager/service_dependency.h?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/dependency_manager/service_dependency.h (original) +++ incubator/celix/trunk/dependency_manager/service_dependency.h Tue Aug 30 13:56:41 2011 @@ -46,6 +46,7 @@ struct serviceDependency { BUNDLE_CONTEXT context; void * serviceInstance; char * trackedServiceName; + char * trackedServiceFilter; }; typedef struct serviceDependency * SERVICE_DEPENDENCY; Modified: incubator/celix/trunk/examples/whiteboard/publisherA/activator.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/examples/whiteboard/publisherA/activator.c?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/examples/whiteboard/publisherA/activator.c (original) +++ incubator/celix/trunk/examples/whiteboard/publisherA/activator.c Tue Aug 30 13:56:41 2011 @@ -56,8 +56,11 @@ celix_status_t bundleActivator_start(voi data->ps->invoke = publisher_invoke; data->ps->publisher = data->pub; + PROPERTIES props = properties_create(); + properties_set(props, "id", "A"); + SERVICE_REGISTRATION service_registration = NULL; - bundleContext_registerService(context, PUBLISHER_NAME, data->ps, NULL, &service_registration); + bundleContext_registerService(context, PUBLISHER_NAME, data->ps, props, &service_registration); } else { status = CELIX_START_ERROR; } Modified: incubator/celix/trunk/examples/whiteboard/publisherB/activator.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/examples/whiteboard/publisherB/activator.c?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/examples/whiteboard/publisherB/activator.c (original) +++ incubator/celix/trunk/examples/whiteboard/publisherB/activator.c Tue Aug 30 13:56:41 2011 @@ -55,8 +55,11 @@ celix_status_t bundleActivator_start(voi data->ps->invoke = publisher_invoke; data->ps->publisher = data->pub; + PROPERTIES props = properties_create(); + properties_set(props, "id", "B"); + SERVICE_REGISTRATION service_registration = NULL; - bundleContext_registerService(context, PUBLISHER_NAME, data->ps, NULL, &service_registration); + bundleContext_registerService(context, PUBLISHER_NAME, data->ps, props, &service_registration); } else { status = CELIX_START_ERROR; } Modified: incubator/celix/trunk/examples/whiteboard/tracker_depman/dependency_activator.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/examples/whiteboard/tracker_depman/dependency_activator.c?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/examples/whiteboard/tracker_depman/dependency_activator.c (original) +++ incubator/celix/trunk/examples/whiteboard/tracker_depman/dependency_activator.c Tue Aug 30 13:56:41 2011 @@ -54,7 +54,7 @@ void dm_init(void * userData, BUNDLE_CON SERVICE_DEPENDENCY dep = dependencyActivatorBase_createServiceDependency(manager); serviceDependency_setRequired(dep, false); - serviceDependency_setService(dep, PUBLISHER_NAME, NULL); + serviceDependency_setService(dep, PUBLISHER_NAME, "(|(id=A)(id=B))"); serviceDependency_setCallbacks(dep, tracker_addedServ, tracker_modifiedServ, tracker_removedServ); serviceComponent_addServiceDependency(service, dep); Modified: incubator/celix/trunk/framework/private/include/service_tracker.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/service_tracker.h?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/include/service_tracker.h (original) +++ incubator/celix/trunk/framework/private/include/service_tracker.h Tue Aug 30 13:56:41 2011 @@ -45,7 +45,7 @@ struct tracked { typedef struct tracked * TRACKED; celix_status_t tracker_create(BUNDLE_CONTEXT context, char * service, SERVICE_TRACKER_CUSTOMIZER customizer, SERVICE_TRACKER *tracker); -SERVICE_TRACKER tracker_createWithFilter(BUNDLE_CONTEXT context, char * filter, SERVICE_TRACKER_CUSTOMIZER customizer); +celix_status_t tracker_createWithFilter(BUNDLE_CONTEXT context, char * filter, SERVICE_TRACKER_CUSTOMIZER customizer, SERVICE_TRACKER *tracker); void tracker_open(SERVICE_TRACKER tracker); void tracker_close(SERVICE_TRACKER tracker); Modified: incubator/celix/trunk/framework/private/src/service_tracker.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_tracker.c?rev=1163212&r1=1163211&r2=1163212&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/service_tracker.c (original) +++ incubator/celix/trunk/framework/private/src/service_tracker.c Tue Aug 30 13:56:41 2011 @@ -55,7 +55,7 @@ celix_status_t tracker_create(BUNDLE_CON strcat(filter, "="); strcat(filter, service); strcat(filter, ")\0"); - *tracker = tracker_createWithFilter(context, filter, customizer); + tracker_createWithFilter(context, filter, customizer, tracker); } } } @@ -64,22 +64,22 @@ celix_status_t tracker_create(BUNDLE_CON return status; } -SERVICE_TRACKER tracker_createWithFilter(BUNDLE_CONTEXT context, char * filter, SERVICE_TRACKER_CUSTOMIZER customizer) { - SERVICE_TRACKER tracker = (SERVICE_TRACKER) malloc(sizeof(*tracker)); +celix_status_t tracker_createWithFilter(BUNDLE_CONTEXT context, char * filter, SERVICE_TRACKER_CUSTOMIZER customizer, SERVICE_TRACKER *tracker) { + *tracker = (SERVICE_TRACKER) malloc(sizeof(*tracker)); FW_SERVICE_TRACKER fw_tracker = (FW_SERVICE_TRACKER) malloc(sizeof(*fw_tracker)); if (m_trackers == NULL) { m_trackers = arrayList_create(); } - tracker->context = context; - tracker->filter = filter; + (*tracker)->context = context; + (*tracker)->filter = filter; - fw_tracker->tracker = tracker; + fw_tracker->tracker = *tracker; fw_tracker->tracked = arrayList_create(); fw_tracker->customizer = customizer; arrayList_add(m_trackers, fw_tracker); - return tracker; + return CELIX_SUCCESS; } void tracker_open(SERVICE_TRACKER tracker) {