* 隠れコンストラクタ。
*/
private ConfigFile(){
- super();
+ assert false;
return;
}
/**
* 暗黙的な設定格納ディレクトリを返す。
- * 起動元JARファイルと同じディレクトリに、
+ *
+ * <ul>
+ *
+ * <li>起動元JARファイルと同じディレクトリに、
* アクセス可能なディレクトリ"Jindolf"が
* すでに存在していればそれを返す。
- * 起動元JARファイルおよび"Jindolf"が発見できなければ、
+ *
+ * <li>起動元JARファイルおよび"Jindolf"が発見できなければ、
* MacOSX環境の場合"~/Library/Application Support/Jindolf/"を返す。
* Windows環境の場合"%USERPROFILE%\Jindolf\"を返す。
- * それ以外の環境(Linux,etc?)の場合"~/.jindolf/"を返す。
- * 返すディレクトリが存在しているか否か、
+ *
+ * <li>それ以外の環境(Linux,etc?)の場合"~/.jindolf/"を返す。
+ *
+ * </ul>
+ *
+ * <p>返すディレクトリが存在しているか否か、
* アクセス可能か否かは呼び出し元で判断せよ。
+ *
* @return 設定格納ディレクトリ
*/
public static File getImplicitConfigDirectory(){
/**
* まだ存在しない設定格納ディレクトリを新規に作成する。
- * エラーがあればダイアログ提示とともにVM終了する。
+ *
+ * <p>エラーがあればダイアログ提示とともにVM終了する。
+ *
* @param confPath 設定格納ディレクトリ
* @param isImplicitPath ディレクトリが暗黙的に指定されたものならtrue。
* @return 新規に作成した設定格納ディレクトリ
* @throws IllegalArgumentException すでにそのディレクトリは存在する。
*/
public static File buildConfigDirectory(File confPath,
- boolean isImplicitPath )
+ boolean isImplicitPath )
throws IllegalArgumentException{
if(confPath.exists()) throw new IllegalArgumentException();
/**
* 設定ディレクトリ操作の
* 共通エラーメッセージ確認ダイアログを表示する。
- * 閉じるまで待つ。
+ *
+ * <p>閉じるまで待つ。
+ *
* @param seq メッセージ
*/
private static void showErrorMessage(CharSequence seq){
/**
* 設定ディレクトリ操作の
* 共通エラーメッセージ確認ダイアログを表示する。
- * 閉じるまで待つ。
+ *
+ * <p>閉じるまで待つ。
+ *
* @param seq メッセージ
*/
private static void showWarnMessage(CharSequence seq){
/**
* 設定ディレクトリ操作の
* 情報提示メッセージ確認ダイアログを表示する。
- * 閉じるまで待つ。
+ *
+ * <p>閉じるまで待つ。
+ *
* @param seq メッセージ
*/
private static void showInfoMessage(CharSequence seq){
/**
* ダイアログを表示し、閉じられるまで待つ。
+ *
* @param pane ダイアログの元となるペイン
*/
private static void showDialog(JOptionPane pane){
/**
* 設定ディレクトリのルートファイルシステムもしくはドライブレターに
* アクセスできないエラーをダイアログに提示し、VM終了する。
+ *
* @param path 設定ディレクトリ
* @param preMessage メッセージ前半
*/
/**
* 設定ディレクトリの祖先に書き込めないエラーをダイアログで提示し、
* VM終了する。
+ *
* @param existsAncestor 存在するもっとも近い祖先
* @param preMessage メッセージ前半
*/
/**
* 設定ディレクトリを新規に生成してよいかダイアログで問い合わせる。
+ *
* @param existsAncestor 存在するもっとも近い祖先
* @param preMessage メッセージ前半
* @return 生成してよいと指示があればtrue
/**
* 設定ディレクトリが生成できないエラーをダイアログで提示し、
* VM終了する。
+ *
* @param path 生成できなかったディレクトリ
*/
private static void abortCantBuildConfigDir(File path){
/**
* 設定ディレクトリへアクセスできないエラーをダイアログで提示し、
* VM終了する。
+ *
* @param path アクセスできないディレクトリ
*/
private static void abortCantAccessConfigDir(File path){
/**
* ファイルに書き込めないエラーをダイアログで提示し、VM終了する。
+ *
* @param file 書き込めなかったファイル
*/
private static void abortCantWrite(File file){
/**
* 指定されたディレクトリにREADMEファイルを生成する。
- * 生成できなければダイアログ表示とともにVM終了する。
+ *
+ * <p>生成できなければダイアログ表示とともにVM終了する。
+ *
* @param path READMEの格納ディレクトリ
*/
private static void touchReadme(File path){
/**
* 設定ディレクトリがアクセス可能でなければ
* エラーダイアログを出してVM終了する。
+ *
* @param confDir 設定ディレクトリ
*/
public static void checkAccessibility(File confDir){
/**
* センタリングされたファイル名表示のHTML表記を出力する。
+ *
* @param path ファイル
* @return HTML表記
*/
/**
* ロックエラーダイアログの表示。
- * 呼び出しから戻ってもまだロックオブジェクトが
+ *
+ * <p>呼び出しから戻ってもまだロックオブジェクトが
* ロックファイルのオーナーでない場合、
* 今後設定ディレクトリは一切使わずに起動を続行するものとする。
- * ロックファイルの強制解除に失敗した場合はVM終了する。
+ *
+ * <p>ロックファイルの強制解除に失敗した場合はVM終了する。
+ *
* @param lock エラーを起こしたロック
*/
public static void confirmLockError(InterVMLock lock){
private boolean useStoreFile;
private boolean isImplicitPath;
- private File configPath;
+ private File configDir;
/**
* コンストラクタ。
- * @param useStoreFile 設定ディレクトリへの永続化機能を使うならtrue
- * @param configPath 設定ディレクトリ。
- * 設定ディレクトリを使わない場合は無視され、nullとして扱われる。
- */
- public ConfigStore(boolean useStoreFile, File configPath ){
- this(useStoreFile, true, configPath);
- return;
- }
-
- /**
- * コンストラクタ。
- * @param useStoreFile 設定ディレクトリへの永続化機能を使うならtrue
- * @param isImplicitPath コマンドラインで指定されたディレクトリならfalse
- * @param configPath 設定ディレクトリ。
- * 設定ディレクトリを使わない場合は無視され、nullとして扱われる。
+ *
+ * @param useStoreFile 設定ディレクトリ内への
+ * セーブデータ機能を使うならtrue
+ * @param isImplicitPath 起動コマンドラインから指定された
+ * 設定ディレクトリの場合false
+ * @param configDirPath 設定ディレクトリ。
+ * 設定ディレクトリを使わない場合は無視される。
*/
public ConfigStore(boolean useStoreFile,
- boolean isImplicitPath,
- File configPath ){
+ boolean isImplicitPath,
+ File configDirPath ){
super();
this.useStoreFile = useStoreFile;
if(this.useStoreFile){
this.isImplicitPath = isImplicitPath;
+ this.configDir = configDirPath;
}else{
this.isImplicitPath = true;
- }
-
- if(this.useStoreFile){
- this.configPath = configPath;
- }else{
- this.configPath = null;
+ this.configDir = null;
}
return;
/**
* 設定ディレクトリを使うか否か判定する。
+ *
* @return 設定ディレクトリを使うならtrue。
*/
public boolean useStoreFile(){
/**
* 設定ディレクトリを返す。
+ *
* @return 設定ディレクトリ。設定ディレクトリを使わない場合はnull
*/
- public File getConfigPath(){
- File result;
- if(this.useStoreFile) result = this.configPath;
- else result = null;
- return result;
+ public File getConfigDir(){
+ return this.configDir;
}
/**
public void prepareConfigDir(){
if( ! this.useStoreFile ) return;
- if( ! this.configPath.exists() ){
+ if( ! this.configDir.exists() ){
File created =
- ConfigFile.buildConfigDirectory(this.configPath,
+ ConfigFile.buildConfigDirectory(this.configDir,
this.isImplicitPath );
ConfigFile.checkAccessibility(created);
}else{
- ConfigFile.checkAccessibility(this.configPath);
+ ConfigFile.checkAccessibility(this.configDir);
}
return;
/**
* ロックファイルの取得を試みる。
+ *
+ * <p>ロックに失敗したが処理を続行する場合、
+ * 設定ディレクトリは使わないものとして続行する。
*/
public void tryLock(){
if( ! this.useStoreFile ) return;
- File lockFile = new File(this.configPath, LOCKFILE);
+ File lockFile = new File(this.configDir, LOCKFILE);
InterVMLock lock = new InterVMLock(lockFile);
lock.tryLock();
ConfigFile.confirmLockError(lock);
if( ! lock.isFileOwner() ){
this.useStoreFile = false;
- this.configPath = null;
+ this.isImplicitPath = true;
+ this.configDir = null;
}
}
/**
* 設定ディレクトリ上のOBJECT型JSONファイルを読み込む。
+ *
* @param file JSONファイルの相対パス。
* @return JSON object。
* 設定ディレクトリを使わない設定、
/**
* 設定ディレクトリ上のJSONファイルを読み込む。
+ *
* @param file JSONファイルの相対パス
* @return JSON objectまたはarray。
* 設定ディレクトリを使わない設定、
if(file.isAbsolute()){
absFile = file;
}else{
- if(this.configPath == null) return null;
- absFile = new File(this.configPath, file.getPath());
+ if(this.configDir == null) return null;
+ absFile = new File(this.configDir, file.getPath());
if( ! absFile.exists() ) return null;
if( ! absFile.isAbsolute() ) return null;
}
/**
* 文字ストリーム上のJSONデータを読み込む。
+ *
* @param reader 文字ストリーム
* @return JSON objectまたはarray。
* @throws IOException 入力エラー
/**
* 設定ディレクトリ上のJSONファイルに書き込む。
+ *
* @param file JSONファイルの相対パス
* @param root JSON objectまたはarray
* @return 正しくセーブが行われればtrue。
if( ! this.useStoreFile ) return false;
// TODO テンポラリファイルを用いたより安全なファイル更新
- File absFile = new File(this.configPath, file.getPath());
+ File absFile = new File(this.configDir, file.getPath());
String absPath = absFile.getPath();
absFile.delete();
/**
* 文字ストリームにJSONデータを書き込む。
+ *
* @param writer 文字ストリーム出力
* @param root JSON objectまたはarray
* @throws IOException 出力エラー
/**
* 検索履歴ファイルを読み込む。
+ *
* @return 履歴データ。履歴を読まないもしくは読めない場合はnull
*/
public JsObject loadHistoryConfig(){
/**
* 原稿ファイルを読み込む。
+ *
* @return 原稿データ。原稿を読まないもしくは読めない場合はnull
*/
public JsObject loadDraftConfig(){
/**
* ネットワーク設定ファイルを読み込む。
+ *
* @return ネットワーク設定データ。
* 設定を読まないもしくは読めない場合はnull
*/
/**
* 台詞表示設定ファイルを読み込む。
+ *
* @return 台詞表示設定データ。
* 設定を読まないもしくは読めない場合はnull
*/
/**
* 検索履歴ファイルに書き込む。
+ *
* @param root 履歴データ
* @return 書き込まなかったもしくは書き込めなかった場合はfalse
*/
/**
* 原稿ファイルに書き込む。
+ *
* @param root 原稿データ
* @return 書き込まなかったもしくは書き込めなかった場合はfalse
*/
/**
* ネットワーク設定ファイルに書き込む。
+ *
* @param root ネットワーク設定
* @return 書き込まなかったもしくは書き込めなかった場合はfalse
*/
/**
* 台詞表示設定ファイルに書き込む。
+ *
* @param root 台詞表示設定
* @return 書き込まなかったもしくは書き込めなかった場合はfalse
*/