diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/MeteoDataInfo.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/MeteoDataInfo.java index 97cc9f8d..2b13904a 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/MeteoDataInfo.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/MeteoDataInfo.java @@ -480,6 +480,8 @@ public class MeteoDataInfo { di = new ARLDataInfo(); } else if (CMARadarBaseDataInfo.class.getDeclaredConstructor().newInstance().canOpen(fileName)) { di = new CMARadarBaseDataInfo(); + } else { + di = MICAPSDataInfo.getDataInfo(raf); } raf.close(); } catch (IOException | NoSuchMethodException ex) { diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/grads/GrADSDataInfo.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/grads/GrADSDataInfo.java index f70af4a4..cf43448e 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/grads/GrADSDataInfo.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/grads/GrADSDataInfo.java @@ -274,6 +274,7 @@ public class GrADSDataInfo extends DataInfo implements IGridDataInfo, IStationDa public boolean isValidFile(RandomAccessFile raf) { try { + raf.seek(0); byte[] bytes = new byte[1000]; raf.read(bytes); String line = new String(bytes).trim(); diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/micaps/MICAPSDataInfo.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/micaps/MICAPSDataInfo.java index 28b31b4f..ae502d49 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/micaps/MICAPSDataInfo.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/micaps/MICAPSDataInfo.java @@ -14,13 +14,12 @@ package org.meteoinfo.data.meteodata.micaps; import org.apache.commons.io.input.BOMInputStream; +import org.meteoinfo.data.meteodata.DataInfo; import org.meteoinfo.data.meteodata.MeteoDataType; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; +import java.io.*; +import java.util.RandomAccess; +import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; @@ -107,6 +106,63 @@ public class MICAPSDataInfo { return mdType; } + + /** + * Get MICAPS data info + * + * @param raf RandomAccessFile object + * @return Data info + */ + public static DataInfo getDataInfo(RandomAccessFile raf) { + DataInfo dataInfo = null; + try { + raf.seek(0); + byte[] bytes = new byte[1000]; + raf.read(bytes); + String line = new String(bytes).trim(); + if (line.substring(0, 4).equals("mdfs")) { + dataInfo = new MDFSDataInfo(); + } else { + StringTokenizer stoker = new StringTokenizer(line); + if (stoker.countTokens() >= 2) { + String dataType = stoker.nextToken() + " " + stoker.nextToken(); + if (dataType.contains("diamond 1")) { + dataInfo = new MICAPS1DataInfo(); + } + if (dataType.equals("diamond 2")) { + dataInfo = new MICAPS2DataInfo(); + } + if (dataType.equals("diamond 3")) { + dataInfo = new MICAPS3DataInfo(); + } + if (dataType.equals("diamond 4")) { + dataInfo = new MICAPS4DataInfo(); + } + if (dataType.equals("diamond 7")) { + dataInfo = new MICAPS7DataInfo(); + } + if (dataType.equals("diamond 11")) { + dataInfo = new MICAPS11DataInfo(); + } + if (dataType.equals("diamond 13")) { + dataInfo = new MICAPS13DataInfo(); + } + if (dataType.contains("iamond 120")) { + dataInfo = new MICAPS120DataInfo(); + } + if (dataType.contains("diamond 131")) { + dataInfo = new MICAPS131DataInfo(); + } + } + } + } catch (FileNotFoundException ex) { + Logger.getLogger(MICAPSDataInfo.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException ex) { + Logger.getLogger(MICAPSDataInfo.class.getName()).log(Level.SEVERE, null, ex); + } + + return dataInfo; + } // // // diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index 397e6c86..f840a2a0 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,7 +1,6 @@ - - + @@ -11,11 +10,12 @@ - + +