195 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 |