1 package charactermanaj.model.io;
\r
4 import java.io.FileFilter;
\r
5 import java.io.IOException;
\r
6 import java.io.InputStream;
\r
7 import java.io.OutputStream;
\r
8 import java.util.logging.Level;
\r
9 import java.util.logging.Logger;
\r
11 import charactermanaj.model.CharacterData;
\r
12 import charactermanaj.model.WorkingSet;
\r
13 import charactermanaj.model.WorkingSet2;
\r
14 import charactermanaj.util.UserData;
\r
15 import charactermanaj.util.UserDataFactory;
\r
18 * ワーキングセットの保存と復元.<br>
\r
22 public class WorkingSetPersist {
\r
27 private static final Logger logger = Logger
\r
28 .getLogger(WorkingSetPersist.class.getName());
\r
33 public static final String WORKINGSET_FILE_SUFFIX = "workingset.xml";
\r
35 private static final WorkingSetPersist singletion = new WorkingSetPersist();
\r
37 public static WorkingSetPersist getInstance() {
\r
42 * すべてのワーキングセットをクリアする.<br>
\r
44 public void removeAllWorkingSet() {
\r
45 UserDataFactory userDataFactory = UserDataFactory.getInstance();
\r
46 File dir = userDataFactory.getSpecialDataDir("foo-"
\r
47 + WORKINGSET_FILE_SUFFIX);
\r
48 if (dir.exists() && dir.isDirectory()) {
\r
49 File[] files = dir.listFiles(new FileFilter() {
\r
50 public boolean accept(File pathname) {
\r
51 return pathname.isFile()
\r
52 && pathname.getName().endsWith(
\r
53 WORKINGSET_FILE_SUFFIX);
\r
56 if (files == null) {
\r
57 logger.log(Level.WARNING, "dir access failed. " + dir);
\r
60 for (File file : files) {
\r
61 boolean success = file.delete();
\r
62 logger.log(Level.INFO, "remove file: " + file + " /success="
\r
74 public void removeWorkingSet(CharacterData cd) {
\r
75 UserDataFactory userDataFactory = UserDataFactory.getInstance();
\r
76 UserData workingSetXmlData = userDataFactory.getMangledNamedUserData(
\r
77 cd.getDocBase(), WORKINGSET_FILE_SUFFIX);
\r
78 if (workingSetXmlData != null && workingSetXmlData.exists()) {
\r
79 logger.log(Level.INFO, "remove file: " + workingSetXmlData);
\r
80 workingSetXmlData.delete();
\r
85 * ワーキングセットを保存する.<br>
\r
86 * ワーキングセットインスタンスには、あらかじめ全て設定しておく必要がある.<br>
\r
90 * @throws IOException
\r
93 public void saveWorkingSet(WorkingSet workingSet) throws IOException {
\r
94 if (workingSet == null) {
\r
95 throw new IllegalArgumentException();
\r
97 CharacterData characterData = workingSet.getCharacterData();
\r
98 if (characterData == null) {
\r
99 throw new IllegalArgumentException("character-data must be set.");
\r
102 // XML形式でのワーキングセットの保存
\r
103 UserDataFactory userDataFactory = UserDataFactory.getInstance();
\r
104 UserData workingSetXmlData = userDataFactory.getMangledNamedUserData(
\r
105 characterData.getDocBase(), WORKINGSET_FILE_SUFFIX);
\r
106 OutputStream outstm = workingSetXmlData.getOutputStream();
\r
108 WorkingSetXMLWriter workingSetXmlWriter = new WorkingSetXMLWriter();
\r
109 workingSetXmlWriter.writeWorkingSet(workingSet, outstm);
\r
116 * ワーキングセットを取得する.<br>
\r
118 * @param characterData
\r
120 * @return ワーキングセット、なければnull
\r
121 * @throws IOException
\r
124 public WorkingSet2 loadWorkingSet(CharacterData characterData)
\r
125 throws IOException {
\r
126 if (characterData == null) {
\r
127 throw new IllegalArgumentException();
\r
129 // XML形式でのワーキングセットの復元
\r
130 UserDataFactory userDataFactory = UserDataFactory.getInstance();
\r
131 UserData workingSetXmlData = userDataFactory.getMangledNamedUserData(
\r
132 characterData.getDocBase(), WORKINGSET_FILE_SUFFIX);
\r
133 if (workingSetXmlData == null || !workingSetXmlData.exists()) {
\r
137 WorkingSet2 workingSet2;
\r
139 InputStream is = workingSetXmlData.openStream();
\r
141 WorkingSetXMLReader WorkingSetXMLReader = new WorkingSetXMLReader();
\r
142 workingSet2 = WorkingSetXMLReader.loadWorkingSet(is);
\r
148 return workingSet2;
\r