@Override public synchronized boolean updateIfChanged(String identifier) throws IOException, RegistryException { // identify installed vocabulary by identifier Vocabulary installed = get(identifier); if (installed != null) { // match vocabulary by identifier and issued date Vocabulary matched = null; for (Vocabulary v : registryManager.getVocabularies()) { if (v.getUriString() != null && v.getUriString().equalsIgnoreCase(identifier) && installed.getIssued() != null && v.getIssued() != null && installed.getIssued().compareTo(v.getIssued()) == 0) { matched = v; break; } } // verify the version was updated if (matched != null && matched.getUriResolvable() != null) { File vocabFile = getVocabFile(matched.getUriResolvable()); return downloader.downloadIfChanged(matched.getUriResolvable().toURL(), vocabFile); } } return false; }
/** * Download a vocabulary into temporary file and return it. * * @param url URL of vocabulary to download * @return temporary file vocabulary was downloaded to, or null if it failed to be downloaded */ private File download(URL url) throws IOException { Preconditions.checkNotNull(url); String filename = url.toString().replaceAll("[/:.]+", "_") + ".xml"; File tmpFile = dataDir.tmpFile(filename); StatusLine statusLine = downloader.download(url, tmpFile); if (success(statusLine)) { log.info("Successfully downloaded vocabulary: " + url.toString()); return tmpFile; } else { String msg = "Failed to download vocabulary: " + url.toString() + ". Response=" + String.valueOf(statusLine.getStatusCode()); log.error(msg); throw new IOException(msg); } }