/* * Copyright (C) 2015 by Array Systems Computing Inc. http://www.array.ca * * 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 http://www.gnu.org/licenses/ */ package org.esa.s1tbx.io.ceos.basic; import org.esa.s1tbx.io.binary.BinaryDBReader; import org.esa.s1tbx.io.binary.BinaryFileReader; import org.esa.s1tbx.io.binary.BinaryRecord; import org.esa.s1tbx.io.ceos.CEOSLeaderFile; import org.jdom2.Document; import javax.imageio.stream.ImageInputStream; import java.io.IOException; class BasicCeosTrailerFile extends CEOSLeaderFile { private final static String mission = "radarsat"; private final static String trailer_recordDefinitionFile = "trailer_file.xml"; private final static Document trailerXML = BinaryDBReader.loadDefinitionFile(mission, trailer_recordDefinitionFile); private final static Document sceneXML = BinaryDBReader.loadDefinitionFile(mission, scene_recordDefinitionFile); private final static Document mapProjXML = BinaryDBReader.loadDefinitionFile(mission, mapproj_recordDefinitionFile); private final static Document dataQualityXML = BinaryDBReader.loadDefinitionFile(mission, dataQuality_recordDefinitionFile); private final static Document histogramXML = BinaryDBReader.loadDefinitionFile(mission, histogram_recordDefinitionFile); private final static Document detailProcXML = BinaryDBReader.loadDefinitionFile(mission, detailedProcessing_recordDefinitionFile); private final static Document platformXML = BinaryDBReader.loadDefinitionFile(mission, platformPosition_recordDefinitionFile); private final static Document attitudeXML = BinaryDBReader.loadDefinitionFile(mission, attitude_recordDefinitionFile); private final static Document radiometricXML = BinaryDBReader.loadDefinitionFile(mission, radiometric_recordDefinitionFile); private final static Document radiometricCompXML = BinaryDBReader.loadDefinitionFile(mission, radiometric_comp_recordDefinitionFile); private final static Document facilityXML = BinaryDBReader.loadDefinitionFile(mission, facility_recordDefinitionFile); public BasicCeosTrailerFile(final ImageInputStream stream) throws IOException { final BinaryFileReader reader = new BinaryFileReader(stream); leaderFDR = new BinaryRecord(reader, -1, trailerXML, trailer_recordDefinitionFile); reader.seek(leaderFDR.getRecordEndPosition()); int num = leaderFDR.getAttributeInt("Number of data set summary records"); for (int i = 0; i < num; ++i) { sceneHeaderRecord = new BinaryRecord(reader, -1, sceneXML, scene_recordDefinitionFile); reader.seek(sceneHeaderRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of map projection data records"); for (int i = 0; i < num; ++i) { mapProjRecord = new BinaryRecord(reader, -1, mapProjXML, mapproj_recordDefinitionFile); reader.seek(mapProjRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of data quality summary records"); for (int i = 0; i < num; ++i) { dataQualityRecord = new BinaryRecord(reader, -1, dataQualityXML, dataQuality_recordDefinitionFile); reader.seek(dataQualityRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of data histograms records"); for (int i = 0; i < num; ++i) { histogramRecord = new BinaryRecord(reader, -1, histogramXML, histogram_recordDefinitionFile); reader.seek(histogramRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of det. processing records"); for (int i = 0; i < num; ++i) { detailedProcessingRecord = new BinaryRecord(reader, -1, detailProcXML, detailedProcessing_recordDefinitionFile); reader.seek(detailedProcessingRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of platform pos. data records"); for (int i = 0; i < num; ++i) { platformPositionRecord = new BinaryRecord(reader, -1, platformXML, platformPosition_recordDefinitionFile); reader.seek(platformPositionRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of attitude data records"); for (int i = 0; i < num; ++i) { attitudeRecord = new BinaryRecord(reader, -1, attitudeXML, attitude_recordDefinitionFile); reader.seek(attitudeRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of radiometric data records"); for (int i = 0; i < num; ++i) { radiometricRecord = new BinaryRecord(reader, -1, radiometricXML, radiometric_recordDefinitionFile); reader.seek(radiometricRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of rad. compensation records"); for (int i = 0; i < num; ++i) { radiometricCompRecord = new BinaryRecord(reader, -1, radiometricCompXML, radiometric_comp_recordDefinitionFile); reader.seek(radiometricCompRecord.getRecordEndPosition()); } num = leaderFDR.getAttributeInt("Number of facility data records"); for (int i = 0; i < num; ++i) { facilityRecord = new BinaryRecord(reader, -1, facilityXML, facility_recordDefinitionFile); reader.seek(facilityRecord.getRecordEndPosition()); } reader.close(); } }