#! /bin/bash

if [ $# -lt 1 ]; then
    echo "missing PATH argument"
    exit 1
fi

TOPDIR=$1
ERRORS=.check_package.err

RESET="\033[0m"
RED="\033[0;31m"
BROWN="\033[0;33m"
GREEN="\033[0;32m"

find $TOPDIR -name \*.java | while read file;
do
    relpath=${file#${TOPDIR}}
    CORRECT=$(echo $relpath | sed 's/\.\///; s/\/\+/\./g; s/\.\w\+.java//')
    N=$(cat $file | sed -n '/^\s*package /p ' | wc -l)
    if [ $N -gt 1 ]; then
        echo -e "$file : $BROWN more then 1 package directive$RESET";
        touch $ERRORS
        continue
    fi
    PACKAGE=$(cat $file | sed -n '/^\s*package /p ')
    if [ -z "$PACKAGE" ]; then
        echo -e "$file : $BROWN missing package directive$RESET";
        touch $ERRORS
        continue
    fi
    PACKAGE=$(echo "$PACKAGE" | sed 's/ *package *//; s/ *; *$//;')
    if [ "$PACKAGE" != "${CORRECT}" ]; then
        echo -e "$file : $RED$PACKAGE$RESET -> $GREEN$CORRECT$RESET";
        touch $ERRORS
    fi
    for IMPORT in $(cat $file | sed -n 's/import\s\+.*\.\(.*\);/\1/p');
    do
        cat $file | grep $IMPORT | grep -qv import
        if [ $? -ne 0 ]; then
            echo -e "$file : import $RED$IMPORT$RESET might be useless";
        fi
    done
done

if [ -r "$ERRORS" ]; then
    rm $ERRORS
    exit 1
fi