/* * This file is a part of EpnTAPClient. * This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer. * See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861 * Copyright (C) 2016 Institut de Recherche en Astrophysique et Planétologie. * * This program is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or (at your option) any later * version. This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. You should have received a copy of * the GNU General Public License along with this program. If not, see * . */ package eu.omp.irap.vespa.epntapclient.granule; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Logger; import eu.omp.irap.vespa.votable.utils.Debug; import eu.omp.irap.vespa.votable.votabledata.VOTableData; /** * @author N. Jourdane */ public class GranuleCtrl { /** The logger for the class GranuleCtrl. */ private static final Logger logger = Logger.getLogger(GranuleCtrl.class.getName()); private VOTableData data; public GranuleCtrl(VOTableData data) { this.data = data; } private String parseString(int rowId, GranuleEnum granuleEnum) { return (String) data.getCell(rowId, granuleEnum.toString()); } private Date parseDate(int rowId, GranuleEnum granuleEnum) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); return sdf.parse((String) data.getCell(rowId, granuleEnum.toString())); } private Double parseDouble(int rowId, GranuleEnum granuleEnum) { Double d = (Double) data.getCell(rowId, granuleEnum.toString()); return d == null ? Double.NaN : d; } public Granule getGranuleFromVOTableRow(int rowId) throws ParseException { // TODO: parser colonne par colonne pour éviter de faire des comparer les noms de colone à // chaque ligne. Debug.writeObject("data", data); //@noformat Granule g = new Granule(parseString(rowId, GranuleEnum.GRANULE_UID)); g.granuleGid = parseString(rowId, GranuleEnum.GRANULE_GID); g.obsId = parseString(rowId, GranuleEnum.OBS_ID); g.dataproductType = parseString(rowId, GranuleEnum.DATAPRODUCT_TYPE); g.targetName = parseString(rowId, GranuleEnum.TARGET_NAME); g.targetClass = parseString(rowId, GranuleEnum.TARGET_CLASS); g.timeMin = parseDouble(rowId, GranuleEnum.TIME_MIN); g.timeMax = parseDouble(rowId, GranuleEnum.TIME_MAX); g.timeSamplingStepMin = parseDouble(rowId, GranuleEnum.TIME_SAMPLING_STEP_MIN); g.timeSamplingStepMax = parseDouble(rowId, GranuleEnum.TIME_SAMPLING_STEP_MAX); g.timeExpMin = parseDouble(rowId, GranuleEnum.TIME_EXP_MIN); g.timeExpMax = parseDouble(rowId, GranuleEnum.TIME_EXP_MAX); g.spectralRangeMin = parseDouble(rowId, GranuleEnum.SPECTRAL_RANGE_MIN); g.spectralRangeMax = parseDouble(rowId, GranuleEnum.SPECTRAL_RANGE_MAX); g.timeSamplingStepMin = parseDouble(rowId, GranuleEnum.TIME_SAMPLING_STEP_MIN); g.timeSamplingStepMax = parseDouble(rowId, GranuleEnum.TIME_SAMPLING_STEP_MAX); g.spectralResolutionMin = parseDouble(rowId, GranuleEnum.SPECTRAL_RESOLUTION_MIN); g.spectralResolutionMax = parseDouble(rowId, GranuleEnum.SPECTRAL_RESOLUTION_MAX); g.c1Min = parseDouble(rowId, GranuleEnum.C1MIN); g.c1Max = parseDouble(rowId, GranuleEnum.C1MAX); g.c2Min = parseDouble(rowId, GranuleEnum.C2MIN); g.c2Max = parseDouble(rowId, GranuleEnum.C2MAX); g.c3Min = parseDouble(rowId, GranuleEnum.C3MIN); g.c3Max = parseDouble(rowId, GranuleEnum.C3MAX); g.sRegion = parseString(rowId, GranuleEnum.S_REGION); g.c1ResolMin = parseDouble(rowId, GranuleEnum.C1_RESOL_MIN); g.c1ResolMax = parseDouble(rowId, GranuleEnum.C1_RESOL_MAX); g.c2ResolMin = parseDouble(rowId, GranuleEnum.C2_RESOL_MIN); g.c2ResolMax = parseDouble(rowId, GranuleEnum.C2_RESOL_MAX); g.c3ResolMin = parseDouble(rowId, GranuleEnum.C3_RESOL_MIN); g.c3ResolMax = parseDouble(rowId, GranuleEnum.C3_RESOL_MAX); g.spatialFrameType = parseString(rowId, GranuleEnum.SPATIAL_FRAME_TYPE); g.incidenceMin = parseDouble(rowId, GranuleEnum.INCIDENCE_MIN); g.incidenceMax = parseDouble(rowId, GranuleEnum.INCIDENCE_MAX); g.emergenceMin = parseDouble(rowId, GranuleEnum.EMERGENCE_MIN); g.emergenceMax = parseDouble(rowId, GranuleEnum.EMERGENCE_MAX); g.phaseMin = parseDouble(rowId, GranuleEnum.PHASE_MIN); g.phaseMax = parseDouble(rowId, GranuleEnum.PHASE_MAX); g.instrumentHostName = parseString(rowId, GranuleEnum.INSTRUMENT_HOST_NAME); g.instrumentName = parseString(rowId, GranuleEnum.INSTRUMENT_NAME); g.measurementType = parseString(rowId, GranuleEnum.MEASUREMENT_TYPE); g.processingLevel = (Integer) data.getCell(rowId, GranuleEnum.PROCESSING_LEVEL.toString()); g.creationDate = parseDate(rowId, GranuleEnum.CREATION_DATE); g.modificationDate = parseDate(rowId, GranuleEnum.MODIFICATION_DATE) ; g.releaseDate = parseDate(rowId, GranuleEnum.RELEASE_DATE) ; g.serviceTitle = parseString(rowId, GranuleEnum.SERVICE_TITLE); //@format if (!g.isValid()) { System.out.println(data.getCell(rowId, "polar_radius")); throw new IllegalArgumentException("One or more EPN parameter is null."); } return g; } public static boolean isV2(VOTableData data) { return !data.containsColumn("index"); } public List getGranulesFromVOTable() throws ParseException { Debug.writeObject("data", data); if (!GranuleCtrl.isV2(data)) { throw new IllegalArgumentException( "The EPN-CORE is not v2, which is the only suported version"); } List granules = new ArrayList<>(); for (int rowId = 0; rowId < data.getNbRows(); rowId++) { granules.add(getGranuleFromVOTableRow(rowId)); } return granules; } }