private NetcdfDataset openDataset( InvDataset invDataset, boolean acquire, ucar.nc2.util.CancelTask task, Result result) throws IOException { IOException saveException = null; List<InvAccess> accessList = new ArrayList<InvAccess>(invDataset.getAccess()); // a list of all the accesses while (accessList.size() > 0) { InvAccess access = chooseDatasetAccess(accessList); // no valid access if (access == null) { result.errLog.format("No access that could be used in dataset %s %n", invDataset); if (saveException != null) throw saveException; return null; } String datasetLocation = access.getStandardUrlName(); ServiceType serviceType = access.getService().getServiceType(); if (debugOpen) System.out.println("ThreddsDataset.openDataset try " + datasetLocation + " " + serviceType); // deal with RESOLVER type if (serviceType == ServiceType.RESOLVER) { InvDatasetImpl rds = openResolver(datasetLocation, task, result); if (rds == null) return null; accessList = new ArrayList<InvAccess>(rds.getAccess()); continue; } // ready to open it through netcdf API NetcdfDataset ds; // try to open try { ds = openDataset(access, acquire, task, result); } catch (IOException e) { result.errLog.format("Cant open %s %n err=%s%n", datasetLocation, e.getMessage()); if (debugOpen) { System.out.println("Cant open= " + datasetLocation + " " + serviceType); e.printStackTrace(); } accessList.remove(access); saveException = e; continue; } result.accessUsed = access; return ds; } // loop over accesses if (saveException != null) throw saveException; return null; }
@Override public String getViewerLinkHtml(InvDatasetImpl ds, HttpServletRequest req) { InvAccess access = ds.getAccess(ServiceType.WMS); URI dataURI = access.getStandardUri(); try { URI base = new URI(req.getRequestURL().toString()); dataURI = base.resolve(dataURI); } catch (URISyntaxException e) { return "Error generating viewer link"; } // ToDo Switch to use TdsContext.getContextPath() return "<a href='" + ServletUtil.getContextPath() + "/godiva2/godiva2.html?server=" + dataURI.toString() + "'>Godiva2 (browser-based)</a>"; }
/** Returns true if this is a gridded dataset that is accessible via WMS. */ @Override public boolean isViewable(InvDatasetImpl ds) { InvAccess access = ds.getAccess(ServiceType.WMS); return (access != null) && (ds.getDataType() == FeatureType.GRID); }