You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2015/11/03 12:09:46 UTC
[09/21] celix git commit: CELIX-210: Some refactoring to move the
dm_info service as part of the dep man component. Also added colors for the
dm shell command, to easily stop issues.
CELIX-210: Some refactoring to move the dm_info service as part of the dep man component. Also added colors for the dm shell command, to easily stop issues.
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/664845ca
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/664845ca
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/664845ca
Branch: refs/heads/develop
Commit: 664845cac42f48a83e865a5c8bb87c160b8dec8b
Parents: 01c1968
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Wed Oct 21 17:06:54 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Wed Oct 21 17:06:54 2015 +0200
----------------------------------------------------------------------
dependency_manager/CMakeLists.txt | 3 +-
.../private/include/dm_component_impl.h | 3 +-
.../private/include/dm_server_impl.h | 36 --------
.../include/dm_service_dependency_impl.h | 1 +
.../private/src/dm_activator_base.c | 28 +++---
.../private/src/dm_component_impl.c | 65 ++++++++++++-
.../private/src/dm_dependency_manager_impl.c | 28 +++++-
dependency_manager/private/src/dm_server.c | 97 --------------------
.../private/src/dm_service_dependency.c | 34 +++++++
.../private/src/dm_shell_activator.c | 10 +-
.../private/src/dm_shell_list_command.c | 73 +++++++++------
.../public/include/dm_component.h | 17 +++-
.../public/include/dm_dependency_manager.h | 10 +-
dependency_manager/public/include/dm_info.h | 63 +++++++++++++
dependency_manager/public/include/dm_server.h | 60 ------------
.../public/include/dm_service_dependency.h | 10 +-
.../private/src/dependency_activator.c | 2 +-
17 files changed, 282 insertions(+), 258 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/dependency_manager/CMakeLists.txt b/dependency_manager/CMakeLists.txt
index 931dd3c..e4aeca1 100644
--- a/dependency_manager/CMakeLists.txt
+++ b/dependency_manager/CMakeLists.txt
@@ -47,7 +47,6 @@ if (DEPENDENCY_MANAGER)
private/src/dm_service_dependency
private/src/dm_event
private/src/dm_dependency_manager_impl
- private/src/dm_server
)
include_directories("public/include")
@@ -62,7 +61,7 @@ if (DEPENDENCY_MANAGER)
public/include/dm_component.h
public/include/dm_dependency_manager.h
public/include/dm_service_dependency.h
- public/include/dm_server.h
+ public/include/dm_info.h
DESTINATION
include/celix/dependency_manager
COMPONENT
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/include/dm_component_impl.h
----------------------------------------------------------------------
diff --git a/dependency_manager/private/include/dm_component_impl.h b/dependency_manager/private/include/dm_component_impl.h
index ad742b8..3e86d62 100644
--- a/dependency_manager/private/include/dm_component_impl.h
+++ b/dependency_manager/private/include/dm_component_impl.h
@@ -50,9 +50,8 @@ typedef struct dm_interface_struct {
} dm_interface;
struct dm_component {
+ char *id;
bundle_context_pt context;
- dm_dependency_manager_pt manager;
-
array_list_pt dm_interface;
void *implementation;
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/include/dm_server_impl.h
----------------------------------------------------------------------
diff --git a/dependency_manager/private/include/dm_server_impl.h b/dependency_manager/private/include/dm_server_impl.h
deleted file mode 100644
index 117c561..0000000
--- a/dependency_manager/private/include/dm_server_impl.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- *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.
- */
-/*
- * dm_server_impl.h
- *
- * \date 16 Oct 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#include "dm_server.h"
-#include "dm_component.h"
-#include "dm_component_impl.h"
-#include "dm_dependency_manager_impl.h"
-
-celix_status_t dmServiceCreate(dm_server_pt * dmServ, bundle_context_pt context, struct dm_dependency_manager *manager);
-celix_status_t dmServiceAddComponent(dm_server_pt dmServ, dm_component_pt component);
-celix_status_t dmServiceDestroy(dm_server_pt dmServ);
-celix_status_t dmService_getInfo(dm_server_pt dmServ, dm_info_pt info);
-
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/include/dm_service_dependency_impl.h
----------------------------------------------------------------------
diff --git a/dependency_manager/private/include/dm_service_dependency_impl.h b/dependency_manager/private/include/dm_service_dependency_impl.h
index 7f2a736..bde435f 100644
--- a/dependency_manager/private/include/dm_service_dependency_impl.h
+++ b/dependency_manager/private/include/dm_service_dependency_impl.h
@@ -34,6 +34,7 @@
#include "service_tracker_customizer.h"
#include "dm_service_dependency.h"
+#include "dm_component.h"
struct dm_service_dependency {
dm_component_pt component;
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_activator_base.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_activator_base.c b/dependency_manager/private/src/dm_activator_base.c
index 1c00ab1..2928c25 100644
--- a/dependency_manager/private/src/dm_activator_base.c
+++ b/dependency_manager/private/src/dm_activator_base.c
@@ -30,14 +30,13 @@
#include "bundle_activator.h"
#include "dm_activator_base.h"
-#include "dm_server.h"
-#include "dm_server_impl.h"
+#include "dm_info.h"
struct dm_dependency_activator_base {
dm_dependency_manager_pt manager;
bundle_context_pt context;
- dm_service_pt dmService;
service_registration_pt reg;
+ dm_info_service_pt info;
void* userData;
};
@@ -47,14 +46,19 @@ celix_status_t bundleActivator_create(bundle_context_pt context, void **userData
celix_status_t status = CELIX_ENOMEM;
dependency_activator_base_pt dependency_activator = calloc(1, sizeof(struct dm_dependency_activator_base));
+ dm_info_service_pt serv = calloc(1, sizeof(*serv));
- if (dependency_activator) {
+ if (dependency_activator != NULL && serv != NULL) {
dependency_activator->context = context;
dm_create(context, &dependency_activator->userData);
+ dependency_activator->info = serv;
- (*userData) = dependency_activator;
+ (*userData) = dependency_activator;;
status = CELIX_SUCCESS;
+ } else {
+ free(dependency_activator);
+ free(serv);
}
return status;
@@ -71,10 +75,10 @@ celix_status_t bundleActivator_start(void * userData, bundle_context_pt context)
}
//Create the service
- dependency_activator->dmService = calloc(sizeof(*(dependency_activator->dmService)), 1);
- dependency_activator->dmService->getInfo = dmService_getInfo;
- dmServiceCreate(&(dependency_activator->dmService->server), context, dependency_activator->manager);
- bundleContext_registerService(context, DM_SERVICE_NAME, dependency_activator->dmService, NULL, &(dependency_activator->reg));
+ dependency_activator->info->handle = dependency_activator->manager;
+ dependency_activator->info->getInfo = (void *)dependencyManager_getInfo;
+
+ bundleContext_registerService(context, DM_INFO_SERVICE_NAME, dependency_activator->info, NULL, &(dependency_activator->reg));
return status;
}
@@ -88,12 +92,9 @@ celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context _
// Remove the service
serviceRegistration_unregister(dependency_activator->reg);
- dmServiceDestroy(dependency_activator->dmService->server);
- free(dependency_activator->dmService);
dependency_activator->userData = NULL;
dependency_activator->manager = NULL;
- dependency_activator->dmService = NULL;
return status;
}
@@ -102,6 +103,9 @@ celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt contex
celix_status_t status = CELIX_SUCCESS;
dependency_activator_base_pt dependency_activator = (dependency_activator_base_pt) userData;
+ if (dependency_activator != NULL) {
+ free(dependency_activator->info);
+ }
free(dependency_activator);
return status;
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_component_impl.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_component_impl.c b/dependency_manager/private/src/dm_component_impl.c
index 801d426..9b8ee54 100644
--- a/dependency_manager/private/src/dm_component_impl.c
+++ b/dependency_manager/private/src/dm_component_impl.c
@@ -95,15 +95,17 @@ static celix_status_t component_handleChanged(dm_component_pt component, dm_serv
static celix_status_t component_handleRemoved(dm_component_pt component, dm_service_dependency_pt dependency, dm_event_pt event);
static celix_status_t component_handleSwapped(dm_component_pt component, dm_service_dependency_pt dependency, dm_event_pt event, dm_event_pt newEvent);
-celix_status_t component_create(bundle_context_pt context, dm_dependency_manager_pt manager, dm_component_pt *component) {
+celix_status_t component_create(bundle_context_pt context, dm_component_pt *component) {
celix_status_t status = CELIX_SUCCESS;
*component = malloc(sizeof(**component));
if (!*component) {
status = CELIX_ENOMEM;
} else {
+ char id[16];
+ snprintf(id, 16, "%p", *component);
+ (*component)->id = strdup(id);
(*component)->context = context;
- (*component)->manager = manager;
arrayList_create(&((*component)->dm_interface));
@@ -316,6 +318,26 @@ celix_status_t component_addInterface(dm_component_pt component, char *serviceNa
return status;
}
+celix_status_t component_getInterfaces(dm_component_pt component, array_list_pt *out) {
+ celix_status_t status = CELIX_SUCCESS;
+ array_list_pt names = NULL;
+ arrayList_create(&names);
+ celixThreadMutex_lock(&component->mutex);
+ int size = arrayList_size(component->dm_interface);
+ int i;
+ for (i = 0; i < size; i += 1) {
+ dm_interface *interface = arrayList_get(component->dm_interface, i);
+ arrayList_add(names, strdup(interface->serviceName));
+ }
+ celixThreadMutex_unlock(&component->mutex);
+
+ if (status == CELIX_SUCCESS) {
+ *out = names;
+ }
+
+ return status;
+}
+
celix_status_t component_handleEvent(dm_component_pt component, dm_service_dependency_pt dependency, dm_event_pt event) {
celix_status_t status = CELIX_SUCCESS;
@@ -1284,3 +1306,42 @@ celix_status_t executor_runTasks(dm_executor_pt executor, pthread_t currentThrea
return status;
}
+
+celix_status_t component_getComponentInfo(dm_component_pt component, dm_component_info_pt *out) {
+ celix_status_t status = CELIX_SUCCESS;
+ int i;
+ int size;
+ dm_component_info_pt info = NULL;
+ info = calloc(1, sizeof(*info));
+
+
+ if (info != NULL) {
+ arrayList_create(&info->dependency_list);
+ component_getInterfaces(component, &info->interfaces);
+ info->active = component->active;
+ info->id = strdup(component->id);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+
+ celixThreadMutex_lock(&component->mutex);
+ size = arrayList_size(component->dependencies);
+ for (i = 0; status == CELIX_SUCCESS && i < size; i += 1) {
+ dm_service_dependency_pt dep = arrayList_get(component->dependencies, i);
+ dm_service_dependency_info_pt depInfo= NULL;
+ status = serviceDependency_getServiceDependencyInfo(dep, &depInfo);
+ if (status == CELIX_SUCCESS) {
+ arrayList_add(info->dependency_list, depInfo);
+ }
+ }
+ celixThreadMutex_unlock(&component->mutex);
+
+ if (status == CELIX_SUCCESS) {
+ *out = info;
+ } else if (info != NULL) {
+ //TODO cleanup
+ }
+
+ return status;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_dependency_manager_impl.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_dependency_manager_impl.c b/dependency_manager/private/src/dm_dependency_manager_impl.c
index 265ecf0..59ba677 100644
--- a/dependency_manager/private/src/dm_dependency_manager_impl.c
+++ b/dependency_manager/private/src/dm_dependency_manager_impl.c
@@ -28,6 +28,7 @@
#include <pthread.h>
#include <stdlib.h>
+#include <dm_dependency_manager.h>
#include "bundle_context.h"
#include "dm_component_impl.h"
@@ -78,10 +79,33 @@ celix_status_t dependencyManager_remove(dm_dependency_manager_pt manager, dm_com
return status;
}
-celix_status_t dependencyManager_getComponents(dm_dependency_manager_pt manager, array_list_pt* components) {
+celix_status_t dependencyManager_getInfo(dm_dependency_manager_pt manager, dm_dependency_manager_info_pt *out) {
celix_status_t status = CELIX_SUCCESS;
+ int i;
+ int size;
+ dm_component_info_pt cmpInfo = NULL;
+ dm_dependency_manager_info_pt info = calloc(1, sizeof(*info));
+
+ celixThreadMutex_lock(&manager->mutex);
+
+ if (info != NULL) {
+ arrayList_create(&info->components);
+ size = arrayList_size(manager->components);
+ for (i = 0; i < size; i += 1) {
+ dm_component_pt cmp = arrayList_get(manager->components, i);
+ cmpInfo = NULL;
+ component_getComponentInfo(cmp, &cmpInfo);
+ arrayList_add(info->components, cmpInfo);
+ }
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ celixThreadMutex_unlock(&manager->mutex);
- (*components) = manager->components;
+ if (status == CELIX_SUCCESS) {
+ *out = info;
+ }
return status;
}
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_server.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_server.c b/dependency_manager/private/src/dm_server.c
deleted file mode 100644
index 2976cf6..0000000
--- a/dependency_manager/private/src/dm_server.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- *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.
- */
-/*
- * dm_component_impl.c
- *
- * \date 9 Oct 2014
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-
-#include <stdlib.h>
-
-#include "array_list.h"
-
-#include "dm_server.h"
-#include "dm_component.h"
-#include "dm_component_impl.h"
-#include "dm_dependency_manager_impl.h"
-
-struct dm_server {
- struct dm_dependency_manager *manager;
-};
-
-celix_status_t dmServiceCreate(dm_server_pt * dmServ, bundle_context_pt context, struct dm_dependency_manager *manager) {
- *dmServ = calloc(sizeof(struct dm_server), 1);
- (*dmServ)->manager = manager;
- return CELIX_SUCCESS;
-}
-
-celix_status_t dmServiceDestroy(dm_server_pt dmServ) {
- free(dmServ);
- return CELIX_SUCCESS;
-}
-
-celix_status_t dmService_getInfo(dm_server_pt dmServ, dm_info_pt info) {
- int compCnt;
- arrayList_create(&(info->components));
- array_list_pt compList = dmServ->manager->components;
-
- for (compCnt = 0; compCnt < arrayList_size(compList); compCnt++) {
- int i;
- struct dm_component *component = arrayList_get(compList, compCnt);
-
- // Create a component info
- dm_component_info_pt compInfo = calloc(sizeof(*compInfo),1);
- arrayList_create(&(compInfo->interface_list));
- arrayList_create(&(compInfo->dependency_list));
-
- //Fill in the fields of the component
- char *outstr;
- asprintf(&outstr, "%p",component->implementation);
- compInfo->id = outstr;
- compInfo->active = component->active;
-
- array_list_pt interfaces = component->dm_interface;
- array_list_pt dependencies = component->dependencies;
-
- for(i = 0; i < arrayList_size(interfaces); i++) {
- dm_interface * interface = arrayList_get(interfaces, i);
- arrayList_add(compInfo->interface_list, strdup(interface->serviceName));
- }
-
- for(i = 0; i < arrayList_size(dependencies); i++) {
- dm_service_dependency_pt dependency = arrayList_get(dependencies, i);
-
- dependency_info_pt depInfo = calloc(sizeof(*depInfo), 1);
- depInfo->available = dependency->available;
- depInfo->required = dependency->required;
- if(dependency->tracked_filter) {
- depInfo->interface = strdup(dependency->tracked_filter);
- } else {
- depInfo->interface = strdup(dependency->tracked_service_name);
- }
- arrayList_add(compInfo->dependency_list, depInfo);
- }
-
- arrayList_add(info->components, compInfo);
- }
-
- return CELIX_SUCCESS;
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_service_dependency.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_service_dependency.c b/dependency_manager/private/src/dm_service_dependency.c
index f89dc94..61daa07 100644
--- a/dependency_manager/private/src/dm_service_dependency.c
+++ b/dependency_manager/private/src/dm_service_dependency.c
@@ -150,6 +150,11 @@ celix_status_t serviceDependency_setService(dm_service_dependency_pt dependency,
return status;
}
+celix_status_t serviceDependency_getFilter(dm_service_dependency_pt dependency, char **filter) {
+ *filter = dependency->tracked_filter;
+ return CELIX_SUCCESS;
+}
+
celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_set_fpt set, service_add_fpt add, service_change_fpt change, service_remove_fpt remove, service_swap_fpt swap) {
celix_status_t status = CELIX_SUCCESS;
@@ -624,3 +629,32 @@ celix_status_t serviceDependency_removedService(void *_ptr, service_reference_pt
return status;
}
+
+celix_status_t serviceDependency_getServiceDependencyInfo(dm_service_dependency_pt dep, dm_service_dependency_info_pt *out) {
+ celix_status_t status = CELIX_SUCCESS;
+ dm_service_dependency_info_pt info = calloc(1, sizeof(*info));
+ if (info != NULL) {
+ celixThreadMutex_lock(&dep->lock);
+ info->available = dep->available;
+ info->filter = dep->tracked_filter != NULL ? strdup(dep->tracked_filter) : NULL;
+ if (info->filter == NULL) {
+ info->filter = dep->tracked_service_name != NULL ? strdup(dep->tracked_service_name) : NULL;
+ }
+ info->required = dep->required;
+
+ array_list_pt refs = serviceTracker_getServiceReferences(dep->tracker);
+ if (refs != NULL) {
+ info->count = arrayList_size(refs);
+ }
+
+ celixThreadMutex_unlock(&dep->lock);
+ } else {
+ status = CELIX_ENOMEM;
+ }
+
+ if (status == CELIX_SUCCESS) {
+ *out = info;
+ }
+
+ return status;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_shell_activator.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_shell_activator.c b/dependency_manager/private/src/dm_shell_activator.c
index 7cdd561..4adfd0a 100644
--- a/dependency_manager/private/src/dm_shell_activator.c
+++ b/dependency_manager/private/src/dm_shell_activator.c
@@ -66,16 +66,8 @@ celix_status_t bundleActivator_start(void * userData, bundle_context_pt context)
bundle_instance_pt bi = (bundle_instance_pt) userData;
command_service_pt commandService = calloc(1, sizeof(*commandService));
- command_pt command = calloc(sizeof(*command),1);
- command->executeCommand = dmListCommand_execute;
- command->bundleContext = context;
- command->handle = NULL;
- command->name ="dm:list";
- command->shortDescription ="not_used";
- command->usage="not_used";
-
commandService->getName = dmListCommand_getName;
- commandService->command = command;
+ commandService->command = context;
commandService->executeCommand = dmListCommand_execute;
commandService->getShortDescription = dmListCommand_getShortDescription;
commandService->getUsage = dmListCommand_getUsage;
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/private/src/dm_shell_list_command.c
----------------------------------------------------------------------
diff --git a/dependency_manager/private/src/dm_shell_list_command.c b/dependency_manager/private/src/dm_shell_list_command.c
index 74460fa..3c2c43d 100644
--- a/dependency_manager/private/src/dm_shell_list_command.c
+++ b/dependency_manager/private/src/dm_shell_list_command.c
@@ -25,7 +25,8 @@
*/
#include <stdlib.h>
#include <string.h>
-#include "dm_server.h"
+#include <dm_dependency_manager.h>
+#include "dm_info.h"
#include "service_reference.h"
#include "command_impl.h"
#include "array_list.h"
@@ -34,65 +35,83 @@
#include "shell.h"
-void dmListCommand_execute(command_pt command, char * line, void (*out)(char *), void (*err)(char *));
-
-
char * dmListCommand_getName(command_pt command) {
- return "dm:list";
+ return "dm";
}
char * dmListCommand_getUsage(command_pt command) {
- return "dm:list";
+ return "dm [overview|notavail]";
}
char * dmListCommand_getShortDescription(command_pt command) {
- return "Get an overview of the dependency-managed components with their dependencies.";
+ return "\t overview: Get an overview of the dependency-managed components with their dependencies.\n\tnotavail: Get an overview of dependency-managed compononentes where required depencies are not available. ";
}
void dmListCommand_execute(command_pt command, char * line, void (*out)(char *), void (*err)(char *)) {
char outString[256];
array_list_pt servRefs = NULL;
int i;
- bundleContext_getServiceReferences(command->bundleContext, DM_SERVICE_NAME ,NULL, &servRefs);
+ bundle_context_pt context = (void *)command;
+ bundleContext_getServiceReferences(context, DM_INFO_SERVICE_NAME ,NULL, &servRefs);
+ char *term = getenv("TERM");
+ bool colors = false;
+ if (strcmp("xterm-256color", term) == 0) {
+ colors = true;
+ }
for(i = 0; i < arrayList_size(servRefs); i++) {
- struct dm_info info;
- dm_service_pt dmService = NULL;
+ dm_dependency_manager_info_pt info = NULL;
+ dm_info_service_pt infoServ = NULL;
service_reference_pt servRef = NULL;
servRef = arrayList_get(servRefs, i);
- bundleContext_getService(command->bundleContext, servRef, (void**)&dmService);
- dmService->getInfo(dmService->server, &info);
+ bundleContext_getService(context, servRef, (void**)&infoServ);
+ infoServ->getInfo(infoServ->handle, &info);
int cmpCnt;
- for (cmpCnt = 0; cmpCnt < arrayList_size(info.components); cmpCnt++) {
- dm_component_info_pt compInfo = arrayList_get(info.components, cmpCnt);
- sprintf(outString, "Component: ID=%s, Active=%s\n", compInfo->id, compInfo->active ? "true" : "false");
+ for (cmpCnt = 0; cmpCnt < arrayList_size(info->components); cmpCnt++) {
+ dm_component_info_pt compInfo = arrayList_get(info->components, cmpCnt);
+ char *startColors = "";
+ char *endColors = "";
+ if (colors) {
+ startColors = compInfo->active ? "\033[92m" : "\033[91m";
+ endColors = "\033[m";
+ }
+ sprintf(outString, "Component: ID=%s, %sActive=%s%s\n", compInfo->id, startColors, compInfo->active ? "true " : "false", endColors);
out(outString);
int interfCnt;
- sprintf(outString, " Interfaces (%d):\n", arrayList_size(compInfo->interface_list));
+ sprintf(outString, "|- Interfaces (%d):\n", arrayList_size(compInfo->interfaces));
out(outString);
- for(interfCnt = 0 ;interfCnt < arrayList_size(compInfo->interface_list); interfCnt++) {
+ for(interfCnt = 0 ;interfCnt < arrayList_size(compInfo->interfaces); interfCnt++) {
char * interface;
- interface = arrayList_get(compInfo->interface_list, interfCnt);
- sprintf(outString, " Interface: %s\n", interface);
+ interface = arrayList_get(compInfo->interfaces, interfCnt);
+ sprintf(outString, " |- Interface: %s\n", interface);
out(outString);
free(interface);
}
- arrayList_destroy(compInfo->interface_list);
+ arrayList_destroy(compInfo->interfaces);
int depCnt;
- sprintf(outString, " Dependencies (%d):\n", arrayList_size(compInfo->dependency_list));
+ sprintf(outString, "|- Dependencies (%d):\n", arrayList_size(compInfo->dependency_list));
out(outString);
for(depCnt = 0 ;depCnt < arrayList_size(compInfo->dependency_list); depCnt++) {
- dependency_info_pt dependency;
+ dm_service_dependency_info_pt dependency;
dependency = arrayList_get(compInfo->dependency_list, depCnt);
- sprintf(outString, " Dependency: Available = %s, Required = %s, Filter = %s\n",
- dependency->available? "true" : "false" ,
- dependency->required ? "true" : "false",
- dependency->interface);
+ char *startColors = "";
+ char *endColors = "";
+ if (colors) {
+ startColors = dependency->available ? "\033[92m" : "\033[91m";
+ endColors = "\033[m";
+ }
+ sprintf(outString, " |- Dependency: %sAvailable = %s%s, Required = %s, Filter = %s\n",
+ startColors,
+ dependency->available ? "true " : "false" ,
+ endColors,
+ dependency->required ? "true " : "false",
+ dependency->filter
+ );
out(outString);
- free(dependency->interface);
+ free(dependency->filter);
free(dependency);
}
arrayList_destroy(compInfo->dependency_list);
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/public/include/dm_component.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_component.h b/dependency_manager/public/include/dm_component.h
index 6b875b2..ab8ac80 100644
--- a/dependency_manager/public/include/dm_component.h
+++ b/dependency_manager/public/include/dm_component.h
@@ -30,25 +30,36 @@
#include <bundle_context.h>
#include <celix_errno.h>
+#include "dm_service_dependency.h"
+
typedef struct dm_component *dm_component_pt;
-#include "dm_dependency_manager.h"
-#include "dm_service_dependency.h"
+#include "dm_component.h"
typedef celix_status_t (*init_fpt)(void *userData);
typedef celix_status_t (*start_fpt)(void *userData);
typedef celix_status_t (*stop_fpt)(void *userData);
typedef celix_status_t (*deinit_fpt)(void *userData);
-celix_status_t component_create(bundle_context_pt context, dm_dependency_manager_pt manager, dm_component_pt *component);
+celix_status_t component_create(bundle_context_pt context, dm_component_pt *component);
celix_status_t component_destroy(dm_component_pt *component);
celix_status_t component_addInterface(dm_component_pt component, char *serviceName, void *service, properties_pt properties);
celix_status_t component_setImplementation(dm_component_pt component, void *implementation);
+/**
+ * Returns an arraylist of service names. The caller owns the arraylist and strings (char *)
+ */
+celix_status_t component_getInterfaces(dm_component_pt component, array_list_pt *servicesNames);
+
celix_status_t component_addServiceDependency(dm_component_pt component, ...);
celix_status_t component_removeServiceDependency(dm_component_pt component, dm_service_dependency_pt dependency);
celix_status_t component_setCallbacks(dm_component_pt component, init_fpt init, start_fpt start, stop_fpt stop, deinit_fpt deinit);
+/**
+ * returns a dm_component_info_pt. Caller has ownership.
+ */
+celix_status_t component_getComponentInfo(dm_component_pt component, dm_component_info_pt *info);
+
#endif /* COMPONENT_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/public/include/dm_dependency_manager.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_dependency_manager.h b/dependency_manager/public/include/dm_dependency_manager.h
index 4311d3a..ab6e27f 100644
--- a/dependency_manager/public/include/dm_dependency_manager.h
+++ b/dependency_manager/public/include/dm_dependency_manager.h
@@ -30,16 +30,20 @@
#include "bundle_context.h"
#include "celix_errno.h"
#include "array_list.h"
+#include "dm_info.h"
+#include "dm_component.h"
typedef struct dm_dependency_manager *dm_dependency_manager_pt;
-#include "dm_component.h"
-
celix_status_t dependencyManager_create(bundle_context_pt context, dm_dependency_manager_pt *manager);
celix_status_t dependencyManager_destroy(dm_dependency_manager_pt *manager);
celix_status_t dependencyManager_add(dm_dependency_manager_pt manager, dm_component_pt component);
celix_status_t dependencyManager_remove(dm_dependency_manager_pt manager, dm_component_pt component);
-celix_status_t dependencyManager_getComponents(dm_dependency_manager_pt manager, array_list_pt* components);
+
+/**
+ * returns a dm_ of dm_dependency_manager_info. Caller has ownership.
+ */
+celix_status_t dependencyManager_getInfo(dm_dependency_manager_pt manager, dm_dependency_manager_info_pt *info);
#endif /* DM_DEPENDENCY_MANAGER_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/public/include/dm_info.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_info.h b/dependency_manager/public/include/dm_info.h
new file mode 100644
index 0000000..f010387
--- /dev/null
+++ b/dependency_manager/public/include/dm_info.h
@@ -0,0 +1,63 @@
+/**
+ *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.
+ */
+/*
+ * dm_server.h
+ *
+ * \date 15 Oct 2015
+ * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
+ * \copyright Apache License, Version 2.0
+ */
+#ifndef CELIX_DM_INFO_SERVICE_H
+#define CELIX_DM_INFO_SERVICE_H
+
+#include <stdbool.h>
+#include "array_list.h"
+
+#define DM_INFO_SERVICE_NAME "dm_info"
+
+
+typedef struct dm_service_dependency_info {
+ char *filter;
+ bool available;
+ bool required;
+ size_t count;
+} * dm_service_dependency_info_pt;
+
+typedef struct dm_component_info {
+ char *id;
+ bool active;
+ array_list_pt interfaces; // type char*
+ array_list_pt dependency_list; // type interface_info_pt
+} * dm_component_info_pt;
+
+typedef struct dm_dependency_manager_info {
+ array_list_pt components; // type dm_component_info
+} * dm_dependency_manager_info_pt;
+
+struct dm_info_service {
+ void *handle;
+
+ /*Note: dm_caller has the ownership of the result.*/
+ celix_status_t (*getInfo)(void *handle, dm_dependency_manager_info_pt *info);
+};
+
+typedef struct dm_info_service * dm_info_service_pt;
+
+
+#endif //CELIX_DM_INFO_SERVICE_H
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/public/include/dm_server.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_server.h b/dependency_manager/public/include/dm_server.h
deleted file mode 100644
index 15c87d5..0000000
--- a/dependency_manager/public/include/dm_server.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- *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.
- */
-/*
- * dm_server.h
- *
- * \date 15 Oct 2015
- * \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
- * \copyright Apache License, Version 2.0
- */
-#ifndef CELIX_DM_SERVICE_H
-#define CELIX_DM_SERVICE_H
-
-#include "bundle_context.h"
-
-#define DM_SERVICE_NAME "dm_server"
-
-typedef struct dm_server * dm_server_pt;
-
-typedef struct dependency_info {
- char *interface;
- bool available;
- bool required;
-} * dependency_info_pt;
-
-typedef struct dm_component_info {
- char *id;
- bool active;
- array_list_pt interface_list; // type char*
- array_list_pt dependency_list; // type interface_info_pt
-} * dm_component_info_pt;
-
-typedef struct dm_info {
- array_list_pt components; // type dm_component_info
-} * dm_info_pt;
-
-struct dm_service {
- dm_server_pt server;
- celix_status_t (*getInfo)(dm_server_pt server, dm_info_pt info);
-};
-
-typedef struct dm_service * dm_service_pt;
-
-
-#endif //CELIX_DM_SERVICE_H
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/dependency_manager/public/include/dm_service_dependency.h
----------------------------------------------------------------------
diff --git a/dependency_manager/public/include/dm_service_dependency.h b/dependency_manager/public/include/dm_service_dependency.h
index f267ab7..4a9c991 100644
--- a/dependency_manager/public/include/dm_service_dependency.h
+++ b/dependency_manager/public/include/dm_service_dependency.h
@@ -28,10 +28,10 @@
#define DM_SERVICE_DEPENDENCY_H_
#include "celix_errno.h"
+#include "dm_info.h"
-typedef struct dm_service_dependency *dm_service_dependency_pt;
-#include "dm_component.h"
+typedef struct dm_service_dependency *dm_service_dependency_pt;
typedef celix_status_t (*service_set_fpt)(void *handle, void *service);
typedef celix_status_t (*service_add_fpt)(void *handle, void *service);
@@ -50,8 +50,14 @@ celix_status_t serviceDependency_destroy(dm_service_dependency_pt *dependency_pt
celix_status_t serviceDependency_setRequired(dm_service_dependency_pt dependency, bool required);
celix_status_t serviceDependency_setService(dm_service_dependency_pt dependency, char *serviceName, char *filter);
+celix_status_t serviceDependency_getFilter(dm_service_dependency_pt dependency, char **filter);
celix_status_t serviceDependency_setCallbacks(dm_service_dependency_pt dependency, service_set_fpt set, service_add_fpt add, service_change_fpt change, service_remove_fpt remove, service_swap_fpt swap);
celix_status_t serviceDependency_setCallbacksWithServiceReference(dm_service_dependency_pt dependency, service_set_with_ref_fpt set, service_add_with_ref_fpt add, service_change_with_ref_fpt change, service_remove_with_ref_fpt remove, service_swap_with_ref_fpt swap);
celix_status_t serviceDependency_setAutoConfigure(dm_service_dependency_pt dependency, celix_thread_mutex_t *service_lock, void **field);
+/**
+ * Return a service dependency info. The caller is the owner
+ */
+celix_status_t serviceDependency_getServiceDependencyInfo(dm_service_dependency_pt, dm_service_dependency_info_pt *info);
+
#endif /* DM_SERVICE_DEPENDENCY_H_ */
http://git-wip-us.apache.org/repos/asf/celix/blob/664845ca/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
----------------------------------------------------------------------
diff --git a/examples/whiteboard/tracker_depman/private/src/dependency_activator.c b/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
index 5dd8d1e..51e22d6 100644
--- a/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
+++ b/examples/whiteboard/tracker_depman/private/src/dependency_activator.c
@@ -54,7 +54,7 @@ celix_status_t dm_init(void * userData, bundle_context_pt context, dm_dependency
data->context = context;
- component_create(context, manager, &service);
+ component_create(context, &service);
component_setImplementation(service, data);
component_setCallbacks(service, service_init, service_start, service_stop, service_deinit);