/** * Add the provided document to the cache. */ public static void cache(XmlFileModel key, Document document) { String cacheKey = getKey(key); map.put(cacheKey, new CacheDocument(false, document)); }
default Document asDocument() { XMLDocumentCache.Result cacheResult = XMLDocumentCache.get(this); Document document; if (cacheResult.isParseFailure()) { throw new WindupException("Could not load " + asFile() + " due to previous parse failure"); } else if (cacheResult.getDocument() == null) { FileModel fileModel = getGraph().frameElement(getElement(), FileModel.class); try (InputStream is = fileModel.asInputStream()) { document = LocationAwareXmlReader.readXML(is); XMLDocumentCache.cache(this, document); } catch (Exception e) { XMLDocumentCache.cacheParseFailure(this); throw new WindupException("Exception reading document due to: " + e.getMessage(), e); } } else { document = cacheResult.getDocument(); } return document; } }
XMLDocumentCache.Result cacheResult = XMLDocumentCache.get(model); if (cacheResult.isParseFailure()) XMLDocumentCache.cache(model, document); XMLDocumentCache.cacheParseFailure(model); document = null; final String message = "Failed to parse XML file: " + model.getFilePath() + ", due to: " + e.getMessage();
/** * Cache a parse failure for this document. */ public static void cacheParseFailure(XmlFileModel key) { map.put(getKey(key), new CacheDocument(true, null)); }
/** * Retrieve the currently cached value for the given document. */ public static Result get(XmlFileModel key) { String cacheKey = getKey(key); Result result = null; CacheDocument reference = map.get(cacheKey); if (reference == null) return new Result(false, null); if (reference.parseFailure) return new Result(true, null); Document document = reference.getDocument(); if (document == null) LOG.info("Cache miss on XML document: " + cacheKey); return new Result(false, document); }