#!/bin/sh

PATH=/bin:/usr/bin:$PATH; export PATH

curDir=`dirname $0`
procName=`basename $0`

. $curDir/dm_incl
. $curDir/dm_text

# ---------------------------------------------------------------------------- #
#
# Create a new release ( fct = "n" ) from the given drawing or
# update ( fct = "u" ) the last version of a drawing in the release area
#
# Parameters:
#           input : - function ( "n": new, "u": update )
#                   - drawing name (without suffix)
#                   - project (without suffix)
#                   - partNumber
#                   - version
#                   - delFlag ('y'/'n') (remove drawing in design area)
#           output: - error code ("0": ok; "1"/"2": error)
#                   - path of drawing (to) or error message
#                   - path of project/partNumber directory
#                   - basename of drawing directory
#
# Author : J. Schmidt, AP221, 11.91
#
# Achtung: Die Prozeduren koennen vom Anwender auf firmenspezifische
#          Gegebenheiten angepasst werden.
#          Bei solchen Aenderungen uebernimmt SNI jedoch keine Gewaehr-
#          leistung fuer den ordnungsgemaessen Ablauf der Prozeduren.
#          Fehler werden nur beruecksichtigt, wenn sie in den ausge-
#          lieferten Prozeduren nachvollzogen werden koennen.
#
# ---------------------------------------------------------------------------- #

set -e
# ---------------------------------------------------------------------------- #
# Set error if a command fails
# ---------------------------------------------------------------------------- #
if [ ! -w $RETURN_FILE ]
then
    touch $RETURN_FILE
    chmod 777 $RETURN_FILE
fi
(eval "echo $ErrCommand") > $RETURN_FILE

# ---------------------------------------------------------------------------- #
# Check parameters
# ---------------------------------------------------------------------------- #
nbParam=6
if test $# -ne $nbParam
then
    (eval "echo $ParameterNotValid") > $RETURN_FILE
    exit 1
fi

# ---------------------------------------------------------------------------- #
# Set parameters to variables
# ---------------------------------------------------------------------------- #
function=$1
drawName=$2
project=$3
partNb=$4 
if ( test $5 -eq 0 )
then
    version="00"
else
    version=`expr $5 + 0`
    if ( test $5 -lt 10 )
    then
        version="0"$version
    fi
fi
delFlag=$6
        
desPath=$HOME$DESIGNS_PATH

# ------------------------------------------------------------------------ #
# Exists designer area ?
# ------------------------------------------------------------------------ #
if ( test ! -d $desPath )
then
    (eval "echo $DesAreaNotExists") > $RETURN_FILE
    exit 1
fi

# ------------------------------------------------------------------------ #
# Exists drawing (from) ?
# ------------------------------------------------------------------------ #
drawPath=$desPath"/"$drawName$DES_SUFF
if ( test ! -d $drawPath )
then
    (eval "echo $DrawingNotExists" ) > $RETURN_FILE
    exit 1
fi

projPath=$RELEASES_PATH/$project$PRO_SUFF
# ------------------------------------------------------------------------ #
# Exists project ?
# ------------------------------------------------------------------------ #
if ( test ! -d $projPath )
then
    (eval "echo $ProjectNotExists") > $RETURN_FILE
    exit 1
fi

# ------------------------------------------------------------------------ #
# Exists copy file
# ------------------------------------------------------------------------ #
if ( test ! -r $COPY_FILE )
then
    (eval "echo $CopyFileNotExists") > $RETURN_FILE
    exit 1
fi

# ------------------------------------------------------------------------ #
# Exists local copy file
# ------------------------------------------------------------------------ #
if ( test ! -r $LCOPY_FILE )
then
    (eval "echo $CopyFileNotExists") > $RETURN_FILE
    exit 1
fi

# ------------------------------------------------------------------------ #
# Check the existing versions of the drawing
# ------------------------------------------------------------------------ #
minVer="01"
partMinPath=$projPath"/"$partNb"."$minVer$REL_SUFF
if ( test ! -d $partMinPath )
then
    maxVer="-1"
    nbVer="0"
else
    partNbPath=$projPath"/"$partNb".??"$REL_SUFF
    maxVer=`ls -dr $partNbPath | sed -n "1,1s/.*$partNb\.\(..\)\$REL_SUFF/\1/p"`
    nbVer=`ls -dr $partNbPath | wc -l`
    nbVer=`expr $nbVer + 1 - $minVer`
fi 
# ------------------------------------------------------------------------ #
# If new version ?
# ------------------------------------------------------------------------ #
if ( test "$function" = "n" )
then
    # ------------------------------------------------------------------------ #
    # If version = minVer, other versions may not exist
    # ------------------------------------------------------------------------ #
    if ( test "$version" = "$minVer" )
    then
        # -------------------------------------------------------------------- #
        # If maxVer = -1 then create a partNb directory in project
        # -------------------------------------------------------------------- #
        if ( test "$maxVer" = "-1" )
        then
            partNbPath=$projPath"/"$partNb"."$version$REL_SUFF
            $curDir/usermkdir $partNbPath
            $curDir/userchmod 755 $partNbPath
        # -------------------------------------------------------------------- #
        # else error
        # -------------------------------------------------------------------- #
        else
            (eval "echo $PartNbExists") > $RETURN_FILE
            exit 1
        fi
    
    # ------------------------------------------------------------------------ #
    # else, version 1 up to version-1 must exist
    # ------------------------------------------------------------------------ #
    else
        # -------------------------------------------------------------------- #
        # No version yet exists -> error
        # -------------------------------------------------------------------- #
        if ( test $maxVer -gt $nbVer )
        then
            (eval "echo $VersionMissing") > $RETURN_FILE
            exit 1
        fi
        # -------------------------------------------------------------------- #
        # Exists all previous version ?
        # -------------------------------------------------------------------- #
        if ( test "$maxVer" = "-1" )
        then
            (eval "echo $VersionOneOnly") > $RETURN_FILE
            exit 1
        # -------------------------------------------------------------------- #
        # Last version plus 1 must be equal to version
        # -------------------------------------------------------------------- #
        else
            nextVer=`expr $maxVer + 1`
            if ( test $nextVer -lt 10 ); then nextVer="0"$nextVer; fi;
            # ---------------------------------------------------------------- #
            # If ok, create drawing directory in release area
            # ---------------------------------------------------------------- #
            if ( test "$version" = "$nextVer" )
            then
                partNbPath=$projPath"/"$partNb"."$version$REL_SUFF
                $curDir/usermkdir $partNbPath
                $curDir/userchmod 755 $partNbPath
            # ---------------------------------------------------------------- #
            # else error
            # ---------------------------------------------------------------- #
            else
                if ( test "$version > "$maxVer )
                then
                    (eval "echo $VersionLessExists") > $RETURN_FILE
                    exit 1
                else  
                    (eval "echo $VersionGreaterExists") > $RETURN_FILE
                    exit 1
                fi
            fi
        fi
    fi
fi

# ------------------------------------------------------------------------ #
# If update an existing version ?
# ------------------------------------------------------------------------ #
if ( test "$function" = "u" )
then
    # -------------------------------------------------------------------- #
    # version must be equal maxVer
    # -------------------------------------------------------------------- #
    if ( test "$version" != "$maxVer" )
    then
        (eval "echo $VersionUnequal") > $RETURN_FILE
        exit 1
    fi
    partNbPath=$projPath"/"$partNb"."$version$REL_SUFF
fi

# ------------------------------------------------------------------------ #
# Copy drawing directory to partNumber directory in release area
# ------------------------------------------------------------------------ #
drawPath=$HOME$DESIGNS_PATH"/"$drawName$DES_SUFF 
if ( test "$function" = "u" )
then
    find $partNbPath -exec $curDir/userchmod 755 {} \;
fi

find $drawPath -exec /bin/chmod 755 {} \;
/bin/sh $COPY_FILE $drawPath $partNbPath
/bin/sh $LCOPY_FILE $drawPath $partNbPath
rm $COPY_FILE
rm $LCOPY_FILE
find $partNbPath -exec $curDir/userchmod 555 {} \;
$curDir/userchmod 755 $partNbPath

# ------------------------------------------------------------------------ #
# Delete drawing directory if delFlag is true
# ------------------------------------------------------------------------ #
if ( test "$delFlag" = $YES )
then
    cd  $drawPath/..
    if ( `rm -rf $drawPath` ) # removes open files first (for hp,rw)
    then
        :
    fi
    if ( `rm -rf $drawPath` )
    then
        :
    fi
fi

# --------------------------------------------------------------------------- #
# Return 'ok'
# --------------------------------------------------------------------------- #
echo "0 $drawPath $partNbPath $partNb"."$version" > $RETURN_FILE
