00001 /* 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 2002 Net Integration Technologies, Inc. 00004 * 00005 * A UniConfGen framework to simplify writing filtering generators. 00006 */ 00007 #include "unifiltergen.h" 00008 00009 /***** UniFilterGen *****/ 00010 00011 UniFilterGen::UniFilterGen(IUniConfGen *inner) 00012 : xinner(NULL) 00013 { 00014 setinner(inner); 00015 } 00016 00017 00018 UniFilterGen::~UniFilterGen() 00019 { 00020 IUniConfGen *gen = xinner; 00021 setinner(NULL); 00022 WVRELEASE(gen); 00023 } 00024 00025 00026 void UniFilterGen::setinner(IUniConfGen *inner) 00027 { 00028 if (xinner) 00029 xinner->del_callback(this); 00030 xinner = inner; 00031 if (xinner) 00032 xinner->add_callback(this, UniConfGenCallback(this, 00033 &UniFilterGen::gencallback)); 00034 } 00035 00036 00037 UniConfKey UniFilterGen::keymap(const UniConfKey &key) 00038 { 00039 // by default, don't rename the key 00040 return key; 00041 } 00042 00043 UniConfKey UniFilterGen::reversekeymap(const UniConfKey &key) 00044 { 00045 // by default, don't rename the key 00046 return key; 00047 } 00048 00049 00050 void UniFilterGen::commit() 00051 { 00052 if (xinner) 00053 xinner->commit(); 00054 } 00055 00056 00057 bool UniFilterGen::refresh() 00058 { 00059 if (xinner) 00060 return xinner->refresh(); 00061 else 00062 return false; 00063 } 00064 00065 00066 void UniFilterGen::prefetch(const UniConfKey &key, bool recursive) 00067 { 00068 if (xinner) 00069 xinner->prefetch(keymap(key), recursive); 00070 } 00071 00072 00073 WvString UniFilterGen::get(const UniConfKey &key) 00074 { 00075 if (xinner) 00076 return xinner->get(keymap(key)); 00077 else 00078 return WvString::null; 00079 } 00080 00081 00082 void UniFilterGen::flush_buffers() 00083 { 00084 if (xinner) 00085 xinner->flush_buffers(); 00086 } 00087 00088 00089 void UniFilterGen::set(const UniConfKey &key, WvStringParm value) 00090 { 00091 if (xinner) 00092 xinner->set(keymap(key), value); 00093 } 00094 00095 00096 void UniFilterGen::setv(const UniConfPairList &pairs) 00097 { 00098 if (xinner) 00099 xinner->setv(pairs); 00100 } 00101 00102 00103 bool UniFilterGen::exists(const UniConfKey &key) 00104 { 00105 if (xinner) 00106 return xinner->exists(keymap(key)); 00107 else 00108 return false; 00109 } 00110 00111 00112 bool UniFilterGen::haschildren(const UniConfKey &key) 00113 { 00114 if (xinner) 00115 return xinner->haschildren(keymap(key)); 00116 else 00117 return false; 00118 } 00119 00120 00121 bool UniFilterGen::isok() 00122 { 00123 if (xinner) 00124 return xinner->isok(); 00125 else 00126 return false; 00127 } 00128 00129 00130 UniConfGen::Iter *UniFilterGen::iterator(const UniConfKey &key) 00131 { 00132 if (xinner) 00133 return xinner->iterator(keymap(key)); 00134 else 00135 return NULL; 00136 } 00137 00138 00139 UniConfGen::Iter *UniFilterGen::recursiveiterator(const UniConfKey &key) 00140 { 00141 if (xinner) 00142 return xinner->recursiveiterator(keymap(key)); 00143 else 00144 return NULL; 00145 } 00146 00147 00148 void UniFilterGen::gencallback(const UniConfKey &key, WvStringParm value) 00149 { 00150 if (xinner) 00151 delta(reversekeymap(key), value); 00152 else 00153 delta(keymap(key), value); 00154 }