private void setAxis(ErddapVariable erv) {
   if (erv.isTime()) {
     timeVariable = erv;
   } else if (erv.isX()) {
     xVariable = erv;
   } else if (erv.isY()) {
     yVariable = erv;
   } else if (erv.isZ()) {
     zVariable = erv;
   } else if (erv.isCdm()) {
     cdmVariable = erv;
   }
 }
  public void buildVariables() {
    guiLogger.info("Building Variables from ERDDAP Dataset: " + this.getTitle());
    try {
      ClientConfig clientConfig = new DefaultClientConfig();
      clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
      Client c = Client.create(clientConfig);
      guiLogger.info("Request: " + this.getInfo());
      WebResource wr = c.resource(this.getInfo());
      JSONObject result = wr.get(JSONObject.class);
      JSONArray ar = result.getJSONObject("table").getJSONArray("rows");
      variables = new ArrayList<ErddapVariable>();
      ErddapVariable edv = null;
      String[] subsetVars = null;
      Double frst, scnd;
      for (int i = 0; i < ar.length(); i++) {
        if (ar.getJSONArray(i).getString(2).equals("subsetVariables")) {
          subsetVars = ar.getJSONArray(i).getString(4).split(",");
          for (int j = 0; j < subsetVars.length; j++) {
            subsetVars[j] = subsetVars[j].trim();
          }
          continue;
        }

        if (ar.getJSONArray(i).getString(2).equals("cdm_data_type")) {
          cdm_data_type = ar.getJSONArray(i).getString(4);
          continue;
        }

        if (ar.getJSONArray(i).getString(0).equals("variable")) {
          if (edv != null) {
            setAxis(edv);
            variables.add(edv);
          }
          edv =
              new ErddapVariable(
                  this,
                  ar.getJSONArray(i).getString(1),
                  ar.getJSONArray(i).getString(3),
                  Arrays.asList(subsetVars).contains(ar.getJSONArray(i).getString(1).trim()));
          continue;
        }

        if (ar.getJSONArray(i).getString(0).equals("attribute")) {
          if (ar.getJSONArray(i).getString(2).equals("actual_range")) {
            // The range is not always going to be in the correct order
            frst = Double.parseDouble(ar.getJSONArray(i).getString(4).split(",")[0].trim());
            scnd = Double.parseDouble(ar.getJSONArray(i).getString(4).split(",")[1].trim());
            edv.setMin(String.valueOf(Math.min(frst, scnd)));
            edv.setMax(String.valueOf(Math.max(frst, scnd)));
          } else if (ar.getJSONArray(i).getString(2).equals("long_name")) {
            edv.setLongname(ar.getJSONArray(i).getString(4).trim());
          } else if (ar.getJSONArray(i).getString(2).equals("units")) {
            edv.setUnits(ar.getJSONArray(i).getString(4).trim());
          } else if (ar.getJSONArray(i).getString(2).equals("cf_role")) {
            edv.setAxis(ar.getJSONArray(i).getString(4).trim());
          } else if (ar.getJSONArray(i).getString(2).equalsIgnoreCase("description")) {
            edv.setDescription(ar.getJSONArray(i).getString(4).trim());
          }
        }
      }
      // Get the last iteration's edv variable
      if (edv != null) {
        variables.add(edv);
      }

      // Does this dataset have points we can strip out?
      // latitude and longitude also need to be subsetVariables or
      // this might be a long and hard query (from Bob Simmons).
      if (hasX() && hasY() && !getX().getValues().isEmpty() && !getX().getValues().isEmpty()) {
        buildLocations();
      }

    } catch (Exception e) {
      guiLogger.error("Exception", e);
    }
  }