private void processFiles(String siteId, String root, List<String> fileList, boolean isDelete) throws IOException { for (String filePath : fileList) { if (logger.isDebugEnabled()) { logger.debug(String.format("Processing file %s for site %s", filePath, siteId)); } File file = new File(root + filePath); String updateIndexPath = filePath; Map<String, String> externalProperties = null; boolean searchIndexUpdate = false; if (!isDelete) { if (isMetadataFile(filePath)) { if (logger.isDebugEnabled()) { logger.debug("Metadata processing started."); } SAXReader reader = new SAXReader(); try { Document document = reader.read(file); updateIndexPath = getAttachmentPath(document); if (StringUtils.isNotBlank(updateIndexPath)) { if (logger.isDebugEnabled()) { logger.debug("Extracting properties."); } externalProperties = parseMetadataFile(document); file = new File(root + updateIndexPath); if (!file.exists()) { File dir = file.getParentFile(); dir.mkdirs(); file.createNewFile(); } searchIndexUpdate = true; } } catch (DocumentException e) { logger.error( String.format("Error while opening xml file %s for site %s", filePath, siteId), e); } if (logger.isDebugEnabled()) { logger.debug("Metadata processing finished."); } } else if (isAttachmentFile(filePath)) { searchIndexUpdate = true; } } if (searchIndexUpdate) { if (isDelete) { searchService.delete(siteId, updateIndexPath); } else { if (logger.isDebugEnabled()) { logger.debug( String.format( "Sending search update request for file %s [%s] for site %s", updateIndexPath, filePath, siteId)); } searchService.partialDocumentUpdate(siteId, updateIndexPath, file, externalProperties); } } searchService.commit(); } }
@Override public void doProcess( PublishedChangeSet changeSet, Map<String, String> parameters, PublishingTarget target) throws PublishingException { String root = target.getParameter(FileUploadServlet.CONFIG_ROOT); String contentFolder = target.getParameter(FileUploadServlet.CONFIG_CONTENT_FOLDER); String siteId = (!StringUtils.isEmpty(siteName)) ? siteName : parameters.get(FileUploadServlet.PARAM_SITE); root += "/" + contentFolder; if (StringUtils.isNotBlank(siteId)) { root = root.replaceAll(FileUploadServlet.CONFIG_MULTI_TENANCY_VARIABLE, siteId); } List<String> createdFiles = changeSet.getCreatedFiles(); List<String> updatedFiles = changeSet.getUpdatedFiles(); List<String> deletedFiles = changeSet.getDeletedFiles(); if (CollectionUtils.isNotEmpty(createdFiles)) { update(siteId, root, createdFiles, false); } if (CollectionUtils.isNotEmpty(updatedFiles)) { update(siteId, root, updatedFiles, false); } if (CollectionUtils.isNotEmpty(deletedFiles)) { update(siteId, root, deletedFiles, true); } searchService.commit(); }
protected void update(String siteId, String root, List<String> fileNames, boolean delete) throws PublishingException { for (String fileName : fileNames) { if (fileName.endsWith(".xml")) { try { if (delete) { searchService.delete(siteId, fileName); if (logger.isDebugEnabled()) { logger.debug(siteId + ":" + fileName + " deleted from search index"); } } else { try { String xml = processXml(root, fileName); searchService.update(siteId, fileName, xml, true); if (logger.isDebugEnabled()) { logger.debug(siteId + ":" + fileName + " added to search index"); } } catch (DocumentException e) { logger.warn( "Cannot process XML file " + siteId + ":" + fileName + ". Continuing index " + "update...", e); } } } catch (Exception e) { throw new PublishingException(e); } } } }