// Openings.java
package net.sf.gogui.tools.twogtp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileFilter;
import java.io.IOException;
import net.sf.gogui.game.GameInfo;
import net.sf.gogui.game.GameTree;
import net.sf.gogui.sgf.SgfError;
import net.sf.gogui.sgf.SgfReader;
import net.sf.gogui.util.ErrorMessage;
import net.sf.gogui.util.FileUtil;
class Filter
implements FileFilter
{
public boolean accept(File f)
{
return FileUtil.hasExtension(f, "sgf");
}
}
/** Access opening SGF files from directory. */
public class Openings
{
public Openings(File directory) throws ErrorMessage
{
if (! directory.isDirectory())
throw new ErrorMessage(directory + " is not a directory");
m_directory = directory;
m_files = directory.listFiles(new Filter());
if (m_files.length == 0)
throw new ErrorMessage("No SGF files found in " + directory);
sortFiles();
m_currentFile = -1;
}
public int getBoardSize()
{
return getTree().getBoardSize();
}
/** Get name of directory. */
public String getDirectory()
{
return m_directory.toString();
}
/** Get name of currently loaded file. */
public String getFilename()
{
return m_files[m_currentFile].toString();
}
/** Get game information of currently loaded file. */
public GameInfo getGameInfo()
{
return m_tree.getGameInfo(m_tree.getRoot());
}
/** Get game tree of currently loaded file. */
public GameTree getTree()
{
return m_tree;
}
/** Get number of opening files in directory. */
public int getNumber()
{
return m_files.length;
}
/** Load opening file number i. */
public void loadFile(int i) throws IOException, SgfError
{
File file = m_files[i];
FileInputStream fileStream = new FileInputStream(file);
SgfReader reader = new SgfReader(fileStream, file, null, 0);
m_tree = reader.getTree();
m_currentFile = i;
}
private int m_currentFile;
private final File m_directory;
private File[] m_files;
private GameTree m_tree;
private void sortFiles()
{
for (int i = 0; i < m_files.length - 1; ++i)
for (int j = i + 1; j < m_files.length; ++j)
if (m_files[i].compareTo(m_files[j]) > 0)
{
File tmp = m_files[i];
m_files[i] = m_files[j];
m_files[j] = tmp;
}
}
}