package quba.service;
import com.ibm.util.CoordinateConversion;
import models.PositionModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import quba.models.QubaStation;
import quba.models.QubaStationProfile;
import service.PoseidonPropertyService;
import java.util.Set;
public class QubaPositionSyncer {
private final static Logger logger = LoggerFactory.getLogger(QubaPositionSyncer.class);
private QubaSyncSummary summary ;
public QubaPositionSyncer(){
this.summary = new QubaSyncSummary();
}
public QubaPositionSyncer(QubaSyncSummary summary) {
this.summary = summary;
}
public void syncPosition(PositionModel positionModel, Set<Integer>termins) {
QubaStation station = QubaStation.findStationByName(positionModel.name);
if (station == null) {
logger.info("Fant ikke stasjon med navn {}, lagrer ny instans", positionModel.name);
station = saveStation(positionModel);
}
if ( termins != null) {
for (Integer termin : termins) {
saveStationProfile(station, termin);
}
} else {
logger.info("Ingen terminer for station {}, derfor ingen nye innslag i st_profile for {}",positionModel.name);
}
}
private QubaStation saveStation(PositionModel positionModel) {
QubaStation station = new QubaStation();
CoordinateConversion coordinateConversion = new CoordinateConversion();
double[] dms = coordinateConversion.latLon2dms(positionModel.latitude, positionModel.longitude);
station.stationid = null;
station.name = positionModel.name;
station.latitude = makeQubaPos(dms[0], dms[1], dms[2]);
station.longitude = makeQubaPos(dms[3], dms[4], dms[5]);
station.synopnr = 0;
station.height = 0;
station.priority = 0;
station.grp = "";
station.pose = "";
station.metar = "";
station.kalman = "2|0";
logger.info("opprettet ny station {}",station);
station.insert("quba");
summary.insertedStations++;
return station;
}
/**
*
* @param deg
* @param min
* @param sec
* @return
*/
public static int makeQubaPos(final double deg, final double min, final double sec) {
int intMin = (int) (100 * min);
if (sec> 30) {
intMin += 100;
}
return (int) ((int) deg * 10000 + intMin);
}
private QubaStationProfile saveStationProfile(QubaStation station, Integer terminHour) {
logger.debug("Lagrer termin i st_profile");
String stationProfiles = PoseidonPropertyService.getProperty("quba.stationprofiles");
String sites = PoseidonPropertyService.getProperty("quba.sites");
int session = terminHour!=null?terminHour.intValue():0;
QubaStationProfile stationProfile = QubaStationProfile.findStProfileByStationAndSession(station.stationid, session);
if (stationProfile == null) {
stationProfile = new QubaStationProfile();
stationProfile.pk.stationid = station.stationid;
stationProfile.pk.session = session;
stationProfile.exception = "";
stationProfile.profiles = stationProfiles;
stationProfile.site = sites;
stationProfile.insert("quba");
summary.insertedStationProfiles++;
logger.info("opprettet ny stationProfile {}",stationProfile);
} else {
logger.info("bruker eksisterende stationProfile {}",stationProfile);
}
return stationProfile;
}
}