OSDN Git Service

svnツリーの再構成
authoryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Tue, 5 May 2009 09:04:03 +0000 (09:04 +0000)
committeryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Tue, 5 May 2009 09:04:03 +0000 (09:04 +0000)
git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser/trunk@105 bdf3b611-c98c-6041-8292-703d9c9adbe7

15 files changed:
build.xml [new file with mode: 0644]
manifest.mf [new file with mode: 0644]
master.jnlp [new file with mode: 0644]
nbproject/build-impl.xml [new file with mode: 0644]
nbproject/configs/JWS_generated.properties [new file with mode: 0644]
nbproject/genfiles.properties [new file with mode: 0644]
nbproject/jnlp-impl.xml [new file with mode: 0644]
nbproject/project.properties [new file with mode: 0644]
nbproject/project.xml [new file with mode: 0644]
src/nicobrowser/MainWindow.form [new file with mode: 0644]
src/nicobrowser/MainWindow.java [new file with mode: 0644]
src/nicobrowser/NicoContent.java [new file with mode: 0644]
src/nicobrowser/NicoHttpClient.java [new file with mode: 0644]
src/nicobrowser/NicoTableModel.java [new file with mode: 0644]
test/nicobrowser/NicoHttpClientTest.java [new file with mode: 0644]

diff --git a/build.xml b/build.xml
new file mode 100644 (file)
index 0000000..42b57c8
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!-- You may freely edit this file. See commented blocks below for -->\r
+<!-- some examples of how to customize the build. -->\r
+<!-- (If you delete it and reopen the project it will be recreated.) -->\r
+<project name="NicoBrowser" default="default" basedir=".">\r
+    <description>Builds, tests, and runs the project NicoBrowser.</description>\r
+    <import file="nbproject/build-impl.xml"/>\r
+    <!--\r
+\r
+    There exist several targets which are by default empty and which can be \r
+    used for execution of your tasks. These targets are usually executed \r
+    before and after some main targets. They are: \r
+\r
+      -pre-init:                 called before initialization of project properties\r
+      -post-init:                called after initialization of project properties\r
+      -pre-compile:              called before javac compilation\r
+      -post-compile:             called after javac compilation\r
+      -pre-compile-single:       called before javac compilation of single file\r
+      -post-compile-single:      called after javac compilation of single file\r
+      -pre-compile-test:         called before javac compilation of JUnit tests\r
+      -post-compile-test:        called after javac compilation of JUnit tests\r
+      -pre-compile-test-single:  called before javac compilation of single JUnit test\r
+      -post-compile-test-single: called after javac compilation of single JUunit test\r
+      -pre-jar:                  called before JAR building\r
+      -post-jar:                 called after JAR building\r
+      -post-clean:               called after cleaning build products\r
+\r
+    (Targets beginning with '-' are not intended to be called on their own.)\r
+\r
+    Example of inserting an obfuscator after compilation could look like this:\r
+\r
+        <target name="-post-compile">\r
+            <obfuscate>\r
+                <fileset dir="${build.classes.dir}"/>\r
+            </obfuscate>\r
+        </target>\r
+\r
+    For list of available properties check the imported \r
+    nbproject/build-impl.xml file. \r
+\r
+\r
+    Another way to customize the build is by overriding existing main targets.\r
+    The targets of interest are: \r
+\r
+      -init-macrodef-javac:     defines macro for javac compilation\r
+      -init-macrodef-junit:     defines macro for junit execution\r
+      -init-macrodef-debug:     defines macro for class debugging\r
+      -init-macrodef-java:      defines macro for class execution\r
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)\r
+      -do-jar-without-manifest: JAR building (if you are not using a manifest)\r
+      run:                      execution of project \r
+      -javadoc-build:           Javadoc generation\r
+      test-report:              JUnit report generation\r
+\r
+    An example of overriding the target for project execution could look like this:\r
+\r
+        <target name="run" depends="NicoBrowser-impl.jar">\r
+            <exec dir="bin" executable="launcher.exe">\r
+                <arg file="${dist.jar}"/>\r
+            </exec>\r
+        </target>\r
+\r
+    Notice that the overridden target depends on the jar target and not only on \r
+    the compile target as the regular run target does. Again, for a list of available \r
+    properties which you can use, check the target you are overriding in the\r
+    nbproject/build-impl.xml file. \r
+\r
+    -->\r
+</project>\r
diff --git a/manifest.mf b/manifest.mf
new file mode 100644 (file)
index 0000000..1574df4
--- /dev/null
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0\r
+X-COMMENT: Main-Class will be added automatically by build\r
+\r
diff --git a/master.jnlp b/master.jnlp
new file mode 100644 (file)
index 0000000..4bd96d2
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jnlp spec="1.0+" codebase="${jnlp.codebase}" href="launch.jnlp">
+    <information>
+        <title>${APPLICATION.TITLE}</title>
+        <vendor>${APPLICATION.VENDOR}</vendor>
+        <description>${APPLICATION.DESC}</description>
+        <description kind="short">${APPLICATION.DESC.SHORT}</description>
+        <homepage href="${APPLICATION.HOMEPAGE}"/>
+<!--${JNLP.ICONS}-->
+<!--${JNLP.OFFLINE.ALLOWED}-->
+    </information>
+<!--${JNLP.SECURITY}-->
+    <resources>
+<!--${JNLP.RESOURCES.RUNTIME}-->
+<!--${JNLP.RESOURCES.MAIN.JAR}-->
+<!--${JNLP.RESOURCES.JARS}-->
+    </resources>
+    <application-desc main-class="${jnlp.main.class}">
+<!--${JNLP.APPLICATION.ARGS}-->
+    </application-desc>
+</jnlp>
diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
new file mode 100644 (file)
index 0000000..029ef38
--- /dev/null
@@ -0,0 +1,628 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+*** GENERATED FROM project.xml - DO NOT EDIT  ***\r
+***         EDIT ../build.xml INSTEAD         ***\r
+\r
+For the purpose of easier reading the script\r
+is divided into following sections:\r
+\r
+  - initialization\r
+  - compilation\r
+  - jar\r
+  - execution\r
+  - debugging\r
+  - javadoc\r
+  - junit compilation\r
+  - junit execution\r
+  - junit debugging\r
+  - applet\r
+  - cleanup\r
+\r
+        -->\r
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="NicoBrowser-impl">\r
+    <import file="jnlp-impl.xml"/>\r
+    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>\r
+    <!-- \r
+                ======================\r
+                INITIALIZATION SECTION \r
+                ======================\r
+            -->\r
+    <target name="-pre-init">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="-pre-init" name="-init-private">\r
+        <property file="nbproject/private/config.properties"/>\r
+        <property file="nbproject/private/configs/${config}.properties"/>\r
+        <property file="nbproject/private/private.properties"/>\r
+    </target>\r
+    <target depends="-pre-init,-init-private" name="-init-user">\r
+        <property file="${user.properties.file}"/>\r
+        <!-- The two properties below are usually overridden -->\r
+        <!-- by the active platform. Just a fallback. -->\r
+        <property name="default.javac.source" value="1.4"/>\r
+        <property name="default.javac.target" value="1.4"/>\r
+    </target>\r
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">\r
+        <property file="nbproject/configs/${config}.properties"/>\r
+        <property file="nbproject/project.properties"/>\r
+    </target>\r
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">\r
+        <available file="${manifest.file}" property="manifest.available"/>\r
+        <condition property="manifest.available+main.class">\r
+            <and>\r
+                <isset property="manifest.available"/>\r
+                <isset property="main.class"/>\r
+                <not>\r
+                    <equals arg1="${main.class}" arg2="" trim="true"/>\r
+                </not>\r
+            </and>\r
+        </condition>\r
+        <condition property="manifest.available+main.class+mkdist.available">\r
+            <and>\r
+                <istrue value="${manifest.available+main.class}"/>\r
+                <isset property="libs.CopyLibs.classpath"/>\r
+            </and>\r
+        </condition>\r
+        <condition property="have.tests">\r
+            <or>\r
+                <available file="${test.src.dir}"/>\r
+            </or>\r
+        </condition>\r
+        <condition property="have.sources">\r
+            <or>\r
+                <available file="${src.dir}"/>\r
+            </or>\r
+        </condition>\r
+        <condition property="netbeans.home+have.tests">\r
+            <and>\r
+                <isset property="netbeans.home"/>\r
+                <isset property="have.tests"/>\r
+            </and>\r
+        </condition>\r
+        <condition property="no.javadoc.preview">\r
+            <and>\r
+                <isset property="javadoc.preview"/>\r
+                <isfalse value="${javadoc.preview}"/>\r
+            </and>\r
+        </condition>\r
+        <property name="run.jvmargs" value=""/>\r
+        <property name="javac.compilerargs" value=""/>\r
+        <property name="work.dir" value="${basedir}"/>\r
+        <condition property="no.deps">\r
+            <and>\r
+                <istrue value="${no.dependencies}"/>\r
+            </and>\r
+        </condition>\r
+        <property name="javac.debug" value="true"/>\r
+        <property name="javadoc.preview" value="true"/>\r
+        <property name="application.args" value=""/>\r
+        <property name="source.encoding" value="${file.encoding}"/>\r
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">\r
+            <and>\r
+                <isset property="javadoc.encoding"/>\r
+                <not>\r
+                    <equals arg1="${javadoc.encoding}" arg2=""/>\r
+                </not>\r
+            </and>\r
+        </condition>\r
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>\r
+        <property name="includes" value="**"/>\r
+        <property name="excludes" value=""/>\r
+        <property name="do.depend" value="false"/>\r
+        <condition property="do.depend.true">\r
+            <istrue value="${do.depend}"/>\r
+        </condition>\r
+        <condition else="" property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'">\r
+            <and>\r
+                <isset property="jaxws.endorsed.dir"/>\r
+                <available file="nbproject/jaxws-build.xml"/>\r
+            </and>\r
+        </condition>\r
+    </target>\r
+    <target name="-post-init">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">\r
+        <fail unless="src.dir">Must set src.dir</fail>\r
+        <fail unless="test.src.dir">Must set test.src.dir</fail>\r
+        <fail unless="build.dir">Must set build.dir</fail>\r
+        <fail unless="dist.dir">Must set dist.dir</fail>\r
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>\r
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>\r
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>\r
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>\r
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>\r
+        <fail unless="dist.jar">Must set dist.jar</fail>\r
+    </target>\r
+    <target name="-init-macrodef-property">\r
+        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">\r
+            <attribute name="name"/>\r
+            <attribute name="value"/>\r
+            <sequential>\r
+                <property name="@{name}" value="${@{value}}"/>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-macrodef-javac">\r
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">\r
+            <attribute default="${src.dir}" name="srcdir"/>\r
+            <attribute default="${build.classes.dir}" name="destdir"/>\r
+            <attribute default="${javac.classpath}" name="classpath"/>\r
+            <attribute default="${includes}" name="includes"/>\r
+            <attribute default="${excludes}" name="excludes"/>\r
+            <attribute default="${javac.debug}" name="debug"/>\r
+            <attribute default="" name="sourcepath"/>\r
+            <element name="customize" optional="true"/>\r
+            <sequential>\r
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}">\r
+                    <classpath>\r
+                        <path path="@{classpath}"/>\r
+                    </classpath>\r
+                    <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/>\r
+                    <customize/>\r
+                </javac>\r
+            </sequential>\r
+        </macrodef>\r
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">\r
+            <attribute default="${src.dir}" name="srcdir"/>\r
+            <attribute default="${build.classes.dir}" name="destdir"/>\r
+            <attribute default="${javac.classpath}" name="classpath"/>\r
+            <sequential>\r
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">\r
+                    <classpath>\r
+                        <path path="@{classpath}"/>\r
+                    </classpath>\r
+                </depend>\r
+            </sequential>\r
+        </macrodef>\r
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">\r
+            <attribute default="${build.classes.dir}" name="destdir"/>\r
+            <sequential>\r
+                <fail unless="javac.includes">Must set javac.includes</fail>\r
+                <pathconvert pathsep="," property="javac.includes.binary">\r
+                    <path>\r
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>\r
+                    </path>\r
+                    <globmapper from="*.java" to="*.class"/>\r
+                </pathconvert>\r
+                <delete>\r
+                    <files includes="${javac.includes.binary}"/>\r
+                </delete>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-macrodef-junit">\r
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">\r
+            <attribute default="${includes}" name="includes"/>\r
+            <attribute default="${excludes}" name="excludes"/>\r
+            <attribute default="**" name="testincludes"/>\r
+            <sequential>\r
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">\r
+                    <batchtest todir="${build.test.results.dir}">\r
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">\r
+                            <filename name="@{testincludes}"/>\r
+                        </fileset>\r
+                    </batchtest>\r
+                    <classpath>\r
+                        <path path="${run.test.classpath}"/>\r
+                    </classpath>\r
+                    <syspropertyset>\r
+                        <propertyref prefix="test-sys-prop."/>\r
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>\r
+                    </syspropertyset>\r
+                    <formatter type="brief" usefile="false"/>\r
+                    <formatter type="xml"/>\r
+                    <jvmarg line="${run.jvmargs}"/>\r
+                </junit>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-macrodef-nbjpda">\r
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">\r
+            <attribute default="${main.class}" name="name"/>\r
+            <attribute default="${debug.classpath}" name="classpath"/>\r
+            <attribute default="" name="stopclassname"/>\r
+            <sequential>\r
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="dt_socket">\r
+                    <classpath>\r
+                        <path path="@{classpath}"/>\r
+                    </classpath>\r
+                </nbjpdastart>\r
+            </sequential>\r
+        </macrodef>\r
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">\r
+            <attribute default="${build.classes.dir}" name="dir"/>\r
+            <sequential>\r
+                <nbjpdareload>\r
+                    <fileset dir="@{dir}" includes="${fix.includes}*.class"/>\r
+                </nbjpdareload>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-debug-args">\r
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>\r
+        <condition property="have-jdk-older-than-1.4">\r
+            <or>\r
+                <contains string="${version-output}" substring="java version &quot;1.0"/>\r
+                <contains string="${version-output}" substring="java version &quot;1.1"/>\r
+                <contains string="${version-output}" substring="java version &quot;1.2"/>\r
+                <contains string="${version-output}" substring="java version &quot;1.3"/>\r
+            </or>\r
+        </condition>\r
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">\r
+            <istrue value="${have-jdk-older-than-1.4}"/>\r
+        </condition>\r
+    </target>\r
+    <target depends="-init-debug-args" name="-init-macrodef-debug">\r
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">\r
+            <attribute default="${main.class}" name="classname"/>\r
+            <attribute default="${debug.classpath}" name="classpath"/>\r
+            <element name="customize" optional="true"/>\r
+            <sequential>\r
+                <java classname="@{classname}" dir="${work.dir}" fork="true">\r
+                    <jvmarg line="${debug-args-line}"/>\r
+                    <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>\r
+                    <jvmarg line="${run.jvmargs}"/>\r
+                    <classpath>\r
+                        <path path="@{classpath}"/>\r
+                    </classpath>\r
+                    <syspropertyset>\r
+                        <propertyref prefix="run-sys-prop."/>\r
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>\r
+                    </syspropertyset>\r
+                    <customize/>\r
+                </java>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-macrodef-java">\r
+        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">\r
+            <attribute default="${main.class}" name="classname"/>\r
+            <element name="customize" optional="true"/>\r
+            <sequential>\r
+                <java classname="@{classname}" dir="${work.dir}" fork="true">\r
+                    <jvmarg line="${run.jvmargs}"/>\r
+                    <classpath>\r
+                        <path path="${run.classpath}"/>\r
+                    </classpath>\r
+                    <syspropertyset>\r
+                        <propertyref prefix="run-sys-prop."/>\r
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>\r
+                    </syspropertyset>\r
+                    <customize/>\r
+                </java>\r
+            </sequential>\r
+        </macrodef>\r
+    </target>\r
+    <target name="-init-presetdef-jar">\r
+        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">\r
+            <jar compress="${jar.compress}" jarfile="${dist.jar}">\r
+                <j2seproject1:fileset dir="${build.classes.dir}"/>\r
+            </jar>\r
+        </presetdef>\r
+    </target>\r
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/>\r
+    <!--\r
+                ===================\r
+                COMPILATION SECTION\r
+                ===================\r
+            -->\r
+    <target depends="init" name="deps-jar" unless="no.deps"/>\r
+    <target depends="init,deps-jar" name="-pre-pre-compile">\r
+        <mkdir dir="${build.classes.dir}"/>\r
+    </target>\r
+    <target name="-pre-compile">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target if="do.depend.true" name="-compile-depend">\r
+        <j2seproject3:depend/>\r
+    </target>\r
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile">\r
+        <j2seproject3:javac/>\r
+        <copy todir="${build.classes.dir}">\r
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>\r
+        </copy>\r
+    </target>\r
+    <target name="-post-compile">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>\r
+    <target name="-pre-compile-single">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">\r
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>\r
+        <j2seproject3:force-recompile/>\r
+        <j2seproject3:javac excludes="" includes="${javac.includes}" sourcepath="${src.dir}"/>\r
+    </target>\r
+    <target name="-post-compile-single">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>\r
+    <!--\r
+                ====================\r
+                JAR BUILDING SECTION\r
+                ====================\r
+            -->\r
+    <target depends="init" name="-pre-pre-jar">\r
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>\r
+        <mkdir dir="${dist.jar.dir}"/>\r
+    </target>\r
+    <target name="-pre-jar">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available">\r
+        <j2seproject1:jar/>\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class">\r
+        <j2seproject1:jar manifest="${manifest.file}"/>\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">\r
+        <j2seproject1:jar manifest="${manifest.file}">\r
+            <j2seproject1:manifest>\r
+                <j2seproject1:attribute name="Main-Class" value="${main.class}"/>\r
+            </j2seproject1:manifest>\r
+        </j2seproject1:jar>\r
+        <echo>To run this application from the command line without Ant, try:</echo>\r
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>\r
+        <property location="${dist.jar}" name="dist.jar.resolved"/>\r
+        <pathconvert property="run.classpath.with.dist.jar">\r
+            <path path="${run.classpath}"/>\r
+            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>\r
+        </pathconvert>\r
+        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries">\r
+        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>\r
+        <pathconvert property="run.classpath.without.build.classes.dir">\r
+            <path path="${run.classpath}"/>\r
+            <map from="${build.classes.dir.resolved}" to=""/>\r
+        </pathconvert>\r
+        <pathconvert pathsep=" " property="jar.classpath">\r
+            <path path="${run.classpath.without.build.classes.dir}"/>\r
+            <chainedmapper>\r
+                <flattenmapper/>\r
+                <globmapper from="*" to="lib/*"/>\r
+            </chainedmapper>\r
+        </pathconvert>\r
+        <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>\r
+        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">\r
+            <fileset dir="${build.classes.dir}"/>\r
+            <manifest>\r
+                <attribute name="Main-Class" value="${main.class}"/>\r
+                <attribute name="Class-Path" value="${jar.classpath}"/>\r
+            </manifest>\r
+        </copylibs>\r
+        <echo>To run this application from the command line without Ant, try:</echo>\r
+        <property location="${dist.jar}" name="dist.jar.resolved"/>\r
+        <echo>java -jar "${dist.jar.resolved}"</echo>\r
+    </target>\r
+    <target name="-post-jar">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar,jnlp" description="Build JAR." name="jar"/>\r
+    <!--\r
+                =================\r
+                EXECUTION SECTION\r
+                =================\r
+            -->\r
+    <target depends="init,compile" description="Run a main class." name="run">\r
+        <j2seproject1:java>\r
+            <customize>\r
+                <arg line="${application.args}"/>\r
+            </customize>\r
+        </j2seproject1:java>\r
+    </target>\r
+    <target name="-do-not-recompile">\r
+        <property name="javac.includes.binary" value=""/>\r
+    </target>\r
+    <target depends="init,-do-not-recompile,compile-single" name="run-single">\r
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>\r
+        <j2seproject1:java classname="${run.class}"/>\r
+    </target>\r
+    <!--\r
+                =================\r
+                DEBUGGING SECTION\r
+                =================\r
+            -->\r
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">\r
+        <j2seproject1:nbjpdastart name="${debug.class}"/>\r
+    </target>\r
+    <target depends="init,compile" name="-debug-start-debuggee">\r
+        <j2seproject3:debug>\r
+            <customize>\r
+                <arg line="${application.args}"/>\r
+            </customize>\r
+        </j2seproject3:debug>\r
+    </target>\r
+    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>\r
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">\r
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>\r
+    </target>\r
+    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>\r
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">\r
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>\r
+        <j2seproject3:debug classname="${debug.class}"/>\r
+    </target>\r
+    <target depends="init,-do-not-recompile,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>\r
+    <target depends="init" name="-pre-debug-fix">\r
+        <fail unless="fix.includes">Must set fix.includes</fail>\r
+        <property name="javac.includes" value="${fix.includes}.java"/>\r
+    </target>\r
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">\r
+        <j2seproject1:nbjpdareload/>\r
+    </target>\r
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>\r
+    <!--\r
+                ===============\r
+                JAVADOC SECTION\r
+                ===============\r
+            -->\r
+    <target depends="init" name="-javadoc-build">\r
+        <mkdir dir="${dist.javadoc.dir}"/>\r
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">\r
+            <classpath>\r
+                <path path="${javac.classpath}"/>\r
+            </classpath>\r
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">\r
+                <filename name="**/*.java"/>\r
+            </fileset>\r
+        </javadoc>\r
+    </target>\r
+    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">\r
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>\r
+    </target>\r
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>\r
+    <!--\r
+                =========================\r
+                JUNIT COMPILATION SECTION\r
+                =========================\r
+            -->\r
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">\r
+        <mkdir dir="${build.test.classes.dir}"/>\r
+    </target>\r
+    <target name="-pre-compile-test">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target if="do.depend.true" name="-compile-test-depend">\r
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">\r
+        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>\r
+        <copy todir="${build.test.classes.dir}">\r
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>\r
+        </copy>\r
+    </target>\r
+    <target name="-post-compile-test">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>\r
+    <target name="-pre-compile-test-single">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">\r
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>\r
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>\r
+        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>\r
+        <copy todir="${build.test.classes.dir}">\r
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>\r
+        </copy>\r
+    </target>\r
+    <target name="-post-compile-test-single">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>\r
+    <!--\r
+                =======================\r
+                JUNIT EXECUTION SECTION\r
+                =======================\r
+            -->\r
+    <target depends="init" if="have.tests" name="-pre-test-run">\r
+        <mkdir dir="${build.test.results.dir}"/>\r
+    </target>\r
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">\r
+        <j2seproject3:junit testincludes="**/*Test.java"/>\r
+    </target>\r
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">\r
+        <fail if="tests.failed">Some tests failed; see details above.</fail>\r
+    </target>\r
+    <target depends="init" if="have.tests" name="test-report"/>\r
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>\r
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>\r
+    <target depends="init" if="have.tests" name="-pre-test-run-single">\r
+        <mkdir dir="${build.test.results.dir}"/>\r
+    </target>\r
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">\r
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>\r
+        <j2seproject3:junit excludes="" includes="${test.includes}"/>\r
+    </target>\r
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">\r
+        <fail if="tests.failed">Some tests failed; see details above.</fail>\r
+    </target>\r
+    <target depends="init,-do-not-recompile,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>\r
+    <!--\r
+                =======================\r
+                JUNIT DEBUGGING SECTION\r
+                =======================\r
+            -->\r
+    <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">\r
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>\r
+        <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>\r
+        <delete file="${test.report.file}"/>\r
+        <mkdir dir="${build.test.results.dir}"/>\r
+        <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">\r
+            <customize>\r
+                <syspropertyset>\r
+                    <propertyref prefix="test-sys-prop."/>\r
+                    <mapper from="test-sys-prop.*" to="*" type="glob"/>\r
+                </syspropertyset>\r
+                <arg value="${test.class}"/>\r
+                <arg value="showoutput=true"/>\r
+                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>\r
+                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>\r
+            </customize>\r
+        </j2seproject3:debug>\r
+    </target>\r
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">\r
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>\r
+    </target>\r
+    <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>\r
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">\r
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>\r
+    </target>\r
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>\r
+    <!--\r
+                =========================\r
+                APPLET EXECUTION SECTION\r
+                =========================\r
+            -->\r
+    <target depends="init,compile-single" name="run-applet">\r
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>\r
+        <j2seproject1:java classname="sun.applet.AppletViewer">\r
+            <customize>\r
+                <arg value="${applet.url}"/>\r
+            </customize>\r
+        </j2seproject1:java>\r
+    </target>\r
+    <!--\r
+                =========================\r
+                APPLET DEBUGGING  SECTION\r
+                =========================\r
+            -->\r
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">\r
+        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>\r
+        <j2seproject3:debug classname="sun.applet.AppletViewer">\r
+            <customize>\r
+                <arg value="${applet.url}"/>\r
+            </customize>\r
+        </j2seproject3:debug>\r
+    </target>\r
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>\r
+    <!--\r
+                ===============\r
+                CLEANUP SECTION\r
+                ===============\r
+            -->\r
+    <target depends="init" name="deps-clean" unless="no.deps"/>\r
+    <target depends="init" name="-do-clean">\r
+        <delete dir="${build.dir}"/>\r
+        <delete dir="${dist.dir}"/>\r
+    </target>\r
+    <target name="-post-clean">\r
+        <!-- Empty placeholder for easier customization. -->\r
+        <!-- You can override this target in the ../build.xml file. -->\r
+    </target>\r
+    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>\r
+</project>\r
diff --git a/nbproject/configs/JWS_generated.properties b/nbproject/configs/JWS_generated.properties
new file mode 100644 (file)
index 0000000..74df2c1
--- /dev/null
@@ -0,0 +1,4 @@
+#Mon Jan 07 02:20:53 JST 2008\r
+$label=Web Start\r
+$target.debug=jws-debug\r
+$target.run=jws-run\r
diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties
new file mode 100644 (file)
index 0000000..0260410
--- /dev/null
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=c5fd47ab\r
+build.xml.script.CRC32=c46c5d81\r
+build.xml.stylesheet.CRC32=be360661\r
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.\r
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.\r
+nbproject/build-impl.xml.data.CRC32=c5fd47ab\r
+nbproject/build-impl.xml.script.CRC32=9b6e51de\r
+nbproject/build-impl.xml.stylesheet.CRC32=f1d9da08\r
diff --git a/nbproject/jnlp-impl.xml b/nbproject/jnlp-impl.xml
new file mode 100644 (file)
index 0000000..df18b4f
--- /dev/null
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License.  When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
+particular file as subject to the "Classpath" exception as provided
+by Sun in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+Contributor(s):
+
+The Original Software is NetBeans. The Initial Developer of the Original
+Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+Microsystems, Inc. All Rights Reserved.
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+-->
+
+<project name="jnlp-impl" default="default" basedir="..">
+
+    <property name="master.jnlp.file" location="master.jnlp"/>
+    <property name="launch.jnlp.file" value="launch.jnlp"/>
+    <property name="jnlp.dest.dir" location="dist"/>
+    
+    <!-- helper file to create list of arguments, etc. -->
+    <property name="helper.file" location="helper.txt"/>
+    
+    <target name="default">
+        <echo message="Default target is not set."/>
+    </target>
+    
+    <!-- Main target -->
+    
+    <target name="jnlp" depends="-init-check,-test-jnlp-enabled" if="is.jnlp.enabled">
+        <delete file="dist/lib/javaws.jar" failonerror="false"/>
+        <antcall target="generate-jnlp"/>
+    </target>
+    
+    <!-- Generate master -->
+    
+    <target name="-check-for-master.jnlp">
+        <available file="${master.jnlp.file}" property="master.jnlp.exists"/>
+    </target>
+    <target name="jnlp-init-generate-master" depends="-check-for-master.jnlp" unless="master.jnlp.exists">
+        <echo file="${master.jnlp.file}" encoding="UTF-8"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<jnlp spec="1.0+" codebase="$${jnlp.codebase}" href="launch.jnlp">
+    <information>
+        <title>$${APPLICATION.TITLE}</title>
+        <vendor>$${APPLICATION.VENDOR}</vendor>
+        <description>$${APPLICATION.DESC}</description>
+        <description kind="short">$${APPLICATION.DESC.SHORT}</description>
+        <homepage href="$${APPLICATION.HOMEPAGE}"/>
+<!--$${JNLP.ICONS}-->
+<!--$${JNLP.OFFLINE.ALLOWED}-->
+    </information>
+<!--$${JNLP.SECURITY}-->
+    <resources>
+<!--$${JNLP.RESOURCES.RUNTIME}-->
+<!--$${JNLP.RESOURCES.MAIN.JAR}-->
+<!--$${JNLP.RESOURCES.JARS}-->
+    </resources>
+    <application-desc main-class="$${jnlp.main.class}">
+<!--$${JNLP.APPLICATION.ARGS}-->
+    </application-desc>
+</jnlp>
+]]></echo>
+    </target>
+    
+    <!-- Initial check -->
+    
+    <target name="-init-check">
+        <fail unless="application.title" message="Must set application title."/>
+        <fail unless="application.vendor" message="Must set application vendor."/>
+    </target>
+    
+    <!-- Icons -->
+    
+    <target name="-init-icons" depends="-preinit-icons,-set-icon-elem,-set-splash-elem">
+        <property name="jnlp.icon.elem" value=""/>
+        <property name="application.splash.elem" value=""/>
+        <property name="icon.separator" value=""/>
+        <property name="jnlp.icons.value" value="${jnlp.icon.elem}${icon.separator}${application.splash.elem}"/>
+    </target>
+    <target name="-preinit-icons" depends="-copy-app-icon,-copy-app-splash"/>
+    <target name="-copy-app-icon" if="jnlp.icon" depends="-get-app-icon-name">
+        <copy file="${jnlp.icon}" todir="${jnlp.dest.dir}" failonerror="false"/>
+        <available file="${jnlp.dest.dir}${file.separator}${jnlp.icon.name}" property="jnlp.icon.copied"/>
+    </target>
+    <target name="-copy-app-splash" if="application.splash" depends="-get-app-splash-name">
+        <copy file="${application.splash}" todir="${jnlp.dest.dir}" failonerror="false"/>
+        <available file="${jnlp.dest.dir}${file.separator}${application.splash.name}" property="application.splash.copied"/>
+    </target>
+    <target name="-get-app-icon-name" if="jnlp.icon">
+        <dirname file="${jnlp.icon}" property="jnlp.icon.basedir"/>
+        <pathconvert property="jnlp.icon.name" setonempty="false">
+            <path location="${jnlp.icon}"/>
+            <map from="${jnlp.icon.basedir}${file.separator}" to=""/>
+        </pathconvert>
+    </target>
+    <target name="-get-app-splash-name" if="application.splash">
+        <dirname file="${application.splash}" property="application.splash.basedir"/>
+        <pathconvert property="application.splash.name" setonempty="false">
+            <path location="${application.splash}"/>
+            <map from="${application.splash.basedir}${file.separator}" to=""/>
+        </pathconvert>
+    </target>
+    <target name="-set-icon-elem" if="jnlp.icon.copied">
+        <property name="jnlp.icon.elem" value='        &lt;icon href="${jnlp.icon.name}" kind="default"/&gt;'/>
+    </target>
+    <target name="-set-splash-elem" if="application.splash.copied" depends="-set-icon-elem">
+        <property name="application.splash.elem" value='        &lt;icon href="${application.splash.name}" kind="splash"/&gt;'/>
+        <condition property="icon.separator" value="${line.separator}">
+            <isset property="jnlp.icon.elem"/>
+        </condition>
+    </target>
+    
+    <!-- Offline-Allowed -->
+    
+    <target name="-init-offline" if="offline.allowed.set" depends="-preinit-offline">
+        <property name="jnlp.offline.allowed.value" value="        &lt;offline-allowed/&gt;"/>
+    </target>
+    <target name="-preinit-offline">
+        <condition property="offline.allowed.set">
+            <equals arg1="${jnlp.offline-allowed}" arg2="true" trim="true"/>
+        </condition>
+    </target>
+    
+    <!-- Descriptions -->
+    
+    <target name="-init-descriptions" depends="-descriptions-props-check,-init-desc-value,-init-desc-value-short">
+        <property name="application.desc.value" value="${application.title}"/>
+        <property name="application.desc.short.value" value="${application.title}"/>
+    </target>
+    <target name="-descriptions-props-check">
+        <condition property="application.desc.set">
+            <and>
+                <isset property="application.desc"/>
+                <not>
+                    <equals arg1="${application.desc}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="application.desc.short.set">
+            <and>
+                <isset property="application.desc.short"/>
+                <not>
+                    <equals arg1="${application.desc.short}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-desc-value" if="application.desc.set">
+        <property name="application.desc.value" value="${application.desc}"/>
+    </target>
+    <target name="-init-desc-value-short" if="application.desc.short.set">
+        <property name="application.desc.short.value" value="${application.desc.short}"/>
+    </target>
+    
+    <!-- Security -->
+    
+    <target name="-init-security" depends="-check-signing-possible" if="jnlp.signed.true+signjarstask.available">
+        <property name="jnlp.security" value="    &lt;security&gt;${line.separator}        &lt;all-permissions/&gt;${line.separator}    &lt;/security&gt;"/>
+    </target>
+    <target name="-security-props-check">
+        <condition property="jnlp.signed.true">
+            <istrue value="${jnlp.signed}"/>
+        </condition>
+    </target>
+    <target name="-jnlp-init-keystore" depends="-jnlp-init-keystore-props,-check-keystore-exists" unless="jnlp.signjar.keystore.exists">
+        <echo message="${application.vendor}" file="${helper.file}"/>
+        <loadfile property="application.vendor.filtered" srcfile="${helper.file}">
+            <filterchain>
+                <deletecharacters chars=","/>
+            </filterchain>
+        </loadfile>
+        <delete file="${helper.file}"/>
+        <property name="jnlp.signjar.vendor" value="CN=${application.vendor.filtered}"/>
+        <echo message="Going to create default keystore in ${jnlp.signjar.keystore}"/>
+        <genkey dname="${jnlp.signjar.vendor}" alias="${jnlp.signjar.alias}" keystore="${jnlp.signjar.keystore}"
+            storepass="${jnlp.signjar.storepass}" keypass="${jnlp.signjar.keypass}"/>
+    </target>
+    <target name="-check-keystore-exists">
+        <available property="jnlp.signjar.keystore.exists" file="${jnlp.signjar.keystore}"/>
+    </target>
+    <target name="-jnlp-init-keystore-props">
+        <property name="jnlp.signjar.keystore" value="${basedir}/build/nb-jws.ks"/>
+        <property name="jnlp.signjar.storepass" value="storepass"/>
+        <property name="jnlp.signjar.keypass" value="keypass"/>
+        <property name="jnlp.signjar.alias" value="nb-jws"/>
+    </target>    
+    
+    <!-- Generating JNLP file -->
+    
+    <target name="generate-jnlp" depends="jnlp-init-generate-master,-init-codebase,-init-resources-runtime,-init-security,-init-resources-jars,-init-application-args,-init-icons,-init-offline,-init-descriptions,jnlp-init-notinited">
+        <copy file="${master.jnlp.file}" tofile="${jnlp.dest.dir}/${launch.jnlp.file}__" overwrite="true" encoding="UTF-8">
+            <filterchain>
+                <replacestring from="$${jnlp.codebase}" to="${jnlp.codebase.value}"/>
+                <replacestring from="&lt;!--$${JNLP.ICONS}--&gt;" to="${jnlp.icons.value}"/>
+                <replacestring from="&lt;!--$${JNLP.SECURITY}--&gt;" to="${jnlp.security}"/>
+                <replacestring from="&lt;!--$${JNLP.OFFLINE.ALLOWED}--&gt;" to="${jnlp.offline.allowed.value}"/>
+                <replacestring from="&lt;!--$${JNLP.RESOURCES.RUNTIME}--&gt;" to="${jnlp.resources.runtime.value}"/>
+                <replacestring from="&lt;!--$${JNLP.RESOURCES.MAIN.JAR}--&gt;" to="${jnlp.resources.main.jar.value}"/>
+                <replacestring from="&lt;!--$${JNLP.RESOURCES.JARS}--&gt;" to="${jnlp.resources.jars.value}"/>
+                <replacestring from="&lt;!--$${JNLP.APPLICATION.ARGS}--&gt;" to="${jnlp.application.args.value}"/>
+                <replacestring from="$${APPLICATION.TITLE}" to="${application.title}"/>
+                <replacestring from="$${APPLICATION.VENDOR}" to="${application.vendor}"/>
+                <replacestring from="$${APPLICATION.DESC}" to="${application.desc.value}"/>
+                <replacestring from="$${APPLICATION.DESC.SHORT}" to="${application.desc.short.value}"/>
+                <replacestring from="$${APPLICATION.HOMEPAGE}" to="${application.homepage}"/>
+                <replacestring from="$${jnlp.main.class}" to="${main.class}"/>
+            </filterchain>
+        </copy>
+        <antcall target="-strip-empty-lines"/>
+        <antcall target="-generate-html-page"/>
+    </target>
+    <target name="jnlp-init-notinited">
+        <property name="jnlp.security" value=""/>
+        <property name="jnlp.offline.allowed.value" value=""/>
+        <property name="application.homepage" value=""/>
+        <property name="jnlp.application.args.value" value=""/>
+    </target>
+    <target name="-strip-empty-lines">
+        <move file="${jnlp.dest.dir}/${launch.jnlp.file}__" tofile="${jnlp.dest.dir}/${launch.jnlp.file}" overwrite="true" encoding="UTF-8">
+            <filterchain>
+                <linecontainsregexp>
+                    <regexp pattern=".+"/>
+                </linecontainsregexp>
+            </filterchain>
+        </move>
+    </target>
+    
+    <!-- Codebase processing -->
+    
+    <target name="-init-codebase" depends="-codebase-props-check,-init-non-user-codebase,-init-user-codebase"/>
+    <target name="-codebase-props-check">
+        <condition property="local.codebase">
+            <or>
+                <not>
+                    <isset property="jnlp.codebase.type"/>
+                </not>
+                <equals arg1="${jnlp.codebase.type}" arg2="local" trim="true"/>
+            </or>
+        </condition>
+        <condition property="non.user.codebase">
+            <or>
+                <not>
+                    <isset property="jnlp.codebase.type"/>
+                </not>
+                <equals arg1="${jnlp.codebase.type}" arg2="local" trim="true"/>
+                <equals arg1="${jnlp.codebase.type}" arg2="web" trim="true"/>
+            </or>
+        </condition>
+        <condition property="user.codebase">
+            <equals arg1="${jnlp.codebase.type}" arg2="user" trim="true"/>
+        </condition>
+    </target>
+    <target name="-init-non-user-codebase" if="non.user.codebase">
+        <property name="jnlp.codebase.value" value="${jnlp.codebase.url}"/>
+    </target>
+    <target name="-init-user-codebase" if="user.codebase">
+        <property name="jnlp.codebase.value" value="${jnlp.codebase.user}"/>
+    </target>
+    
+    <!-- j2se resources -->
+    
+    <target name="-init-resources-runtime" depends="-init-runtime-props">
+        <property name="run.jvmargs.value" value=""/>
+        <property name="initial-heap-size.value" value=""/>
+        <property name="max-heap-size.value" value=""/>
+        <property name="jnlp.resources.runtime.value" 
+            value='        &lt;j2se version="${javac.target}+"${initial-heap-size.value}${max-heap-size.value}${run.jvmargs.value}/&gt;'/>
+    </target>
+    <target name="-init-runtime-props" depends="-runtime-props-check,-init-run-jvmargs-value,-init-initial-heap-size-value,-init-max-heap-size-value"/>
+    <target name="-runtime-props-check">
+        <condition property="run.jvmargs.set">
+            <and>
+                <isset property="run.jvmargs"/>
+                <not>
+                    <equals arg1="${run.jvmargs}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="jnlp.initial-heap-size.set">
+            <and>
+                <isset property="jnlp.initial-heap-size"/>
+                <not>
+                    <equals arg1="${jnlp.initial-heap-size}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="jnlp.max-heap-size.set">
+            <and>
+                <isset property="jnlp.max-heap-size"/>
+                <not>
+                    <equals arg1="${jnlp.max-heap-size}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-run-jvmargs-value" if="run.jvmargs.set">
+        <property name="run.jvmargs.value" value=' java-vm-args="${run.jvmargs}"'/>
+    </target>
+    <target name="-init-initial-heap-size-value" if="jnlp.initial-heap-size.set">
+        <property name="initial-heap-size.value" value=' initial-heap-size="${jnlp.initial-heap-size}"'/>
+    </target>
+    <target name="-init-max-heap-size-value" if="jnlp.max-heap-size.set">
+        <property name="max-heap-size.value" value=' max-heap-size="${jnlp.max-heap-size}"'/>
+    </target>
+    
+    <!-- JAR resources -->
+    
+    <target name="-init-resources-jars" depends="-preinit-resources-unsigned-jars,-preinit-resources-signed-jars,-preinit-resources-main-jar"/>
+    <target name="-preinit-resources-unsigned-jars" depends="-exclude-javaws-from-cp,-check-signing-possible" unless="jnlp.signed.true+signjarstask.available">
+        <pathconvert pathsep="${line.separator}" property="jnlp.resources.jars.value">
+            <path path="${run.classpath.without.javaws.jar}"/>
+            <mapper type="regexp" from="^.*[/\\]([^/\\]+\.jar)"
+                to='        &lt;jar href="lib/\1" download="eager"/&gt;'/>
+        </pathconvert>
+    </target>
+    <target name="-preinit-resources-main-jar">
+        <pathconvert pathsep="${line.separator}" property="jnlp.resources.main.jar.value">
+            <path location="${dist.jar}"/>
+            <mapper type="regexp" from="^.*[/\\]([^/\\]+\.jar)"
+                to='        &lt;jar href="\1" main="true" download="eager"/&gt;'/>
+        </pathconvert>
+    </target>
+    <target name="-exclude-javaws-from-cp">
+        <pathconvert property="path.element.to.be.removed">
+            <path path="${run.classpath}"/>
+            <mapper type="regexp" from="(^.*[/\\]javaws.jar)" to="\1"/>
+        </pathconvert>
+        <pathconvert property="run.classpath.without.javaws.jar">
+            <path path="${run.classpath}"/>
+            <map from="${path.element.to.be.removed}" to=""/>
+        </pathconvert>
+    </target>
+    <target name="-check-task-available">
+        <condition property="signjarstask.available">
+            <isset property="netbeans.home"/>
+        </condition>
+    </target>
+    <target name="-check-signing-possible" depends="-security-props-check,-check-task-available">
+        <condition property="jnlp.signed.true+signjarstask.available">
+            <and>
+                <isset property="jnlp.signed.true"/>
+                <isset property="signjarstask.available"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-unavailable-task-warning" depends="-check-task-available" unless="signjarstask.available">
+        <echo message="Signtask is not available, jar files will not be signed. Task is available only when running inside NetBeans IDE."/>
+    </target>
+    <target name="-preinit-resources-signed-jars" depends="-unavailable-task-warning,-sign-jars" if="jnlp.signed.true+signjarstask.available">
+        <property name="jnlp.resources.jars.value" value="${jnlp.signed.jars}${jnlp.components}"/>
+    </target>
+    <target name="-sign-jars" depends="-jnlp-init-keystore,-check-signing-possible" if="jnlp.signed.true+signjarstask.available">
+        <jnlpsignjars keystore="${jnlp.signjar.keystore}" storepass="${jnlp.signjar.storepass}" 
+                keypass="${jnlp.signjar.keypass}" alias="${jnlp.signjar.alias}" mainjar="${dist.jar}" destdir="dist"
+                codebase="${jnlp.codebase.value}" signedjarsprop="jnlp.signed.jars"
+                componentsprop="jnlp.components">
+            <fileset dir="dist/lib">
+                <include name="*.jar"/>
+            </fileset>
+        </jnlpsignjars>
+    </target>
+    
+    <!-- Application arguments -->
+    
+    <target name="-init-application-args" if="application.args">
+        <echo message="${application.args}" file="${helper.file}"/>
+        <loadfile srcfile="${helper.file}" property="jnlp.application.args.value">
+            <filterchain>
+                <tokenfilter delimoutput="\n">
+                    <stringtokenizer/>
+                    <replaceregex pattern="(.+)" replace="        &lt;argument&gt;\1&lt;/argument&gt;"/>
+                </tokenfilter>
+            </filterchain>
+        </loadfile>
+        <delete file="${helper.file}"/>
+    </target>
+    
+    <!-- Running/Debugging -->
+    
+    <target name="jws-run" depends="jar,-verify-jnlp-enabled,-verify-codebase" description="Start javaws execution">
+        <exec executable="${java.home}/bin/javaws">
+            <arg file="${jnlp.dest.dir}/${launch.jnlp.file}"/>
+        </exec>
+    </target>
+    <target name="jws-debug" if="netbeans.home" depends="jar,-verify-jnlp-enabled,-verify-codebase,-debug-start-debugger,-debug-javaws-debuggee" 
+        description="Debug javaws project in IDE"/>
+    <target name="-debug-javaws-debuggee">
+        <exec executable="${java.home}/bin/javaws">
+            <env key="JAVAWS_VM_ARGS" value="-Xdebug -Xnoagent -Djava.compiler=none -Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
+            <arg file="${jnlp.dest.dir}/${launch.jnlp.file}"/>
+        </exec>
+    </target>
+    <target name="-verify-codebase" depends="-codebase-props-check" unless="local.codebase">
+        <fail message="Project cannot be run with non-local codebase. Open project properties dialog and set Web Start Codebase to Local Execution."/>
+    </target>
+    <target name="-verify-jnlp-enabled" depends="-test-jnlp-enabled" unless="is.jnlp.enabled">
+        <fail message="Project cannot be run with selected Run Configuration when Java Web Start is disabled."/>
+    </target>
+    
+    <!-- Test JNLP enabled-->
+    
+    <target name="-test-jnlp-enabled">
+        <condition property="is.jnlp.enabled">
+            <equals arg1="${jnlp.enabled}" arg2="true" casesensitive="false" trim="true"/>
+        </condition>
+    </target>
+    
+    <!-- Generate simple HTML test page -->
+    
+    <target name="-generate-html-page">
+        <echo file="${jnlp.dest.dir}/launch.html"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+    <head>
+        <title>Test page for launching the application via JNLP</title>
+    </head>
+    <body>
+        <h3>Test page for launching the application via JNLP</h3>
+        <a href="launch.jnlp">Launch the application</a>
+    </body>
+</html>
+]]></echo>
+    </target>
+    
+</project>
diff --git a/nbproject/project.properties b/nbproject/project.properties
new file mode 100644 (file)
index 0000000..bfc26b1
--- /dev/null
@@ -0,0 +1,82 @@
+application.homepage=http://feather.cocolog-nifty.com/\r
+application.title=DEMO:\u30cb\u30b3\u30cb\u30b3\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u60c5\u5831\u30d6\u30e9\u30a6\u30b6\r
+application.vendor=yukihane\r
+build.classes.dir=${build.dir}/classes\r
+build.classes.excludes=\r
+# This directory is removed when the project is cleaned:\r
+build.dir=build\r
+build.generated.dir=${build.dir}/generated\r
+# Only compile against the classpath explicitly listed here:\r
+build.sysclasspath=ignore\r
+build.test.classes.dir=${build.dir}/test/classes\r
+build.test.results.dir=${build.dir}/test/results\r
+debug.classpath=\\r
+    ${run.classpath}\r
+debug.test.classpath=\\r
+    ${run.test.classpath}\r
+# This directory is removed when the project is cleaned:\r
+dist.dir=dist\r
+dist.jar=${dist.dir}/NicoBrowser.jar\r
+dist.javadoc.dir=${dist.dir}/javadoc\r
+excludes=\r
+includes=**\r
+jar.compress=false\r
+javac.classpath=\\r
+    ${libs.HttpClient3.classpath}:\\r
+    ${libs.Log4J.classpath}:\\r
+    ${libs.Codec.classpath}:\\r
+    ${libs.Rome.classpath}\r
+# Space-separated list of extra javac options\r
+javac.compilerargs=\r
+javac.deprecation=false\r
+javac.source=1.5\r
+javac.target=1.6\r
+javac.test.classpath=\\r
+    ${javac.classpath}:\\r
+    ${build.classes.dir}:\\r
+    ${libs.junit_4.classpath}\r
+javadoc.additionalparam=\r
+javadoc.author=false\r
+javadoc.encoding=${source.encoding}\r
+javadoc.noindex=false\r
+javadoc.nonavbar=false\r
+javadoc.notree=false\r
+javadoc.private=false\r
+javadoc.splitindex=true\r
+javadoc.use=true\r
+javadoc.version=false\r
+javadoc.windowtitle=\r
+jnlp.codebase.type=user\r
+jnlp.codebase.user=http://feather.cocolog-nifty.com/weblog/program/NicoBrowser\r
+jnlp.enabled=true\r
+jnlp.offline-allowed=true\r
+jnlp.signed=true\r
+# Property libs.Codec.classpath is set here just to make sharing of project simpler.\r
+# The library definition has always preference over this property.\r
+libs.Codec.classpath=../../../java/commons/commons-codec-1.3/commons-codec-1.3.jar\r
+# Property libs.HttpClient3.classpath is set here just to make sharing of project simpler.\r
+# The library definition has always preference over this property.\r
+libs.HttpClient3.classpath=../../../java/commons/commons-httpclient-3.1/commons-httpclient-3.1.jar\r
+# Property libs.Log4J.classpath is set here just to make sharing of project simpler.\r
+# The library definition has always preference over this property.\r
+libs.Log4J.classpath=../../../java/commons/commons-logging-1.1/commons-logging-adapters-1.1.jar;../../../java/commons/commons-logging-1.1/commons-logging-api-1.1.jar\r
+# Property libs.Rome.classpath is set here just to make sharing of project simpler.\r
+# The library definition has always preference over this property.\r
+libs.Rome.classpath=../../../java/commons/rome-0.9/rome-0.9.jar;../../../java/commons/jdom-1.1/build/jdom.jar\r
+main.class=nicobrowser.MainWindow\r
+manifest.file=manifest.mf\r
+meta.inf.dir=${src.dir}/META-INF\r
+platform.active=default_platform\r
+run.classpath=\\r
+    ${javac.classpath}:\\r
+    ${build.classes.dir}\r
+# Space-separated list of JVM arguments used when running the project\r
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value\r
+# or test-sys-prop.name=value to set system properties for unit tests):\r
+run.jvmargs=\r
+run.test.classpath=\\r
+    ${javac.test.classpath}:\\r
+    ${build.test.classes.dir}\r
+source.encoding=UTF-8\r
+src.dir=src\r
+test.src.dir=test\r
diff --git a/nbproject/project.xml b/nbproject/project.xml
new file mode 100644 (file)
index 0000000..ae68a6a
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project xmlns="http://www.netbeans.org/ns/project/1">\r
+    <type>org.netbeans.modules.java.j2seproject</type>\r
+    <configuration>\r
+        <buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1">\r
+            <extension file="jnlp-impl.xml" id="jws">\r
+                <dependency dependsOn="jnlp" target="jar"/>\r
+            </extension>\r
+        </buildExtensions>\r
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">\r
+            <name>NicoBrowser</name>\r
+            <minimum-ant-version>1.6.5</minimum-ant-version>\r
+            <source-roots>\r
+                <root id="src.dir"/>\r
+            </source-roots>\r
+            <test-roots>\r
+                <root id="test.src.dir"/>\r
+            </test-roots>\r
+        </data>\r
+    </configuration>\r
+</project>\r
diff --git a/src/nicobrowser/MainWindow.form b/src/nicobrowser/MainWindow.form
new file mode 100644 (file)
index 0000000..170bae8
--- /dev/null
@@ -0,0 +1,299 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.5" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <Properties>
+    <Property name="defaultCloseOperation" type="int" value="3"/>
+  </Properties>
+  <SyntheticProperties>
+    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
+  </SyntheticProperties>
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jScrollPane1" alignment="1" pref="755" max="32767" attributes="0"/>
+                  <Component id="jPanel1" min="-2" max="-2" attributes="1"/>
+                  <Group type="102" attributes="0">
+                      <Component id="jPanel2" min="-2" max="-2" attributes="2"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="jScrollPane1" pref="271" max="32767" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="jPanel2" min="-2" max="-2" attributes="3"/>
+                  <Component id="jPanel3" min="-2" max="-2" attributes="1"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+      </AuxValues>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTable" name="jTable1">
+          <Properties>
+            <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+              <Connection code="tableModel" type="code"/>
+            </Property>
+            <Property name="autoResizeMode" type="int" value="0"/>
+            <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
+              <TableColumnModel selectionModel="0"/>
+            </Property>
+            <Property name="enabled" type="boolean" value="false"/>
+            <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
+              <TableHeader reorderingAllowed="true" resizingAllowed="true"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel2">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
+            <EtchetBorder/>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                      <Component id="unitLoadButton" alignment="0" min="0" pref="0" max="32767" attributes="1"/>
+                      <Component id="listLoadButton" alignment="0" max="32767" attributes="1"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                      <Component id="unitNoField" max="32767" attributes="1"/>
+                      <Component id="listNoField" alignment="0" pref="70" max="32767" attributes="1"/>
+                  </Group>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Component id="loadDailyListButton" min="-2" max="-2" attributes="1"/>
+                  <EmptySpace pref="20" max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="listLoadButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="listNoField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="loadDailyListButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="2" attributes="0">
+                      <Component id="jLabel4" alignment="2" min="-2" max="-2" attributes="0"/>
+                      <Component id="unitLoadButton" alignment="2" min="-2" max="-2" attributes="0"/>
+                      <Component id="unitNoField" alignment="2" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JButton" name="listLoadButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Load"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="listLoadButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="ListNo"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="listNoField">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="1923688"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="unitLoadButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Load"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="unitLoadButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel4">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="No"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="unitNoField">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="sm9"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="loadDailyListButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Daily"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="loadDailyListButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel1">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
+            <EtchetBorder/>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="loginButton" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                  <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="mailField" linkSize="1" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="passwordField" linkSize="1" min="-2" pref="151" max="-2" attributes="0"/>
+                  <EmptySpace pref="31" max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="loginButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="mailField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="passwordField" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="mail"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="password"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="mailField">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="passwordField">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="loginButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="LogIn"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="loginButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel3">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
+            <EtchetBorder/>
+          </Border>
+        </Property>
+      </Properties>
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="clearButton" max="32767" attributes="1"/>
+                  <EmptySpace min="-2" max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="clearButton" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JButton" name="clearButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Clear"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="clearButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/src/nicobrowser/MainWindow.java b/src/nicobrowser/MainWindow.java
new file mode 100644 (file)
index 0000000..b4c41fe
--- /dev/null
@@ -0,0 +1,410 @@
+/*$Id$*/
+/*
+ * MainWindow.java
+ *
+ * Created on 2008/01/05, 15:28
+ */
+package nicobrowser;
+
+import java.awt.Component;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+
+/**
+ *
+ * @author  yuki
+ */
+public class MainWindow extends javax.swing.JFrame {
+
+    private void setContents(List<NicoContent> contList) {
+        int rowHeight = -1;
+        for (NicoContent cont : contList) {
+            Vector<Object> v = new Vector<Object>();
+            ImageIcon icon = new ImageIcon();
+            try {
+                icon = new ImageIcon(new URL(cont.getImageLink()));
+                if (rowHeight < 0) {
+                    rowHeight = icon.getIconHeight();
+                    jTable1.setRowHeight(rowHeight);
+                }
+            } catch (MalformedURLException ex) {
+                Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, "画像未取得" + cont.getTitle());
+            }
+            v.add(icon);
+            v.add(cont.getTitle());
+            v.add(cont.getDescription());
+            v.add(cont.getPageLink());
+            tableModel.addRow(v);
+        }
+    }
+
+    private class MyTableModel extends DefaultTableModel {
+
+        private MyTableModel(String[] COLUMN_NAMES, int i) {
+            super(COLUMN_NAMES, i);
+        }
+
+        @Override
+        public Class getColumnClass(int columnIndex) {
+            return getValueAt(0, columnIndex).getClass();
+        }
+    }
+    private static final String COLUMN_NAMES[] = {"サムネイル", "タイトル", "説明", "ページリンク"};
+    private DefaultTableModel tableModel = new MyTableModel(COLUMN_NAMES, 0);
+    // private DefaultTableModel tableModel = new NicoTableModel;
+    /** Creates new form MainWindow */
+    public MainWindow() {
+        initComponents();
+        TableCellRenderer textAriaRenderer = new DefaultTableCellRenderer() {
+
+            @Override
+            public Component getTableCellRendererComponent(JTable table,
+                    Object value,
+                    boolean isSelected,
+                    boolean hasFocus,
+                    int row,
+                    int column) {
+                JTextArea comp = new JTextArea(value.toString());
+                comp.setLineWrap(true);
+                return comp;
+            }
+        };
+        TableCellRenderer buttonRenderer = new DefaultTableCellRenderer() {
+
+            @Override
+            public Component getTableCellRendererComponent(JTable table,
+                    Object value,
+                    boolean isSelected,
+                    boolean hasFocus,
+                    int row,
+                    int column) {
+                String[] splitted = value.toString().split("/");
+                String text = "";
+                if (splitted.length > 0) {
+                    text = splitted[splitted.length - 1];
+                }
+                JButton comp = new JButton(text);
+                return comp;
+            }
+        };
+
+        DefaultTableColumnModel cMoldel = (DefaultTableColumnModel) jTable1.getColumnModel();
+        TableColumn c;
+        c = cMoldel.getColumn(1);
+        c.setCellRenderer(textAriaRenderer);
+        c = cMoldel.getColumn(2);
+        c.setCellRenderer(textAriaRenderer);
+        c = cMoldel.getColumn(3);
+        c.setCellRenderer(buttonRenderer);
+
+        c = cMoldel.getColumn(0);
+        c.setPreferredWidth(130);
+        c = cMoldel.getColumn(1);
+        c.setPreferredWidth(100);
+        c = cMoldel.getColumn(2);
+        c.setPreferredWidth(400);
+        c = cMoldel.getColumn(3);
+        c.setPreferredWidth(110);
+
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jTable1 = new javax.swing.JTable();
+        jPanel2 = new javax.swing.JPanel();
+        listLoadButton = new javax.swing.JButton();
+        jLabel3 = new javax.swing.JLabel();
+        listNoField = new javax.swing.JTextField();
+        unitLoadButton = new javax.swing.JButton();
+        jLabel4 = new javax.swing.JLabel();
+        unitNoField = new javax.swing.JTextField();
+        loadDailyListButton = new javax.swing.JButton();
+        jPanel1 = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        mailField = new javax.swing.JTextField();
+        passwordField = new javax.swing.JTextField();
+        loginButton = new javax.swing.JButton();
+        jPanel3 = new javax.swing.JPanel();
+        clearButton = new javax.swing.JButton();
+
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+        jTable1.setModel(tableModel);
+        jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
+        jTable1.setEnabled(false);
+        jScrollPane1.setViewportView(jTable1);
+
+        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+
+        listLoadButton.setText("Load");
+        listLoadButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                listLoadButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel3.setText("ListNo");
+
+        listNoField.setText("1923688");
+
+        unitLoadButton.setText("Load");
+        unitLoadButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                unitLoadButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel4.setText("No");
+
+        unitNoField.setText("sm9");
+
+        loadDailyListButton.setText("Daily");
+        loadDailyListButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                loadDailyListButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addComponent(unitLoadButton, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
+                    .addComponent(listLoadButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel3)
+                    .addComponent(jLabel4))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(unitNoField)
+                    .addComponent(listNoField, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE))
+                .addGap(18, 18, 18)
+                .addComponent(loadDailyListButton)
+                .addContainerGap(20, Short.MAX_VALUE))
+        );
+        jPanel2Layout.setVerticalGroup(
+            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(listLoadButton)
+                    .addComponent(jLabel3)
+                    .addComponent(listNoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(loadDailyListButton))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
+                    .addComponent(jLabel4)
+                    .addComponent(unitLoadButton)
+                    .addComponent(unitNoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+
+        jLabel1.setText("mail");
+
+        jLabel2.setText("password");
+
+        mailField.setEditable(false);
+
+        passwordField.setEditable(false);
+
+        loginButton.setText("LogIn");
+        loginButton.setEnabled(false);
+        loginButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                loginButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(loginButton)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jLabel1)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(mailField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jLabel2)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(passwordField, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(31, Short.MAX_VALUE))
+        );
+
+        jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {mailField, passwordField});
+
+        jPanel1Layout.setVerticalGroup(
+            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(loginButton)
+                    .addComponent(jLabel1)
+                    .addComponent(mailField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel2)
+                    .addComponent(passwordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+
+        clearButton.setText("Clear");
+        clearButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                clearButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
+        jPanel3.setLayout(jPanel3Layout);
+        jPanel3Layout.setHorizontalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(clearButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addContainerGap())
+        );
+        jPanel3Layout.setVerticalGroup(
+            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(clearButton)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 755, Short.MAX_VALUE)
+                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 271, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap())
+        );
+
+        pack();
+    }// </editor-fold>//GEN-END:initComponents
+    private void listLoadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listLoadButtonActionPerformed
+        String no = listNoField.getText();
+        if (no.length() < 1) {
+            return;
+        }
+        List<NicoContent> contList = NicoHttpClient.getInstance().loadMyList(no);
+        setContents(contList);
+}//GEN-LAST:event_listLoadButtonActionPerformed
+
+    private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed
+        String mail = mailField.getText();
+        String password = passwordField.getText();
+        if (mail.length() < 1 || password.length() < 1) {
+            //TODO エラー通知.
+            return;
+        }
+        NicoHttpClient.getInstance().login(mail, password);
+}//GEN-LAST:event_loginButtonActionPerformed
+
+    private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearButtonActionPerformed
+        int num = tableModel.getRowCount();
+        for (int i = num - 1; i >= 0; i--) {
+            tableModel.removeRow(i);
+        }
+}//GEN-LAST:event_clearButtonActionPerformed
+
+    private void unitLoadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unitLoadButtonActionPerformed
+        String no = unitNoField.getText();
+        if (no.length() < 1) {
+            return;
+        }
+        NicoContent cont = NicoHttpClient.getInstance().loadMyMovie(no);
+        List<NicoContent> list = new ArrayList<NicoContent>();
+        list.add(cont);
+        setContents(list);
+}//GEN-LAST:event_unitLoadButtonActionPerformed
+
+    private void loadDailyListButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadDailyListButtonActionPerformed
+        List<NicoContent> contList = NicoHttpClient.getInstance().loadMyListDaily();
+        setContents(contList);
+
+}//GEN-LAST:event_loadDailyListButtonActionPerformed
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String args[]) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                new MainWindow().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton clearButton;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTable jTable1;
+    private javax.swing.JButton listLoadButton;
+    private javax.swing.JTextField listNoField;
+    private javax.swing.JButton loadDailyListButton;
+    private javax.swing.JButton loginButton;
+    private javax.swing.JTextField mailField;
+    private javax.swing.JTextField passwordField;
+    private javax.swing.JButton unitLoadButton;
+    private javax.swing.JTextField unitNoField;
+    // End of variables declaration//GEN-END:variables
+}
diff --git a/src/nicobrowser/NicoContent.java b/src/nicobrowser/NicoContent.java
new file mode 100644 (file)
index 0000000..6f38ac1
--- /dev/null
@@ -0,0 +1,61 @@
+/*$Id$*/
+package nicobrowser;
+
+import java.util.Date;
+
+/**
+ * ニコニコ動画コンテンツ情報.
+ */
+public class NicoContent {
+
+    private String pageLink;
+    private String imageLink;
+    private String title;
+    private String description;
+    private Date publishedDate;
+
+    public String getPageLink() {
+        return pageLink;
+    }
+
+    public void setPageLink(String pageLink) {
+        this.pageLink = pageLink;
+    }
+
+    public String getImageLink() {
+        return imageLink;
+    }
+
+    public void setImageLink(String imageLink) {
+        this.imageLink = imageLink;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    void setDescription(String description) {
+        this.description = description;
+    }
+
+    void setPublishedDate(Date publishedDate) {
+        this.publishedDate = publishedDate;
+    }
+
+    public Date getPublishedDate() {
+        return publishedDate;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public String toString() {
+        return new String(getTitle() + ": " + getPageLink());
+    }
+}
diff --git a/src/nicobrowser/NicoHttpClient.java b/src/nicobrowser/NicoHttpClient.java
new file mode 100644 (file)
index 0000000..cdd2eaf
--- /dev/null
@@ -0,0 +1,345 @@
+/*$Id$*/
+package nicobrowser;
+
+import com.sun.syndication.feed.synd.SyndContentImpl;
+import com.sun.syndication.feed.synd.SyndEntryImpl;
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.io.FeedException;
+import com.sun.syndication.io.ParsingFeedException;
+import com.sun.syndication.io.SyndFeedInput;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.text.MutableAttributeSet;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.parser.ParserDelegator;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.cookie.CookiePolicy;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ *
+ * @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 static final String LOGOUT_PAGE =
+            "https://secure.nicovideo.jp/secure/logout";
+    private static final String MY_LIST_PAGE_HEADER =
+            "http://www.nicovideo.jp/mylist/";
+    private static final String MOVIE_THUMBNAIL_PAGE_HEADER =
+            "http://www.nicovideo.jp/api/getthumbinfo/";
+
+    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);
+            int statusCode = executeMethod(post);
+            Logger.getLogger(NicoHttpClient.class.getName()).
+                    log(Level.INFO, "ログインステータスコード: " + statusCode);
+
+            // ログイン可否の判定.
+            // x-niconico-authflagで判定できそうだったが必ず0になる...
+            // Set-Cookieがあればログインできたとみなしているが,あまりよろしくないかも.
+            auth = (null != post.getResponseHeader("Set-Cookie")) ? true : false;
+        } catch (IOException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            post.releaseConnection();
+        }
+        return auth;
+    }
+
+    public boolean logout() {
+        boolean result = false;
+        GetMethod method = new GetMethod(LOGOUT_PAGE);
+        try {
+            int statusCode = executeMethod(method);
+            Logger.getLogger(NicoHttpClient.class.getName()).
+                    log(Level.INFO, "ログアウトステータスコード: " + statusCode);
+
+            if (statusCode == HttpStatus.SC_OK) {
+                result = true;
+            }
+        } catch (IOException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            method.releaseConnection();
+        }
+        return result;
+    }
+
+    /**
+     * 「マイリスト登録数ランキング(本日)」の動画一覧を取得する。
+     * @return 動画一覧.
+     */
+    List<NicoContent> loadMyListDaily() {
+        List<NicoContent> list = new ArrayList<NicoContent>();
+        String url = new String("http://zio3.net/nicoRss/Handler.ashx");
+        Logger.getLogger(NicoHttpClient.class.getName()).log(Level.INFO, "全動画サイトのマイリスト登録数ランキング(本日)[全体] : " + url);
+
+        GetMethod get = new GetMethod(url);
+
+        try {
+            int statusCode = executeMethod(get);
+            BufferedReader reader = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream(), "UTF-8"));
+            // BOMを読み捨て
+            reader.skip(1);
+            list = getNicoContents(reader);
+        } catch (FeedException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IOException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            get.releaseConnection();
+        }
+
+        return list;
+    }
+
+    /**
+     * マイリストに登録した動画一覧の取得.
+     * 「公開」設定にしていないリストからは取得できない.
+     * ログインしていなくても取得可能.
+     * @param listNo マイリストNo.
+     * @return 動画一覧.
+     */
+    public List<NicoContent> loadMyList(String listNo) {
+        List<NicoContent> contList = new ArrayList<NicoContent>();
+        String url = new String(MY_LIST_PAGE_HEADER + listNo + "?rss=atom");
+        Logger.getLogger(NicoHttpClient.class.getName()).log(Level.INFO, "マイリストURL: " + url);
+
+        GetMethod get = new GetMethod(url);
+
+        try {
+            int statusCode = executeMethod(get);
+            Reader reader = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream(), "UTF-8"));
+            contList = getNicoContents(reader);
+        } catch (FeedException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IOException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            get.releaseConnection();
+        }
+        return contList;
+    }
+
+    /**
+     * 動画番号を指定したコンテンツ情報の取得.
+     * @param movieNo 動画番号.
+     * @return コンテンツ情報.
+     */
+    public NicoContent loadMyMovie(String movieNo) {
+        NicoContent cont = null;
+        InputStream re = null;
+        List<SyndEntryImpl> list = null;
+        String url = new String(MOVIE_THUMBNAIL_PAGE_HEADER + movieNo);
+        Logger.getLogger(NicoHttpClient.class.getName()).log(Level.INFO, "動画サムネイルURL: " + url);
+
+        GetMethod get = new GetMethod(url);
+
+        try {
+            int statusCode = executeMethod(get);
+            re = get.getResponseBodyAsStream();
+            // ドキュメントビルダーファクトリを生成
+            DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
+            // ドキュメントビルダーを生成
+            DocumentBuilder builder = dbfactory.newDocumentBuilder();
+            // パースを実行してDocumentオブジェクトを取得
+            Document doc = builder.parse(re);
+            // ルート要素を取得(タグ名:site)
+            Element root = doc.getDocumentElement();
+            System.out.println("ルート要素のタグ名:" + root.getTagName());
+
+            NodeList list2 = root.getElementsByTagName("thumb");
+            cont = new NicoContent();
+            Element element = (Element) list2.item(0);
+
+            String watch_url = ((Element) element.getElementsByTagName("watch_url").item(0)).getFirstChild().getNodeValue();
+            cont.setPageLink(watch_url);
+
+            String thumbnail_url = ((Element) element.getElementsByTagName("thumbnail_url").item(0)).getFirstChild().getNodeValue();
+            cont.setImageLink(thumbnail_url);
+
+            String title = ((Element) element.getElementsByTagName("title").item(0)).getFirstChild().getNodeValue();
+            cont.setTitle(title);
+
+            String description = ((Element) element.getElementsByTagName("description").item(0)).getFirstChild().getNodeValue();
+            cont.setDescription(description);
+
+        // TODO 投稿日の設定
+//            String first_retrieve = ((Element) element.getElementsByTagName("first_retrieve").item(0)).getFirstChild().getNodeValue();
+//            cont.setPublishedDate(DateFormat.getInstance().parse(first_retrieve));
+//
+//        } catch (ParseException ex) {
+//            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (SAXException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IOException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (ParserConfigurationException ex) {
+            Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            try {
+                re.close();
+            } catch (IOException ex) {
+                Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        }
+        return cont;
+
+    }
+
+    private List<NicoContent> getNicoContents(Reader reader) throws FeedException {
+        List<SyndEntryImpl> list = null;
+        SyndFeedInput input = new SyndFeedInput();
+        SyndFeed feed = input.build(reader);
+
+        list = (List<SyndEntryImpl>) feed.getEntries();
+
+        List<NicoContent> contList;
+        if (list == null) {
+            contList = new ArrayList<NicoContent>();
+        } else {
+            contList = createContentsList(list);
+        }
+        return contList;
+    }
+
+    private List<NicoContent> createContentsList(List<SyndEntryImpl> list) {
+        class CallBack extends HTMLEditorKit.ParserCallback {
+
+            private boolean descFlag;
+            private String imageLink = new String();
+            private StringBuilder description = new StringBuilder();
+
+            @Override
+            public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
+//                System.out.println("--------<" + t.toString() + ">--------");
+//                printAttributes(a);
+                if (HTML.Tag.IMG.equals(t)) {
+                    imageLink = a.getAttribute(HTML.Attribute.SRC).toString();
+                }
+            }
+
+            @Override
+            public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
+                if (HTML.Tag.P.equals(t)) {
+                    if ("nico-description".equals(
+                            a.getAttribute(HTML.Attribute.CLASS).toString())) {
+                        descFlag = true;
+                    }
+                }
+//                System.out.println("--------<" + t.toString() + ">--------");
+//                printAttributes(a);
+            }
+
+            @Override
+            public void handleEndTag(HTML.Tag t, int pos) {
+                if (HTML.Tag.P.equals(t)) {
+                    descFlag = false;
+                }
+//                System.out.println("--------</" + t.toString() + ">--------");
+            }
+
+            @Override
+            public void handleText(char[] data, int pos) {
+                if (descFlag) {
+                    description.append(data);
+                }
+
+//                System.out.println("--------TEXT--------");
+//                System.out.println(data);
+            }
+
+            private void printAttributes(MutableAttributeSet a) {
+                Enumeration e = a.getAttributeNames();
+                while (e.hasMoreElements()) {
+                    Object key = e.nextElement();
+                    System.out.println("---- " + key.toString() + " : " + a.getAttribute(key));
+                }
+            }
+
+            public String getImageLink() {
+                return imageLink;
+            }
+
+            public String getDescription() {
+                return description.toString();
+            }
+        }
+
+        List<NicoContent> contList = new ArrayList<NicoContent>();
+
+        for (SyndEntryImpl entry : list) {
+            NicoContent content = new NicoContent();
+
+            content.setTitle(entry.getTitle());
+            content.setPageLink(entry.getLink());
+            content.setPublishedDate(entry.getPublishedDate());
+
+            // サムネイル画像リンクと説明文の取得
+            CallBack callBack = new CallBack();
+            for (SyndContentImpl sc : (List<SyndContentImpl>) entry.getContents()) {
+                try {
+                    Reader reader = new StringReader(sc.getValue());
+                    new ParserDelegator().parse(reader, callBack, true);
+                } catch (IOException ex) {
+                    Logger.getLogger(NicoHttpClient.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            }
+            content.setImageLink(callBack.getImageLink());
+            content.setDescription(callBack.getDescription());
+
+            // リストへ追加.
+            contList.add(content);
+        }
+        return contList;
+    }
+}
diff --git a/src/nicobrowser/NicoTableModel.java b/src/nicobrowser/NicoTableModel.java
new file mode 100644 (file)
index 0000000..aa8345c
--- /dev/null
@@ -0,0 +1,91 @@
+/*$Id$*/
+package nicobrowser;
+
+import java.awt.Component;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+/**
+ *
+ * @author yuki
+ */
+public class NicoTableModel extends DefaultTableModel {
+
+    private static final ColumnContext[] COLUMN_CONTEXT = {
+        new ColumnContext("サムネイル", ImageIcon.class),
+        new ColumnContext("タイトル", String.class),
+        new ColumnContext("説明", JTextArea.class),
+        new ColumnContext("リンク", JButton.class)
+    };
+
+    private static class ColumnContext {
+
+        private String columnName;
+        private Class renderer;
+
+        private ColumnContext(String columnName, Class renderer) {
+            this.columnName = columnName;
+            this.renderer = renderer;
+        }
+    }
+
+    static class MyCellRender extends DefaultTableCellRenderer {
+
+        @Override
+        public Component getTableCellRendererComponent(
+                JTable table, Object value,
+                boolean isSelected, boolean hasFocus, int row, int column) {
+            if (isSelected) {
+                table.setForeground(table.getSelectionForeground());
+                table.setBackground(table.getSelectionBackground());
+            } else {
+                table.setForeground(table.getForeground());
+                table.setBackground(table.getBackground());
+            }
+
+            //setFont(table.getFont());
+
+            try {
+                Object obj = COLUMN_CONTEXT[column].renderer.newInstance();
+
+
+                return (Component) obj;
+            } catch (InstantiationException ex) {
+                Logger.getLogger(NicoTableModel.class.getName()).log(Level.SEVERE, null, ex);
+            } catch (IllegalAccessException ex) {
+                Logger.getLogger(NicoTableModel.class.getName()).log(Level.SEVERE, null, ex);
+            }
+            return null;
+
+
+        }
+    }
+
+    public NicoTableModel() {
+        super();
+        for (ColumnContext c : COLUMN_CONTEXT) {
+            addColumn(c.columnName);
+        }
+        TableColumn column;
+
+
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        return COLUMN_CONTEXT[columnIndex].renderer;
+
+    }
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        return false;
+    }
+}
diff --git a/test/nicobrowser/NicoHttpClientTest.java b/test/nicobrowser/NicoHttpClientTest.java
new file mode 100644 (file)
index 0000000..294bc94
--- /dev/null
@@ -0,0 +1,120 @@
+/*$Id$*/
+package nicobrowser;
+
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author yuki
+ */
+public class NicoHttpClientTest {
+
+    static final String OK_MAIL = "niconico.senyou@live.jp";
+    static final String OK_PASS = "piyopiyo";
+    static final String OK_LIST_NO = "4315046";
+
+    public NicoHttpClientTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of getInstance method, of class NicoHttpClient.
+     */
+    @Test
+    public void getInstance() {
+        System.out.println("getInstance");
+        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");
+        NicoHttpClient instance = NicoHttpClient.getInstance();
+
+        // ログイン失敗ケース
+        String mail = "test@example.com";
+        String password = "xxxx";
+        boolean result = instance.login(mail, password);
+        assertEquals(false, result);
+
+        // ログイン成功ケース
+        mail = OK_MAIL;
+        password = OK_PASS;
+        result = instance.login(mail, password);
+        assertEquals(true, result);
+    }
+
+    @Test
+    public void logout() {
+        System.out.println("logout");
+
+        boolean result;
+        result = NicoHttpClient.getInstance().logout();
+        assertEquals(true, result);
+
+        result = NicoHttpClient.getInstance().logout();
+        assertEquals(true, result);
+    }
+
+    @Test
+    public void loadMyList() {
+        System.out.println("loadMyList");
+
+        NicoHttpClient instance = NicoHttpClient.getInstance();
+        List list;
+
+        list = instance.loadMyList(OK_LIST_NO);
+        assertNotNull(list);
+        assertNotSame(0, list.size());
+//        for (Object o : list) {
+//            System.out.println(o.toString());
+//        }
+
+        list = instance.loadMyList("XXXX");
+        assertNotNull(list);
+        assertSame(0, list.size());
+    }
+
+    @Test
+    public void loadMyListDaily() {
+        System.out.println("loadMyListDaily");
+        NicoHttpClient instance = NicoHttpClient.getInstance();
+        instance.login(OK_MAIL, OK_PASS);
+        List<NicoContent> list = instance.loadMyListDaily();
+        assertNotNull(list);
+        assertNotSame(0, list.size());
+//        System.out.println(list.size());
+//        for (Object o : list) {
+//            System.out.println(o.toString());
+//        }
+    }
+}