--- /dev/null
+<?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
--- /dev/null
+Manifest-Version: 1.0\r
+X-COMMENT: Main-Class will be added automatically by build\r
+\r
--- /dev/null
+<?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>
--- /dev/null
+<?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 "${ant.java.version}"/>\r
+ <condition property="have-jdk-older-than-1.4">\r
+ <or>\r
+ <contains string="${version-output}" substring="java version "1.0"/>\r
+ <contains string="${version-output}" substring="java version "1.1"/>\r
+ <contains string="${version-output}" substring="java version "1.2"/>\r
+ <contains string="${version-output}" substring="java version "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
--- /dev/null
+#Mon Jan 07 02:20:53 JST 2008\r
+$label=Web Start\r
+$target.debug=jws-debug\r
+$target.run=jws-run\r
--- /dev/null
+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
--- /dev/null
+<?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=' <icon href="${jnlp.icon.name}" kind="default"/>'/>
+ </target>
+ <target name="-set-splash-elem" if="application.splash.copied" depends="-set-icon-elem">
+ <property name="application.splash.elem" value=' <icon href="${application.splash.name}" kind="splash"/>'/>
+ <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=" <offline-allowed/>"/>
+ </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=" <security>${line.separator} <all-permissions/>${line.separator} </security>"/>
+ </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="<!--$${JNLP.ICONS}-->" to="${jnlp.icons.value}"/>
+ <replacestring from="<!--$${JNLP.SECURITY}-->" to="${jnlp.security}"/>
+ <replacestring from="<!--$${JNLP.OFFLINE.ALLOWED}-->" to="${jnlp.offline.allowed.value}"/>
+ <replacestring from="<!--$${JNLP.RESOURCES.RUNTIME}-->" to="${jnlp.resources.runtime.value}"/>
+ <replacestring from="<!--$${JNLP.RESOURCES.MAIN.JAR}-->" to="${jnlp.resources.main.jar.value}"/>
+ <replacestring from="<!--$${JNLP.RESOURCES.JARS}-->" to="${jnlp.resources.jars.value}"/>
+ <replacestring from="<!--$${JNLP.APPLICATION.ARGS}-->" 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=' <j2se version="${javac.target}+"${initial-heap-size.value}${max-heap-size.value}${run.jvmargs.value}/>'/>
+ </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=' <jar href="lib/\1" download="eager"/>'/>
+ </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=' <jar href="\1" main="true" download="eager"/>'/>
+ </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=" <argument>\1</argument>"/>
+ </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>
--- /dev/null
+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
--- /dev/null
+<?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
--- /dev/null
+<?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>
--- /dev/null
+/*$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
+}
--- /dev/null
+/*$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());
+ }
+}
--- /dev/null
+/*$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;
+ }
+}
--- /dev/null
+/*$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;
+ }
+}
--- /dev/null
+/*$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());
+// }
+ }
+}