package tools.index; import java.nio.file.Path; import outputModules.neo4j.importers.DirectoryTreeImporter; import parsing.ModuleParser; import parsing.C.Modules.ANTLRCModuleParserDriver; import fileWalker.SourceFileListener; public abstract class Indexer extends SourceFileListener { ANTLRCModuleParserDriver driver = new ANTLRCModuleParserDriver(); ModuleParser parser = new ModuleParser(driver); protected IndexerState state; protected IndexerASTWalker astWalker; protected DirectoryTreeImporter dirTreeImporter; protected String outputDir; protected abstract void initializeDirectoryImporter(); protected abstract void initializeWalker(); protected abstract void initializeDatabase(); protected abstract void shutdownDatabase(); protected void initializeIndexerState() { state = new IndexerState(this); } public void setOutputDir(String anOutputDir) { outputDir = anOutputDir; } @Override public void initialize() { initializeIndexerState(); initializeDirectoryImporter(); initializeWalker(); initializeDatabase(); connectComponents(); } @Override public void preVisitDirectory(Path dir) { dirTreeImporter.enterDir(dir); } @Override public void postVisitDirectory(Path dir) { dirTreeImporter.exitDir(dir); } @Override public void visitFile(Path pathToFile) { dirTreeImporter.enterFile(pathToFile); parser.parseFile(pathToFile.toString()); } @Override public void shutdown() { shutdownDatabase(); } private void connectComponents() { astWalker.setIndexerState(state); dirTreeImporter.setState(state); parser.addObserver(astWalker); } }