nutools/legacy/instinc/woconf

195 lines
6.8 KiB
Bash

# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@require instinc/prefixes
##@require instinc/wobase
##@require instinc/wofunctions
function get_default_configfile() {
# $1=resdir (woadir/Contents/Resources ou fwkdir/Resources)
local configs configfile
array_from_lines configs "$(list_files "$1" "*.config")"
if [ ${#configs[*]} -eq 0 ]; then
array_from_lines configs "$(list_files "$1" "config.xml")"
fi
echo "${configs:-Properties}"
}
function set_config_property() {
# Modifier la propriété $2 avec la valeur $3 du fichier de configuration par
# défaut de l'application $1. On peut préciser le nom du fichier de
# configuration à utiliser avec $4. Par défaut, il s'agit du premier fichier
# ayant l'extension .config. Il doit s'agir d'un fichier de propriétés java.
# si $2 vaut "-", $3 doit être de la forme "[configfile/]prop=value" ou
# ">configfile[:srcfile]"
local action=setprop
local bundir="$1" prop="$2" value="$3" configfile="$4"
local srvresdir="$APP_SRVRESDIR"
if is_wofwdir "$bundir"; then
srvresdir="$FW_SRVRESDIR"
fi
if [ "$prop" == "-" ]; then
if beginswith "$value" ">"; then
# choix d'un fichier de configuration par défaut
action=setconfigfile
configfile="${value#>}"
prop=
if [ "${configfile//:/}" != "$configfile" ]; then
# on a donné un fichier source
prop="copysrcfile"
value="${configfile##*:}"
configfile="${configfile%:*}"
fi
else
# modification de la valeur d'une propriété
prop="${value%%=*}"
if [ "${prop//\//}" != "$prop" ]; then
# on a donné le nom du fichier de propriété
configfile="${prop%/*}"
prop="${prop##*/}"
fi
value="${value#*=}"
fi
fi
if [ -z "$configfile" ]; then
if [ -n "$DEFAULT_CONFIGFILE" ]; then
configfile="$DEFAULT_CONFIGFILE"
else
configfile="$(get_default_configfile "$bundir/$srvresdir")"
fi
fi
if [ "$action" == "setprop" ]; then
dest="$configfile"
first_char_is "$dest" "/" || dest="$bundir/$srvresdir/$dest"
mkdirof "$dest"
file_set_properties -c "$dest" "$prop" "$value"
elif [ "$action" == "setconfigfile" ]; then
if [ "$prop" == "copysrcfile" ]; then
src="$value"
dest="$configfile"
# chemin absolus
first_char_is "$src" "/" || src="$bundir/$srvresdir/$src"
first_char_is "$dest" "/" || dest="$bundir/$srvresdir/$dest"
mkdirof "$dest"
/bin/cp -f "$src" "$dest"
fi
DEFAULT_CONFIGFILE="$configfile"
fi
}
function set_eomodel_property() {
:
}
function woconf_display_help() {
echo "$scriptname: vérifier et modifier la configuration d'une application
ou d'un framework
USAGE
$scriptname <fw.framework|app.woa> \"conf_cmds\"
Les lignes de configuration peuvent être:
#commentaire -- un commentaire (ignoré)
v[erify] -- vérifier et corriger la consistance.
Cette action est faite automatiquement sauf
avec l'option --noverify.
c>configfile -- changer le fichier de configuration par
défaut
c>configfile:srcfile -- copier le fichier de configuration srcfile
sur configfile et choisir ce fichier comme
fichier de configuration par défaut
c[configfile/]prop=value -- modifier une propriété du fichier de
configuration.
=== les options suivantes ne sont pas encore implémentées =================
eprofile:user:password -- configurer l'eomodel par défaut selon le
profil
ehost:port:instance:user:passwd
-- configurer l'eomodel par défaut avec les
valeurs données
Ename.eomodeld:profile:user:password
-- configurer l'eomodel donné selon le profil
Ename.eomodeld:host:port:instance:user:password
-- configurer l'eomodel donné avec les valeurs
données
Les lignes de configuration suivantes sont spécifiques aux application (.woa)
aMyFramework[.framework] -- ajouter un framework
rMyFramework[.framework] -- enlever un framework
sbefore:after -- faire un recherche/remplacement
f[ix_case] -- corriger la casse du classpath selon les
frameworks installés"
}
function woconf() {
local noverify=
local end_of_options
##@include sysinc/begingetopt
-h|--help)
woconf_display_help
exit 0
;;
--no-verify)
# ne pas effectuer automatiquement la vérification du bundle
noverify=1
;;
##@include sysinc/endgetopt
local tagdir="$1" srcdir bundir
if [ -z "$tagdir" ]; then
die "Il faut spécifier l'application ou le framework à modifier"
fi
tagdir="$(abspath "$1")"
if is_wosrcdir "$tagdir"; then
srcdir="$tagdir"
set_wobindir "$srcdir" bundir desc
elif is_woappdir "$tagdir"; then
bundir="$tagdir"
elif is_wofwdir "$tagdir"; then
bundir="$tagdir"
else
die "Le bundle doit être un framework ou une application"
fi
[ -w "$bundir" ] || die "Répertoire de bundle non accessible en écriture."
bundir="${bundir%/}"
if [ -z "$noverify" ]; then
verifix_bundle "$bundir"
fi
array_from_lines conf_cmds "$2"
for conf_cmd in "${conf_cmds[@]}"; do
action="$(first_char "$conf_cmd")"
option="$(last_chars "$conf_cmd")"
if [ "$action" == "#" ]; then
: # commentaire ignoré
elif [ "$action" == "v" ]; then
verifix_bundle "$bundir"
elif [ "$action" == "c" ]; then
set_config_property "$bundir" - "$option"
elif [ "$action" == "e" ]; then
set_eomodel_property "$bundir" - "$option"
elif [ "$action" == "a" ]; then
add_framework "$bundir" "$option"
elif [ "$action" == "r" ]; then
remove_framework "$bundir" "$option"
elif [ "$action" == "s" ]; then
search="${option%%:*}"
replace="${option#*:}"
searchreplace_classpath "$bundir" "$search" "$replace"
elif [ "$action" == "f" ]; then
fix_jars_case "$bundir"
else
eerror "Commande inconnue: $action"
fi
done
}