/* * 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.ers; 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.CeosHelper; import org.esa.snap.core.datamodel.MetadataElement; import org.jdom2.Document; import javax.imageio.stream.ImageInputStream; import java.io.IOException; /** * This class represents a leader file of a product. */ class ERSLeaderFile { private final BinaryRecord _leaderFDR; private final BinaryRecord _sceneHeaderRecord; private final BinaryRecord _mapProjRecord; private final BinaryRecord _platformPositionRecord; private final BinaryRecord _facilityRecord; private final BinaryRecord _facilityRelatedPCSRecord; private final static String mission = "ers"; private final static String leader_recordDefinitionFile = "leader_file.xml"; private final static String scene_recordDefinitionFile = "scene_record.xml"; private final static String mapproj_recordDefinitionFile = "map_proj_record.xml"; private final static String platform_recordDefinitionFile = "platform_position_record.xml"; private final static String facility_recordDefinitionFile = "facility_record.xml"; private final static String facilityRelatedPCS_recordDefinitionFile = "facility_related_pcs_record.xml"; private final static Document leaderXML = BinaryDBReader.loadDefinitionFile(mission, leader_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 platformXML = BinaryDBReader.loadDefinitionFile(mission, platform_recordDefinitionFile); private final static Document facilityXML = BinaryDBReader.loadDefinitionFile(mission, facility_recordDefinitionFile); private final static Document facilityRelXML = BinaryDBReader.loadDefinitionFile(mission, facilityRelatedPCS_recordDefinitionFile); public ERSLeaderFile(final ImageInputStream leaderStream) throws IOException { final BinaryFileReader reader = new BinaryFileReader(leaderStream); _leaderFDR = new BinaryRecord(reader, -1, leaderXML, leader_recordDefinitionFile); reader.seek(_leaderFDR.getRecordEndPosition()); _sceneHeaderRecord = new BinaryRecord(reader, -1, sceneXML, scene_recordDefinitionFile); reader.seek(_sceneHeaderRecord.getRecordEndPosition()); _mapProjRecord = new BinaryRecord(reader, -1, mapProjXML, mapproj_recordDefinitionFile); reader.seek(_mapProjRecord.getRecordEndPosition()); _platformPositionRecord = new BinaryRecord(reader, -1, platformXML, platform_recordDefinitionFile); reader.seek(_platformPositionRecord.getRecordEndPosition()); _facilityRecord = new BinaryRecord(reader, -1, facilityXML, facility_recordDefinitionFile); reader.seek(_facilityRecord.getRecordEndPosition()); if (reader.getCurrentPos() + 4000 < reader.getLength()) { _facilityRelatedPCSRecord = new BinaryRecord(reader, -1, facilityRelXML, facilityRelatedPCS_recordDefinitionFile); reader.seek(_facilityRelatedPCSRecord.getRecordEndPosition()); } else { _facilityRelatedPCSRecord = null; } reader.close(); } public String getProductLevel() { return _sceneHeaderRecord.getAttributeString("Scene reference number").trim(); } public final BinaryRecord getSceneRecord() { return _sceneHeaderRecord; } public final BinaryRecord getFacilityRecord() { return _facilityRecord; } public final BinaryRecord getMapProjRecord() { return _mapProjRecord; } public final BinaryRecord getPlatformPositionRecord() { return _platformPositionRecord; } public void addLeaderMetadata(MetadataElement sphElem) { CeosHelper.addMetadata(sphElem, _leaderFDR, "Leader File Descriptor"); CeosHelper.addMetadata(sphElem, _sceneHeaderRecord, "Scene Parameters"); CeosHelper.addMetadata(sphElem, _mapProjRecord, "Map Projection"); CeosHelper.addMetadata(sphElem, _platformPositionRecord, "Platform Position"); CeosHelper.addMetadata(sphElem, _facilityRecord, "Facility Related"); CeosHelper.addMetadata(sphElem, _facilityRelatedPCSRecord, "Facility Related PCS"); } }