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; } }