package org.elasticsearch.plugin.nlpcn;
import org.elasticsearch.search.internal.InternalSearchHit;
import org.nlpcn.es4sql.domain.Field;
import java.util.*;
/**
* Created by Eliran on 2/11/2015.
*/
public class HashJoinComparisonStructure {
private HashMap<String,List<Map.Entry<Field,Field>>> comparisonIDtoComparisonFields;
private HashMap<String,HashMap<String,SearchHitsResult>> comparisonIDtoComparisonHash;
public HashJoinComparisonStructure(List<List<Map.Entry<Field, Field>>> t1ToT2FieldsComparisons) {
comparisonIDtoComparisonFields = new HashMap<>();
comparisonIDtoComparisonHash = new HashMap<>();
if(t1ToT2FieldsComparisons == null || t1ToT2FieldsComparisons.size() == 0){
String comparisonId = UUID.randomUUID().toString();
this.comparisonIDtoComparisonFields.put(comparisonId,new ArrayList<Map.Entry<Field,Field>>());
this.comparisonIDtoComparisonHash.put(comparisonId,new HashMap<String, SearchHitsResult>());
}
for (List<Map.Entry<Field,Field>> comparisonFields : t1ToT2FieldsComparisons){
String comparisonId = UUID.randomUUID().toString();
//maby from field to List<IDS> ?
this.comparisonIDtoComparisonFields.put(comparisonId,comparisonFields);
this.comparisonIDtoComparisonHash.put(comparisonId, new HashMap<String, SearchHitsResult>());
}
}
public HashMap<String, List<Map.Entry<Field, Field>>> getComparisons() {
return comparisonIDtoComparisonFields;
}
public void insertIntoComparisonHash(String comparisonID,String comparisonKey,InternalSearchHit hit){
HashMap<String, SearchHitsResult> comparisonHash = this.comparisonIDtoComparisonHash.get(comparisonID);
SearchHitsResult currentSearchHitsResult = comparisonHash.get(comparisonKey);
if(currentSearchHitsResult == null) {
currentSearchHitsResult = new SearchHitsResult(new ArrayList<InternalSearchHit>(),false);
comparisonHash.put(comparisonKey, currentSearchHitsResult);
}
currentSearchHitsResult.getSearchHits().add(hit);
}
public SearchHitsResult searchForMatchingSearchHits(String comparisonID,String comparisonKey){
HashMap<String, SearchHitsResult> comparisonHash = this.comparisonIDtoComparisonHash.get(comparisonID);
return comparisonHash.get(comparisonKey);
}
public List<SearchHitsResult> getAllSearchHits(){
List<SearchHitsResult> allSearchHits = new ArrayList<>();
for(HashMap<String, SearchHitsResult> comparisonHash : this.comparisonIDtoComparisonHash.values())
allSearchHits.addAll(comparisonHash.values());
return allSearchHits;
}
}