package org.deri.grefine.reconcile.model; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.json.JSONException; import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableMap; /** * @author fadmaa * implement the multi-query mode reconciliation based on repetitive application of single-query reconcile {@link org.deri.grefine.reconcile.model.ReconciliationService#reconcile(ReconciliationRequest)} * */ public abstract class AbstractReconciliationService implements ReconciliationService{ final static Logger logger = LoggerFactory.getLogger("AbstractReconciliationService"); protected String name; protected String id; protected AbstractReconciliationService(String id, String name){ this.name= name; this.id = id; } @Override public String getId() { return id; } @Override public String getName() { return name; } @Override public ImmutableMap<String, ReconciliationResponse> reconcile(ImmutableMap<String, ReconciliationRequest> multiQueryRequest) { Map<String, ReconciliationResponse> multiQueryResponse = new HashMap<String, ReconciliationResponse>(); for(Entry<String, ReconciliationRequest> entry: multiQueryRequest.entrySet()){ try{ String key = entry.getKey(); ReconciliationRequest request = entry.getValue(); ReconciliationResponse response = reconcile(request); multiQueryResponse.put(key, response); Thread.sleep(300); }catch(Exception e){ multiQueryResponse.put(entry.getKey(), new ReconciliationResponse()); logger.error("error reconciling '" + entry.getValue().getQueryString() + "'",e); } } return ImmutableMap.copyOf(multiQueryResponse); } @Override public void writeAsJson(JSONWriter w) throws JSONException { writeAsJson(w,false); } }