// Bookmark.java package net.sf.gogui.gui; import java.io.File; import java.util.ArrayList; import java.util.prefs.Preferences; import net.sf.gogui.util.FileUtil; import net.sf.gogui.util.PrefUtil; /** Link to a position in a game file. */ public final class Bookmark { public int m_move; public File m_file; public String m_name; public String m_variation; public Bookmark(Bookmark bookmark) { copyFrom(bookmark); } public Bookmark(String name, File file, int move, String variation) { init(name, file, move, variation); } public Bookmark(File file, int move, String variation) { String name = ""; if (file != null) { File fileNoExt; if (FileUtil.hasExtension(file, "xml")) fileNoExt = new File(FileUtil.removeExtension(file, "xml")); else fileNoExt = new File(FileUtil.removeExtension(file, "sgf")); name = fileNoExt.getName(); boolean hasVariation = ! variation.trim().equals(""); if (move > 0 || hasVariation) { name = name + " ("; if (hasVariation) { name = name + variation; if (move > 0) name = name + "/"; } if (move > 0) name = name + move; name = name + ")"; } file = file.getAbsoluteFile(); } init(name, file, move, variation); } public void copyFrom(Bookmark bookmark) { init(bookmark.m_name, bookmark.m_file, bookmark.m_move, bookmark.m_variation); } public static ArrayList<Bookmark> load() { ArrayList<Bookmark> bookmarks = new ArrayList<Bookmark>(); Preferences prefs = PrefUtil.getNode("net/sf/gogui/gui/bookmark"); if (prefs == null) return bookmarks; int size = prefs.getInt("size", 0); for (int i = 0; i < size; ++i) { prefs = PrefUtil.getNode("net/sf/gogui/gui/bookmark/" + i); if (prefs == null) break; String name = prefs.get("name", null); if (name == null) break; String fileName = prefs.get("file", ""); int move = prefs.getInt("move", 0); String variation = prefs.get("variation", ""); Bookmark b = new Bookmark(name, new File(fileName), move, variation); bookmarks.add(b); } return bookmarks; } public static void save(ArrayList<Bookmark> bookmarks) { Preferences prefs = PrefUtil.createNode("net/sf/gogui/gui/bookmark"); if (prefs == null) return; prefs.putInt("size", bookmarks.size()); for (int i = 0; i < bookmarks.size(); ++i) { prefs = PrefUtil.createNode("net/sf/gogui/gui/bookmark/" + i); if (prefs == null) break; Bookmark b = bookmarks.get(i); prefs.put("name", b.m_name); prefs.put("file", b.m_file.toString()); prefs.put("move", Integer.toString(b.m_move)); prefs.put("variation" , b.m_variation); } } private void init(String name, File file, int move, String variation) { assert move >= 0; m_file = file; m_move = move; m_variation = variation.trim(); m_name = name; } }