OSDN Git Service

最後に使用したキャラクターデータ名を、キャラクターデータの親フォルダ上に、相対フォルダ名で保存するように変更。
authorseraphy <seraphy@5b6e9025-a2e8-4882-b233-f889982098c5>
Sun, 6 Oct 2013 18:00:25 +0000 (18:00 +0000)
committerseraphy <seraphy@5b6e9025-a2e8-4882-b233-f889982098c5>
Sun, 6 Oct 2013 18:00:25 +0000 (18:00 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/charactermanaj/trunk@63 5b6e9025-a2e8-4882-b233-f889982098c5

src/charactermanaj/model/RecentData.java [deleted file]
src/charactermanaj/model/io/CharacterDataPersistent.java
src/charactermanaj/model/io/RecentDataPersistent.java
src/charactermanaj/ui/AboutBox.java
src/charactermanaj/ui/SelectCharatersDirDialog.java
src/charactermanaj/util/DirectoryConfig.java

diff --git a/src/charactermanaj/model/RecentData.java b/src/charactermanaj/model/RecentData.java
deleted file mode 100644 (file)
index 6fe2cb3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-package charactermanaj.model;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.ObjectInputStream;\r
-import java.io.ObjectInputStream.GetField;\r
-import java.io.ObjectStreamClass;\r
-import java.io.Serializable;\r
-import java.net.URI;\r
-import java.net.URL;\r
-import java.util.logging.Level;\r
-import java.util.logging.Logger;\r
-\r
-/**\r
- * 最後に使用したデータの使用状況\r
- * @author seraphy\r
- */\r
-public class RecentData implements Serializable {\r
-       \r
-       /**\r
-        * ロガー\r
-        */\r
-       private static final Logger logger = Logger.getLogger(RecentData.class.getName());\r
-\r
-       private static final long serialVersionUID = 7232012934972862661L;\r
-\r
-       private String appVersion;\r
-\r
-       private URI docBase;\r
-\r
-       /**\r
-        * デシリアライズ\r
-        * @param inp オブジェクトの復元ストリーム\r
-        * @throws IOException 例外\r
-        * @throws ClassNotFoundException 例外\r
-        */\r
-       private void readObject(ObjectInputStream inp) throws IOException,\r
-                       ClassNotFoundException {\r
-               GetField fields = inp.readFields();\r
-\r
-               ObjectStreamClass sig = fields.getObjectStreamClass();\r
-               if (logger.isLoggable(Level.FINE)) {\r
-                       logger.log(Level.FINE, "RecentDataのデシリアライズ name=" + sig.getName()\r
-                                       + "/sid=" + sig.getSerialVersionUID());\r
-               }\r
-               \r
-               appVersion = (String) fields.get("appVersion", null);\r
-               \r
-               Object anyDocBase = fields.get("docBase", null);\r
-               if (anyDocBase != null && anyDocBase instanceof URL) {\r
-                       // 旧形式のURLの場合はURIに変換.\r
-                       File file = new File(((URL) anyDocBase).getPath());\r
-                       anyDocBase = file.toURI();\r
-               }\r
-               docBase = (URI) anyDocBase;\r
-       }\r
-       \r
-       public String getAppVersion() {\r
-               return appVersion;\r
-       }\r
-\r
-       public void setAppVersion(String appVersion) {\r
-               this.appVersion = appVersion;\r
-       }\r
-\r
-       public URI getDocBase() {\r
-               return docBase;\r
-       }\r
-\r
-       public void setDocBase(URI docBase) {\r
-               this.docBase = docBase;\r
-       }\r
-       \r
-       @Override\r
-       public String toString() {\r
-               StringBuilder buf = new StringBuilder();\r
-               buf.append("appVersion=" + appVersion + "/docBase=" + docBase);\r
-               return buf.toString();\r
-       }\r
-}\r
index 887044d..6031b19 100644 (file)
@@ -348,9 +348,9 @@ public class CharacterDataPersistent {
                        throw new IllegalArgumentException();\r
                }\r
 \r
-               // キャラクターデータが格納されている親ディレクトリのリスト\r
+               // キャラクターデータが格納されている親ディレクトリ\r
                DirectoryConfig dirConfig = DirectoryConfig.getInstance();\r
-               File[] baseDirs = {dirConfig.getCharactersDir(),};\r
+               File baseDir = dirConfig.getCharactersDir();\r
 \r
                // ファイル名をノーマライズする\r
                FileNameNormalizer normalizer = FileNameNormalizer.getDefault();\r
@@ -364,55 +364,46 @@ public class CharacterDataPersistent {
                                .newFixedThreadPool(numOfProcessors);\r
                try {\r
                        // キャラクターデータ対象ディレクトリを列挙し、並列に解析する\r
-                       for (File baseDir : baseDirs) {\r
-                               if (baseDir == null || !baseDir.exists()\r
-                                               || !baseDir.isDirectory()) {\r
-                                       continue;\r
-                               }\r
-                               for (File dir : baseDir.listFiles(new FileFilter() {\r
-                                       public boolean accept(File pathname) {\r
-                                               boolean accept = pathname.isDirectory()\r
-                                                               && !pathname.getName().startsWith(".");\r
-                                               if (accept) {\r
-                                                       File configFile = new File(pathname, CONFIG_FILE);\r
-                                                       accept = configFile.exists()\r
-                                                                       && configFile.canRead();\r
-                                               }\r
-                                               return accept;\r
+                       for (File dir : baseDir.listFiles(new FileFilter() {\r
+                               public boolean accept(File pathname) {\r
+                                       boolean accept = pathname.isDirectory()\r
+                                                       && !pathname.getName().startsWith(".");\r
+                                       if (accept) {\r
+                                               File configFile = new File(pathname, CONFIG_FILE);\r
+                                               accept = configFile.exists() && configFile.canRead();\r
                                        }\r
-                               })) {\r
-                                       String path = normalizer.normalize(dir.getPath());\r
-                                       final File normDir = new File(path);\r
-\r
-                                       executorSrv.submit(new Runnable() {\r
-                                               public void run() {\r
-                                                       boolean terminate = false;\r
-                                                       File characterDataXml = new File(normDir,\r
-                                                                       CONFIG_FILE);\r
-                                                       if (characterDataXml.exists()) {\r
-                                                               try {\r
-                                                                       File docBaseFile = new File(normDir,\r
-                                                                                       CONFIG_FILE);\r
-                                                                       URI docBase = docBaseFile.toURI();\r
-                                                                       CharacterData characterData = loadProfile(docBase);\r
-                                                                       terminate = !callback\r
-                                                                                       .receiveCharacterData(characterData);\r
-\r
-                                                               } catch (Exception ex) {\r
-                                                                       terminate = !callback.occureException(\r
-                                                                                       normDir, ex);\r
-                                                               }\r
-                                                       }\r
-                                                       if (terminate) {\r
-                                                               // 中止が指示されたらスレッドプールを終了する\r
-                                                               logger.log(Level.FINE,\r
-                                                                               "shutdownNow listProfile");\r
-                                                               executorSrv.shutdownNow();\r
-                                                               cancelled.set(true);\r
+                                       return accept;\r
+                               }\r
+                       })) {\r
+                               String path = normalizer.normalize(dir.getPath());\r
+                               final File normDir = new File(path);\r
+\r
+                               executorSrv.submit(new Runnable() {\r
+                                       public void run() {\r
+                                               boolean terminate = false;\r
+                                               File characterDataXml = new File(normDir, CONFIG_FILE);\r
+                                               if (characterDataXml.exists()) {\r
+                                                       try {\r
+                                                               File docBaseFile = new File(normDir,\r
+                                                                               CONFIG_FILE);\r
+                                                               URI docBase = docBaseFile.toURI();\r
+                                                               CharacterData characterData = loadProfile(docBase);\r
+                                                               terminate = !callback\r
+                                                                               .receiveCharacterData(characterData);\r
+\r
+                                                       } catch (Exception ex) {\r
+                                                               terminate = !callback.occureException(normDir,\r
+                                                                               ex);\r
                                                        }\r
                                                }\r
-                                       });\r
-                               }\r
+                                               if (terminate) {\r
+                                                       // 中止が指示されたらスレッドプールを終了する\r
+                                                       logger.log(Level.FINE, "shutdownNow listProfile");\r
+                                                       executorSrv.shutdownNow();\r
+                                                       cancelled.set(true);\r
+                                               }\r
+                                       }\r
+                               });\r
                        }\r
                } finally {\r
                        // タスクの登録を受付終了し、現在のすべてのタスクが完了したらスレッドは終了する.\r
index 400531c..91e5562 100644 (file)
@@ -1,27 +1,35 @@
 package charactermanaj.model.io;\r
 \r
+import java.io.BufferedInputStream;\r
+import java.io.BufferedOutputStream;\r
 import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
 import java.net.URI;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
+import java.sql.Timestamp;\r
+import java.util.Properties;\r
 import java.util.logging.Level;\r
 import java.util.logging.Logger;\r
 \r
-import charactermanaj.model.AppConfig;\r
 import charactermanaj.model.CharacterData;\r
-import charactermanaj.model.RecentData;\r
 import charactermanaj.util.DirectoryConfig;\r
-import charactermanaj.util.UserData;\r
-import charactermanaj.util.UserDataFactory;\r
 \r
 /**\r
  * 最後に使用したデータの使用状況を保存・復元するためのクラス\r
+ * \r
  * @author seraphy\r
  */\r
 public final class RecentDataPersistent {\r
 \r
        /**\r
+        * キャラクターデータの親フォルダごとに保存する、最後に使用したキャラクターデータを保存するファイル名\r
+        */\r
+       private static final String RECENT_CAHARCTER_INFO_XML = "recent-character.xml";\r
+\r
+       /**\r
         * ロガー\r
         */\r
        private static final Logger logger = Logger.getLogger(RecentDataPersistent.class.getName());\r
@@ -30,12 +38,6 @@ public final class RecentDataPersistent {
         * シングルトン\r
         */\r
        private static final RecentDataPersistent inst = new RecentDataPersistent();\r
-       \r
-       /**\r
-        * 最後に使用したプロファイルのコートベースを保存するファイル名\r
-        */\r
-       private static final String RECENT_CHARACTER_SER = "recent-character.ser";\r
-       \r
 \r
        /**\r
         * プライベートコンストラクタ\r
@@ -46,136 +48,211 @@ public final class RecentDataPersistent {
        \r
        /**\r
         * インスタンスを取得する\r
+        * \r
         * @return インスタンス\r
         */\r
        public static RecentDataPersistent getInstance() {\r
                return inst;\r
        }\r
-       \r
+\r
        /**\r
-        * 最後に使用したキャラクターデータとして記録する.\r
+        * キャラクターデータの親フォルダごとに保存する、最後に使用したキャラクターデータを保存するファイル\r
+        * \r
+        * @return\r
+        */\r
+       private File getRecentCharacterXML() {\r
+               File currentCharactersDir = DirectoryConfig.getInstance()\r
+                               .getCharactersDir();\r
+               File recentCharacterXML = new File(currentCharactersDir,\r
+                               RECENT_CAHARCTER_INFO_XML);\r
+               return recentCharacterXML;\r
+       }\r
+\r
+       /**\r
+        * 最後に使用したキャラクターデータのフォルダ名を親ディレクトリからの相対パスとして保存する.<br>\r
+        * ただし、書き込み禁止である場合は何もしない.<br>\r
+        * \r
         * @param characterData\r
-        * @throws IOException 保存できなった場合\r
+        *            キャラクターデータ\r
+        * @throws IOException\r
+        *             書き込みに失敗した場合\r
         */\r
-       public void saveRecent(CharacterData characterData) throws IOException {\r
-               if (characterData == null) {\r
-                       throw new IllegalArgumentException();\r
-               }\r
-               if (!characterData.isValid()) {\r
-                       return;\r
+       public boolean saveRecent(CharacterData characterData) throws IOException {\r
+               URI docBase = null;\r
+               if (characterData != null) {\r
+                       docBase = characterData.getDocBase();\r
                }\r
-               \r
-               AppConfig appConfig = AppConfig.getInstance();\r
-               \r
-               RecentData recentData = new RecentData();\r
-               recentData.setAppVersion(appConfig.getSpecificationVersion());\r
-               recentData.setDocBase(characterData.getDocBase());\r
-               \r
-               UserData recentCharacterStore = getRecentCharacterStore();\r
-\r
-               // 他のキャラクターディレクトリ上のデータを取得しマージする.\r
-               Map<File, RecentData> recentDataMap = new HashMap<File, RecentData>();\r
-               try {\r
-                       if (recentCharacterStore.exists()) {\r
-                               Object rawRecentData = recentCharacterStore.load();\r
-                               if (rawRecentData instanceof Map) {\r
-                                       @SuppressWarnings("unchecked")\r
-                                       Map<File, RecentData> prevRecentDataMap = (Map<File, RecentData>) rawRecentData;\r
-                                       for (Map.Entry<File, RecentData> entry : prevRecentDataMap.entrySet()) {\r
-                                               File dir = entry.getKey();\r
-                                               if (dir.exists() && dir.isDirectory()) {\r
-                                                       // 現在も有効なものだけを保存する.\r
-                                                       // (すでに存在しなくなっているものは除外する.)\r
-                                                       RecentData prevRecentData = entry.getValue();\r
-                                                       recentDataMap.put(dir, prevRecentData);\r
-                                               }\r
-                                       }\r
-                               }\r
+\r
+               String characterDataName = null;\r
+               if (docBase != null) {\r
+                       File currentCharactersDir = DirectoryConfig.getInstance()\r
+                                       .getCharactersDir();\r
+                       File characterXml = new File(docBase);\r
+                       File characterDir = characterXml.getParentFile();\r
+                       // "Foo/Bar/character.xml"の、「Foo」の部分を取得する.\r
+                       File baseDir = characterDir.getParentFile();\r
+                       if (currentCharactersDir.equals(baseDir)) {\r
+                               // "Foo/Bar/character.xml"の「Bar」の部分を取得する.\r
+                               // ※ キャラクターデータの親フォルダ上のフォルダ名だけを保存する.(相対パス)\r
+                               characterDataName = characterDir.getName();\r
                        }\r
+               }\r
+               Properties props = new Properties();\r
+               props.setProperty("lastUseCharacterData", characterDataName == null\r
+                               ? ""\r
+                               : characterDataName);\r
 \r
-               } catch (Exception ex) {\r
-                       logger.log(Level.WARNING, "old recentDataFile load failed.", ex);\r
-                       // 古い情報が取得できない場合でも最新のものだけは保存できるようにしておく。\r
+               File recentCharacterXML = getRecentCharacterXML();\r
+               if (recentCharacterXML.exists() && !recentCharacterXML.canWrite()) {\r
+                       // ファイルが書き込み禁止の場合は何もしない.\r
+                       logger.log(Level.FINE, "recent-character.xml is readonly.");\r
+                       return false;\r
                }\r
 \r
-               // 保存する.\r
-               File currentCharactersDir = DirectoryConfig.getInstance().getCharactersDir();\r
-               recentDataMap.put(currentCharactersDir, recentData);\r
-               recentCharacterStore.save(recentDataMap);\r
+               // ファイルがまだ実在しないか、書き込み可能である場合のみ保存する.\r
+               OutputStream os = new BufferedOutputStream(new FileOutputStream(\r
+                               recentCharacterXML));\r
+               try {\r
+                       String comment = "recent-character: lastModified="\r
+                                       + (new Timestamp(System.currentTimeMillis()).toString());\r
+                       props.storeToXML(os, comment);\r
+               } finally {\r
+                       os.close();\r
+               }\r
+               return true;\r
        }\r
-       \r
+\r
        /**\r
-        * 最後に使用したキャラクターデータを取得する.\r
-        * @return キャラクターデータ。最後に使用したデータが存在しない場合はnull\r
-        * @throws IOException 読み込みに失敗した場合\r
+        * 親ディレクトリからの相対パスとして記録されている、最後に使用したキャラクターデータのフォルダ名から、\r
+        * 最後に使用したキャラクターデータをロードして返す.<br>\r
+        * 該当するキャラクターデータが存在しないか、読み込みに失敗した場合は「履歴なし」としてnullを返す.<br>\r
+        * \r
+        * @return キャラクターデータ、もしくはnull\r
         */\r
-       public CharacterData loadRecent() throws IOException {\r
-               UserData recentCharacterStore = getRecentCharacterStore();\r
-               if (!recentCharacterStore.exists()) {\r
-                       return null;\r
-               }\r
+       public CharacterData loadRecent() {\r
+               File recentCharacterXML = getRecentCharacterXML();\r
+               if (recentCharacterXML.exists()) {\r
+                       try {\r
+                               Properties props = new Properties();\r
+                               InputStream is = new BufferedInputStream(new FileInputStream(\r
+                                               recentCharacterXML));\r
+                               try {\r
+                                       props.loadFromXML(is);\r
+                               } finally {\r
+                                       is.close();\r
+                               }\r
 \r
-               RecentData recentData;\r
-               try {\r
-                       File currentCharactersDir = DirectoryConfig.getInstance().getCharactersDir();\r
-\r
-                       Object rawRecentData = recentCharacterStore.load();\r
-                       if (rawRecentData instanceof RecentData) {\r
-                               // 旧形式 (単一)\r
-                               recentData = (RecentData) rawRecentData;\r
-                               logger.log(Level.INFO, "old-recentdata-type: " + recentData);\r
-                               \r
-                               // 旧形式で保存されているURIが、現在選択しているキャラクターデータと同じ親ディレクトリ\r
-                               // でなければ復元しない.\r
-                               URI uri = recentData.getDocBase();\r
-                               File parentDir = new File(uri).getParentFile().getParentFile(); // 2段上\r
-                               if (!currentCharactersDir.equals(parentDir)) {\r
-                                       logger.log(Level.INFO,\r
-                                                       "unmatched characters-dir. current="\r
-                                                                       + currentCharactersDir + "/recent="\r
-                                                                       + parentDir);\r
-                                       recentData = null;\r
+                               String characterDataName = props\r
+                                               .getProperty("lastUseCharacterData");\r
+                               if (characterDataName != null\r
+                                               && characterDataName.trim().length() > 0) {\r
+                                       // ※ キャラクターデータの親フォルダ上のフォルダ名だけを保存されているので\r
+                                       // 相対パスから、character.xmlの絶対パスを求める\r
+                                       File currentCharactersDir = DirectoryConfig.getInstance()\r
+                                                       .getCharactersDir();\r
+                                       File characterDir = new File(currentCharactersDir,\r
+                                                       characterDataName);\r
+                                       File characterXml = new File(characterDir,\r
+                                                       CharacterDataPersistent.CONFIG_FILE);\r
+                                       if (characterXml.exists()) {\r
+                                               // character.xmlが存在すれば復元を試行する.\r
+                                               CharacterDataPersistent persist = CharacterDataPersistent\r
+                                                               .getInstance();\r
+                                               return persist.loadProfile(characterXml.toURI());\r
+                                       }\r
                                }\r
 \r
-                       } else if (rawRecentData instanceof Map) {\r
-                               // 新形式 (複数のキャラクターディレクトリに対応)\r
-                               @SuppressWarnings("unchecked")\r
-                               Map<File, RecentData> recentDataMap = (Map<File, RecentData>) rawRecentData;\r
-                               recentData = recentDataMap.get(currentCharactersDir);\r
-                               logger.log(Level.FINE, "recent-data: " + currentCharactersDir + "=" + recentData);\r
-\r
-                       } else {\r
-                               // 不明な形式\r
-                               logger.log(Level.SEVERE,\r
-                                               "invalid file format. " + recentCharacterStore\r
-                                                               + "/class=" + rawRecentData.getClass());\r
-                               recentData = null;\r
+                       } catch (Exception ex) {\r
+                               // 失敗した場合は最後に使用したデータが存在しないものとみなす.\r
+                               logger.log(Level.WARNING, "recent data loading failed. "\r
+                                               + recentCharacterXML, ex);\r
                        }\r
-\r
-               } catch (Exception ex) {\r
-                       // RecentData情報の復元に失敗した場合は最後に使用したデータが存在しないものとみなす.\r
-                       logger.log(Level.WARNING, "recent data loading failed. " + recentCharacterStore, ex);\r
-                       recentData = null;\r
-               }\r
-\r
-               if (recentData != null) {\r
-                       CharacterDataPersistent persist = CharacterDataPersistent.getInstance();\r
-                       return persist.loadProfile(recentData.getDocBase());\r
                }\r
 \r
                // 履歴がない場合、もしくは読み取れなかった場合はnullを返す.\r
                return null;\r
        }\r
-       \r
-       /**\r
-        * 最後に使用したキャラクタデータの保存先を取得する\r
-        * @return 保存先\r
-        */\r
-       protected UserData getRecentCharacterStore() {\r
-               UserDataFactory userDataFactory = UserDataFactory.getInstance();\r
-               UserData recentCharacterStore = userDataFactory.getUserData(RECENT_CHARACTER_SER);\r
-               return recentCharacterStore;\r
-       }\r
+\r
+       // /**\r
+       // * 最後に使用したキャラクターデータを取得する.\r
+       // *\r
+       // * @return キャラクターデータ。最後に使用したデータが存在しない場合はnull\r
+       // * @throws IOException\r
+       // * 読み込みに失敗した場合\r
+       // */\r
+       // private CharacterData loadRecentSer() throws IOException {\r
+       // UserData recentCharacterStore = getRecentCharacterStore();\r
+       // if (!recentCharacterStore.exists()) {\r
+       // return null;\r
+       // }\r
+       //\r
+       // RecentData recentData;\r
+       // try {\r
+       // File currentCharactersDir =\r
+       // DirectoryConfig.getInstance().getCharactersDir();\r
+       //\r
+       // Object rawRecentData = recentCharacterStore.load();\r
+       // if (rawRecentData instanceof RecentData) {\r
+       // // 旧形式 (単一)\r
+       // recentData = (RecentData) rawRecentData;\r
+       // logger.log(Level.INFO, "old-recentdata-type: " + recentData);\r
+       //\r
+       // // 旧形式で保存されているURIが、現在選択しているキャラクターデータと同じ親ディレクトリ\r
+       // // でなければ復元しない.\r
+       // URI uri = recentData.getDocBase();\r
+       // File parentDir = new File(uri).getParentFile().getParentFile(); // 2段上\r
+       // if (!currentCharactersDir.equals(parentDir)) {\r
+       // logger.log(Level.INFO,\r
+       // "unmatched characters-dir. current="\r
+       // + currentCharactersDir + "/recent="\r
+       // + parentDir);\r
+       // recentData = null;\r
+       // }\r
+       //\r
+       // } else if (rawRecentData instanceof Map) {\r
+       // // 新形式 (複数のキャラクターディレクトリに対応)\r
+       // @SuppressWarnings("unchecked")\r
+       // Map<File, RecentData> recentDataMap = (Map<File, RecentData>)\r
+       // rawRecentData;\r
+       // recentData = recentDataMap.get(currentCharactersDir);\r
+       // logger.log(Level.FINE, "recent-data: " + currentCharactersDir + "=" +\r
+       // recentData);\r
+       //\r
+       // } else {\r
+       // // 不明な形式\r
+       // logger.log(Level.SEVERE,\r
+       // "invalid file format. " + recentCharacterStore\r
+       // + "/class=" + rawRecentData.getClass());\r
+       // recentData = null;\r
+       // }\r
+       //\r
+       // } catch (Exception ex) {\r
+       // // RecentData情報の復元に失敗した場合は最後に使用したデータが存在しないものとみなす.\r
+       // logger.log(Level.WARNING, "recent data loading failed. " +\r
+       // recentCharacterStore, ex);\r
+       // recentData = null;\r
+       // }\r
+       //\r
+       // if (recentData != null) {\r
+       // CharacterDataPersistent persist = CharacterDataPersistent.getInstance();\r
+       // return persist.loadProfile(recentData.getDocBase());\r
+       // }\r
+       //\r
+       // // 履歴がない場合、もしくは読み取れなかった場合はnullを返す.\r
+       // return null;\r
+       // }\r
+       //\r
+       // /**\r
+       // * 最後に使用したキャラクタデータの保存先を取得する\r
+       // *\r
+       // * @return 保存先\r
+       // */\r
+       // protected UserData getRecentCharacterStore() {\r
+       // UserDataFactory userDataFactory = UserDataFactory.getInstance();\r
+       // UserData recentCharacterStore =\r
+       // userDataFactory.getUserData(RECENT_CHARACTER_SER);\r
+       // return recentCharacterStore;\r
+       // }\r
        \r
        \r
 }\r
index 0b32bb0..19a1515 100644 (file)
@@ -40,6 +40,7 @@ import charactermanaj.util.SystemUtil;
 \r
 /**\r
  * Aboutボックスを表示する.\r
+ * \r
  * @author seraphy\r
  */\r
 public class AboutBox {\r
@@ -130,6 +131,7 @@ public class AboutBox {
        /**\r
         * システム情報を取得してHTML形式の文字列として返す.<br>\r
         * ランタイム情報、システムプロパティ情報、環境変数情報を取得する.<br>\r
+        * \r
         * @return システム情報のHTML文字列\r
         */\r
        protected String getSysInfoText() {\r
@@ -166,8 +168,8 @@ public class AboutBox {
                \r
                buf.append("<h2>Character Database</h2>");\r
                buf.append("<table border=\"1\">");\r
-//             buf.append("<tr><td>System</td><td>" + appConfig.getSystemCharactersDir() + "</td></tr>");\r
-               buf.append("<tr><td>User</td><td>" + escape(charactersDir) + "</td></tr>");\r
+               buf.append("<tr><td>User</td>");\r
+               buf.append("<td>" + escape(charactersDir) + "</td></tr>");\r
                buf.append("</table>");\r
                \r
                // サポートしているエンコーディングの列挙\r
index faddbdb..e060edf 100644 (file)
@@ -483,6 +483,16 @@ public class SelectCharatersDirDialog extends JDialog {
        }\r
        \r
 \r
+       /**\r
+        * キャラクターデータディレクトリを履歴および既定のディレクトリから、任意の使用するディレクトリを選択する.<br>\r
+        * 既定のディレクトリは常に選択候補とする.<br>\r
+        * 新しいディレクトリを指定した場合は、履歴に追加される.<br>\r
+        * 「再度問い合わせなし」を選択している場合で、そのディレクトリが実在すれば、選択ダイアログを表示せず、それを返す.<br>\r
+        * \r
+        * @param defaultCharacterDir\r
+        *            既定のディレクトリ\r
+        * @return 選択したディレクトリ、キャンセルした場合はnull\r
+        */\r
        public static File getCharacterDir(File defaultCharacterDir) {\r
                RecentCharactersDir recentChars;\r
                try {\r
index aa9e3b7..72b4cef 100644 (file)
@@ -2,8 +2,16 @@ package charactermanaj.util;
 \r
 import java.io.File;\r
 \r
+/**\r
+ * 起動時に選択するキャラクターデータを格納する親ディレクトリ\r
+ * \r
+ * @author seraphy\r
+ */\r
 public class DirectoryConfig {\r
 \r
+       /**\r
+        * シングルトン\r
+        */\r
        private static final DirectoryConfig inst = new DirectoryConfig();\r
        \r
        private File charactersDir;\r
@@ -12,6 +20,12 @@ public class DirectoryConfig {
                super();\r
        }\r
        \r
+       /**\r
+        * キャラクターデータを格納するディレクトリを取得する.<br>\r
+        * まだ未設定であればIllegalStateException例外が発生する.<br>\r
+        * \r
+        * @return キャラクターデータを格納するディレクトリ\r
+        */\r
        public File getCharactersDir() {\r
                if (charactersDir == null) {\r
                        throw new IllegalStateException("キャラクターディレクトリが設定されていません.");\r
@@ -26,5 +40,4 @@ public class DirectoryConfig {
        public static DirectoryConfig getInstance() {\r
                return inst;\r
        }\r
-       \r
 }\r