require 'pp'
require 'find'

# read every $reference in messages.properties.all
# find every Messages.getString("$reference");
# verify that the sets are the same.

refSet = {}
refFileName = "preprocess/messages.properties.all"

File.open(refFileName).readlines.each { |row|
	key,value=row.split("=")
	refSet[key]=value;
}

#pp refSet

javaArray = []
javaFiles = Dir["**/*.java"]

javaFiles.each{ |java|
	lines = File.open(java, :encoding => "BINARY").readlines();
	matchString="Messages.getString(.*)";
	lines.each{ |line|
		#pp line
		line.gsub(/Messages.getString\(\"(\w_\w)\"\)/) { 
			|l| 
			#pp l 
			javaArray.push($1) 
		}		
	}
}

#pp javaArray

javaArray.each{ |j|
	if ! refSet.include?(j) 
		print "error #{j} not mapped\n"
		#javaArray.delete(j)
	else
		#refSet.delete(j)
 	end
}

outlist = []
refSet.each{ |k,v|
	if ! javaArray.include?(k)
		#print "warning #{k} not used\n"
	else
		outlist.push "#{k}=#{v}"
	end
}

outlist.sort.each{ |l|
	print l
}
