OSDN Git Service

2106becf379f62cf529c656f21d786f3c1430d6d
[charactermanaj/CharacterManaJ.git] / src / charactermanaj / model / io / WorkingSetPersist.java
1 package charactermanaj.model.io;\r
2 \r
3 import java.io.File;\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
10 \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
16 \r
17 /**\r
18  * ワーキングセットの保存と復元.<br>\r
19  * \r
20  * @author seraphy\r
21  */\r
22 public class WorkingSetPersist {\r
23 \r
24         /**\r
25          * ロガー\r
26          */\r
27         private static final Logger logger = Logger\r
28                         .getLogger(WorkingSetPersist.class.getName());\r
29 \r
30         /**\r
31          * ワーキングセットのサフィックス.\r
32          */\r
33         public static final String WORKINGSET_FILE_SUFFIX = "workingset.xml";\r
34 \r
35         private static final WorkingSetPersist singletion = new WorkingSetPersist();\r
36 \r
37         public static WorkingSetPersist getInstance() {\r
38                 return singletion;\r
39         }\r
40 \r
41         /**\r
42          * すべてのワーキングセットをクリアする.<br>\r
43          */\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
54                                 }\r
55                         });\r
56                         if (files == null) {\r
57                                 logger.log(Level.WARNING, "dir access failed. " + dir);\r
58                                 return;\r
59                         }\r
60                         for (File file : files) {\r
61                                 boolean success = file.delete();\r
62                                 logger.log(Level.INFO, "remove file: " + file + " /success="\r
63                                                 + success);\r
64                         }\r
65                 }\r
66         }\r
67 \r
68         /**\r
69          * ワーキングセットを削除する.\r
70          * \r
71          * @param cd\r
72          *            対象のキャラクターデータ\r
73          */\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
81                 }\r
82         }\r
83 \r
84         /**\r
85          * ワーキングセットを保存する.<br>\r
86          * ワーキングセットインスタンスには、あらかじめ全て設定しておく必要がある.<br>\r
87          * \r
88          * @param workingSet\r
89          *            ワーキングセット\r
90          * @throws IOException\r
91          *             失敗\r
92          */\r
93         public void saveWorkingSet(WorkingSet workingSet) throws IOException {\r
94                 if (workingSet == null) {\r
95                         throw new IllegalArgumentException();\r
96                 }\r
97                 CharacterData characterData = workingSet.getCharacterData();\r
98                 if (characterData == null) {\r
99                         throw new IllegalArgumentException("character-data must be set.");\r
100                 }\r
101 \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
107                 try {\r
108                         WorkingSetXMLWriter workingSetXmlWriter = new WorkingSetXMLWriter();\r
109                         workingSetXmlWriter.writeWorkingSet(workingSet, outstm);\r
110                 } finally {\r
111                         outstm.close();\r
112                 }\r
113         }\r
114 \r
115         /**\r
116          * ワーキングセットを取得する.<br>\r
117          * \r
118          * @param characterData\r
119          *            対象のキャラクターデータ\r
120          * @return ワーキングセット、なければnull\r
121          * @throws IOException\r
122          *             読み込みに失敗した場合\r
123          */\r
124         public WorkingSet2 loadWorkingSet(CharacterData characterData)\r
125                         throws IOException {\r
126                 if (characterData == null) {\r
127                         throw new IllegalArgumentException();\r
128                 }\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
134                         // 保存されていない場合\r
135                         return null;\r
136                 }\r
137                 WorkingSet2 workingSet2;\r
138 \r
139                 InputStream is = workingSetXmlData.openStream();\r
140                 try {\r
141                         WorkingSetXMLReader WorkingSetXMLReader = new WorkingSetXMLReader();\r
142                         workingSet2 = WorkingSetXMLReader.loadWorkingSet(is);\r
143 \r
144                 } finally {\r
145                         is.close();\r
146                 }\r
147 \r
148                 return workingSet2;\r
149         }\r
150 }\r