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