[hg] main/contrib: Faqsuck II...The Resucking.

  • From: Tim Boudreau < >
  • To:
  • Subject: [hg] main/contrib: Faqsuck II...The Resucking.
  • Date: Mon, 25 Jan 2010 11:07:12 -0800

changeset 62e4a47ec23a in main/contrib
details: http://hg.netbeans.org/main/contrib?cmd=changeset;node=62e4a47ec23a
description:
        Faqsuck II...The Resucking.

diffstat:

 other/faqsuck/build.xml                         |   74 ++
 other/faqsuck/lib/Rakefile.rb                   |   42 -
 other/faqsuck/lib/main.rb                       |  145 -----
 other/faqsuck/manifest.mf                       |    3 +
 other/faqsuck/nbproject/build-impl.xml          |  805 
+++++++++++++++++++++++++++++
 other/faqsuck/nbproject/configs/Live.properties |    1 +
 other/faqsuck/nbproject/genfiles.properties     |    8 +
 other/faqsuck/nbproject/project.properties      |   65 ++-
 other/faqsuck/nbproject/project.xml             |    4 +-
 other/faqsuck/src/faqsuck/Category.java         |  115 ++++
 other/faqsuck/src/faqsuck/Entry.java            |  140 +++++
 other/faqsuck/src/faqsuck/Main.java             |  195 +++++++
 12 files changed, 1406 insertions(+), 191 deletions(-)

diffs (1663 lines):

diff --git a/other/faqsuck/build.xml b/other/faqsuck/build.xml
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="faqsuck" default="default" basedir=".">
+    <description>Builds, tests, and runs the project faqsuck.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project 
properties
+      -post-init:                called after initialization of project 
properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-single:       called before javac compilation of single 
file
+      -post-compile-single:      called after javac compilation of single 
file
+      -pre-compile-test:         called before javac compilation of JUnit 
tests
+      -post-compile-test:        called after javac compilation of JUnit 
tests
+      -pre-compile-test-single:  called before javac compilation of single 
JUnit test
+      -post-compile-test-single: called after javac compilation of single 
JUunit test
+      -pre-jar:                  called before JAR building
+      -post-jar:                 called after JAR building
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting an obfuscator after compilation could look like 
this:
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Another way to customize the build is by overriding existing main 
targets.
+    The targets of interest are: 
+
+      -init-macrodef-javac:     defines macro for javac compilation
+      -init-macrodef-junit:     defines macro for junit execution
+      -init-macrodef-debug:     defines macro for class debugging
+      -init-macrodef-java:      defines macro for class execution
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)
+      -do-jar-without-manifest: JAR building (if you are not using a 
manifest)
+      run:                      execution of project 
+      -javadoc-build:           Javadoc generation
+      test-report:              JUnit report generation
+
+    An example of overriding the target for project execution could look 
like this:
+
+        <target name="run" depends="faqsuck-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that the overridden target depends on the jar target and not only 
on 
+    the compile target as the regular run target does. Again, for a list of 
available 
+    properties which you can use, check the target you are overriding in the
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
diff --git a/other/faqsuck/lib/Rakefile.rb b/other/faqsuck/lib/Rakefile.rb
deleted file mode 100644
--- a/other/faqsuck/lib/Rakefile.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# 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.
-
-require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
diff --git a/other/faqsuck/lib/main.rb b/other/faqsuck/lib/main.rb
deleted file mode 100644
--- a/other/faqsuck/lib/main.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-# 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.
-
-require 'uri'
-require 'net/http'
-require 'rexml/document'
-
-class Faqpage
-  def initialize (title, url)
-    @title = title
-    @url = url
-  end
-
-  def to_s
-    return @title + ' (' + @url + ')'
-  end
-  
-  def ==(other)
-    @url = other.url
-  end
-  
-  def hash
-    @url.hash
-  end
-  
-  def name
-    /.*(DevFaq.*)/.match(@url)[1]
-  end
-  
-  def title
-    @title
-  end
-end
-
-base = 'http://wiki.netbeans.org'
-faqsite = base + "/NetBeansDeveloperFAQ"
-content = Net::HTTP.get(URI.parse(faqsite))
-puts "Loading content from #{faqsite}"
-content.gsub!('<hr>', '<hr/>')
-content.gsub!('<hr >', '<hr/>')
-puts content
-doc = REXML::Document.new content
-matches = {}
-titleexp = /.*?>(.*?)<.*/
-faqexp = /.*DevFaq.*/
-allcontent = '<html><head><title>NetBeans Master Developer 
FAQ</title></head><body><h1>NetBeans Master Developer FAQ</h1><ul>'
-allcontent += "Generated " + Time.now.gmtime.to_s + "<p>"
-REXML::XPath.each(doc,'//div//li/a[@class="wikipage"]') do |match|
-  path = match.attribute('href')
-  if (faqexp.match(match.to_s))
-    spath = path.to_s
-    #skip two huge and unwieldy FAQ items - the app client one should
-    #probably not be in the FAQ, but in the tutorials section of the web site
-    if ('http://wiki.netbeans.org/wiki/view/DevFaqWindowsInternals' != spath 
&&
-        'http://wiki.netbeans.org/wiki/view/DevFaqAppClientOnNbPlatformTut
!= spath  &&
-        'http://wiki.netbeans.org/wiki/view/DevFaqTutorialsAPIJa' != spath &&
-        'http://wiki.netbeans.org/wiki/view/DevFaqTutorialsAPI' != spath) 
-      title = titleexp.match(match.to_s)[1]
-      page = Faqpage.new(title, spath)
-      matches[spath] = page
-      puts "Found #{page}"
-    end
-  end
-end
-
-matches.each { |url, faqpage|
-   allcontent += '<li><a href="#' + faqpage.name() + '">' + faqpage.title() 
+ "</a></li>\n"
-}
-
-allcontent += "</ul>\n"
-matches.keys.sort.each { |url| 
-  puts "FETCHING #{url}"
-  content = Net::HTTP.get(URI.parse(url))
-  doc = REXML::Document.new content
-  pagecontentDoc = REXML::XPath.first(doc, '//div[@id="pagecontent"]')
-  pagecontent = pagecontentDoc.to_s
-  contentdoc = REXML::XPath.each(pagecontentDoc, '//a[@class="wikipage"]') 
do |match|
-    linkAttr = match.attribute('href')
-    if (linkAttr) 
-      puts "Check link #{linkAttr}"
-      link = linkAttr.to_s
-      if (link && /\/wiki\/view.*?/.match(link)) 
-        link = base + link
-        if (matches[link])
-          link = "#" + matches[link].name()
-        end
-        puts "Substitute #{linkAttr} with #{link}"
-        pagecontent.gsub!(linkAttr.to_s, link)
-        #Faq entries are inconsistent about title form, normalize
-        pagecontent.gsub!('<h1', '<h2')
-        pagecontent.gsub!('<h3', '<h2')
-        pagecontent.gsub!('<h4', '<h2')
-        pagecontent.gsub!('</h1', '</h2')
-        pagecontent.gsub!('</h3', '</h2')
-        pagecontent.gsub!('</h4', '</h2')
-        pagecontent.gsub!('<hr>', '<hr/>')
-        pagecontent.gsub!('<hr >', '<hr/>')
-        
-      end
-    end
-  end
-  allcontent += '<a name="' + matches[url].name() + '">'
-  allcontent += pagecontent
-}
-allcontent += '</body></html>'
-
-out=($*[0] or '/tmp/faq.html')
-puts "WRITING #{out}"
-open(out, 'w') { |file| file.puts(allcontent) }
diff --git a/other/faqsuck/manifest.mf b/other/faqsuck/manifest.mf
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/other/faqsuck/nbproject/build-impl.xml 
b/other/faqsuck/nbproject/build-impl.xml
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/nbproject/build-impl.xml
@@ -0,0 +1,805 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+  - initialization
+  - compilation
+  - jar
+  - execution
+  - debugging
+  - javadoc
+  - junit compilation
+  - junit execution
+  - junit debugging
+  - applet
+  - cleanup
+
+        -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" ;
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="faqsuck-impl">
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="test,jar,javadoc" description="Build and test whole 
project." name="default"/>
+    <!-- 
+                ======================
+                INITIALIZATION SECTION 
+                ======================
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/config.properties"/>
+        <property file="nbproject/private/configs/${config}.properties"/>
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" 
name="-init-project">
+        <property file="nbproject/configs/${config}.properties"/>
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target 
depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property"
 name="-do-init">
+        <available file="${manifest.file}" property="manifest.available"/>
+        <condition property="main.class.available">
+            <and>
+                <isset property="main.class"/>
+                <not>
+                    <equals arg1="${main.class}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class">
+            <and>
+                <isset property="manifest.available"/>
+                <isset property="main.class.available"/>
+            </and>
+        </condition>
+        <condition property="do.mkdist">
+            <and>
+                <isset property="libs.CopyLibs.classpath"/>
+                <not>
+                    <istrue value="${mkdist.disabled}"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="manifest.available+main.class+mkdist.available">
+            <and>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </and>
+        </condition>
+        <condition property="manifest.available+mkdist.available">
+            <and>
+                <istrue value="${manifest.available}"/>
+                <isset property="do.mkdist"/>
+            </and>
+        </condition>
+        <condition property="manifest.available-mkdist.available">
+            <or>
+                <istrue value="${manifest.available}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="manifest.available+main.class-mkdist.available">
+            <or>
+                <istrue value="${manifest.available+main.class}"/>
+                <isset property="do.mkdist"/>
+            </or>
+        </condition>
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <and>
+                <isset property="javadoc.preview"/>
+                <isfalse value="${javadoc.preview}"/>
+            </and>
+        </condition>
+        <property name="run.jvmargs" value=""/>
+        <property name="javac.compilerargs" value=""/>
+        <property name="work.dir" value="${basedir}"/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <property name="javac.debug" value="true"/>
+        <property name="javadoc.preview" value="true"/>
+        <property name="application.args" value=""/>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <property name="runtime.encoding" value="${source.encoding}"/>
+        <condition property="javadoc.encoding.used" 
value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="do.depend" value="false"/>
+        <condition property="do.depend.true">
+            <istrue value="${do.depend}"/>
+        </condition>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" 
value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <length length="0" string="${endorsed.classpath}" 
when="greater"/>
+        </condition>
+        <property name="javac.fork" value="false"/>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="-pre-init,-init-private,-init-user,-init-project,-do-init" 
name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set 
build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set 
build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set 
build.classes.excludes</fail>
+        <fail unless="dist.jar">Must set dist.jar</fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-javac">
+        <macrodef name="javac" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="sourcepath"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" 
destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" 
fork="${javac.fork}" includeantruntime="false" includes="@{includes}" 
source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" 
target="${javac.target}" tempdir="${java.io.tmpdir}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+        <macrodef name="depend" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" 
excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="," property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" 
files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <delete>
+                    <files includes="${javac.includes.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-junit">
+        <macrodef name="junit" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <sequential>
+                <junit dir="${work.dir}" errorproperty="tests.failed" 
failureproperty="tests.failed" fork="true" showoutput="true" 
tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" 
excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <classpath>
+                        <path path="${run.test.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <attribute default="" name="stopclassname"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" 
stopclassname="@{stopclassname}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version 
&quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version 
&quot;1.0"/>
+                <contains string="${version-output}" substring="java version 
&quot;1.1"/>
+                <contains string="${version-output}" substring="java version 
&quot;1.2"/>
+                <contains string="${version-output}" substring="java version 
&quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug 
-Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" 
value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" 
property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" 
uri="http://www.netbeans.org/ns/j2se-project/3";>
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg 
value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" 
inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${run.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+                    <redirector errorencoding="${runtime.encoding}" 
inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+                    <jvmarg line="${run.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-presetdef-jar">
+        <presetdef name="jar" 
uri="http://www.netbeans.org/ns/j2se-project/1";>
+            <jar compress="${jar.compress}" jarfile="${dist.jar}">
+                <j2seproject1:fileset dir="${build.classes.dir}"/>
+            </jar>
+        </presetdef>
+    </target>
+    <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"/>
+    <!--
+                ===================
+                COMPILATION SECTION
+                ===================
+            -->
+    <target name="-deps-jar-init" unless="built-jar.properties">
+        <property location="${build.dir}/built-jar.properties" 
name="built-jar.properties"/>
+        <delete file="${built-jar.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+        <echo level="warn" message="Cycle detected: faqsuck was already 
built"/>
+    </target>
+    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-jar.properties}" verbose="false"/>
+        <property file="${built-jar.properties}" 
prefix="already.built.jar."/>
+        <antcall target="-warn-already-built-jar"/>
+        <propertyfile file="${built-jar.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target 
depends="init,-check-automatic-build,-clean-after-automatic-build" 
name="-verify-automatic-build"/>
+    <target depends="init" name="-check-automatic-build">
+        <available file="${build.classes.dir}/.netbeans_automatic_build" 
property="netbeans.automatic.build"/>
+    </target>
+    <target depends="init" if="netbeans.automatic.build" 
name="-clean-after-automatic-build">
+        <antcall target="clean"/>
+    </target>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-depend">
+        <pathconvert property="build.generated.subdirs">
+            <dirset dir="${build.generated.sources.dir}" 
erroronmissingdir="false">
+                <include name="*"/>
+            </dirset>
+        </pathconvert>
+        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+    </target>
+    <target 
depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" 
if="have.sources" name="-do-compile">
+        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile"
 description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" 
name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or 
set javac.includes</fail>
+        <j2seproject3:force-recompile/>
+        <j2seproject3:javac excludes="" 
gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" 
sourcepath="${src.dir}"/>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single"
 name="compile-single"/>
+    <!--
+                ====================
+                JAR BUILDING SECTION
+                ====================
+            -->
+    <target depends="init" name="-pre-pre-jar">
+        <dirname file="${dist.jar}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+    </target>
+    <target name="-pre-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
+        <j2seproject1:jar/>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available" name="-do-jar-with-manifest" 
unless="manifest.available+main.class-mkdist.available">
+        <j2seproject1:jar manifest="${manifest.file}"/>
+    </target>
+    <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">
+        <j2seproject1:jar manifest="${manifest.file}">
+            <j2seproject1:manifest>
+                <j2seproject1:attribute name="Main-Class" 
value="${main.class}"/>
+            </j2seproject1:manifest>
+        </j2seproject1:jar>
+        <echo>To run this application from the command line without Ant, 
try:</echo>
+        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <pathconvert property="run.classpath.with.dist.jar">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" 
to="${dist.jar.resolved}"/>
+        </pathconvert>
+        <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available+main.class+mkdist.available" 
name="-do-jar-with-libraries">
+        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
+        <pathconvert property="run.classpath.without.build.classes.dir">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to=""/>
+        </pathconvert>
+        <pathconvert pathsep=" " property="jar.classpath">
+            <path path="${run.classpath.without.build.classes.dir}"/>
+            <chainedmapper>
+                <flattenmapper/>
+                <globmapper from="*" to="lib/*"/>
+            </chainedmapper>
+        </pathconvert>
+        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
manifest="${manifest.file}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
+            <fileset dir="${build.classes.dir}"/>
+            <manifest>
+                <attribute name="Main-Class" value="${main.class}"/>
+                <attribute name="Class-Path" value="${jar.classpath}"/>
+            </manifest>
+        </copylibs>
+        <echo>To run this application from the command line without Ant, 
try:</echo>
+        <property location="${dist.jar}" name="dist.jar.resolved"/>
+        <echo>java -jar "${dist.jar.resolved}"</echo>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" 
if="manifest.available+mkdist.available" 
name="-do-jar-with-libraries-without-mainclass" unless="main.class.available">
+        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
+        <pathconvert property="run.classpath.without.build.classes.dir">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to=""/>
+        </pathconvert>
+        <pathconvert pathsep=" " property="jar.classpath">
+            <path path="${run.classpath.without.build.classes.dir}"/>
+            <chainedmapper>
+                <flattenmapper/>
+                <globmapper from="*" to="lib/*"/>
+            </chainedmapper>
+        </pathconvert>
+        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
manifest="${manifest.file}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
+            <fileset dir="${build.classes.dir}"/>
+            <manifest>
+                <attribute name="Class-Path" value="${jar.classpath}"/>
+            </manifest>
+        </copylibs>
+    </target>
+    <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" 
name="-do-jar-with-libraries-without-manifest" unless="manifest.available">
+        <property location="${build.classes.dir}" 
name="build.classes.dir.resolved"/>
+        <pathconvert property="run.classpath.without.build.classes.dir">
+            <path path="${run.classpath}"/>
+            <map from="${build.classes.dir.resolved}" to=""/>
+        </pathconvert>
+        <pathconvert pathsep=" " property="jar.classpath">
+            <path path="${run.classpath.without.build.classes.dir}"/>
+            <chainedmapper>
+                <flattenmapper/>
+                <globmapper from="*" to="lib/*"/>
+            </chainedmapper>
+        </pathconvert>
+        <taskdef 
classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" 
classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+        <copylibs compress="${jar.compress}" jarfile="${dist.jar}" 
runtimeclasspath="${run.classpath.without.build.classes.dir}">
+            <fileset dir="${build.classes.dir}"/>
+            <manifest>
+                <attribute name="Class-Path" value="${jar.classpath}"/>
+            </manifest>
+        </copylibs>
+    </target>
+    <target name="-post-jar">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar"
 description="Build JAR." name="jar"/>
+    <!--
+                =================
+                EXECUTION SECTION
+                =================
+            -->
+    <target depends="init,compile" description="Run a main class." 
name="run">
+        <j2seproject1:java>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <target name="-do-not-recompile">
+        <property name="javac.includes.binary" value=""/>
+    </target>
+    <target depends="init,compile-single" name="run-single">
+        <fail unless="run.class">Must select one file in the IDE or set 
run.class</fail>
+        <j2seproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set 
run.class</fail>
+        <j2seproject1:java classname="${run.class}" 
classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                =================
+                DEBUGGING SECTION
+                =================
+            -->
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <j2seproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" 
name="-debug-start-debugger-main-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" 
name="${debug.class}"/>
+    </target>
+    <target depends="init,compile" name="-debug-start-debuggee">
+        <j2seproject3:debug>
+            <customize>
+                <arg line="${application.args}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target 
depends="init,compile,-debug-start-debugger,-debug-start-debuggee" 
description="Debug project in IDE." if="netbeans.home" name="debug"/>
+    <target depends="init" if="netbeans.home" 
name="-debug-start-debugger-stepinto">
+        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+    </target>
+    <target 
depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" 
if="netbeans.home" name="debug-stepinto"/>
+    <target depends="init,compile-single" if="netbeans.home" 
name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set 
debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}"/>
+    </target>
+    <target 
depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single"
 if="netbeans.home" name="debug-single"/>
+    <target depends="init,compile-test-single" if="netbeans.home" 
name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set 
debug.class</fail>
+        <j2seproject3:debug classname="${debug.class}" 
classpath="${debug.test.classpath}"/>
+    </target>
+    <target 
depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test"
 if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" 
name="-do-debug-fix">
+        <j2seproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" 
name="debug-fix"/>
+    <!--
+                ===============
+                JAVADOC SECTION
+                ===============
+            -->
+    <target depends="init" name="-javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <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}">
+            <classpath>
+                <path path="${javac.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${excludes}" 
includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" 
erroronmissingdir="false">
+                <include name="**/*.java"/>
+            </fileset>
+        </javadoc>
+    </target>
+    <target depends="init,-javadoc-build" if="netbeans.home" 
name="-javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,-javadoc-build,-javadoc-browse" description="Build 
Javadoc." name="javadoc"/>
+    <!--
+                =========================
+                JUNIT COMPILATION SECTION
+                =========================
+            -->
+    <target depends="init,compile" if="have.tests" 
name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="do.depend.true" name="-compile-test-depend">
+        <j2seproject3:depend classpath="${javac.test.classpath}" 
destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+    </target>
+    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend"
 if="have.tests" name="-do-compile-test">
+        <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" 
destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test"
 name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" 
if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or 
set javac.includes</fail>
+        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+        <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}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" 
excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target 
depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single"
 name="compile-test-single"/>
+    <!--
+                =======================
+                JUNIT EXECUTION SECTION
+                =======================
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" 
name="-do-test-run">
+        <j2seproject3:junit testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" 
if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests 
failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" 
name="-test-browse"/>
+    <target 
depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse"
 description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" 
if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or 
set test.includes</fail>
+        <j2seproject3:junit excludes="" includes="${test.includes}"/>
+    </target>
+    <target 
depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" 
if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests 
failed; see details above.</fail>
+    </target>
+    <target 
depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single"
 description="Run single unit test." name="test-single"/>
+    <!--
+                =======================
+                JUNIT DEBUGGING SECTION
+                =======================
+            -->
+    <target depends="init,compile-test" if="have.tests" 
name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set 
test.class</fail>
+        <property 
location="${build.test.results.dir}/TEST-${test.class}.xml" 
name="test.report.file"/>
+        <delete file="${test.report.file}"/>
+        <mkdir dir="${build.test.results.dir}"/>
+        <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}">
+            <customize>
+                <syspropertyset>
+                    <propertyref prefix="test-sys-prop."/>
+                    <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                </syspropertyset>
+                <arg value="${test.class}"/>
+                <arg value="showoutput=true"/>
+                <arg 
value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
+                <arg 
value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" 
name="-debug-start-debugger-test">
+        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" 
name="${test.class}"/>
+    </target>
+    <target 
depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test"
 name="debug-test"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" 
if="netbeans.home" name="-do-debug-fix-test">
+        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" 
if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                =========================
+                APPLET EXECUTION SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" name="run-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set 
applet.url</fail>
+        <j2seproject1:java classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject1:java>
+    </target>
+    <!--
+                =========================
+                APPLET DEBUGGING  SECTION
+                =========================
+            -->
+    <target depends="init,compile-single" if="netbeans.home" 
name="-debug-start-debuggee-applet">
+        <fail unless="applet.url">Must select one file in the IDE or set 
applet.url</fail>
+        <j2seproject3:debug classname="sun.applet.AppletViewer">
+            <customize>
+                <arg value="${applet.url}"/>
+            </customize>
+        </j2seproject3:debug>
+    </target>
+    <target 
depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet"
 if="netbeans.home" name="debug-applet"/>
+    <!--
+                ===============
+                CLEANUP SECTION
+                ===============
+            -->
+    <target name="-deps-clean-init" unless="built-clean.properties">
+        <property location="${build.dir}/built-clean.properties" 
name="built-clean.properties"/>
+        <delete file="${built-clean.properties}" quiet="true"/>
+    </target>
+    <target if="already.built.clean.${basedir}" 
name="-warn-already-built-clean">
+        <echo level="warn" message="Cycle detected: faqsuck was already 
built"/>
+    </target>
+    <target depends="init,-deps-clean-init" name="deps-clean" 
unless="no.deps">
+        <mkdir dir="${build.dir}"/>
+        <touch file="${built-clean.properties}" verbose="false"/>
+        <property file="${built-clean.properties}" 
prefix="already.built.clean."/>
+        <antcall target="-warn-already-built-clean"/>
+        <propertyfile file="${built-clean.properties}">
+            <entry key="${basedir}" value=""/>
+        </propertyfile>
+    </target>
+    <target depends="init" name="-do-clean">
+        <delete dir="${build.dir}"/>
+        <delete dir="${dist.dir}" followsymlinks="false" 
includeemptydirs="true"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-clean,-do-clean,-post-clean" 
description="Clean build products." name="clean"/>
+    <target name="-check-call-dep">
+        <property file="${call.built.properties}" prefix="already.built."/>
+        <condition property="should.call.dep">
+            <not>
+                <isset property="already.built.${call.subproject}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-check-call-dep" if="should.call.dep" 
name="-maybe-call-dep">
+        <ant antfile="${call.script}" inheritall="false" 
target="${call.target}">
+            <propertyset>
+                <propertyref prefix="transfer."/>
+                <mapper from="transfer.*" to="*" type="glob"/>
+            </propertyset>
+        </ant>
+    </target>
+</project>
diff --git a/other/faqsuck/nbproject/configs/Live.properties 
b/other/faqsuck/nbproject/configs/Live.properties
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/nbproject/configs/Live.properties
@@ -0,0 +1,1 @@
+main.class=jfaqsuck.Main
diff --git a/other/faqsuck/nbproject/genfiles.properties 
b/other/faqsuck/nbproject/genfiles.properties
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=1701be5d
+build.xml.script.CRC32=5bbc7bb2
+build.xml.stylesheet.CRC32=958a1d3e@1.34.0.45
+# This file is used by a NetBeans-based IDE to track changes in generated 
files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never 
regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=1701be5d
+nbproject/build-impl.xml.script.CRC32=60101aca
+nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.34.0.45
diff --git a/other/faqsuck/nbproject/project.properties 
b/other/faqsuck/nbproject/project.properties
--- a/other/faqsuck/nbproject/project.properties
+++ b/other/faqsuck/nbproject/project.properties
@@ -1,4 +1,65 @@
-main.file=main.rb
+application.title=faqsuck
+application.vendor=Administrator
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/faqsuck.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}:\
+    ${libs.junit.classpath}:\
+    ${libs.junit_4.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+main.class=jfaqsuck.Entry
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+platform.active=default_platform
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value 
instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=-ea
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
 source.encoding=UTF-8
-src.dir=lib
+src.dir=src
 test.src.dir=test
diff --git a/other/faqsuck/nbproject/project.xml 
b/other/faqsuck/nbproject/project.xml
--- a/other/faqsuck/nbproject/project.xml
+++ b/other/faqsuck/nbproject/project.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://www.netbeans.org/ns/project/1";>
-    <type>org.netbeans.modules.ruby.rubyproject</type>
+    <type>org.netbeans.modules.java.j2seproject</type>
     <configuration>
-        <data xmlns="http://www.netbeans.org/ns/ruby-project/1";>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3";>
             <name>faqsuck</name>
             <source-roots>
                 <root id="src.dir"/>
diff --git a/other/faqsuck/src/faqsuck/Category.java 
b/other/faqsuck/src/faqsuck/Category.java
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/src/faqsuck/Category.java
@@ -0,0 +1,115 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package faqsuck;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * @author Tim Boudreau
+ */
+public class Category {
+    public final String title;
+    private final List<Entry> entries = new ArrayList<Entry>();
+    private final String id;
+
+    public Category(String title, String id) {
+        this.title = title;
+        this.id = id;
+    }
+
+    public void addEntry(Entry entry) {
+        entries.add(entry);
+    }
+
+    public List<? extends Entry> entries() {
+        return entries;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Category other = (Category) obj;
+        if ((this.title == null) ? (other.title != null) : 
!this.title.equals(other.title)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 53 * hash + (this.title != null ? this.title.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        return title;
+    }
+
+    public boolean allExternal() {
+        boolean result = true;
+        for (Entry entry : entries) {
+            result &= entry.isExternal();
+        }
+        return result;
+    }
+
+    public String toTocHtml() throws IOException {
+        StringBuilder sb = new StringBuilder();
+        sb.append("  <li class=\"tocCategory\"><a 
href=\"#").append(id).append("\"><b>");
+        sb.append(title).append("</b></a>");
+        sb.append('\n');
+
+        sb.append("    <ul>\n");
+        int ix = 0;
+        for (Entry entry : entries) {
+            if (!entry.isExternal()) {
+                sb.append("    <li>");
+                sb.append (entry.getTocHtml());
+                sb.append("</li>\n");
+            }
+            ix++;
+            if (ix > Main.LIMIT) { //for debugging w/o reading all entries
+                break;
+            }
+        }
+        sb.append("</ul>\n");
+        sb.append ("  </li>\n");
+
+        return sb.toString();
+    }
+
+    public String toBodyHtml() throws IOException {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<h3 class=\"catTitle\"><a name=\"").append(id).append 
("\">");
+        sb.append (title);
+        sb.append ("</a></h3>");
+        int ix = 0;
+        for (Entry entry : entries) {
+            if (!entry.isExternal()) {
+                sb.append (entry.toHtml());
+                sb.append ('\n');
+                sb.append ('\n');
+            }
+            ix++;
+            if (ix > Main.LIMIT) { //for debugging w/o reading all entries
+                break;
+            }
+        }
+        return sb.toString();
+    }
+
+}
diff --git a/other/faqsuck/src/faqsuck/Entry.java 
b/other/faqsuck/src/faqsuck/Entry.java
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/src/faqsuck/Entry.java
@@ -0,0 +1,140 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package faqsuck;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * @author Tim Boudreau
+ */
+public class Entry {
+    public final String url;
+    final String title;
+    private final String baseUrl;
+
+    public Entry(String url, String title, String baseUrl) {
+        this.url = url;
+        this.title = title;
+        this.baseUrl = baseUrl;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Entry other = (Entry) obj;
+        if ((this.url == null) ? (other.url != null) : 
!this.url.equals(other.url)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 73 * hash + (this.url != null ? this.url.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        return title + "(" + url + ")";
+    }
+    
+    public String getName() {
+        int ix = url.lastIndexOf("/");
+        return url.substring(ix + 1);
+    }
+
+    public boolean isExternal() {
+        return url.startsWith ("http") || url.startsWith("file");
+    }
+
+    public String getTocHtml() {
+        return "<a href=\"#" + url.substring(1) + "\">" + title + "</a>";
+    }
+
+    public String toHtml() throws IOException {
+        StringBuilder sb = new StringBuilder("\n<h4 class=\"itemTitle\"><a 
name=\"" + getName() + "\">");
+        sb.append (title);
+        sb.append ("</a></h4>\n");
+        URL url = new URL(baseUrl + this.url);
+        System.err.println("Read " + url);
+        InputStream in = url.openStream();
+        try {
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            Main.copy (in, out);
+            String content = new String (out.toByteArray());
+            sb.append(strip(content));
+            return sb.toString();
+        } finally {
+            in.close();
+        }
+    }
+
+    public URL getWebUrl() throws IOException {
+        if (isExternal()) {
+            return new URL(url);
+        } else {
+            return new URL( baseUrl + url);
+        }
+    }
+
+    private static Pattern CONTENT_PATTERN = Pattern.compile ("<span 
class=\"mw-headline\".*?</h[123456]>(.*)<!--\\s*?NewPP limit", 
Pattern.MULTILINE | Pattern.DOTALL | Pattern.CASE_INSENSITIVE | 
Pattern.UNIX_LINES);
+    private String strip(String content) throws IOException {
+        Matcher m = CONTENT_PATTERN.matcher(content);
+        if (m.find()) {
+            String result = m.group(1);
+            result = result.replaceAll ("<a href=\"/", "<a href=\"#");
+            result = result.replaceAll ("<img.*?>", "<a href=\"" + 
getWebUrl() + "\" target=\"ext\"><i>[image - see online version]</i></a>");
+            result = result.replaceAll ("</img>", "");
+            result = result.replaceAll ("<h[123456]>", "<h5>");
+            result = result.replaceAll ("</h[123456]>", "</h5>");
+            result = result.replaceAll ("<hr\\s*?/>", "");
+
+            int ix = result.indexOf("<p><b><span 
style=\"color:#ff6633;\">Attachments</span></b>");
+            if (ix > 0) {
+                int newIx = result.lastIndexOf("<div", ix);
+                ix = newIx < 0 ? ix : newIx;
+                result = result.substring (0, ix);
+            }
+
+            return "<div class=\"itemBody\">"+ result + "\n</div>";
+        } else {
+            return "[no content found]";
+        }
+    }
+
+    /**
+     * for testing parsing
+     * @param args
+     * @throws Exception
+     */
+    public static void main(String[] ignored) throws Exception {
+        String url = 
"http://wiki.netbeans.org/NetBeansCertifiedEngineerCourse";;
+        String title = "Becoming Proficient";
+//        Entry e = new Entry ("file:///H:/oneFaq.html", title, "");
+//        Entry e = new Entry 
("http://wiki.netbeans.org/NetBeansCertifiedEngineerCourse", title, "";);
+//        Entry e = new Entry 
("http://wiki.netbeans.org/DevFaqHowToReuseModules", title, "";);
+        Entry e = new Entry 
("http://wiki.netbeans.org/DevFaqSpecifyJdkVersion", title, "";);
+        System.out.println(e.toHtml());
+    }
+
+}
diff --git a/other/faqsuck/src/faqsuck/Main.java 
b/other/faqsuck/src/faqsuck/Main.java
new file mode 100644
--- /dev/null
+++ b/other/faqsuck/src/faqsuck/Main.java
@@ -0,0 +1,195 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package faqsuck;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Assembles a single giant HTML file out of the online developer FAQ.
+ *
+ * @author Tim Boudreau
+ */
+public class Main {
+    private static final Pattern TOC_CONTENT = Pattern.compile (
+        "^<hr\\s?/>(.*?)^<div.*Attachments", Pattern.DOTALL | 
Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
+
+    private static final Pattern CATEGORY_CONTENT = Pattern.compile (
+        "<a name=\\\"(.*?)\".*?>.*?<span 
class=\"mw-headline\">(.*?)</span></h3>(.*?)(?:<a name)",
+        Pattern.DOTALL | Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | 
Pattern.UNIX_LINES);
+
+    private static final Pattern ELEMENT_HEADING = Pattern.compile (
+        "<li>\\s*?<a href=\"(\\S*?)\".*?>(.*?)</a>",Pattern.DOTALL | 
Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
+
+    /**
+     * Max number of Categories and URLs to process - set low for testing 
changes
+     */
+    static final int LIMIT = Integer.MAX_VALUE; //set to 3 during development
+    private static final String HEAD = "<html><head><title>NetBeans 
Developer FAQ</title>" +
+            "<style type=\"text/css\">body {\n" +
+            "   margin-left: 1.25em;  margin-right: 1.25em;\n" +
+            "   font-family:\"Verdana\",\"sans-serif\";}\n" +
+            "   li {margin-top:0.45em;}" +
+            "   .catTitle {background-color:#AA3322; color:#FFFFFF; 
border-color:#AA3322; border-style:solid; border-width:0.37em; 
margin-top:1em; font-size:1.7em;}\n" +
+            "   .itemTitle {color:#AA3322; border-bottom-style:solid; 
border-bottom-width:2px; border-bottom-color:#DDAA88; margin-top:0.75em; 
font-size:1.45em;}\n" +
+            "   .itemBody {margin-left:1.5em;  margin-right:1.5em;}\n" +
+            "   .tocCategory {margin-top: 1.1em; margin-bottom:0.4em;}\n" +
+            "   pre { background-color:#FFFFD9; overflow:auto; border: 1px 
solid #CCCCCC;\n}"  +
+            "   a:link {text-decoration:none}\n" +
+            "   a:visited {text-decoration:none}\n" +
+            "</style>" +
+            "</head>\n<body>\n<h1>NetBeans Developer Faq</h1>\n";
+    private static final String FOOT = "</body></html>";
+
+    public static void main(String[] args) throws Exception {
+        if (args.length < 2) {
+            System.err.println("Usage: java -jar jfaqsuck.jar url baseurl 
[outputfile]");
+            System.exit(1);
+        }
+        String faqUrl = args[0];
+        String baseUrl;
+        if (args.length == 1) {
+            int ix = faqUrl.lastIndexOf ("/");
+            baseUrl = faqUrl.substring (0, ix);
+        } else {
+            baseUrl = args[1];
+            new URL (baseUrl);
+        }
+        PrintStream out;
+
+        if (args.length == 3) {
+            File f = new File (args[2]);
+            if (!f.exists()) {
+                if (!f.createNewFile()) {
+                    throw new IllegalArgumentException ("Could not create 
file "
+                            + f.getPath());
+                }
+            }
+            out = new PrintStream (new BufferedOutputStream(new 
FileOutputStream(f)));
+        } else {
+            out = System.out;
+        }
+        try {
+            System.err.println("Base url is " + baseUrl);
+            System.err.println("loading " + faqUrl);
+            URL url = new URL (faqUrl);
+            InputStream in = url.openConnection().getInputStream();
+            ByteArrayOutputStream outs = new ByteArrayOutputStream();
+            try {
+                copy (in, outs);
+            } finally {
+                in.close();
+                outs.close();
+            }
+            String tocContent = new String (outs.toByteArray());
+            List<Category> categories = new ArrayList<Category>();
+            System.err.println("Read categories");
+            readCategories (baseUrl, tocContent, categories);
+            out.println (HEAD);
+            out.println ("<font size=\"-2\"><i>Generated on " + new Date() + 
"</i>" +
+                    " from <a href=\"" + faqUrl + "\">" + faqUrl + "</a>" +
+                    "</font><p/>");
+            out.println("<ul>");
+            int ix = 0;
+            for (Category c : categories) {
+                if (!c.allExternal()) {
+                    out.println(c.toTocHtml());
+                }
+                ix++;
+                if (ix > Main.LIMIT) { //for debugging w/o reading all 
entries
+                    break;
+                }
+            }
+            out.println("</ul>\n");
+            out.println ("\n<hr/><p>&nbsp;</p>\n");
+            ix = 0;
+            for (Category c : categories) {
+                if (!c.allExternal()) {
+                    out.println(c.toBodyHtml());
+                }
+                ix++;
+                if (ix > Main.LIMIT) { //for debugging w/o reading all 
entries
+                    break;
+                }
+            }
+
+            List<Entry> list = new ArrayList<Entry>();
+            for (Category c : categories) {
+                for (Entry e : c.entries()) {
+                    if (e.isExternal()) {
+                        list.add(e);
+                    }
+                }
+            }
+            if (!list.isEmpty()) {
+                out.println ("<p/>");
+                out.println ("<h1>External FAQ Entries</h1>");
+                out.println ("The following FAQ entries are not hosted in 
the NetBeans wiki and could not be included:<ul>");
+                for (Entry e : list) {
+                    out.println ("<li><a target=\"extfaq\" href=\"" + e.url 
+ "\">" + e.title + "</a></li>");
+                }
+            }
+            out.println(FOOT);
+        } finally {
+            out.close();
+        }
+    }
+
+    static void copy(InputStream is, OutputStream os)
+    throws IOException {
+        final byte[] BUFFER = new byte[4096];
+        int len;
+
+        for (;;) {
+            len = is.read(BUFFER);
+
+            if (len == -1) {
+                return;
+            }
+
+            os.write(BUFFER, 0, len);
+        }
+    }
+
+    private static void readCategories(String baseUrl, String tocContent, 
List<Category> categories) {
+        Matcher m = TOC_CONTENT.matcher (tocContent);
+        if (!m.find()) {
+            throw new IllegalArgumentException ("Could not find main body 
content using " + TOC_CONTENT + " in\n" + tocContent);
+        }
+        if (m.groupCount() == 0) {
+            throw new IllegalArgumentException ("Matched main body content 
using " + TOC_CONTENT + " in but no group");
+        }
+        String body = m.group(1);
+        Matcher catHeaderMatcher = CATEGORY_CONTENT.matcher(body);
+        while (catHeaderMatcher.find()) {
+            String id = catHeaderMatcher.group(1);
+            String title = catHeaderMatcher.group(2);
+            String catBody = catHeaderMatcher.group(3);
+            Category category = new Category (title, id);
+            categories.add (category);
+            Matcher elMatcher = ELEMENT_HEADING.matcher(catBody);
+            while (elMatcher.find()) {
+                String url = elMatcher.group(1);
+                String elTitle = elMatcher.group(2);
+                category.addEntry(new Entry (url, elTitle, baseUrl));
+            }
+
+        }
+    }
+
+}

[hg] main/contrib: Faqsuck II...The Resucking.

Tim Boudreau 01/25/2010

Project Features

About this Project

Contrib was started in November 2009, is owned by Jiří Kovalský, and has 316 members.
By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20160708.bf2ac18). © 2014, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo
 
 
Close
loading
Please Confirm
Close