Develop and Download Open Source Software

Browse CVS Repository

Contents of /mixedmark/PSC/TODO

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.19 - (show annotations) (download)
Thu Apr 26 21:14:00 2007 UTC (16 years, 11 months ago) by ksaito0717
Branch: MAIN
CVS Tags: HEAD
Changes since 1.18: +2 -0 lines
fix.

1 TODO
2
3 でかいファイルをgetした後のisFileとかisDirectoryとかのリクエストが
4 失敗するみたい。何回かsyncすれば問題ないが、プログラム的には問題
5 あり。
6
7 syncでlocalのフォルダが削除されるべき時に
8 削除されない.
9
10 putとかgetでExceptionが発生すると,何のファイルでエラーなのか
11 わからないので,表示するようにする.
12
13 大量にデータが保存されているフォルダの中に,さらに
14 新しいフォルダを付け加えるという作業を行う場合
15 その付け加えるフォルダの内容が少ないものであったとしても
16 大量の同期が必要になるので,ちょっと工夫するべし.
17
18 サーバで,状態の変更が起った時もgetが実行されてしまうのだが,
19 これはいいことなのかどうか?
20
21 以下2点は変更してみたが,要チェック
22
23 フォルダはコンフリクト関係ないので無視するようにするべし.
24
25 コンフリクトの表示の後,もう一度Syncするとコンフリクトが無視
26 されるっぽい.要調査.
27
28 ----------------------------------------------------------------------
29
30 * <http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/net/http-auth.html>
31
32 以前にやってみたんだっけ?もういちど試してみるべし.それと
33 これを使えばKerberosも行けるのか?
34
35 * <http://x68000.q-e-d.net/~68user/net/sample/HttpClientHttpURLConnectionAuth.java>
36
37 import java.net.*;
38 import java.io.*;
39 import java.util.*;
40
41 /**
42 * Java HTTP クライアントサンプル - HttpURLConnection + 認証編 -
43 *
44 * @author 68user http://X68000.q-e-d.net/~68user/
45 */
46 public class HttpClientHttpURLConnectionAuth {
47 public static void main(String[] args)
48 throws MalformedURLException, ProtocolException, IOException {
49
50 URL url = new URL("http://X68000.q-e-d.net/~68user/net/sample/http-auth/secret.html");
51 //URL url = new URL("http://X68000.q-e-d.net/~68user/net/sample/http-auth-digest/secret.html");
52 String username = "hoge";
53 String password = "fuga";
54
55 HttpAuthenticator http_authenticator = new HttpAuthenticator(username, password);
56 Authenticator.setDefault(http_authenticator);
57
58 HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
59 urlconn.setRequestMethod("GET");
60 urlconn.setInstanceFollowRedirects(false);
61 urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
62
63 urlconn.connect();
64
65 Map headers = urlconn.getHeaderFields();
66 Iterator it = headers.keySet().iterator();
67 System.out.println("レスポンスヘッダ:");
68 while (it.hasNext()){
69 String key= (String)it.next();
70 System.out.println(" " + key + ": " + headers.get(key));
71 }
72
73 System.out.println
74 ("レスポンスコード[" + urlconn.getResponseCode() + "] " +
75 "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
76 System.out.println
77 ("プロンプト(realm)[" + http_authenticator.myGetRequestingPrompt() + "]");
78 System.out.println("\n---- ボディ ----");
79
80
81 BufferedReader reader =
82 new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
83
84 while (true){
85 String line = reader.readLine();
86 if ( line == null ){
87 break;
88 }
89 System.out.println(line);
90 }
91
92 reader.close();
93 urlconn.disconnect();
94 }
95 }
96
97 class HttpAuthenticator extends Authenticator {
98 private String username;
99 private String password;
100 public HttpAuthenticator(String username, String password){
101 this.username = username;
102 this.password = password;
103 }
104 protected PasswordAuthentication getPasswordAuthentication(){
105 return new
106 PasswordAuthentication(username, password.toCharArray());
107 }
108 public String myGetRequestingPrompt(){
109 return super.getRequestingPrompt();
110 }
111 }
112
113 ----------------------------------------------------------------------
114
115 以下、ファイルとフォルダの両方をまとめて対象と呼ぶことにする。
116
117 entriesファイルに保存されている対象の状態と時間の意味
118 SYNCED : 同期。以前同期を取ったことがある。
119 時間は同期した時間。
120 ADDED : 追加。クライアントで追加されており、まだサーバと同期してない。
121 時間はaddした時間
122 REMOVED : 削除。クライアントで削除されており、まだサーバと同期してない。
123 時間はremoveした時間
124 CONFLICT : 衝突。同期を取ろうとしたが、衝突したので保留している。
125 時間は同期しようとした時間
126 ABANDON : 放棄。ローカルの対象をサーバの対象で上書きしたい状態。
127 この状態はconflictが検出された後に、それをどのように
128 解決するかユーザが指定する時に設定される。
129 時間はユーザがabandonに指定した時間。
130 FORCED : 強制。サーバの対象をローカルの対象で上書きしたい状態。
131 この状態はconflictが検出された後に、それをどのように
132 解決するかユーザが指定する時に設定される。
133 時間はユーザがforcedに指定した時間。
134 NONE : これは実際にはentriesファイルに記述される状態ではなく、
135 記述されていないということを表す状態。
136 補足:
137 クライアントでは、削除されて同期された対象は完全に消滅する。
138 つまり、状態というものも存在せず(noneになる)、以前その対象が
139 存在していた記録もなくなってしまう。ただ、削除された対象の名前と
140 削除された時のタイムスタンプがサーバには保存されている。しかし、
141 サーバではクライアントで指定できるような状態は保持していない
142 (必要ないから)。
143
144 同期のプロセスを制御するためのフラグ
145 recursiveF : 再帰的に同期させる
146 デフォルトはfalse
147 addF : addされていないファイルを探してaddする
148 デフォルトはfalse
149 removeF : removeされていないファイルを探してremoveする
150 デフォルトはfalse
151 prudenceF : 慎重を期して、削除は行なわないことにする。
152 デフォルトはfalse
153 confirmF : 削除する場合にはユーザに確認をする
154 デフォルトはtrue
155
156 syncのプロセス
157 u1: オプションを解析してフラグを設定
158 設定するオプション:recursiveF,addF,removeF,prudenceF
159 u2: カレントフォルダがcheckoutされたフォルダかチェック。
160 そうなってなければエラーを表示して終了。
161 u3: カレントフォルダに対応するフォルダがサーバにあるか
162 チェック。なければエラーを表示して終了。
163 u4: カレントフォルダのLFile(lf)とそれに対応したPFile(pf)を
164 作り、その2つに関連する全ての対象のリストを生成する。
165 (関連する全てのリストには、サーバに記録されて
166 いる以前削除されたファイルも含まれる。)
167 そのリストの一つ一つについて新しいlf,pfを作成し
168 o1を呼出す。
169 u5: 終了
170
171 o1: スキップファイルならなにもせず正常終了
172 o2: lf.status==nullなのに存在していてaddF==true
173 ならばlfをaddする
174 o3: lf.statusがaddedかsyncedなのに存在しなくてremoveF==true
175 ならばlfをremovedにする
176 o4: 状況に応じて次の操作のどれか一つをする。
177 ・コンフリクトの場合は表示してスキップ
178 ・両方とも削除されているのでなにもしない
179 ・タイプ不一致で警告表示
180 ・サーバ側の削除+entryからの削除
181 ・クライアント側の削除+entryからの削除
182 ・FORCEDなのでput
183 ・ABANDONなのでget
184 ・conflictの処理
185 ・putかget
186 ・フォルダ同期(u4と同じ)
187 ・その他はなにもしない(フラグの設定で操作をスキップする場合など)
188
189 ***** 以下未完 *****
190
191 updateのプロセス
192 u0: 同期すべき対象がユーザから指定される。
193 対象が省略された場合は、カレントフォルダ。
194 対象は、ファイルでもフォルダでも可。
195 対象は複数指定することが可能。
196 対象はカレントフォルダ直下の物しか指定できない。
197 u1: recursiveF = true
198 addF = false
199 removeF = false
200 prudenceF = false
201 u2: カレントフォルダがcheckoutされたフォルダかチェック。
202 そうなってなければエラーを表示して終了。
203 u3: カレントフォルダに対応するフォルダがサーバにあるか
204 チェック。なければエラーを表示して終了。
205 u4: ユーザから指定された対象を一個ずつループ {
206 その対象のLFile(lf)とそれに対応したPFile(pf)を作り
207 o1へ
208 }
209 ループが終了したらおしまい
210
211 o1:

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26