package com.venky.swf.plugins.collab.extensions.beforesave;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.venky.core.string.StringUtil;
import com.venky.core.util.ObjectUtil;
import com.venky.extension.Registry;
import com.venky.geo.GeoCoder;
import com.venky.geo.GeoLocation;
import com.venky.swf.db.extensions.BeforeModelSaveExtension;
import com.venky.swf.plugins.collab.db.model.participants.admin.Facility;
public class BeforeSaveFacility extends BeforeModelSaveExtension<Facility>{
static {
Registry.instance().registerExtension("Facility.before.save", new BeforeSaveFacility());
}
private StringBuilder[] getAddressQueries(Facility facility){
StringBuilder[] address = new StringBuilder[]{
new StringBuilder()
.append(StringUtil.valueOf(facility.getAddressLine1()))
.append(" ")
.append(StringUtil.valueOf(facility.getAddressLine2()))
.append(" ")
.append(StringUtil.valueOf(facility.getAddressLine3()))
.append(" ")
.append(StringUtil.valueOf(facility.getAddressLine4()))
.append(" ")
.append(facility.getCity() == null ? "" : facility.getCity().getName())
.append(" ")
.append(facility.getState() == null ? "" : facility.getState().getName())
.append(" ")
.append(facility.getPincode() == null ? "" : facility.getPincode())
.append(" ")
.append(facility.getCountry() == null ? "" : facility.getCountry().getName()),
new StringBuilder()
.append(StringUtil.valueOf(facility.getAddressLine2()))
.append(" ")
.append(StringUtil.valueOf(facility.getAddressLine3()))
.append(" ")
.append(StringUtil.valueOf(facility.getAddressLine4()))
.append(" ")
.append(facility.getCity() == null ? "" : facility.getCity().getName())
.append(" ")
.append(facility.getState() == null ? "" : facility.getState().getName())
.append(" ")
.append(facility.getPincode() == null ? "" : facility.getPincode())
.append(" ")
.append(facility.getCountry() == null ? "" : facility.getCountry().getName()),
new StringBuilder()
.append(StringUtil.valueOf(facility.getAddressLine4()))
.append(" ")
.append(facility.getCity() == null ? "" : facility.getCity().getName())
.append(" ")
.append(facility.getState() == null ? "" : facility.getState().getName())
.append(" ")
.append(facility.getCountry() == null ? "" : facility.getCountry().getName()),
new StringBuilder()
.append(StringUtil.valueOf(facility.getAddressLine4()))
.append(" ")
.append(facility.getCity() == null ? "" : facility.getCity().getName())
.append(" ")
.append(facility.getCountry() == null ? "" : facility.getCountry().getName()),
};
return address;
}
@Override
public void beforeSave(Facility facility) {
List<GeoCoder> coders = new ArrayList<GeoCoder>();
//coders.add(new GeoCoder("yahoo"));
coders.add(new GeoCoder("google"));
coders.add(new GeoCoder("openstreetmap"));
for (Iterator<GeoCoder> i = coders.iterator(); i.hasNext() && (ObjectUtil.isVoid(facility.getLat()) || ObjectUtil.isVoid(facility.getLng())) ; ){
GeoCoder coder = i.next();
for (StringBuilder address: getAddressQueries(facility)){
GeoLocation location = coder.getLocation(address.toString());
if (location != null){
facility.setLat(location.getLat());
facility.setLng(location.getLng());
break ;
}
}
}
}
}