OSDN Git Service

ニコニコ動画Webアクセスを別クラスに委譲.
authoryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Sat, 5 Jan 2008 09:20:42 +0000 (09:20 +0000)
committeryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Sat, 5 Jan 2008 09:20:42 +0000 (09:20 +0000)
git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser@14 bdf3b611-c98c-6041-8292-703d9c9adbe7

src/nicobrowser/MainWindow.java
src/nicobrowser/NicoHttpClient.java [new file with mode: 0644]
test/nicobrowser/NicoHttpClientTest.java [moved from test/nicobrowser/MainWindowTest.java with 59% similarity]

index 468839d..643381c 100644 (file)
@@ -1,3 +1,4 @@
+/*$Id$*/
 /*
  * MainWindow.java
  *
@@ -5,13 +6,8 @@
  */
 package nicobrowser;
 
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.swing.table.DefaultTableModel;
 import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.cookie.CookiePolicy;
-import org.apache.commons.httpclient.methods.PostMethod;
 
 /**
  *
@@ -19,15 +15,12 @@ import org.apache.commons.httpclient.methods.PostMethod;
  */
 public class MainWindow extends javax.swing.JFrame {
 
-    static final String LOGIN_PAGE = "https://secure.nicovideo.jp/secure/login?site=niconico";
     private static final String COLUMN_NAMES[] = {"サムネイル", "タイトル", "説明", "投稿日"};
     private DefaultTableModel tableModel = new DefaultTableModel(COLUMN_NAMES, 0);
-    HttpClient httpClient;
 
     /** Creates new form MainWindow */
     public MainWindow() {
         initComponents();
-        httpClient = new HttpClient();
     }
 
     /** This method is called from within the constructor to
@@ -128,7 +121,7 @@ public class MainWindow extends javax.swing.JFrame {
             //TODO エラー通知.
             return;
         }
-        login(mail, password);
+        NicoHttpClient.getInstance().login(mail, password);
     }//GEN-LAST:event_loadButtonActionPerformed
 
     /**
@@ -153,32 +146,5 @@ public class MainWindow extends javax.swing.JFrame {
     private javax.swing.JTextField passwordField;
     // End of variables declaration//GEN-END:variables
 
-    /**
-     * ニコニコ動画へログインする.
-     * @param mail ログイン識別子(登録メールアドレス).
-     * @param password パスワード.
-     * @return 認証がOKであればtrue.
-     */
-    public boolean login(String mail, String password) {
-        boolean auth = false;
-        PostMethod post = new PostMethod(LOGIN_PAGE);
-
-        try {
-            post.addParameter("mail", mail);
-            post.addParameter("password", password);
-            post.addParameter("next_url", "");
-            post.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
-            httpClient.executeMethod(post);
-
-            // ログイン可否の判定.
-            // x-niconico-authflagで判定できそうだったが必ず0になる...
-            // Set-Cookieがあればログインできたとみなしているが,あまりよろしくないかも.
-            auth = (null != post.getResponseHeader("Set-Cookie")) ? true : false;
-        } catch (IOException ex) {
-            Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
-        } finally {
-            post.releaseConnection();
-        }
-        return auth;
-    }
+
 }
diff --git a/src/nicobrowser/NicoHttpClient.java b/src/nicobrowser/NicoHttpClient.java
new file mode 100644 (file)
index 0000000..4f38a5e
--- /dev/null
@@ -0,0 +1,61 @@
+/*$Id$*/
+package nicobrowser;
+
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.cookie.CookiePolicy;
+import org.apache.commons.httpclient.methods.PostMethod;
+
+/**
+ *
+ * @author yuki
+ */
+public class NicoHttpClient extends HttpClient {
+
+    static NicoHttpClient instance;
+    private static final String LOGIN_PAGE =
+            "https://secure.nicovideo.jp/secure/login?site=niconico";
+
+    private NicoHttpClient() {
+        super();
+        instance = this;
+    }
+
+    public static NicoHttpClient getInstance() {
+        if (instance == null) {
+            return new NicoHttpClient();
+        }
+        return instance;
+    }
+
+    /**
+     * ニコニコ動画へログインする.
+     * @param mail ログイン識別子(登録メールアドレス).
+     * @param password パスワード.
+     * @return 認証がOKであればtrue.
+     */
+    public boolean login(String mail, String password) {
+        boolean auth = false;
+        PostMethod post = new PostMethod(LOGIN_PAGE);
+
+        try {
+            post.addParameter("mail", mail);
+            post.addParameter("password", password);
+            post.addParameter("next_url", "");
+            post.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
+            executeMethod(post);
+
+            // ログイン可否の判定.
+            // x-niconico-authflagで判定できそうだったが必ず0になる...
+            // Set-Cookieがあればログインできたとみなしているが,あまりよろしくないかも.
+            auth = (null != post.getResponseHeader("Set-Cookie")) ? true : false;
+        } catch (IOException ex) {
+            Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            post.releaseConnection();
+        }
+        return auth;
+    }
+}
similarity index 59%
rename from test/nicobrowser/MainWindowTest.java
rename to test/nicobrowser/NicoHttpClientTest.java
index 5a0ceaf..0b61f64 100644 (file)
@@ -1,7 +1,4 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
+/*$Id$*/
 package nicobrowser;
 
 import org.junit.After;
@@ -15,9 +12,9 @@ import static org.junit.Assert.*;
  *
  * @author yuki
  */
-public class MainWindowTest {
+public class NicoHttpClientTest {
 
-    public MainWindowTest() {
+    public NicoHttpClientTest() {
     }
 
     @BeforeClass
@@ -37,12 +34,27 @@ public class MainWindowTest {
     }
 
     /**
-     * Test of login method, of class MainWindow.
+     * Test of getInstance method, of class NicoHttpClient.
+     */
+    @Test
+    public void getInstance() {
+        System.out.println("getInstance");
+        NicoHttpClient expResult = null;
+        NicoHttpClient result = NicoHttpClient.getInstance();
+        assertNotNull(result);
+
+        // 2回目でも同じインスタンスが返る.
+        NicoHttpClient instance = NicoHttpClient.getInstance();
+        assertEquals(result, instance);
+    }
+
+    /**
+     * Test of login method, of class NicoHttpClient.
      */
     @Test
     public void login() {
         System.out.println("login");
-        MainWindow instance = new MainWindow();
+        NicoHttpClient instance = NicoHttpClient.getInstance();
 
         // ログイン失敗ケース
         String mail = "test@example.com";