package eu.leads.processor.execute.operators;
import eu.leads.processor.execute.LeadsReducer;
import eu.leads.processor.execute.Tuple;
import eu.leads.processor.utils.InfinispanUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;
/**
* Created with IntelliJ IDEA.
* User: vagvaz
* Date: 11/7/13
* Time: 8:47 AM
* To change this template use File | Settings | File Templates.
*/
public class JoinReducer extends LeadsReducer<String, String> {
String prefix;
@Override
public void initialize() {
isInitialized = true;
super.initialize();
prefix = conf.getProperty("output") + ":";
output = InfinispanUtils.getOrCreatePersistentMap(prefix);
String hostname = "";
try {
hostname = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
e.printStackTrace();
}
RandomAccessFile raf = null;
try {
String filename = System.getenv().get("HOME") + "/queryProcessor/" + hostname;
File f = new File(filename);
long fileLength = f.length();
raf = new RandomAccessFile(filename, "rw");
raf.seek(fileLength);
raf.writeBytes("Running " + hostname + ": " + this.getClass().getCanonicalName() + "\n");
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public JoinReducer(Properties configuration) {
super(configuration);
}
@Override
public String reduce(String key, Iterator<String> iterator) {
if (!isInitialized)
initialize();
ArrayList<Tuple> left = new ArrayList<Tuple>();
ArrayList<Tuple> right = new ArrayList<Tuple>();
String leftTable = conf.getProperty("left");
// String rightTable = conf.getProperty("right");
ArrayList<String> ignoreColumns = new ArrayList<String>();
ignoreColumns.add("table");
ignoreColumns.add("tupleId");
// ignoreColumns.add((String) conf.getProperty(rightTable));
while (iterator.hasNext()) {
String tstring = iterator.next();
Tuple t = new Tuple(tstring);
if (t.getAttribute("table").equals(leftTable)) {
left.add(t);
} else {
right.add(t);
tstring = null;
}
}
for (Tuple tl : left) {
for (Tuple tr : right) {
Tuple resultTuple = new Tuple(tl, tr, ignoreColumns);
// System.out.println(this.getClass().toString()+" proc tuple");
output.put(prefix + tr.getAttribute("tupleId") + "-" + tl.getAttribute("tupleId"), resultTuple.asString());
progress();
resultTuple = null;
}
}
left.clear();
right.clear();
left = null;
right = null;
ignoreColumns.clear();
ignoreColumns = null;
return "";
}
}