1 package charactermanaj.util;
\r
5 import java.util.UUID;
\r
9 * ユーザーデータの保存先を生成するファクトリ
\r
12 public class UserDataFactory {
\r
17 private static UserDataFactory inst = new UserDataFactory();
\r
23 public static UserDataFactory getInstance() {
\r
30 private UserDataFactory() {
\r
35 * 拡張子を含むファイル名を指定し、そのファイルが保存されるべきユーザディレクトリを判定して返す.<br>
\r
36 * nullまたは空の場合、もしくは拡張子がない場合はユーザディレクトリのルートを返します.<br>
\r
37 * フォルダがなければ作成されます.<br>
\r
38 * @param name ファイル名、もしくはnull
\r
39 * @return ファィルの拡張子に対応したデータ保存先フォルダ
\r
41 public File getSpecialDataDir(String name) {
\r
42 File userDataDir = ConfigurationDirUtilities.getUserDataDir();
\r
44 if (name != null && name.length() > 0) {
\r
45 int pos = name.lastIndexOf('.');
\r
47 String ext = name.substring(pos + 1);
\r
48 if (ext.length() > 0) {
\r
49 if ("ser".equals(ext)) {
\r
50 userDataDir = new File(userDataDir, "caches");
\r
52 userDataDir = new File(userDataDir, ext + "s");
\r
59 if (!userDataDir.exists()) {
\r
60 userDataDir.mkdirs();
\r
67 * 指定した名前のユーザーデータ保存先を作成する.
\r
71 public UserData getUserData(String name) {
\r
72 if (name == null || name.trim().length() == 0) {
\r
73 throw new IllegalArgumentException();
\r
75 return new FileUserData(new File(getSpecialDataDir(name), name));
\r
79 * docBaseごとにのハッシュ値を文字列表現化したプレフィックスをもつユーザーデータ保存先を作成する.<br>
\r
80 * docBaseのURLの圧縮を目的としており、等しいdocBaseは等しいプレフィックスによるようにしている.(暗号化が目的ではない).<br>
\r
81 * ハッシュ値はmd5の5バイトで生成されるため、nameを工夫して衝突の確率を軽減するか衝突しても問題ないように考慮することが望ましい.<Br>
\r
82 * @param docBase URL、null可
\r
86 public UserData getMangledNamedUserData(URI docBase, String name) {
\r
87 String prefix = getMangledNamedPrefix(docBase);
\r
88 return getUserData(prefix + "-" + name);
\r
92 * docBaseごとにのハッシュ値を文字列表現化したプレフィックスを返す.<br>
\r
93 * docBaseがnullの場合は空文字を返す.
\r
94 * @param docBase URL、null可
\r
95 * @return ハッシュ値の文字列表現
\r
97 public String getMangledNamedPrefix(URI docBase) {
\r
99 if (docBase == null) {
\r
102 docBaseStr = docBase.toString();
\r
104 String prefix = UUID.nameUUIDFromBytes(docBaseStr.getBytes()).toString();
\r