From 14ec615ef4ec7bc685864fd5d08b0fd25cbd95f5 Mon Sep 17 00:00:00 2001 From: PONCELET Date: Fri, 26 Jul 2019 09:18:09 +0200 Subject: [PATCH] adapt converter to vlen variables --- sources/xsf.generator/XSFModel.json | 16 +++------ .../fr/xsf/generator/DataTypeConverter.java | 2 +- .../fr/xsf/generator/NetcdfLayerDeclarer.java | 13 +++++-- .../generator/PredefinedLayersGenerator.java | 34 +++++++++++-------- .../ifremer/fr/xsf/generator/model/Group.java | 5 ++- 5 files changed, 38 insertions(+), 32 deletions(-) diff --git a/sources/xsf.generator/XSFModel.json b/sources/xsf.generator/XSFModel.json index 427408d..0cd268e 100644 --- a/sources/xsf.generator/XSFModel.json +++ b/sources/xsf.generator/XSFModel.json @@ -1843,10 +1843,6 @@ { "name": "tx_beam", "comment": "The number of transmit beams in this beam group" - }, - { - "name": "backscatter_sample", - "comment": "the total number of sample in water column data for all ping" } ], "coordinatevariables": [ @@ -1939,7 +1935,7 @@ "ping_timeDim", "beamDim" ], - "type": "sample_byte_t", + "type": "sample_t", "attributes": [ { "name": "long_name", @@ -1949,11 +1945,6 @@ "name": "units", "value": "as appropriate", "comment": "Use units appropriate for the data." - }, - { - "name": "scale_factor", - "value": "0.5", - "type": "float" } ] }, @@ -1962,8 +1953,9 @@ "obligation": "M", "comment": "Real part or amplitude or power of backscatter measurements. Each element in the 2D matrix is a variable length vector (of type sample_t) that contains the samples for that beam and ping time.", "dims": [ - "backscatter_sampleDim" - ], + "ping_timeDim", + "beamDim" + ], "type": "sample_byte_t", "attributes": [ { diff --git a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/DataTypeConverter.java b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/DataTypeConverter.java index b96d0d1..bb51641 100644 --- a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/DataTypeConverter.java +++ b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/DataTypeConverter.java @@ -43,7 +43,7 @@ public class DataTypeConverter { case "DOUBLE": return DataType.DOUBLE; case "STRING": - return DataType.BYTE; + return DataType.STRING; default: } diff --git a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/NetcdfLayerDeclarer.java b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/NetcdfLayerDeclarer.java index 292ce30..b0e555f 100644 --- a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/NetcdfLayerDeclarer.java +++ b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/NetcdfLayerDeclarer.java @@ -1,15 +1,20 @@ package fr.ifremer.fr.xsf.generator; public class NetcdfLayerDeclarer { - public static String getLayerClass(int dim, String type) throws Exception + public static String getLayerClass(int dim, String basetype, String expandedlayerType) throws Exception { - if(DataTypeConverter.isVlen(type)) + if(DataTypeConverter.isVlen(basetype)) { - DataType baseType=DataTypeConverter.getVlenDataType(type); + DataType baseType; + if(expandedlayerType.isEmpty()) + baseType=DataTypeConverter.getVlenDataType(basetype); + else + baseType=DataTypeConverter.get(expandedlayerType); return getVlenLayerClass(dim, baseType); } else { + String type=expandedlayerType.isEmpty() ? basetype:expandedlayerType; return getClassicLayerClass(dim, DataTypeConverter.get(type)); } @@ -37,6 +42,8 @@ public class NetcdfLayerDeclarer { return 0 == dim || dim == 1 ? "FloatLoadableLayer1D" : "FloatLoadableLayer2D"; case DOUBLE: return 0 == dim || dim == 1 ? "DoubleLoadableLayer1D": "DoubleLoadableLayer2D"; + case STRING: + return 0 == dim || dim == 1 ? "StringLoadableLayer1D": "StringLoadableLayer2D"; default: return null; } diff --git a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/PredefinedLayersGenerator.java b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/PredefinedLayersGenerator.java index 066e270..1190a13 100644 --- a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/PredefinedLayersGenerator.java +++ b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/PredefinedLayersGenerator.java @@ -137,6 +137,10 @@ public class PredefinedLayersGenerator { { List layers=new ArrayList<>(); String lPath=path+"/"+g.getName(); + for(Variable v:g.getCoordinateVariables()) + { + layers.add(parseVariable(g,v,lPath)); + } for(Variable v:g.getVariables()) { layers.add(parseVariable(g,v,lPath)); @@ -155,6 +159,7 @@ public class PredefinedLayersGenerator { * */ private Layer parseVariable(Group g, Variable v, String lPath) throws Exception { String layerName=v.getName().toUpperCase(); + //find unit String unit=""; Optional unitValue=findAttribute(v, "units"); @@ -164,26 +169,25 @@ public class PredefinedLayersGenerator { } //find className + String baselayerType=""; + if(v.getType()!=null) + { + baselayerType=v.getType(); + } else + { + throw new Exception("Variable "+v.getName() + " has not associated type"); + } Optional sf=findAttribute(v, "scale_factor"); - String layerType=""; + String expandedlayerType=""; if(sf.isPresent()) { - layerType=sf.get().getType(); - if(layerType==null) + expandedlayerType=sf.get().getType(); + if(expandedlayerType==null) { //assume double scale factor - layerType="double"; - } - } else - { //we find the type of the variable - if(v.getType()!=null) - { - layerType=v.getType(); - } else - { - throw new Exception("Variable "+v.getName() + " has not associated type"); + expandedlayerType="double"; } - } + } String longName=""; Optional long_name=findAttribute(v, "long_name"); @@ -191,7 +195,7 @@ public class PredefinedLayersGenerator { { longName=long_name.get().getValue(); } - String layerClass=NetcdfLayerDeclarer.getLayerClass(v.getDims().size(), layerType); + String layerClass=NetcdfLayerDeclarer.getLayerClass(v.getDims().size(),baselayerType, expandedlayerType); return new Layer(lPath,layerName, layerClass,v.getName(), longName, DataKind.continuous.toString(), unit, lPath); } diff --git a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/model/Group.java b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/model/Group.java index 9de5b1a..a49731d 100644 --- a/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/model/Group.java +++ b/sources/xsf.generator/src/main/java/fr/ifremer/fr/xsf/generator/model/Group.java @@ -20,7 +20,7 @@ public class Group extends Base{ public List getAttributes() { return attributes; } - + public List getTypes() { return types; } @@ -33,6 +33,9 @@ public class Group extends Base{ return variables; } public List getCoordinateVariables() { + //happens in case of deserialization + if(coordinatevariables==null) + coordinatevariables=new ArrayList(); return coordinatevariables; } public List getSubGroups() { -- GitLab