@Test
  public void testGetLeaves() throws Exception {
    Assume.assumeTrue(!GraphicsEnvironment.isHeadless());
    final CatalogTree catalogTree = new CatalogTree(null, new DefaultAppContext(""), null);
    List<InvDataset> datasets = new ArrayList<InvDataset>();
    InvCatalog catalog = new InvCatalogImpl("catalogName", "1.0", new URI("http://x.y"));
    final InvDataset rootDataset = createDataset(catalog, "first", "OPENDAP");
    rootDataset.getDatasets().add(createDataset(catalog, "second", "OPENDAP"));
    rootDataset.getDatasets().add(createDataset(catalog, "third", "OPENDAP"));

    datasets.add(rootDataset);
    catalogTree.setNewRootDatasets(datasets);

    OpendapLeaf[] leaves = catalogTree.getLeaves();
    Arrays.sort(
        leaves,
        new Comparator<OpendapLeaf>() {
          @Override
          public int compare(OpendapLeaf o1, OpendapLeaf o2) {
            return o1.getName().compareTo(o2.getName());
          }
        });
    assertEquals(2, leaves.length);
    assertEquals("second", leaves[0].getName());
    assertEquals("third", leaves[1].getName());
  }
Example #2
0
  public void init() throws ServletException {
    super.init();
    // allow = ThreddsConfig.getBoolean("NetcdfSubsetService.allow", true);
    // String radarLevel2Dir = ThreddsConfig.get("NetcdfSubsetService.radarLevel2DataDir",
    // "/data/ldm/pub/native/radar/level2/");
    // if (!allow) return;
    contentPath = ServletUtil.getContentPath();
    rm = new RadarMethods(contentPath, logServerStartup);

    // read in radarCollections.xml catalog
    InvCatalogFactory factory = InvCatalogFactory.getDefaultFactory(false); // no validation
    cat = readCatalog(factory, getPath() + catName, contentPath + getPath() + catName);
    if (cat == null) {
      logServerStartup.info("cat initialization failed");
      return;
    }
    // URI tmpURI = cat.getBaseURI();
    cat.setBaseURI(catURI);
    // get path and location from cat
    List parents = cat.getDatasets();
    for (int i = 0; i < parents.size(); i++) {
      InvDataset top = (InvDataset) parents.get(i);
      datasets = top.getDatasets(); // dataset scans

      for (int j = 0; j < datasets.size(); j++) {
        InvDatasetScan ds = (InvDatasetScan) datasets.get(j);
        if (ds.getPath() != null) {
          dataLocation.put(ds.getPath(), ds.getScanLocation());
          logServerStartup.info("path =" + ds.getPath() + " location =" + ds.getScanLocation());
        }
        ds.setXlinkHref(ds.getPath() + "/dataset.xml");
      }
    }
    logServerStartup.info(getClass().getName() + " initialization complete ");
  } // end init
  /**
   * Getting invDataset list for a single radar station.
   *
   * @param stnName radar station name
   * @param start of the time
   * @param end of the time
   * @return list of invDataset
   * @throws IOException java io exception
   */
  private DqcRadarDatasetInfo queryRadarStation(String stnName, Date start, Date end)
      throws IOException {
    // http://motherlode.ucar.edu:9080/thredds/idd/radarLevel2?returns=catalog&stn=KFTG&dtime=latest
    StringBuffer queryb = new StringBuffer();

    queryb.append(dqc.getQuery().getUriResolved().toString());
    queryb.append("serviceType=OPENDAP");
    queryb.append("&stn=" + stnName);
    if ((start == null) && (end == null)) {
      queryb.append("&dtime=all");
    } else {
      String stime = DateUtil.getTimeAsISO8601(start);
      String etime = DateUtil.getTimeAsISO8601(end);
      queryb.append("&dateStart=" + stime);
      queryb.append("&dateEnd=" + etime);
    }

    URI catalogURI;
    try {
      catalogURI = new URI(queryb.toString());
    } catch (java.net.URISyntaxException e) {
      throw new IOException("** MalformedURLException on URL <" + ">\n" + e.getMessage() + "\n");
    }

    InvCatalogFactory factory = new InvCatalogFactory("default", false);

    InvCatalogImpl catalog = (InvCatalogImpl) factory.readXML(catalogURI);
    StringBuilder buff = new StringBuilder();
    if (!catalog.check(buff)) {
      throw new IOException("Invalid catalog <" + catalogURI + ">\n" + buff.toString());
    }

    List datasets = catalog.getDatasets();

    InvDataset idata = (InvDataset) datasets.get(0);
    //    List ddate = idata.getDates();

    ArrayList dsets = (ArrayList) idata.getDatasets();

    ArrayList absTimeList = new ArrayList();
    ArrayList dURIList = new ArrayList();
    ArrayList dInvList = new ArrayList();

    for (int i = 0; i < dsets.size(); i++) {
      InvDataset tdata = (InvDataset) dsets.get(i);
      List acess = tdata.getAccess();
      List dates = tdata.getDates();
      InvAccess ia = (InvAccess) acess.get(0);
      URI d = ia.getStandardUri();
      Date date = DateUnit.getStandardOrISO(dates.get(0).toString());
      absTimeList.add(date);
      dURIList.add(new DatasetURIInfo(d, date));
      dInvList.add(new InvDatasetInfo(tdata, date));
    }

    DqcRadarDatasetInfo dri = new DqcRadarDatasetInfo(absTimeList, dURIList, dInvList);

    return dri;
  }
  /**
   * Getting URI for a single radar station.
   *
   * @param stnName radar station name
   * @param productID _more_
   * @param absTime is absolute time
   * @return InvDataset
   * @throws IOException java io exception
   */
  private InvDataset queryRadarStation(String stnName, String productID, Date absTime)
      throws IOException {
    String stime = DateUtil.getTimeAsISO8601(absTime).replaceAll("GMT", "");
    // construct a query like this:
    // http://motherlode.ucar.edu:9080/thredds/idd/radarLevel2?returns=catalog&stn=KFTG&dtime=latest
    StringBuilder queryb = new StringBuilder();
    String baseURI = dsc_location.replaceFirst("/dataset.xml", "?");
    queryb.append(baseURI);
    queryb.append("&stn=" + stnName);
    if (productID != null) {
      queryb.append("&var=" + productID);
    }
    if (absTime == null) {
      queryb.append("&time=present");
    } else {

      queryb.append("&time=" + stime);
    }

    URI catalogURI;

    try {
      catalogURI = new URI(queryb.toString());
    } catch (java.net.URISyntaxException e) {
      throw new IOException("** MalformedURLException on URL <" + ">\n" + e.getMessage() + "\n");
    }

    InvCatalogFactory factory = new InvCatalogFactory("default", false);
    // visad.util.Trace.call1("TDSRadarDatasetCollection.readXML");

    InvCatalogImpl catalog = (InvCatalogImpl) factory.readXML(catalogURI);

    // visad.util.Trace.call2("TDSRadarDatasetCollection.readXML");
    // visad.util.Trace.call1("TDSRadarDatasetCollection.checkCatalog");
    StringBuilder buff = new StringBuilder();
    if (!catalog.check(buff)) {
      throw new IOException("Invalid catalog <" + catalogURI + ">\n" + buff.toString());
    }
    // visad.util.Trace.call2("TDSRadarDatasetCollection.checkCatalog");
    // catalog.writeXML(System.out);  // debugg

    List<InvDataset> datasets = catalog.getDatasets();

    InvDataset idata = (InvDataset) datasets.get(0);
    List<InvDataset> dsets = idata.getDatasets();
    InvDataset tdata = (InvDataset) dsets.get(0);
    return tdata;
  }
 private InvDatasetImpl openResolver(
     String urlString, ucar.nc2.util.CancelTask task, Result result) {
   InvCatalogFactory catFactory = new InvCatalogFactory("", false);
   InvCatalogImpl catalog = catFactory.readXML(urlString);
   if (catalog == null) {
     result.errLog.format("Couldnt open Resolver %s %n ", urlString);
     return null;
   }
   StringBuilder buff = new StringBuilder();
   if (!catalog.check(buff)) {
     result.errLog.format("Invalid catalog from Resolver <%s>%n%s%n", urlString, buff.toString());
     result.fatalError = true;
     return null;
   }
   InvDataset top = catalog.getDataset();
   if (top.hasAccess()) return (InvDatasetImpl) top;
   else {
     java.util.List datasets = top.getDatasets();
     return (InvDatasetImpl) datasets.get(0);
   }
 }
  /**
   * Getting URI for a single radar station.
   *
   * @param stnName radar station name
   * @param absTime is absolute time
   * @return InvDataset
   * @throws IOException java io exception
   */
  private InvDataset queryRadarStation(String stnName, Date absTime) throws IOException {
    String stime = DateUtil.getTimeAsISO8601(absTime);
    // construct a query like this:
    // http://motherlode.ucar.edu:9080/thredds/idd/radarLevel2?returns=catalog&stn=KFTG&dtime=latest
    StringBuffer queryb = new StringBuffer();

    queryb.append(dqc.getQuery().getUriResolved().toString());
    queryb.append("serviceType=OPENDAP");
    queryb.append("&stn=" + stnName);
    queryb.append("&dtime=" + stime);

    URI catalogURI;

    try {
      catalogURI = new URI(queryb.toString());
    } catch (java.net.URISyntaxException e) {
      throw new IOException("** MalformedURLException on URL <" + ">\n" + e.getMessage() + "\n");
    }

    InvCatalogFactory factory = new InvCatalogFactory("default", false);

    InvCatalogImpl catalog = (InvCatalogImpl) factory.readXML(catalogURI);

    StringBuilder buff = new StringBuilder();
    if (!catalog.check(buff)) {
      throw new IOException("Invalid catalog <" + catalogURI + ">\n" + buff.toString());
    }

    List datasets = catalog.getDatasets();

    InvDataset idata = (InvDataset) datasets.get(0);
    ArrayList dsets = (ArrayList) idata.getDatasets();

    InvDataset tdata = (InvDataset) dsets.get(0);
    return tdata;
  }
  /**
   * Getting invDataset list for a single radar station.
   *
   * @param stnName radar station name
   * @param productID _more_
   * @param start of the time
   * @param end of the time
   * @return list of invDataset
   * @throws IOException java io exception
   */
  private TDSRadarDatasetInfo queryRadarStation(
      String stnName, String productID, Date start, Date end) throws IOException {
    // http://motherlode.ucar.edu:9080/thredds/idd/radarLevel2?returns=catalog&stn=KFTG&dtime=latest
    StringBuilder queryb = new StringBuilder();
    String baseURI = dsc_location.replaceFirst("/dataset.xml", "?");
    queryb.append(baseURI);
    queryb.append("stn=" + stnName);
    if (productID != null) {
      queryb.append("&var=" + productID);
    }
    if ((start == null) && (end == null)) {
      queryb.append("&time=present");
    } else if (end == null) {
      String stime = DateUtil.getTimeAsISO8601(start).replaceAll("GMT", "");
      queryb.append("&time_start=" + stime);
      queryb.append("&time_end=present");
    } else {
      String stime = DateUtil.getTimeAsISO8601(start).replaceAll("GMT", "");
      String etime = DateUtil.getTimeAsISO8601(end).replaceAll("GMT", "");
      queryb.append("&time_start=" + stime);
      queryb.append("&time_end=" + etime);
    }

    URI catalogURI;
    try {
      catalogURI = new URI(queryb.toString());
    } catch (java.net.URISyntaxException e) {
      throw new IOException("** MalformedURLException on URL <" + ">\n" + e.getMessage() + "\n");
    }

    InvCatalogFactory factory = new InvCatalogFactory("default", false);

    // visad.util.Trace.call1("TDSRadarDatasetCollection.readXML");
    InvCatalogImpl catalog = (InvCatalogImpl) factory.readXML(catalogURI);
    // visad.util.Trace.call2("TDSRadarDatasetCollection.readXML");
    StringBuilder buff = new StringBuilder();
    // visad.util.Trace.call1("TDSRadarDatasetCollection.checkCatalog");
    if (!catalog.check(buff)) {
      throw new IOException("Invalid catalog <" + catalogURI + ">\n" + buff.toString());
    }
    // visad.util.Trace.call2("TDSRadarDatasetCollection.checkCatalog");

    List<InvDataset> datasets = catalog.getDatasets();

    InvDataset idata = (InvDataset) datasets.get(0);

    List<InvDataset> dsets = idata.getDatasets();

    List<Date> absTimeList = new ArrayList<Date>();
    List<DatasetURIInfo> dURIList = new ArrayList<DatasetURIInfo>();
    List<InvDatasetInfo> dInvList = new ArrayList<InvDatasetInfo>();

    // visad.util.Trace.call1("TDSRadarDatasetCollection.getLists");
    for (InvDataset tdata : dsets) {
      List<InvAccess> acess = tdata.getAccess();
      List<DateType> dates = tdata.getDates();
      InvAccess ia = (InvAccess) acess.get(0);
      URI d = ia.getStandardUri();
      Date date = ((DateType) dates.get(0)).getDate();
      absTimeList.add(date);
      dURIList.add(new DatasetURIInfo(d, date));
      dInvList.add(new InvDatasetInfo(tdata, date));
    }
    // visad.util.Trace.call2("TDSRadarDatasetCollection.getLists");

    TDSRadarDatasetInfo dri = new TDSRadarDatasetInfo(absTimeList, dURIList, dInvList);

    return dri;
  }
Example #8
0
  public void read(String src) {
    //		addXML ax = new addXML();
    InvCatalogFactory factory = new InvCatalogFactory("default", false);
    InvCatalog catalog = (InvCatalog) factory.readXML(src);
    StringBuilder buff = new StringBuilder();
    int count = catalog.getDatasets().size();
    if (!catalog.check(buff, true)) {
      log.error("Invalid catalog <" + src + ">\n" + buff.toString());
    } else {

      for (int index = 0; index < count; index++) {
        factory = new InvCatalogFactory("default", false);
        catalog = (InvCatalog) factory.readXML(src);
        InvDataset invDataset = catalog.getDatasets().get(index);
        System.out.println(invDataset.getName());
        String file = "/home/rhs/NCAR/las_categories_";
        try {
          file = file + JDOMUtils.MD5Encode(invDataset.getName()) + ".xml";
        } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
        }
        Element las_categories = new Element("las_categories");

        //				CategoryBean cb = new CategoryBean();
        //				cb.setName(invDataset.getName());
        //				cb.setID(invDataset.getID());
        //				// This is the top level...
        //				//cb.setContributors(getContributors(invDataset));
        //				Vector topCats = new Vector();
        for (Iterator topLevelIt = invDataset.getDatasets().iterator(); topLevelIt.hasNext(); ) {
          InvDataset topDS = (InvDataset) topLevelIt.next();
          //					CategoryBean topCB = new CategoryBean();
          //					topCB.setName(topDS.getName());
          String id = topDS.getID();
          if (id == null) {
            try {
              id = "id_" + JDOMUtils.MD5Encode(topDS.getName());
            } catch (UnsupportedEncodingException e) {
              id = "id_" + String.valueOf(Math.random());
            }
          }
          System.out.println("top: " + topDS.getName() + ", " + topDS.getID());
          // topCB.setID(id);

          //					for (Iterator subDatasetsIt = topDS.getDatasets().iterator();
          // subDatasetsIt.hasNext(); ) {
          //						InvDataset subDataset = (InvDataset) subDatasetsIt.next();
          //						topCB.addCatID(subDataset.getID());
          //						// These will be the catalog containers that will contain the aggregations...
          //						for (Iterator grandChildrenIt = subDataset.getDatasets().iterator();
          // grandChildrenIt.hasNext(); ) {
          //							InvDataset grandChild = (InvDataset) grandChildrenIt.next();
          //							if ( grandChild.hasAccess() && grandChild.getName().contains("aggregation")) {
          //								// We are done.
          //								String url = null;
          //								InvAccess access = null;
          //								for (Iterator ait = grandChild.getAccess().iterator(); ait.hasNext(); ) {
          //									access = (InvAccess) ait.next();
          //									if (access.getService().getServiceType() == ServiceType.DODS ||
          //											access.getService().getServiceType() == ServiceType.OPENDAP ||
          //											access.getService().getServiceType() == ServiceType.NETCDF) {
          //										url = access.getStandardUrlName();
          //									}
          //								}
          //								if ( url != null && url.contains("aggregation") ){
          //									FilterBean filter = new FilterBean();
          //									filter.setAction("apply-variable");
          //									String tag = grandChild.getID();
          //									filter.setContainstag(tag);
          //									topCB.addFilter(filter);
          //									topCB.addCatID(grandChild.getID());
          //								}
          //							}
          //						}
          //					}
          //					if ( topCB.getFilters().size() > 0 ) {
          //						topCats.add(topCB);
          //					}
        }
        //				if ( topCats.size() > 0 ) {
        //					cb.setCategories(topCats);
        //				}
        //				las_categories.addContent(cb.toXml());

        //				ax.processESGCategories(invDataset, las_categories);
        //				LASDocument document = new LASDocument();
        //				document.setRootElement(las_categories);
        //				System.out.println("Writing "+file+" for "+invDataset.getName());
        //				document.write(file);
        //				document = null;
      }
    }
  }