1#!/bin/sh - 2# $Id: s_java_stat,v 12.27 2008/04/25 14:50:06 bschmeck Exp $ 3# 4# Build the Java files. 5 6msgjava="/*- 7 * Automatically built by dist/s_java_stat. 8 * Only the javadoc comments can be edited. 9 * 10 * See the file LICENSE for redistribution information. 11 * 12 * Copyright (c) 2002,2008 Oracle. All rights reserved. 13 */" 14 15s=/tmp/__java.sed 16t=/tmp/__java 17t0=/tmp/__java0 18c=/tmp/__javajnic 19u1=/tmp/__javautil1 20u2=/tmp/__javautil2 21trap 'rm -f $s $t $t0 $c $u1 $u2; exit 0' 0 1 2 3 13 15 22 23# Script to convert DB C structure declarations into Java declarations. 24jclass() 25{ 26 cat > $s <<EOF 27/struct __db_$1 {/,/^}/{ 28 /__db_$1/d 29 /;/!d 30 /^}/d 31 /db_threadid_t/d 32 /char[ ]*/{ 33 s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/\\ 34$2 private String \1;\\ 35$2 public String get_\1() {\\ 36$2 return \1;\\ 37$2 }/p 38 d 39 } 40 /time_t/{ 41 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/\\ 42$2 private long \1;\\ 43$2 public long get_\1() {\\ 44$2 return \1;\\ 45$2 }/p 46 d 47 } 48 /db_seq_t/{ 49 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/\\ 50$2 private long \1;\\ 51$2 public long get_\1() {\\ 52$2 return \1;\\ 53$2 }/p 54 d 55 } 56 /DB_LSN[ ]*/{ 57 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/\\ 58$2 private LogSequenceNumber \1;\\ 59$2 public LogSequenceNumber get_\1() {\\ 60$2 return \1;\\ 61$2 }/p 62 d 63 } 64 /DB_TXN_ACTIVE[ ]*\*/{ 65 s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/\\ 66$2 private Active[] \1;\\ 67$2 public Active[] get_\1() {\\ 68$2 return \1;\\ 69$2 }/p 70 d 71 } 72 /u_int8_t[ ]*xid\[/{ 73 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/\\ 74$2 private byte[] \1;\\ 75$2 public byte[] get_\1() {\\ 76$2 return \1;\\ 77$2 }/p 78 d 79 } 80 /u_int32_t.*startup_complete/{ 81 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/\\ 82$2 private int \1;\\ 83$2 public boolean get_\1() {\\ 84$2 return (\1 != 0);\\ 85$2 }/p 86 d 87 } 88 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/\\ 89$2 private int \1;\\ 90$2 public int get_\1() {\\ 91$2 return \1;\\ 92$2 }/p 93} 94EOF 95 sed -n -f $s < ../dbinc/db.in | 96 perl -w -p -e 's/get_(st|bt|hash|qs|compact)_/get_/;' \ 97 -e 'if (m/get.*\(/) {' \ 98 -e 's/_n([b-df-hj-np-tv-z]|upgrade)/_num_$1/;' \ 99 -e 's/_(min|max)([a-z])/_$1_$2/;' \ 100 -e 's/_mvcc/_multiversion/;' \ 101 -e 's/cnt/_count_/;' \ 102 -e 's/_pg/_pages_/;' \ 103 -e 's/(count|flag|free|page|percent|size|sync|timeout)/_$1/g;' \ 104 -e 's/([^p])(id\()/$1_$2/g;' \ 105 -e 's/__*/_/g;' \ 106 -e 's/_(.)/\U$1/g' \ 107 -e '};' \ 108 -e '1' 109} 110 111# Script to convert DB C structure declarations into a JNI method to fill the 112# corresponding Java class 113jclass_jni() 114{ 115 fill=__dbj_fill_$1 116 j_class=$2 117 jni_fieldid_decls $1 $2 118 jni_fieldids $1 $2 119 cat > $s <<EOF 120/struct __db_$1 {/,/^}/{ 121 /__db_$1/d 122 /;/!d 123 /^}/d 124 /db_threadid_t/d 125 /char[ ]*/{ 126 s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/ JAVADB_STAT_STRING(jnienv, jobj, $1_\1_fid, statp, \1);/p 127 d 128 } 129 /time_t/{ 130 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, jobj, $1_\1_fid, statp, \1);/p 131 d 132 } 133 /db_seq_t/{ 134 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, jobj, $1_\1_fid, statp, \1);/p 135 d 136 } 137 /DB_LSN[ ]*/{ 138 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_LSN(jnienv, jobj, $1_\1_fid, statp, \1);/p 139 d 140 } 141 /DB_TXN_ACTIVE[ ]*\*/{ 142 s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ JAVADB_STAT_ACTIVE(jnienv, jobj, $1_\1_fid, statp, \1);/p 143 d 144 } 145 /u_int8_t[ ]*xid\[/{ 146 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/ JAVADB_STAT_XID(jnienv, jobj, $1_\1_fid, statp, \1);/p 147 d 148 } 149 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_INT(jnienv, jobj, $1_\1_fid, statp, \1);/p 150} 151EOF 152 echo "static int $fill(JNIEnv *jnienv," >> $c 153 echo " jobject jobj, struct __db_$1 *statp) {" >> $c 154 sed -n -f $s < ../dbinc/db.in >> $c 155 echo ' return (0);' >> $c 156 echo '}' >> $c 157} 158 159jni_fieldid_decls() 160{ 161 cat > $s <<EOF 162/struct __db_$1 {/,/^}/{ 163 /__db_$1/d 164 /;/!d 165 /^}/d 166 /db_threadid_t/d 167 /char[ ]*/{ 168 s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/static jfieldID $1_\1_fid;/p 169 d 170 } 171 /time_t/{ 172 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p 173 d 174 } 175 /db_seq_t/{ 176 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p 177 d 178 } 179 /DB_LSN[ ]*/{ 180 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p 181 d 182 } 183 /DB_TXN_ACTIVE[ ]*\*/{ 184 s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p 185 d 186 } 187 /u_int8_t[ ]*xid\[/{ 188 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/static jfieldID $1_\1_fid;/p 189 d 190 } 191 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p 192} 193EOF 194 sed -n -f $s < ../dbinc/db.in >> $u1 195} 196 197jni_fieldids() 198{ 199 cat > $s <<EOF 200/struct __db_$1 {/,/^}/{ 201 /__db_$1/d 202 /;/!d 203 /^}/d 204 /db_threadid_t/d 205 /char[ ]*/{ 206 s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"Ljava\/lang\/String;\" },/p 207 d 208 } 209 /time_t/{ 210 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"J\" },/p 211 d 212 } 213 /db_seq_t/{ 214 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"J\" },/p 215 d 216 } 217 /DB_LSN[ ]*/{ 218 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"L\" DB_PKG \"LogSequenceNumber;\" },/p 219 d 220 } 221 /DB_TXN_ACTIVE[ ]*\*/{ 222 s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"[L\" DB_PKG \"TransactionStats\$Active;\" },/p 223 d 224 } 225 /u_int8_t[ ]*xid\[/{ 226 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"[B\" },/p 227 d 228 } 229 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"I\" },/p 230} 231EOF 232 sed -n -f $s < ../dbinc/db.in >> $u2 233} 234 235# Script to convert DB C structure declarations into a toString method body 236jclass_toString() 237{ 238 cat > $s <<EOF 239/struct __db_$1 {/,/^}/{ 240 /__db_$1/d 241 /;/!d 242 /^}/d 243 /db_threadid_t/d 244 /char[ ]*/{ 245 s/^[ ]*char[* ]*[ ]*\([^[;]*\).*/$3 + "\\\\n$3 \1=" + \1/p 246 d 247 } 248 /DB_TXN_ACTIVE[ ]*\*/{ 249 s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 \1=\" + DbUtil.objectArrayToString(\1, \"\1\")/p 250 d 251 } 252 /u_int8_t[ ]*xid\[/{ 253 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/$3 + \"\\\\n$3 \1=\" + DbUtil.byteArrayToString(\1)/p 254 d 255 } 256 /u_int32_t.*startup_complete/{ 257 s/^[ ]*[^ ]*[ ]*\([^[;]*\).*/$3 + \"\\\\n$3 \1=\" + (\1 != 0)/p 258 d 259 } 260 s/^[ ]*[^ ]*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 \1=\" + \1/p 261} 262EOF 263 echo 264 echo "$3 public String toString() {" 265 echo "$3 return \"$2:\"" 266 sed -n -f $s < ../dbinc/db.in 267 echo "$3 ;" 268 echo "$3 }" 269} 270 271stat_class() 272{ 273 c_struct=__db_$1 274 j_class=$2 275 extends=$3 276 imports=$4 277 extradecls=$5 278 279 (cat <<EOF 280$msgjava 281 282package com.sleepycat.db; 283$imports 284public class $j_class$extends { 285 // no public constructor 286 /* package */ $j_class() {}$extradecls 287EOF 288 jclass $1 289 jclass_toString $1 $2 290 echo '}') > $t0 291 f=../java/src/com/sleepycat/db/$j_class.java 292 ./s_javadoc_merge $f $t0 > $t 293 cmp $t $f > /dev/null 2>&1 || 294 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 295 jclass_jni $1 $2 296} 297 298echo "$msgjava" > $c 299> $u1 300> $u2 301 302stat_class bt_stat BtreeStats " extends DatabaseStats" 303 304# Build CompactStats.java - not purely a statistics class, but close enough to 305# share this code. 306(cat <<EOF 307$msgjava 308 309package com.sleepycat.db; 310 311import com.sleepycat.db.internal.DbUtil; 312 313public class CompactStats 314{ 315 // no public constructor 316 /* package */ CompactStats() {} 317 318 /* package */ 319 CompactStats(int fillpercent, int timeout, int pages) { 320 this.compact_fillpercent = fillpercent; 321 this.compact_timeout = timeout; 322 this.compact_pages = pages; 323 } 324EOF 325 jclass compact 326 jclass_toString compact CompactStats 327 echo '}') | 328 psed 's,public int get\(FillPercent\|Pages(\|Timeout\|Truncate\),/* package */ int get\1,g'> $t0 329f=../java/src/com/sleepycat/db/CompactStats.java 330./s_javadoc_merge $f $t0 > $t 331cmp $t $f > /dev/null 2>&1 || 332 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 333jclass_jni compact __dbj_fill_compact 334 335stat_class h_stat HashStats " extends DatabaseStats" 336stat_class lock_stat LockStats 337stat_class log_stat LogStats 338stat_class mpool_fstat CacheFileStats 339stat_class mpool_stat CacheStats 340stat_class mutex_stat MutexStats 341stat_class qam_stat QueueStats " extends DatabaseStats" 342stat_class rep_stat ReplicationStats "" " 343import com.sleepycat.db.internal.DbConstants; 344" " 345 public static final int REP_CLIENT = DbConstants.DB_REP_CLIENT; 346 347 public static final int REP_MASTER = DbConstants.DB_REP_MASTER; 348 349 public static final int REP_NONE = 0;" 350 351stat_class repmgr_stat ReplicationManagerStats 352stat_class seq_stat SequenceStats 353 354# Build TransactionStats.java - special because of embedded Active class 355(echo "$msgjava" 356 echo 357 echo 'package com.sleepycat.db;' 358 echo 359 echo 'import com.sleepycat.db.internal.DbUtil;' 360 echo 361 echo 'public class TransactionStats' 362 echo '{' 363 echo " // no public constructor" 364 echo " /* package */ TransactionStats() {}" 365 echo 366 echo " public static class Active {" 367 echo " // no public constructor" 368 echo " /* package */ Active() {}" 369 jclass txn_active " " 370 jclass_toString txn_active Active " " 371 echo ' };' 372 jclass txn_stat 373 jclass_toString txn_stat TransactionStats 374 echo '}') > $t0 375f=../java/src/com/sleepycat/db/TransactionStats.java 376./s_javadoc_merge $f $t0 > $t 377cmp $t $f > /dev/null 2>&1 || 378 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 379jclass_jni txn_stat __dbj_fill_txn_stat 380jclass_jni txn_active __dbj_fill_txn_active 381 382mv $c $t 383f=../libdb_java/java_stat_auto.c 384cmp $t $f > /dev/null 2>&1 || 385 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 386 387f=../libdb_java/java_util.i 388sed '/BEGIN-STAT-FIELD-DECLS/q' < $f > $t 389cat $u1 >> $t 390sed -n '/END-STAT-FIELD-DECLS/,/BEGIN-STAT-FIELDS/p' < $f >> $t 391cat $u2 >> $t 392sed -n '/END-STAT-FIELDS/,$p' < $f >> $t 393cmp $t $f > /dev/null 2>&1 || 394 (echo "Building $f" && rm -f $f && cp $t $f && chmod 644 $f) 395