class NetcdfDataReader extends DataReader {

    @Override
    public List<VortexData> getDtos() {
        try (NetcdfDataset ncd = NetcdfDatasets.openDataset(path);  Formatter errlog = new Formatter()) {
            FeatureDataset dataset = FeatureDatasetFactoryManager.wrap(FeatureType.GRID, ncd, null, errlog);
            if (dataset != null) {
                FeatureType ftype = dataset.getFeatureType();
                if (ftype == FeatureType.GRID) {
                    assert (dataset instanceof GridDataset);
                    GridDataset gridDataset = (GridDataset) dataset;
                    return getData(gridDataset, variableName);
                }
            } else {
                List<Variable> variables = ncd.getVariables();
                for (Variable variable : variables) {
                    if (variable.getShortName().equals(variableName) && variable instanceof VariableDS) {
                        VariableDS variableDS = (VariableDS) variable;
                        int count = getDtoCount(variableDS);

                        VariableDsReader reader = VariableDsReader.builder()
                                .setNetcdfFile(ncd)
                                .setVariableName(variableName)
                                .build();

                        List<VortexData> dataList = new ArrayList<>();
                        for (int i = 0; i < count; i++) {
                            VortexData data = reader.read(i);
                            dataList.add(data);
                        }
                        return dataList;
                    }
                }
            }
        } catch (IOException e) {
            logger.log(Level.SEVERE, e, e::getMessage);
            return Collections.emptyList();
        }
        return Collections.emptyList();
    }

      NetcdfDataReader(DataReaderBuilder builder);

}