package outputModules.neo4j.importers;
import java.nio.file.Path;
import java.util.Stack;
import tools.index.IndexerState;
import databaseNodes.FileDatabaseNode;
public abstract class DirectoryTreeImporter
{
protected IndexerState state;
protected Stack<FileDatabaseNode> directoryStack = new Stack<FileDatabaseNode>();
protected abstract void linkWithParentDirectory(FileDatabaseNode node);
protected abstract void insertNode(FileDatabaseNode node);
public void setState(IndexerState aState)
{
state = aState;
}
public void enterDir(Path dir)
{
FileDatabaseNode node = new FileDatabaseNode();
insertDirectoryNode(dir, node);
linkWithParentDirectory(node);
directoryStack.push(node);
}
public void exitDir(Path dir)
{
directoryStack.pop();
}
public void enterFile(Path pathToFile)
{
FileDatabaseNode node = new FileDatabaseNode();
insertFileNode(pathToFile, node);
linkWithParentDirectory(node);
state.setCurrentFileNode(node);
}
protected void insertDirectoryNode(Path dir, FileDatabaseNode node)
{
node.initialize(dir);
node.setType("Directory");
insertNode(node);
}
protected void insertFileNode(Path dir, FileDatabaseNode node)
{
node.initialize(dir);
node.setType("File");
insertNode(node);
}
protected long getSourceIdFromStack()
{
long srcId;
if (directoryStack.size() == 0)
srcId = 0; // reference node
else
srcId = directoryStack.peek().getId();
return srcId;
}
}