# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@require instinc/prefixes

######################################################################
# Chemins

# répertoires relatifs pour les applications
APP_SRVRESDIR="Contents/Resources"
APP_SRVJAVADIR="Contents/Resources/Java"
APP_CLTRESDIR="Contents/WebServerResources"
APP_CLTJAVADIR="Contents/WebServerResources/Java"
APP_UNIXCLSPTHDIR="Contents/UNIX"
APP_UNIXCLSPTH="Contents/UNIX/UNIXClassPath.txt"
APP_MACOSCLSPTHDIR="Contents/MacOS"
APP_MACOSCLSPTH="Contents/MacOS/MacOSClassPath.txt"
APP_WINCLSPTHDIR="Contents/Windows"
APP_WINCLSPTH="Contents/Windows/CLSSPATH.txt"
APP_HTDOCSDIR="WebObjects"

# répertoire relatifs pour les frameworks
FW_SRVRESDIR="Resources"
FW_SRVJAVADIR="Resources/Java"
FW_CLTRESDIR="WebServerResources"
FW_CLTJAVADIR="WebServerResources/Java"
FW_HTDOCSDIR="WebObjects/Frameworks"

function create_wodirs_maybe() {
    mkdir -p "$WOAPPLICATIONS"
    mkdir -p "$WOFRAMEWORKS"
}

######################################################################
# Informations sur des répertoires de projet et des bundles

function is_wosrcdir() {
    # retourner true si le répertoire $1 est un répertoire de projet webobjects

    # tester d'abord l'existence du répertoire
    [ -d "$1" ] || return 1

    # tester la présence de wobuild.conf
    [ -f "$1/wobuild.conf" ] && return 0

    # tester la présence d'un ou plusieurs répertoires *.pbproj
    [ -n "$(list_dirs "$1" "*.pbproj")" ] && return 0

    # tester la présence d'un ou plusieurs répertoires *.xcode
    [ -n "$(list_dirs "$1" "*.xcode")" ] && return 0
    [ -n "$(list_dirs "$1" "*.xcodeproj")" ] && return 0

    # tester la présence de fichiers PB.project
    [ -n "$(list_files "$1" "PB.project")" ] && return 0

    # tester la présence de build.properties
    [ -f "$1/build.properties" ] && return 0

    # perdu...
    return 1
}

function set_wobindir() {
    # $1 étant le répertoire de projet, initialiser $2 avec le répertoire
    # binaire correspondant, et $3 avec la description du projet
    local project_name project_type project_desc
    local wobindir__

    if [ ! -f "$1/build.properties" ]; then
        die "Ne supporte que les projets de type wobuild"
    fi
    file_get_properties "$1/build.properties" project.name "" project.type "framework" project.desc ""
    if [ -z "project_name" -a -z "project_type" -a -z "project_desc" ]; then
        file_get_properties "$1/build.properties" project_name "" project_type "application" project_desc ""
    fi
    if [ -z "$project_name" -o -z "$project_type" ]; then
        die "Projet invalide: il faut spécifier project.name et project.type"
    fi
    if beginswith "$project_type" application; then
        if [ -d "$1/dist/$project_name.woa" ]; then
            wobindir__="$1/dist/$project_name.woa"
        elif [ -d "$1/build/$project_name.woa" ]; then
            wobindir_="$1/build/$project_name.woa"
        else
            wobindir__="$1/dist/$project_name.woa"
        fi
    elif beginswith "$project_type" framework; then
        if [ -d "$1/dist/$project_name.framework" ]; then
            wobindir__="$1/dist/$project_name.framework"
        elif [ -d "$1/build/$project_name.framework" ]; then
            wobindir_="$1/build/$project_name.framework"
        else
            wobindir__="$1/dist/$project_name.framework"
        fi
    else
        die "Type de projet invalide: $project_type"
    fi
    if [ ! -d "$1" ]; then
        die "Il faut construire le projet d'abord"
    fi

    [ -n "$2" ] && set_var "$2" "$wobindir__"
    [ -n "$3" ] && set_var "$3" "$project_desc"
}

function is_woappdir() {
    # retourner true si le répertoire $1 est un répertoire d'application
    # webobjects

    # tester d'abord l'existence du répertoire
    [ -d "$1" ] || return 1

    # tester la présence des répertoire de resources
    test -d "$1/$APP_SRVRESDIR" || return 1
    #test -d "$1/$APP_CLTRESDIR" || return 1

    # tester la présence des répertoires de classpath
    test -d "$1/$APP_UNIXCLSPTHDIR" || return 1
    test -d "$1/$APP_MACOSCLSPTHDIR" || return 1
    test -d "$1/$APP_WINCLSPTHDIR" || return 1

    # on se contentera de ces tests sommaires...
    return 0
}

function is_wofwdir() {
    # retourner true sir le répertoire $1 est un répertoire de framework
    # webobjects

    # tester d'abord l'existence du répertoire
    [ -d "$1" ] || return 1

    # tester les présence d'un des répertoires de resources
    test -d "$1/$FW_SRVRESDIR" -o -d "$1/$FW_CLTRESDIR" || return 1

    # on se contentera de ces tests sommaires...
    return 0
}

function get_jawotools_properties_path() {
    if [ -f "$1/jawotools.properties" ]; then
        echo "$1/jawotools.properties"
    elif [ -f "$1/build_infos.txt" ]; then
        echo "$1/build_infos.txt"
    else
        echo "$1/jawotools.properties"
    fi

    # jawotools.properties: description, developmentSnapshot, releaseDate, version
    # build_infos.txt: desc, devel, date, version
}

function read_jawotools_properties() {
    local file="$(basename "$1")"
    if [ "$file" == "jawotools.properties" ]; then
        file_get_properties "$1" description "--NOT-SET--" version "--NOT-SET--" releaseDate "--NOT-SET--" developmentSnapshot "--NOT-SET--"
    elif [ "$file" == "build_infos.txt" ]; then
        local desc date devel
        file_get_properties "$1" desc "--NOT-SET--" version "--NOT-SET--" date "--NOT-SET--" devel "--NOT-SET--"
        description="$desc"
        releaseDate="$date"
        developmentSnapshot="$devel"
    fi
}

function get_version_txt_path() {
    if [ -f "$1/VERSION.txt" ]; then
        echo "$1/VERSION.txt"
    elif [ -f "$1/version.txt" ]; then
        echo "$1/version.txt"
    else
        echo "$1/VERSION.txt"
    fi
}