# Makefile for tXBench benchmark.
# Last updated: January 24, 2013 (Stephen W. Thomas)
#
# See the main tBench README.txt file for usage instructions.
#

# First, load the default settings and paths from the parent Makefile.inc. 
include ../../Makefile.inc

# Targets
all: clean create validate execute
create: data schema workload
validate: vschema vdata vworkload

# Make these targets always run (not dependent on any timestamps)
.PHONY: clean data schema workload vdata vschema vworkload execute

clean: 
	@ echo "\n=============================="
	@ echo "Cleaning the benchmark:"
	@ echo "=============================="
	@ echo ""
	rm -rf data 
	mkdir data 
	mkdir data/ds0
	mkdir data/ds1
	mkdir data/ds2
	mkdir data/ds3
	mkdir data/ds4
	rm -rf workloads
	mkdir workloads 
	rm -rf logs
	mkdir logs
    

data: 
	@ echo "\n=============================="
	@ echo "Loading/creating data:"
	@ echo "=============================="
	@ echo ""
	@ # Use tGen to generate temporal XML documents from DC-SD benchmark
	@ # We define four categories of datasets: DS1 --  DS4.
	@ # Each category can come in any size: small, medium, or large.
	@ # NOTE: DS2 and DS3 cannot be executed, unless you have medium or large catalogs
	@ if [ -f ../DC-SD/data/catalog-small.xml.bz2 ];\
    then \
       echo "Running tGenerator on small catalog file.";\
       echo "Unzipping catalog file.";\
       bunzip2 ../DC-SD/data/catalog-small.xml.bz2; \
       echo "DS0:";\
	   java -Xmx1g -cp $(TGENLIB) tGenerator settings/ds0.settings.txt \
	   OUTPUT_DIR data/ds0/small INPUT_FILE ../DC-SD/data/catalog-small.xml > logs/ds0.small.log 2>&1; \
       echo "DS1:";\
	   java -Xmx1g -cp $(TGENLIB) tGenerator settings/ds1-small.settings.txt \
	   OUTPUT_DIR data/ds1/small INPUT_FILE ../DC-SD/data/catalog-small.xml > logs/ds1.small.log 2>&1; \
       echo "DS4:";\
	   java -Xmx1g -cp $(TGENLIB) tGenerator settings/ds4-small.settings.txt \
	   OUTPUT_DIR data/ds4/small INPUT_FILE ../DC-SD/data/catalog-small.xml > logs/ds4.small.log 2>&1; \
       echo "Done with small catalog file. Rezipping";\
	   bzip2 ../DC-SD/data/catalog-small.xml; \
    fi;
	@ if [ -f ../DC-SD/data/catalog-medium.xml.bz2 ];\
	then \
       echo "Running tGenerator on medium catalog file.";\
       echo "Unzipping catalog file.";\
       bunzip2 ../DC-SD/data/catalog-medium.xml.bz2; \
       echo "DS1:";\
	   java -Xmx2g -cp $(TGENLIB) tGenerator settings/ds1-medium.settings.txt \
	   OUTPUT_DIR data/ds1/medium INPUT_FILE ../DC-SD/data/catalog-medium.xml > logs/ds1.medium.log 2>&1; \
	   java -Xmx2g -cp $(TGENLIB) tGenerator settings/ds4-medium.settings.txt \
	   OUTPUT_DIR data/ds4/medium INPUT_FILE ../DC-SD/data/catalog-medium.xml > logs/ds4.medium.log 2>&1; \
       echo "Done with medium catalog file. Rezipping";\
	   bzip2 ../DC-SD/data/catalog-medium.xml; \
    fi;
	@ if [ -f ../DC-SD/data/catalog-large.xml.bz2 ];\
	then \
       echo "Running tGenerator on large catalog file.";\
       echo "Unzipping catalog file.";\
       bunzip2 ../DC-SD/data/catalog-large.xml.bz2; \
       echo "DS1:";\
	   java -Xmx8g -cp $(TGENLIB) tGenerator settings/ds1-large.settings.txt \
	   OUTPUT_DIR data/ds1/large INPUT_FILE ../DC-SD/data/catalog-large.xml > logs/ds1.large.log 2>&1; \
       echo "DS2:";\
	   java -Xmx8g -cp $(TGENLIB) tGenerator settings/ds2-large.settings.txt \
	   OUTPUT_DIR data/ds2/large INPUT_FILE ../DC-SD/data/catalog-large.xml > logs/ds2.large.log 2>&1; \
       echo "DS3:";\
	   java -Xmx8g -cp $(TGENLIB) tGenerator settings/ds3-large.settings.txt \
	   OUTPUT_DIR data/ds3/large INPUT_FILE ../DC-SD/data/catalog-large.xml > logs/ds3.large.log 2>&1; \
	   java -Xmx8g -cp $(TGENLIB) tGenerator settings/ds4-large.settings.txt \
	   OUTPUT_DIR data/ds4/large INPUT_FILE ../DC-SD/data/catalog-large.xml > logs/ds4.large.log 2>&1; \
       echo "Done with large catalog file. Rezipping";\
	   bzip2 ../DC-SD/data/catalog-large.xml; \
    fi;

schema: 
	@ echo "\n=============================="
	@ echo "Loading/creating schema:"
	@ echo "=============================="
	@ echo ""
	@ echo "  (Schemas currently needs to be created manually.)"
	@ echo "  Conventional Schema for XML slices: schemas/DCSD-master.xsd"
	@ echo "  Temporal Schema for Temporal XML document: schemas/ts-master.xsd"
	@ echo "  Temporal Annotations: schemas/A-master.xsd"
	@ echo "  TODO: representation schema"


workload: 
	@ echo "\n=============================="
	@ echo "Loading/creating workload:"
	@ echo "=============================="
	@ echo ""
	@ echo "  (Workload currently needs to be created manually.)"
	@ echo "  (TODO: Insert TXL transformations here.)"
	@ echo "Creating validtime (short) queries"
	@ if [ ! -d ./workloads/valid-short ];\
	then \
	   mkdir ./workloads/valid-short;\
	fi;
	@ # Copy the queries over
	@ cp -r ../DC-SD/workloads/*.xq ./workloads/valid-short
	@ # Use sed to change each query (i.e., add keywords)
	@ for f in `ls -d ./workloads/valid-short/*`; \
	do \
	 echo editing file $$f; \
	 sed 's/^for/validtime \[2010-01-01, 2010-02-01\] for/' $$f > tmp.txt; \
	 mv tmp.txt $$f; \
	done
	@ echo "Creating validtime (medium) queries"
	@ # Make the directory if necessary
	@ if [ ! -d ./workloads/valid-medium ];\
	then \
	   mkdir ./workloads/valid-medium;\
	fi;
	@ # Copy the queries over
	@ cp -r ../DC-SD/workloads/*.xq ./workloads/valid-medium
	@ # Use sed to change each query (i.e., add keywords)
	@ for f in `ls -d ./workloads/valid-medium/*`; \
	do \
	 echo editing file $$f; \
	 sed 's/^for/validtime \[2010-01-01, 2010-07-01\] for/' $$f > tmp.txt; \
	 mv tmp.txt $$f; \
	done
	@ echo "Creating validtime (long) queries"
	@ # Make the directory if necessary
	@ if [ ! -d ./workloads/valid-long ];\
	then \
	   mkdir ./workloads/valid-long;\
	fi;
	@ # Copy the queries over
	@ cp -r ../DC-SD/workloads/*.xq ./workloads/valid-long
	@ # Use sed to change each query (i.e., add keywords)
	@ for f in `ls -d ./workloads/valid-long/*`; \
	do \
	 echo editing file $$f; \
	 sed 's/^for/validtime \[2010-01-01, 2010-12-31\] for/' $$f > tmp.txt; \
	 mv tmp.txt $$f; \
	done
	@ echo "Creating nonsequenced queries"
	@ # Make the directory if necessary
	@ if [ ! -d ./workloads/nonsequenced ];\
	then \
	   mkdir ./workloads/nonsequenced;\
	fi;
	@ # Copy the queries over
	@ cp -r ../DC-SD/workloads/*.xq ./workloads/nonsequenced
	@ # Use sed to change each query (i.e., add keywords)
	@ for f in `ls -d ./workloads/nonsequenced/*`; \
	do \
	 echo editing file $$f; \
	 sed 's/^for/nonsequenced validtime for/' $$f > tmp.txt; \
	 mv tmp.txt $$f; \
	done
	@ echo "Creating current queries"
	@ # Make the directory if necessary
	@ if [ ! -d ./workloads/current ];\
	then \
	   mkdir ./workloads/current;\
	fi;
	@ # Copy the queries over
	@ cp -r ../DC-SD/workloads/*.xq ./workloads/current
	@ # No need to add any keywords
    

vschema:
	@ echo "\n=============================="
	@ echo "Validating the schema:"
	@ echo "=============================="
	@ echo ""
	xmllint --noout schemas/DCSD-master.xsd

vdata:
	@ echo "\n=============================="
	@ echo "Validating the data against the schema:"
	@ echo "=============================="
	@ echo ""
	@ echo Validating the XML slices; 
	@ for f in `ls data/ds?/*/output.????-??-??.xml`; \
	do \
	 xmllint --noout --schema schemas/DCSD-master.xsd $$f ; \
	done
	@ echo Validating the CSV slices; 
	@ for f in `ls -d data/ds?/*`; \
	do \
	 $(TGENTOOLS)/checkKeys.pl $$f ;\
	 $(TGENTOOLS)/checkRefs.pl $$f ;\
	 echo ""; \
	done
	@ echo "  (TODO: Use tXSchema to validate temporal data.)"
	# setenv TXSCHEMA_HOME $(TXSCHEMA)
	@ echo "  (TODO: Use tCorrupter to intentionally break temporal data.)"

vworkload:
	@ echo "\n=============================="
	@ echo "Validating the workload against the schema:"
	@ echo "=============================="
	@ echo ""
	@ echo "  (TODO: How to check goodness (syntax) of workload)"

execute: 
	@ echo "\n=============================="
	@ echo "Executing the workload against the data:"
	@ echo "=============================="
	@ echo ""
	@ echo "  (TODO: tXQuery engine still under development)"

