001 /* 002 * $Id: HeaderInfo.java,v 1.6 2012/02/19 17:35:45 davep Exp $ 003 * 004 * This file is part of McIDAS-V 005 * 006 * Copyright 2007-2012 007 * Space Science and Engineering Center (SSEC) 008 * University of Wisconsin - Madison 009 * 1225 W. Dayton Street, Madison, WI 53706, USA 010 * https://www.ssec.wisc.edu/mcidas 011 * 012 * All Rights Reserved 013 * 014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and 015 * some McIDAS-V source code is based on IDV and VisAD source code. 016 * 017 * McIDAS-V is free software; you can redistribute it and/or modify 018 * it under the terms of the GNU Lesser Public License as published by 019 * the Free Software Foundation; either version 3 of the License, or 020 * (at your option) any later version. 021 * 022 * McIDAS-V is distributed in the hope that it will be useful, 023 * but WITHOUT ANY WARRANTY; without even the implied warranty of 024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 025 * GNU Lesser Public License for more details. 026 * 027 * You should have received a copy of the GNU Lesser Public License 028 * along with this program. If not, see http://www.gnu.org/licenses. 029 */ 030 package edu.wisc.ssec.mcidasv.data; 031 032 import java.io.File; 033 import java.util.ArrayList; 034 import java.util.Hashtable; 035 import java.util.List; 036 037 public class HeaderInfo { 038 039 // Enumerate some constants 040 public static final int kFormatUnknown = -1; 041 public static final int kFormatASCII = 0; 042 public static final int kFormat1ByteUInt = 1; 043 public static final int kFormat2ByteSInt = 2; 044 public static final int kFormat4ByteSInt = 3; 045 public static final int kFormat4ByteFloat = 4; 046 public static final int kFormat8ByteDouble = 5; 047 public static final int kFormat2x8Byte = 9; 048 public static final int kFormat2ByteUInt = 12; 049 public static final int kFormatImage = 8080; 050 051 public static final int kNavigationUnknown = -1; 052 public static final int kNavigationBounds = 1; 053 public static final int kNavigationFiles = 2; 054 055 public static final String kInterleaveSequential = "BSQ"; 056 public static final String kInterleaveByLine = "BIL"; 057 public static final String kInterleaveByPixel = "BIP"; 058 059 public static final String DESCRIPTION = "description"; 060 public static final String ELEMENTS = "elements"; 061 public static final String LINES = "lines"; 062 public static final String UNIT = "unit"; 063 public static final String OFFSET = "offset"; 064 public static final String DATATYPE = "dataType"; 065 public static final String MISSINGVALUE = "missingValue"; 066 public static final String BANDNAMES = "bandNames"; 067 public static final String BANDFILES = "bandFiles"; 068 public static final String INTERLEAVE = "interleave"; 069 public static final String BYTEORDER = "byteOrder"; 070 public static final String BIGENDIAN = "bigEndian"; 071 public static final String NAVBOUNDS = "navBounds"; 072 public static final String NAVFILES = "navFiles"; 073 074 /** The url */ 075 private String headerFile = ""; 076 private Hashtable parameters = new Hashtable(); 077 078 /** 079 * Ctor for xml encoding 080 */ 081 public HeaderInfo() {} 082 083 /** 084 * CTOR 085 * 086 * @param filename The filename 087 */ 088 public HeaderInfo(File thisFile) { 089 this(thisFile.getAbsolutePath()); 090 } 091 092 /** 093 * CTOR 094 * 095 * @param filename The filename 096 */ 097 public HeaderInfo(String filename) { 098 setFilename(filename); 099 } 100 101 /** 102 * Set the filename we are working with 103 */ 104 public void setFilename(String filename) { 105 parameters = new Hashtable(); 106 headerFile = filename; 107 } 108 109 /** 110 * Get the filename we are working with 111 */ 112 public String getFilename() { 113 return headerFile; 114 } 115 116 /** 117 * Get the number of bands this header knows about 118 */ 119 public int getBandCount() { 120 if (!haveParsed()) { 121 parseHeader(); 122 } 123 List bandNames = getParameter(BANDNAMES, new ArrayList()); 124 return bandNames.size(); 125 } 126 127 /** 128 * Return the matching header parameter if available, default value if not available 129 */ 130 public String getParameter(String parameter, String defaultValue) { 131 parseHeader(); 132 Object hashedValue = parameters.get(parameter); 133 if (hashedValue == null || !(hashedValue instanceof String)) return defaultValue; 134 return (String)hashedValue; 135 } 136 public Integer getParameter(String parameter, Integer defaultValue) { 137 parseHeader(); 138 Object hashedValue = parameters.get(parameter); 139 if (hashedValue == null || !(hashedValue instanceof Integer)) return defaultValue; 140 return (Integer)hashedValue; 141 } 142 public Float getParameter(String parameter, Float defaultValue) { 143 parseHeader(); 144 Object hashedValue = parameters.get(parameter); 145 if (hashedValue == null || !(hashedValue instanceof Float)) return defaultValue; 146 return (Float)hashedValue; 147 } 148 public Boolean getParameter(String parameter, Boolean defaultValue) { 149 parseHeader(); 150 Object hashedValue = parameters.get(parameter); 151 if (hashedValue == null || !(hashedValue instanceof Boolean)) return defaultValue; 152 return (Boolean)hashedValue; 153 } 154 public List getParameter(String parameter, List defaultValue) { 155 parseHeader(); 156 Object hashedValue = parameters.get(parameter); 157 if (hashedValue == null || !(hashedValue instanceof List)) return defaultValue; 158 return (List)hashedValue; 159 } 160 161 /** 162 * Set a parsed parameter value 163 */ 164 public void setParameter(String parameter, Object value) { 165 parameters.put(parameter, value); 166 } 167 168 /** 169 * Have we already parsed once? 170 */ 171 public boolean haveParsed() { 172 return parameters.size() > 0; 173 } 174 175 /** 176 * Does the file we are pointing to even exist? 177 */ 178 public boolean doesExist() { 179 File checkFile = new File(headerFile); 180 return checkFile.exists(); 181 } 182 183 /** 184 * Override this when extending for a specific header type 185 */ 186 protected void parseHeader() {} 187 188 }