#!/bin/bash # #{{IS_NOTE # # Authors: Tom M. Yeh # Contributors: # Create Date: 2001/3/30 05:46PM # Purpose: Generate Java classes from properties files # Description: # Execute 'genprop -h' to know how to use. # History: # 5/19/2001 Tom M. Yeh, allow to processing non-utf files and specify # different paths # #}}IS_NOTE # # Copyright (C) 2001 Potix Corporation. All Rights Reserved. # #{{IS_RIGHT # This program is distributed under Lesser GPL Version 2.1 in the hope that # it will be useful, but WITHOUT ANY WARRANTY. #}}IS_RIGHT # function showhelp { echo "genprop - generate Java classes from properties files" echo "Copyright (C) 2001 Potix Corporation. All Rights Reserved." echo echo "Usage:" echo " genprop [-f] [-h] [-u] prop_dir dst_dir" echo echo "prop_dir" echo " The directory holds the properties files, *.properties." echo " If -u is specified, *.properties.utf are expected." echo "dst_dir" echo " The destination directory, where the generated java codes" echo " are stored." echo echo "Example:" echo " genpro src/conf codegen" echo echo "Options:" echo " -f" echo " Force the generation without checking whether it is newer." echo " -u" echo " UTF files (with .utf extension) expected." echo " -x" echo " Exclude filename that contains '_'." echo " -h or --help" echo " Show this message." echo echo "Format of the properties.utf file:" echo "#@=TypeName" echo " and all constants are added with the type name, e.g, MT_SYS." echo " It must be at the first line." echo echo "#-=M_FILE_NOT_FOUND" echo "1002=File Not Found" echo " Other part is composed as pair of lines. The first line of" echo " each pair specifies the constant name (at second column)" echo " The second line of each pair specifies the value (1002 in" echo " the above example). Notice: hexadecimal is assumed, only" echo " lower-case with four digits is allowed, and starts at 1000." echo echo " * echo " * You have to maintain org.zkoss.mesg.MessageConst.java" echo " consistently, if you add a new properties file." echo " * Lines starting with # or being empty are ignored." } #-- check options if [ "$1" = "--help" ] ; then showhelp exit 0 fi awkpath=$0 force=0 flext=.properties exclude=N.O.E.X.I.S.T while getopts "fhux" opt; do case $opt in h ) showhelp exit 0;; f ) force=1;; u ) flext=.properties.utf;; x ) exclude=_;; \? ) echo "Try 'genprop --help' for more information" exit 1;; esac done shift $(($OPTIND - 1)) if [ $# != 2 ] ; then echo "genprop: wrong number of arguments" echo "Try 'genprop --help' for more information" exit 1 fi cnfpath=$1 codegendir=$2 #-- check directory structure if [ ! -d $cnfpath ] ; then echo "Error: $cnfpath is not a directory" 1>&2 exit 1 fi #-- start process for fn in $cnfpath/*$flext ; do if [ \( -f "$fn" \) -a \( "${fn#*$exclude}" = "$fn" \) ] ; then msgnm=${fn##$cnfpath/} msgnm=${msgnm%$flext} clsnm=$(head -1 $fn) clsnm=${clsnm###class=} pkgnm=${clsnm%.*} clsnm=${clsnm##*.} if [ "$clsnm" = "" ] || [ "$pkgnm" == "" ] ; then echo The first line of $fn must be "#class=package.class" exit 1 fi pkgpath=${codegendir}/${pkgnm//.//} dstfn=${pkgpath}/${clsnm}.java #update if newer if [ \( force = 1 \) -o \( ! -f "$dstfn" \) -o \( "$fn" -nt "$dstfn" \) ] ; then echo "Generating $dstfn..." if [ "$awkfn" = "" ] ; then if [ "$TERM" = "cygwin" ] ; then awkpath=$(cygpath -u $awkpath) fi awkfn=${awkpath%/*}/genprop.awk fi mkdir -p $pkgpath args="-f $awkfn -v pkgnm=$pkgnm -v clsnm=$clsnm -vmsgnm=$msgnm -vusernm=$USER" awk $args -v "when=$(date)" "$fn" > "$dstfn" fi fi done