UNAME := $(shell uname)

include ../../config/Makefile.$(USER)
include ../../config/Makefile.$(UNAME)

help:
	@echo "**** Available targets"
	@echo "- do.normalize:    normalizes templates and bindings"
	@echo "- do.stats:        computes stats files"
	@echo "- do.plots:        creates plot file"
	@echo "- do.summary:      creates summaries"
	@echo "- do.R:            creates blox plot with R"
	@echo "- do.time:         creates time plot with R"
	@echo ""
	@echo "- all:             does everything"
	@echo "- all.clean:       cleans all files"

######################################################################
### all

all: all.clean do.normalize do.stats do.plots do.R do.time

all.clean: clean.normalized clean.stats clean.summary

######################################################################
### normalization

do.normalize: do.normalize.bindings do.normalize.bindings2 do.normalize.expansions do.normalize.templates

clean.normalized:
	rm -f $(NORMALIZED_TEMPLATES)
	rm -f $(NORMALIZED_BINDINGS)
	rm -f $(NORMALIZED_BINDINGS2)
	rm -f $(NORMALIZED_EXPANSIONS)


BINDINGS := $(wildcard raw/bindings/*.json)
RAW_BINDINGS := $(patsubst raw/bindings/%.json, raw/bindings/%.provn, $(BINDINGS))
NORMALIZED_BINDINGS := $(patsubst raw/bindings/%.json, normalized/bindings/%.provn, $(BINDINGS))
NORMALIZED_BINDINGS2 := $(patsubst raw/bindings/%.json, normalized/bindings2/%.json, $(BINDINGS))

normalized/bindings/%.provn: raw/bindings/%.json
	@echo $<
	@sed 's/XMLSchema"/XMLSchema#"/' < $< | $(PROVCONVERT) -infile - -informat json -outfile - -outformat ttl | $(CWM) -n3=p | $(PROVCONVERT) -infile - -informat ttl -outfile $@

raw/bindings/%.provn: raw/bindings/%.json
	@echo $<
	@sed 's/XMLSchema"/XMLSchema#"/' < $< | $(PROVCONVERT) -infile - -informat json -outfile $@

normalized/bindings2/%.json: raw/bindings/%.json
	@echo $<
	@sed 's/XMLSchema"/XMLSchema#"/' < $< | $(PROVCONVERT) -infile - -informat json -outfile - -outformat provn | $(PROVMAN) bindings --version 3 --pretty false --infile - --outfile $@

do.raw.bindings: $(RAW_BINDINGS)
do.normalize.bindings: $(NORMALIZED_BINDINGS)
do.normalize.bindings2: $(NORMALIZED_BINDINGS2)

EXPANSIONS := $(wildcard raw/expansions/*.json)
NORMALIZED_EXPANSIONS := $(patsubst raw/expansions/%.json, normalized/expansions/%.provn, $(EXPANSIONS))

normalized/expansions/%.provn: raw/expansions/%.json
	@echo $<
	@sed 's/XMLSchema"/XMLSchema#"/' < $< | $(PROVCONVERT) -infile - -informat json -outfile - -outformat ttl | $(CWM) -n3=p | $(PROVCONVERT) -infile - -informat ttl -outfile $@

do.normalize.expansions: $(NORMALIZED_EXPANSIONS)

TEMPLATES := $(wildcard raw/templates/*.json)
NORMALIZED_TEMPLATES := $(patsubst raw/templates/%.json, normalized/templates/%.provn, $(TEMPLATES))

normalized/templates/%.provn: raw/templates/%.json
	@echo $<
	@sed 's/XMLSchema"/XMLSchema#"/' < $< | $(PROVCONVERT) -infile - -informat json -outfile - -outformat ttl | $(CWM) -n3=p | $(PROVCONVERT) -infile - -informat ttl -outfile $@

do.normalize.templates: $(NORMALIZED_TEMPLATES)


######################################################################
### stats

do.stats:
	for file in $(NORMALIZED_BINDINGS);   do stat $(STAT_FORMAT) $$file >> outputs/bindings_output.txt; done
	for file in $(NORMALIZED_BINDINGS2);   do touch $$file; stat $(STAT_FORMAT) $$file >> outputs/bindings2_output.txt; done
	for file in $(NORMALIZED_EXPANSIONS); do stat $(STAT_FORMAT) $$file >> outputs/expansions_output.txt; done
	for file in $(NORMALIZED_TEMPLATES);  do stat $(STAT_FORMAT) $$file >> outputs/templates_output.txt; done

clean.stats:
	@rm -f outputs/bindings_output.txt outputs/bindings2_output.txt outputs/expansions_output.txt outputs/templates_output.txt outputs/bindings_output_2.txt outputs/expansions_output_2.txt outputs/templates_output_2.txt

######################################################################
### plots

do.plots:
	python ../../scripts/ProvAggregator.py

######################################################################
### summary

do.summary: raw/summaries merge raw/merged/merged_expansions.ttl raw/merged/merged_expansions2.provn
	$(PROVSUMMARY) -infile2 raw/merged/merged_expansions2.provn -infile raw/merged/merged_expansions.ttl -tag RS -from 0 -to 4 -level0 sparql/level0-prov-only.sparql -outfile raw/summaries/food
	$(PROVSUMMARY) -infile2 raw/merged/merged_expansions2.provn -infile raw/merged/merged_expansions.ttl -tag RS -from 0 -to 4 -level0 sparql/level0-prov+distrib.sparql -outfile raw/summaries/dist  -lib sparql/distributed.ttl
	$(PROVSUMMARY) -infile2 raw/merged/merged_expansions2.provn -infile raw/merged/merged_expansions.ttl -tag RS -from 0 -to 4 -level0 sparql/level0-prov+distrib+category.sparql -outfile raw/summaries/cat  -lib sparql/distributed.ttl

raw/summaries:
	mkdir -p raw/summaries


clean.summary:
	rm -f raw/summaries/*

merge:
	find raw/expansions -name *.json|sed "s/^/file, /; s/$$/, json/"|$(PROVCONVERT) -merge - -outfile raw/merged/merged_expansions.provn

raw/merged/merged_expansions.ttl: raw/merged/merged_expansions.provn
	$(PROVCONVERT) -infile raw/merged/merged_expansions.provn -outfile raw/merged/merged_expansions.ttl

raw/merged/merged_expansions2.provn: raw/merged/merged_expansions.provn
	$(PROVCONVERT) -infile raw/merged/merged_expansions.provn -index -flatten -outfile raw/merged/merged_expansions2.provn

do.R:
	cat outputs/normalised_stats.csv | tail -n+2 > outputs/toscatter.csv
	cat outputs/normalised2_stats.csv | tail -n+2 > outputs/toscatter2.csv
	R --no-save < R/scatter.R

######################################################################
### time

do.time:
	cd raw;  cat index.txt | awk '{ print "$(PROVMAN) expand --time - --infile " $$1 ".provn --bindings " $$2 ".provn --outfile ignore "}'  | $(PROVMAN) batch --infile - --outfile ignore > ../outputs/time1.csv
	cd raw;  cat index.txt | awk '{ print  $$2 ", " $$1 }'  > ../outputs/time2.csv
	paste -d ", " outputs/time2.csv outputs/time1.csv > outputs/time.csv
	R --no-save < R/time.R
