#!/bin/sh
##
##  dms -- document management system
##
##  $ v. 0.1  2008-01-18  Pouya D. Tafti $
##

USAGE='usage:    dms add  <filename> "authors" <tags>                          
        dms tag  <tags>                                               
        dms auth <authors>                                            
        dms grep <regexp>                                             
                                                                      
        each author name should be a single word.                     
        
        example: dms add ch.pdf "calvin hobbes" fun/comics 1980s 1990s'


## CONFIGURATION ##

DOCHOME="$HOME/doc/dms"
DBFILE="dms.list"
TMPFILE="/tmp/dms-$$.swp"


## CODE ##

case $1 in
add)
    test $# -lt 3 &&
        { echo "$USAGE" ; exit 127 ; }

    shift
    FPATH=$1
    FN=`basename $1`
    AUTHORS="$2"
    shift 2
    TAGS="$*"

    echo "$FN ; auths: $AUTHORS ; tags: $TAGS"

    test -e "$FPATH" ||
        { echo "$FPATH not found." ; exit 1 ; }
    test -e "$DOCHOME/all/$FN" &&
        { echo "filename collision; rename the file and retry." ; exit 1 ; }
    ( mkdir -p $DOCHOME/all  && cp "$FPATH" $DOCHOME/all/ ) ||
        { echo "write error." ; exit 1 ; }
    echo -n "$FN; auths: "  >> "$DOCHOME/$DBFILE"
    for AUTHOR in $AUTHORS; do
        mkdir -p "$DOCHOME/authors/$AUTHOR" &&
        ln -s "$DOCHOME/all/$FN" "$DOCHOME/authors/$AUTHOR/$FN" &&
        echo -n "$AUTHOR "  >> "$DOCHOME/$DBFILE";
    done
    echo -n "; tags: "      >> "$DOCHOME/$DBFILE"
    for TAG in $TAGS; do
        mkdir -p "$DOCHOME/tags/$TAG" &&
        ln -s "$DOCHOME/all/$FN" "$DOCHOME/tags/$TAG/$FN" &&
        echo -n "$TAG "     >> "$DOCHOME/$DBFILE";
    done
    echo ";" >>"$DOCHOME/$DBFILE"
    ;;
tag)
    test $# -lt 2 &&
        { echo "$USAGE" ; exit 127 ; }

    shift
    TAGS="$*"

    cp "$DOCHOME/$DBFILE" "$TMPFILE"
    for TAG in $TAGS; do
        cat "$TMPFILE" | grep 'tags:.*'"$TAG"'[^;]*;'  > "$TMPFILE" ;
    done

    cat "$TMPFILE" ;
    ;;
auth)
    test $# -lt 2 &&
        { echo "$USAGE" ; exit 127 ; }

    shift
    AUTHORS="$*"

    cp "$DOCHOME/$DBFILE" "$TMPFILE"
    for AUTHOR in $AUTHORS; do
        cat "$TMPFILE" | grep 'auths:.*'"$AUTHOR"'[^;]*;'  > "$TMPFILE" ;
    done

    cat "$TMPFILE" ;
    ;;
grep)
    test $# -lt 2 &&
        { echo "$USAGE" ; exit 127 ; }

    shift

    cat "$DOCHOME/$DBFILE" | grep -e $*
    ;;

*)
    echo "$USAGE"
    exit 127
    ;;
esac
