blob: 9130ce77edd327c8d0d30a34478b91b5d5cc1e24 [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed 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.
*/
/** Config object. It's more-or-less independent of the config source
or representation.
*/
#ifndef JK_CONFIG_H
#define JK_CONFIG_H
#include "jk_global.h"
#include "jk_pool.h"
#include "jk_env.h"
#include "jk_logger.h"
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
struct jk_pool;
struct jk_map;
struct jk_env;
struct jk_config;
typedef struct jk_config jk_config_t;
/**
*
*/
struct jk_config
{
struct jk_bean *mbean;
int ver;
/* Parse and process a property. It'll locate the object and call the
* setAttribute on it.
*/
int (*setPropertyString) (struct jk_env * env, struct jk_config * cfg,
char *name, char *value);
/* Set an attribute for a jk object. This should be the
* only method called to configure objects. The implementation
* will update the underlying repository in addition to setting
* the runtime value. Calling setAttribute on the object directly
* will only set the runtime value.
*/
int (*setProperty) (struct jk_env * env, struct jk_config * cfg,
struct jk_bean * target, char *name, char *value);
/** Write the config file. If targetFile is NULL, it'll override the
* file that was used for reading
*/
int (*save) (struct jk_env * env, struct jk_config * cfg,
char *targetFile);
/** Check if the config changed, and update the workers.
*/
int (*update) (struct jk_env * env, struct jk_config * cfg,
int *didReload);
/** Process a node in config data
*/
int (*processNode) (struct jk_env * env, struct jk_config * cfg,
char *node, int didReload);
/* Private data */
struct jk_pool *pool;
void *_private;
struct jk_workerEnv *workerEnv;
struct jk_map *map;
char *file;
char *section;
struct jk_map *cfgData;
/* Only one thread can update the config
*/
struct jk_mutex *cs;
time_t mtime;
};
int jk2_config_setProperty(struct jk_env *env, struct jk_config *cfg,
struct jk_bean *mbean, char *name, char *val);
int jk2_config_setPropertyString(struct jk_env *env,
struct jk_config *cfg, char *name,
char *value);
int jk2_config_processConfigData(struct jk_env *env,
struct jk_config *cfg, int firstTime);
char *jk2_config_replaceProperties(struct jk_env *env, struct jk_map *m,
struct jk_pool *resultPool,
char *value);
int jk2_config_file_read(struct jk_env *env, struct jk_map *m,
const char *file);
int jk2_config_processNode(struct jk_env *env, struct jk_config *cfg,
char *name, int firstTime);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* JK_CONFIG_H */