Repository: celix Updated Branches: refs/heads/feature/CELIX-230_Refactoring_of_the_shell_command_service 3bf493eb0 -> b63c0d9fc
CELIX-230: Refactored shell command for remote service calculator example. Added missing include in command.h Project: http://git-wip-us.apache.org/repos/asf/celix/repo Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/b63c0d9f Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/b63c0d9f Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/b63c0d9f Branch: refs/heads/feature/CELIX-230_Refactoring_of_the_shell_command_service Commit: b63c0d9fc96ec198437f5360e4cfb6f1152a056b Parents: 3bf493e Author: Pepijn Noltes <[email protected]> Authored: Tue Oct 27 16:54:44 2015 +0100 Committer: Pepijn Noltes <[email protected]> Committed: Tue Oct 27 16:54:44 2015 +0100 ---------------------------------------------------------------------- .../examples/calculator_shell/CMakeLists.txt | 1 - .../private/include/add_command.h | 5 +- .../private/include/sqrt_command.h | 5 +- .../private/include/sub_command.h | 5 +- .../calculator_shell/private/src/add_command.c | 46 +++++----------- .../private/src/calculator_shell_activator.c | 55 +++++++++----------- .../calculator_shell/private/src/sqrt_command.c | 42 ++++----------- .../calculator_shell/private/src/sub_command.c | 46 +++++----------- shell/CMakeLists.txt | 6 +-- shell/public/include/command.h | 1 + 10 files changed, 71 insertions(+), 141 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/CMakeLists.txt b/remote_services/examples/calculator_shell/CMakeLists.txt index dcb8c8f..b93afca 100644 --- a/remote_services/examples/calculator_shell/CMakeLists.txt +++ b/remote_services/examples/calculator_shell/CMakeLists.txt @@ -32,7 +32,6 @@ bundle(calculator_shell SOURCES private/include/add_command.h private/include/sqrt_command.h private/include/sub_command.h - ../../../shell/public/src/command.c FILES http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/include/add_command.h ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/include/add_command.h b/remote_services/examples/calculator_shell/private/include/add_command.h index 1ff9d96..58a7bda 100644 --- a/remote_services/examples/calculator_shell/private/include/add_command.h +++ b/remote_services/examples/calculator_shell/private/include/add_command.h @@ -27,9 +27,6 @@ #ifndef ADD_COMMAND_H_ #define ADD_COMMAND_H_ -#include "command_impl.h" - -command_pt addCommand_create(bundle_context_pt context); -void addCommand_destroy(command_pt command); +void addCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err); #endif /* ADD_COMMAND_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/include/sqrt_command.h ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/include/sqrt_command.h b/remote_services/examples/calculator_shell/private/include/sqrt_command.h index 257abff..c9d07d2 100644 --- a/remote_services/examples/calculator_shell/private/include/sqrt_command.h +++ b/remote_services/examples/calculator_shell/private/include/sqrt_command.h @@ -27,9 +27,6 @@ #ifndef SQRT_COMMAND_H_ #define SQRT_COMMAND_H_ -#include "command_impl.h" - -command_pt sqrtCommand_create(bundle_context_pt context); -void sqrtCommand_destroy(command_pt command); +void sqrtCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err); #endif /* SQRT_COMMAND_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/include/sub_command.h ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/include/sub_command.h b/remote_services/examples/calculator_shell/private/include/sub_command.h index d584835..cf13616 100644 --- a/remote_services/examples/calculator_shell/private/include/sub_command.h +++ b/remote_services/examples/calculator_shell/private/include/sub_command.h @@ -27,9 +27,6 @@ #ifndef SUB_COMMAND_H_ #define SUB_COMMAND_H_ -#include "command_impl.h" - -command_pt subCommand_create(bundle_context_pt context); -void subCommand_destroy(command_pt command); +void subCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err); #endif /* SUB_COMMAND_H_ */ http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/src/add_command.c ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/src/add_command.c b/remote_services/examples/calculator_shell/private/src/add_command.c index 260add3..838ff25 100644 --- a/remote_services/examples/calculator_shell/private/src/add_command.c +++ b/remote_services/examples/calculator_shell/private/src/add_command.c @@ -27,6 +27,7 @@ #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <command.h> #include "array_list.h" #include "bundle_context.h" @@ -34,72 +35,53 @@ #include "calculator_service.h" -void addCommand_execute(command_pt command, char * line, void (*out)(char *), void (*err)(char *)); -celix_status_t addCommand_isNumeric(command_pt command, char *number, bool *ret); +static celix_status_t addCommand_isNumeric(char *number, bool *ret); -command_pt addCommand_create(bundle_context_pt context) { - command_pt command = (command_pt) calloc(1, sizeof(*command)); - if (command) { - command->bundleContext = context; - command->name = "add"; - command->shortDescription = "add the given doubles"; - command->usage = "add <double> <double>"; - command->executeCommand = addCommand_execute; - } - return command; -} - -void addCommand_destroy(command_pt command) { - free(command); -} - -void addCommand_execute(command_pt command, char *line, void (*out)(char *), void (*err)(char *)) { +void addCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err) { celix_status_t status = CELIX_SUCCESS; service_reference_pt calculatorService = NULL; - status = bundleContext_getServiceReference(command->bundleContext, (char *) CALCULATOR_SERVICE, &calculatorService); + status = bundleContext_getServiceReference(context, (char *) CALCULATOR_SERVICE, &calculatorService); if (status == CELIX_SUCCESS) { char *token = line; strtok_r(line, " ", &token); char *aStr = strtok_r(NULL, " ", &token); bool numeric; - addCommand_isNumeric(command, aStr, &numeric); + addCommand_isNumeric(aStr, &numeric); if (aStr != NULL && numeric) { char *bStr = strtok_r(NULL, " ", &token); - addCommand_isNumeric(command, bStr, &numeric); + addCommand_isNumeric(bStr, &numeric); if (bStr != NULL && numeric) { calculator_service_pt calculator = NULL; - status = bundleContext_getService(command->bundleContext, calculatorService, (void *) &calculator); + status = bundleContext_getService(context, calculatorService, (void *) &calculator); if (status == CELIX_SUCCESS) { double a = atof(aStr); double b = atof(bStr); double result = 0; status = calculator->add(calculator->calculator, a, b, &result); if (status == CELIX_SUCCESS) { - char line[256]; - sprintf(line, "CALCULATOR_SHELL: Add: %f + %f = %f\n", a, b, result); - out(line); + fprintf(out, "CALCULATOR_SHELL: Add: %f + %f = %f\n", a, b, result); } else { - out("ADD: Unexpected exception in Calc service\n"); + fprintf(err, "ADD: Unexpected exception in Calc service\n"); } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } } else { - out("ADD: Requires 2 numerical parameter\n"); + fprintf(err, "ADD: Requires 2 numerical parameter\n"); } } else { - out("ADD: Requires 2 numerical parameter\n"); + fprintf(err, "ADD: Requires 2 numerical parameter\n"); status = CELIX_ILLEGAL_ARGUMENT; } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } //return status; } -celix_status_t addCommand_isNumeric(command_pt command, char *number, bool *ret) { +static celix_status_t addCommand_isNumeric(char *number, bool *ret) { celix_status_t status = CELIX_SUCCESS; *ret = true; while(*number) { http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/src/calculator_shell_activator.c ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/src/calculator_shell_activator.c b/remote_services/examples/calculator_shell/private/src/calculator_shell_activator.c index d0fca76..275a67d 100644 --- a/remote_services/examples/calculator_shell/private/src/calculator_shell_activator.c +++ b/remote_services/examples/calculator_shell/private/src/calculator_shell_activator.c @@ -25,33 +25,30 @@ */ #include <stdlib.h> #include <string.h> +#include <command.h> #include "bundle_activator.h" #include "bundle_context.h" #include "service_registration.h" -#include "command_impl.h" - #include "add_command.h" #include "sub_command.h" #include "sqrt_command.h" struct activator { service_registration_pt addCommand; - command_pt addCmd; + command_service_pt addCmd; command_service_pt addCmdSrv; service_registration_pt subCommand; - command_pt subCmd; + command_service_pt subCmd; command_service_pt subCmdSrv; service_registration_pt sqrtCommand; - command_pt sqrtCmd; + command_service_pt sqrtCmd; command_service_pt sqrtCmdSrv; }; -static celix_status_t calculatorShell_createCommandService(command_pt command, command_service_pt *commandService); - celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) { celix_status_t status = CELIX_SUCCESS; if (status == CELIX_SUCCESS) { @@ -81,31 +78,31 @@ celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) struct activator * activator = (struct activator *) userData; - activator->addCmd = addCommand_create(context); - calculatorShell_createCommandService(activator->addCmd, &activator->addCmdSrv); - bundleContext_registerService(context, (char *) OSGI_SHELL_COMMAND_SERVICE_NAME, activator->addCmdSrv, NULL, &activator->addCommand); + activator->addCmdSrv = calloc(1, sizeof(*activator->addCmdSrv)); + activator->addCmdSrv->handle = context; + activator->addCmdSrv->executeCommand = (void *)addCommand_execute; + properties_pt props = properties_create(); + properties_set(props, OSGI_SHELL_COMMAND_NAME, "add"); + bundleContext_registerService(context, OSGI_SHELL_COMMAND_SERVICE_NAME, activator->addCmdSrv, props, &activator->addCommand); + - activator->subCmd = subCommand_create(context); - calculatorShell_createCommandService(activator->subCmd, &activator->subCmdSrv); - bundleContext_registerService(context, (char *) OSGI_SHELL_COMMAND_SERVICE_NAME, activator->subCmdSrv, NULL, &activator->subCommand); + activator->sqrtCmdSrv = calloc(1, sizeof(*activator->sqrtCmdSrv)); + activator->sqrtCmdSrv->handle = context; + activator->sqrtCmdSrv->executeCommand = (void *)sqrtCommand_execute; + props = properties_create(); + properties_set(props, OSGI_SHELL_COMMAND_NAME, "sqrt"); + bundleContext_registerService(context, OSGI_SHELL_COMMAND_SERVICE_NAME, activator->sqrtCmdSrv, props, &activator->sqrtCommand); - activator->sqrtCmd = sqrtCommand_create(context); - calculatorShell_createCommandService(activator->sqrtCmd, &activator->sqrtCmdSrv); - bundleContext_registerService(context, (char *) OSGI_SHELL_COMMAND_SERVICE_NAME, activator->sqrtCmdSrv, NULL, &activator->sqrtCommand); + activator->subCmdSrv = calloc(1, sizeof(*activator->subCmdSrv)); + activator->subCmdSrv->handle = context; + activator->subCmdSrv->executeCommand = (void *)subCommand_execute; + props = properties_create(); + properties_set(props, OSGI_SHELL_COMMAND_NAME, "sub"); + bundleContext_registerService(context, OSGI_SHELL_COMMAND_SERVICE_NAME, activator->subCmdSrv, props, &activator->subCommand); return status; } -static celix_status_t calculatorShell_createCommandService(command_pt command, command_service_pt *commandService) { - *commandService = calloc(1, sizeof(**commandService)); - (*commandService)->command = command; - (*commandService)->executeCommand = command->executeCommand; - (*commandService)->getName = command_getName; - (*commandService)->getShortDescription = command_getShortDescription; - (*commandService)->getUsage = command_getUsage; - - return CELIX_SUCCESS; -} celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { celix_status_t status = CELIX_SUCCESS; @@ -119,9 +116,9 @@ celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) free(activator->sqrtCmdSrv); if (status == CELIX_SUCCESS) { - addCommand_destroy(activator->addCmd); - subCommand_destroy(activator->subCmd); - sqrtCommand_destroy(activator->sqrtCmd); + free(activator->addCmdSrv); + free(activator->sqrtCmdSrv); + free(activator->subCmdSrv); } return status; http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/src/sqrt_command.c ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/src/sqrt_command.c b/remote_services/examples/calculator_shell/private/src/sqrt_command.c index 87efde3..3cd0e5d 100644 --- a/remote_services/examples/calculator_shell/private/src/sqrt_command.c +++ b/remote_services/examples/calculator_shell/private/src/sqrt_command.c @@ -33,66 +33,46 @@ #include "sqrt_command.h" #include "calculator_service.h" +static celix_status_t sqrtCommand_isNumeric(char *number, bool *ret); -void sqrtCommand_execute(command_pt command, char * line, void (*out)(char *), void (*err)(char *)); -celix_status_t sqrtCommand_isNumeric(command_pt command, char *number, bool *ret); - -command_pt sqrtCommand_create(bundle_context_pt context) { - command_pt command = (command_pt) calloc(1, sizeof(*command)); - if (command) { - command->bundleContext = context; - command->name = "sqrt"; - command->shortDescription = "calculates the square root of the given double"; - command->usage = "sqrt <double>"; - command->executeCommand = sqrtCommand_execute; - } - return command; -} - -void sqrtCommand_destroy(command_pt command) { - free(command); -} - -void sqrtCommand_execute(command_pt command, char *line, void (*out)(char *), void (*err)(char *)) { +void sqrtCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err) { celix_status_t status = CELIX_SUCCESS; service_reference_pt calculatorService = NULL; - status = bundleContext_getServiceReference(command->bundleContext, (char *) CALCULATOR_SERVICE, &calculatorService); + status = bundleContext_getServiceReference(context, (char *) CALCULATOR_SERVICE, &calculatorService); if (status == CELIX_SUCCESS) { char *token = line; strtok_r(line, " ", &token); char *aStr = strtok_r(NULL, " ", &token); bool numeric; - sqrtCommand_isNumeric(command, aStr, &numeric); + sqrtCommand_isNumeric(aStr, &numeric); if (aStr != NULL && numeric) { calculator_service_pt calculator = NULL; - status = bundleContext_getService(command->bundleContext, calculatorService, (void *) &calculator); + status = bundleContext_getService(context, calculatorService, (void *) &calculator); if (status == CELIX_SUCCESS) { double a = atof(aStr); double result = 0; status = calculator->sqrt(calculator->calculator, a, &result); if (status == CELIX_SUCCESS) { - char line[256]; - sprintf(line, "CALCULATOR_SHELL: Sqrt: %f = %f\n", a, result); - out(line); + fprintf(out, "CALCULATOR_SHELL: Sqrt: %f = %f\n", a, result); } else { - out("SQRT: Unexpected exception in Calc service\n"); + fprintf(err, "SQRT: Unexpected exception in Calc service\n"); } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } } else { - out("SQRT: Requires 1 numerical parameter\n"); + fprintf(err, "SQRT: Requires 1 numerical parameter\n"); status = CELIX_ILLEGAL_ARGUMENT; } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } //return status; } -celix_status_t sqrtCommand_isNumeric(command_pt command, char *number, bool *ret) { +static celix_status_t sqrtCommand_isNumeric(char *number, bool *ret) { celix_status_t status = CELIX_SUCCESS; *ret = true; while(*number) { http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/remote_services/examples/calculator_shell/private/src/sub_command.c ---------------------------------------------------------------------- diff --git a/remote_services/examples/calculator_shell/private/src/sub_command.c b/remote_services/examples/calculator_shell/private/src/sub_command.c index ff810e6..87fabc2 100644 --- a/remote_services/examples/calculator_shell/private/src/sub_command.c +++ b/remote_services/examples/calculator_shell/private/src/sub_command.c @@ -33,73 +33,53 @@ #include "sub_command.h" #include "calculator_service.h" +static celix_status_t subCommand_isNumeric(char *number, bool *ret); -void subCommand_execute(command_pt command, char * line, void (*out)(char *), void (*err)(char *)); -celix_status_t subCommand_isNumeric(command_pt command, char *number, bool *ret); - -command_pt subCommand_create(bundle_context_pt context) { - command_pt command = (command_pt) calloc(1, sizeof(*command)); - if (command) { - command->bundleContext = context; - command->name = "sub"; - command->shortDescription = "subtract the given doubles"; - command->usage = "sub <double> <double>"; - command->executeCommand = subCommand_execute; - } - return command; -} - -void subCommand_destroy(command_pt command) { - free(command); -} - -void subCommand_execute(command_pt command, char *line, void (*out)(char *), void (*err)(char *)) { +void subCommand_execute(bundle_context_pt context, char *line, FILE *out, FILE *err) { celix_status_t status = CELIX_SUCCESS; service_reference_pt calculatorService = NULL; - status = bundleContext_getServiceReference(command->bundleContext, (char *) CALCULATOR_SERVICE, &calculatorService); + status = bundleContext_getServiceReference(context, (char *) CALCULATOR_SERVICE, &calculatorService); if (status == CELIX_SUCCESS) { char *token = line; strtok_r(line, " ", &token); char *aStr = strtok_r(NULL, " ", &token); bool numeric; - subCommand_isNumeric(command, aStr, &numeric); + subCommand_isNumeric(aStr, &numeric); if (aStr != NULL && numeric) { char *bStr = strtok_r(NULL, " ", &token); - subCommand_isNumeric(command, bStr, &numeric); + subCommand_isNumeric(bStr, &numeric); if (bStr != NULL && numeric) { calculator_service_pt calculator = NULL; - status = bundleContext_getService(command->bundleContext, calculatorService, (void *) &calculator); + status = bundleContext_getService(context, calculatorService, (void *) &calculator); if (status == CELIX_SUCCESS) { double a = atof(aStr); double b = atof(bStr); double result = 0; status = calculator->sub(calculator->calculator, a, b, &result); if (status == CELIX_SUCCESS) { - char line[256]; - sprintf(line, "CALCULATOR_SHELL: Sub: %f - %f = %f\n", a, b, result); - out(line); + fprintf(out, "CALCULATOR_SHELL: Sub: %f - %f = %f\n", a, b, result); } else { - out("SUB: Unexpected exception in Calc service\n"); + fprintf(err, "SUB: Unexpected exception in Calc service\n"); } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } } else { - out("SUB: Requires 2 numerical parameter\n"); + fprintf(err, "SUB: Requires 2 numerical parameter\n"); } } else { - out("SUB: Requires 2 numerical parameter\n"); + fprintf(err, "SUB: Requires 2 numerical parameter\n"); status = CELIX_ILLEGAL_ARGUMENT; } } else { - out("No calc service available\n"); + fprintf(err, "No calc service available\n"); } //return status; } -celix_status_t subCommand_isNumeric(command_pt command, char *number, bool *ret) { +static celix_status_t subCommand_isNumeric(char *number, bool *ret) { celix_status_t status = CELIX_SUCCESS; *ret = true; while(*number) { http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/shell/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/shell/CMakeLists.txt b/shell/CMakeLists.txt index 95bddd7..26252c4 100644 --- a/shell/CMakeLists.txt +++ b/shell/CMakeLists.txt @@ -24,9 +24,9 @@ if (SHELL) bundle(shell SOURCES - private/src/activator - private/src/shell - private/src/lb_command + private/src/activator + private/src/shell + private/src/lb_command private/src/start_command private/src/stop_command private/src/install_command http://git-wip-us.apache.org/repos/asf/celix/blob/b63c0d9f/shell/public/include/command.h ---------------------------------------------------------------------- diff --git a/shell/public/include/command.h b/shell/public/include/command.h index fce2ca4..97872c7 100644 --- a/shell/public/include/command.h +++ b/shell/public/include/command.h @@ -28,6 +28,7 @@ #define COMMAND_H_ #include "celix_errno.h" +#include <stdio.h> #define OSGI_SHELL_COMMAND_NAME "command.name" #define OSGI_SHELL_COMMAND_USAGE "command.usage"
