/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.solr.filter; import java.io.File; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Will Simpson * */ public class SolrMigrationFilter implements Filter { private static final Logger LOGGER = LoggerFactory.getLogger(SolrMigrationFilter.class); /** * @see Filter#destroy() */ public void destroy() { } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { LOGGER.info("Initializing SOLR migration filter"); String solrDataDirProperty = System.getProperty("solr.data.dir"); LOGGER.info("SOLR data dir is {}", solrDataDirProperty); if (StringUtils.isNotBlank(solrDataDirProperty)) { File solrDataDir = new File(solrDataDirProperty); File profileSubDirectory = new File(solrDataDir, "profile"); if (profileSubDirectory.exists()) { LOGGER.info("Profile subdirectory already exists, so no migration needed: {}", profileSubDirectory); } else { mkdir(profileSubDirectory); File indexDir = new File(solrDataDir, "index"); if (indexDir.exists()) { LOGGER.info("Found index directory to migrate: {}", indexDir); File newIndexDir = new File(profileSubDirectory, "index"); move(indexDir, newIndexDir); } File spellcheckerDir = new File(solrDataDir, "spellchecker"); if (spellcheckerDir.exists()) { LOGGER.info("Found spellchecker directory to migrate: {}", spellcheckerDir); File newSpellcheckerDir = new File(profileSubDirectory, "spellchecker"); move(spellcheckerDir, newSpellcheckerDir); } } } } private void move(File oldFile, File newFile) { boolean result = oldFile.renameTo(newFile); if (!result) { throw new RuntimeException("Error moving " + oldFile + " to " + newFile); } } private void mkdir(File directory) { boolean result = directory.mkdir(); if (!result) { throw new RuntimeException("Error making directory: " + directory); } } }