From 011219a4e4938c3ecfed7e49bff1f3cb2e6c317e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 20 Oct 2003 14:18:16 +0000 Subject: [PATCH 1/9] This commit was manufactured by cvs2git to create tag 'taglib1-0-1'. Sprout from master 2003-10-20 14:18:15 UTC Erik C. Thauvin '1.0.1 release.' Delete: CVSROOT/checkoutlist CVSROOT/commitinfo CVSROOT/config CVSROOT/cvswrappers CVSROOT/editinfo CVSROOT/loginfo CVSROOT/modules CVSROOT/notify CVSROOT/rcsinfo CVSROOT/taginfo CVSROOT/verifymsg --- CVSROOT/checkoutlist | 13 ------------- CVSROOT/commitinfo | 15 --------------- CVSROOT/config | 14 -------------- CVSROOT/cvswrappers | 23 ----------------------- CVSROOT/editinfo | 21 --------------------- CVSROOT/loginfo | 26 -------------------------- CVSROOT/modules | 26 -------------------------- CVSROOT/notify | 12 ------------ CVSROOT/rcsinfo | 13 ------------- CVSROOT/taginfo | 20 -------------------- CVSROOT/verifymsg | 21 --------------------- 11 files changed, 204 deletions(-) delete mode 100644 CVSROOT/checkoutlist delete mode 100644 CVSROOT/commitinfo delete mode 100644 CVSROOT/config delete mode 100644 CVSROOT/cvswrappers delete mode 100644 CVSROOT/editinfo delete mode 100644 CVSROOT/loginfo delete mode 100644 CVSROOT/modules delete mode 100644 CVSROOT/notify delete mode 100644 CVSROOT/rcsinfo delete mode 100644 CVSROOT/taginfo delete mode 100644 CVSROOT/verifymsg diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist deleted file mode 100644 index b04b350..0000000 --- a/CVSROOT/checkoutlist +++ /dev/null @@ -1,13 +0,0 @@ -# The "checkoutlist" file is used to support additional version controlled -# administrative files in $CVSROOT/CVSROOT, such as template files. -# -# The first entry on a line is a filename which will be checked out from -# the corresponding RCS file in the $CVSROOT/CVSROOT directory. -# The remainder of the line is an error message to use if the file cannot -# be checked out. -# -# File format: -# -# [] -# -# comment lines begin with '#' diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo deleted file mode 100644 index b19e7b7..0000000 --- a/CVSROOT/commitinfo +++ /dev/null @@ -1,15 +0,0 @@ -# The "commitinfo" file is used to control pre-commit checks. -# The filter on the right is invoked with the repository and a list -# of files to check. A non-zero exit of the filter program will -# cause the commit to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/config b/CVSROOT/config deleted file mode 100644 index ff43ec0..0000000 --- a/CVSROOT/config +++ /dev/null @@ -1,14 +0,0 @@ -# Set this to "no" if pserver shouldn't check system users/passwords -#SystemAuth=no - -# Put CVS lock files in this directory rather than directly in the repository. -#LockDir=/var/lock/cvs - -# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top -# level of the new working directory when using the `cvs checkout' -# command. -#TopLevelAdmin=no - -# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the -# history file, or a subset as needed (ie `TMAR' logs all write operations) -#LogHistory=TOFEWGCMAR diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers deleted file mode 100644 index 0accaf1..0000000 --- a/CVSROOT/cvswrappers +++ /dev/null @@ -1,23 +0,0 @@ -# This file affects handling of files based on their names. -# -# The -t/-f options allow one to treat directories of files -# as a single file, or to transform a file in other ways on -# its way in and out of CVS. -# -# The -m option specifies whether CVS attempts to merge files. -# -# The -k option specifies keyword expansion (e.g. -kb for binary). -# -# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) -# -# wildcard [option value][option value]... -# -# where option is one of -# -f from cvs filter value: path to filter -# -t to cvs filter value: path to filter -# -m update methodology value: MERGE or COPY -# -k expansion mode value: b, o, kkv, &c -# -# and value is a single-quote delimited value. -# For example: -#*.gif -k 'b' diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo deleted file mode 100644 index d78886c..0000000 --- a/CVSROOT/editinfo +++ /dev/null @@ -1,21 +0,0 @@ -# The "editinfo" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo deleted file mode 100644 index 5a59f0a..0000000 --- a/CVSROOT/loginfo +++ /dev/null @@ -1,26 +0,0 @@ -# The "loginfo" file controls where "cvs commit" log information -# is sent. The first entry on a line is a regular expression which must match -# the directory that the change is being made to, relative to the -# $CVSROOT. If a match is found, then the remainder of the line is a filter -# program that should expect log information on its standard input. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name ALL appears as a regular expression it is always used -# in addition to the first matching regex or DEFAULT. -# -# You may specify a format string as part of the -# filter. The string is composed of a `%' followed -# by a single format character, or followed by a set of format -# characters surrounded by `{' and `}' as separators. The format -# characters are: -# -# s = file name -# V = old version number (pre-checkin) -# v = new version number (post-checkin) -# -# For example: -#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog -# or -#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index cb9e9ef..0000000 --- a/CVSROOT/modules +++ /dev/null @@ -1,26 +0,0 @@ -# Three different line formats are valid: -# key -a aliases... -# key [options] directory -# key [options] directory files... -# -# Where "options" are composed of: -# -i prog Run "prog" on "cvs commit" from top-level of module. -# -o prog Run "prog" on "cvs checkout" of module. -# -e prog Run "prog" on "cvs export" of module. -# -t prog Run "prog" on "cvs rtag" of module. -# -u prog Run "prog" on "cvs update" of module. -# -d dir Place module in directory "dir" instead of module name. -# -l Top-level directory only -- do not recurse. -# -# NOTE: If you change any of the "Run" options above, you'll have to -# release and re-checkout any working directories of these modules. -# -# And "directory" is a path to a directory relative to $CVSROOT. -# -# The "-a" option specifies an alias. An alias is interpreted as if -# everything on the right of the "-a" had been typed on the command line. -# -# You can encode a module within a module by using the special '&' -# character to interpose another module into the current module. This -# can be useful for creating a module that consists of many directories -# spread out over the entire source repository. diff --git a/CVSROOT/notify b/CVSROOT/notify deleted file mode 100644 index 34f0bc2..0000000 --- a/CVSROOT/notify +++ /dev/null @@ -1,12 +0,0 @@ -# The "notify" file controls where notifications from watches set by -# "cvs watch add" or "cvs edit" are sent. The first entry on a line is -# a regular expression which is tested against the directory that the -# change is being made to, relative to the $CVSROOT. If it matches, -# then the remainder of the line is a filter program that should contain -# one occurrence of %s for the user to notify, and information on its -# standard input. -# -# "ALL" or "DEFAULT" can be used in place of the regular expression. -# -# For example: -#ALL mail %s -s "CVS notification" diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo deleted file mode 100644 index 49e59f4..0000000 --- a/CVSROOT/rcsinfo +++ /dev/null @@ -1,13 +0,0 @@ -# The "rcsinfo" file is used to control templates with which the editor -# is invoked on commit and import. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being made to, relative to the -# $CVSROOT. For the first match that is found, then the remainder of the -# line is the name of the file that contains the template. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo deleted file mode 100644 index 274a46d..0000000 --- a/CVSROOT/taginfo +++ /dev/null @@ -1,20 +0,0 @@ -# The "taginfo" file is used to control pre-tag checks. -# The filter on the right is invoked with the following arguments: -# -# $1 -- tagname -# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d -# $3 -- repository -# $4-> file revision [file revision ...] -# -# A non-zero exit of the filter program will cause the tag to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg deleted file mode 100644 index 86f747c..0000000 --- a/CVSROOT/verifymsg +++ /dev/null @@ -1,21 +0,0 @@ -# The "verifymsg" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. From fa3135e4e98e2e5300cfc9f7487b1da057815f78 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 21 Nov 2003 13:45:05 +0000 Subject: [PATCH 2/9] Added Jars Rated Top 25% logo. --- google-taglib/htdocs/images/jars25.gif | Bin 0 -> 3159 bytes google-taglib/htdocs/index.html | 20 +++++++------------- 2 files changed, 7 insertions(+), 13 deletions(-) create mode 100644 google-taglib/htdocs/images/jars25.gif diff --git a/google-taglib/htdocs/images/jars25.gif b/google-taglib/htdocs/images/jars25.gif new file mode 100644 index 0000000000000000000000000000000000000000..04c1fe840e918df26f607ef2fc6478c0039a5a58 GIT binary patch literal 3159 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 literal 0 HcmV?d00001 diff --git a/google-taglib/htdocs/index.html b/google-taglib/htdocs/index.html index 46fb03e..691065d 100644 --- a/google-taglib/htdocs/index.html +++ b/google-taglib/htdocs/index.html @@ -52,6 +52,8 @@ body,td,font,p,a{font-family:arial,sans-serif}

+  Rated Jars Top 25% +

 SourceForge.net Logo

@@ -79,12 +81,8 @@ body,td,font,p,a{font-family:arial,sans-serif} The download includes the tag library and associated TLD. -   - - -   - - +   +   2 @@ -93,12 +91,8 @@ body,td,font,p,a{font-family:arial,sans-serif} a license key. -   - - -   - - +   +   3 @@ -114,7 +108,7 @@ body,td,font,p,a{font-family:arial,sans-serif}
- Google Web APIs + Tumbling Duke
From b76a82804eccb59db634430b172174963a4dbab3 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 20 Dec 2003 21:02:39 +0000 Subject: [PATCH 3/9] Added UML diagram. --- google-taglib/htdocs/about.html | 1 + google-taglib/htdocs/docs.html | 1 + google-taglib/htdocs/howto.html | 1 + google-taglib/htdocs/images/uml.jpg | Bin 0 -> 177319 bytes google-taglib/htdocs/index.html | 1 + google-taglib/htdocs/license.html | 1 + 6 files changed, 5 insertions(+) create mode 100644 google-taglib/htdocs/images/uml.jpg diff --git a/google-taglib/htdocs/about.html b/google-taglib/htdocs/about.html index faaae68..2c81905 100644 --- a/google-taglib/htdocs/about.html +++ b/google-taglib/htdocs/about.html @@ -30,6 +30,7 @@ body,td,font,p,a{font-family:arial,sans-serif}   HowTo
  Javadoc
  TLD
+   UML
arrow About diff --git a/google-taglib/htdocs/docs.html b/google-taglib/htdocs/docs.html index 30b3cc4..0e57832 100644 --- a/google-taglib/htdocs/docs.html +++ b/google-taglib/htdocs/docs.html @@ -35,6 +35,7 @@ code {font-size:10pt}   HowTo
  Javadoc
  TLD
+   UML
  About

diff --git a/google-taglib/htdocs/howto.html b/google-taglib/htdocs/howto.html index d68ab72..3b37d62 100644 --- a/google-taglib/htdocs/howto.html +++ b/google-taglib/htdocs/howto.html @@ -34,6 +34,7 @@ body,td,font,.p,a{font-family:arial,sans-serif} arrow HowTo
  Javadoc
  TLD
+   UML
  About

diff --git a/google-taglib/htdocs/images/uml.jpg b/google-taglib/htdocs/images/uml.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb6b432e0d860a8c5db5d53f7923e17b8b7394b9 GIT binary patch literal 177319 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

2ecli*`3fdZwx`zzPE# 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
  Javadoc
  TLD
+   UML
  About

diff --git a/google-taglib/htdocs/license.html b/google-taglib/htdocs/license.html index 4fe7ee4..33a5005 100644 --- a/google-taglib/htdocs/license.html +++ b/google-taglib/htdocs/license.html @@ -29,6 +29,7 @@ body,td,font,p,a{font-family:arial,sans-serif}   HowTo
  Javadoc
  TLD
+   UML
arrow About From f1051407d18419300ea38f345fca21b1dc4cb388 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 12 Jan 2004 10:54:43 +0000 Subject: [PATCH 4/9] Added UML diagram. --- google-taglib/htdocs/uml.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 google-taglib/htdocs/uml.html diff --git a/google-taglib/htdocs/uml.html b/google-taglib/htdocs/uml.html new file mode 100644 index 0000000..f783a91 --- /dev/null +++ b/google-taglib/htdocs/uml.html @@ -0,0 +1,12 @@ + + + +Google Tag Library: UML + + +UML + + Enterprise Architect + + + From 6c7ec8561a650b60f01e0155b3be349b4801b2b9 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 13 Jan 2004 00:22:57 +0000 Subject: [PATCH 5/9] TagUnit 1.0 --- google-taglib/lib/tagunit.jar | Bin 131383 -> 131732 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/google-taglib/lib/tagunit.jar b/google-taglib/lib/tagunit.jar index 7e879674750fc12b61fc447b13c3066753b52494..fe22da61f3e8899a3dbe0bcb72eee50511da4f10 100644 GIT binary patch delta 17144 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 From 191381492e041aaf145c110ef84d490ecfd5883c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 13 Jan 2004 00:23:43 +0000 Subject: [PATCH 6/9] Initial import. --- google-taglib/rss/.cvsignore | 3 + google-taglib/rss/GoogleRSS.iml | 44 ++ google-taglib/rss/GoogleRSS.ipr | 93 +++ google-taglib/rss/GoogleRSS.iws | 747 ++++++++++++++++++ google-taglib/rss/LICENSE.txt | 30 + google-taglib/rss/README.txt | 71 ++ google-taglib/rss/build.properties | 27 + google-taglib/rss/build.xml | 112 +++ .../rss/google-rss-examples/README.txt | 66 ++ .../rss/google-rss-examples/WEB-INF/web.xml | 42 + .../rss/google-rss-examples/index.html | 71 ++ .../rss/google-rss-examples/key.html | 16 + google-taglib/rss/google-rss-examples/key.jsp | 21 + google-taglib/rss/google-rss-examples/rss.jsp | 1 + .../rss/google-rss-examples/search.html | 16 + .../clevercactus/google/AtomGenerator.java | 222 ++++++ .../google/FeedGenerationException.java | 68 ++ .../clevercactus/google/FeedGenerator.java | 172 ++++ .../google/FeedGeneratorFactory.java | 84 ++ .../google/GoogleResultsWrapper.java | 174 ++++ .../google/GoogleResultsWrapperItem.java | 82 ++ .../com/clevercactus/google/RSSGenerator.java | 198 +++++ .../google/taglibs/SearchResults.java | 132 ++++ google-taglib/rss/tlds/google-rss.tld | 22 + 24 files changed, 2514 insertions(+) create mode 100644 google-taglib/rss/.cvsignore create mode 100644 google-taglib/rss/GoogleRSS.iml create mode 100644 google-taglib/rss/GoogleRSS.ipr create mode 100644 google-taglib/rss/GoogleRSS.iws create mode 100644 google-taglib/rss/LICENSE.txt create mode 100644 google-taglib/rss/README.txt create mode 100644 google-taglib/rss/build.properties create mode 100644 google-taglib/rss/build.xml create mode 100644 google-taglib/rss/google-rss-examples/README.txt create mode 100644 google-taglib/rss/google-rss-examples/WEB-INF/web.xml create mode 100644 google-taglib/rss/google-rss-examples/index.html create mode 100644 google-taglib/rss/google-rss-examples/key.html create mode 100644 google-taglib/rss/google-rss-examples/key.jsp create mode 100644 google-taglib/rss/google-rss-examples/rss.jsp create mode 100644 google-taglib/rss/google-rss-examples/search.html create mode 100644 google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java create mode 100644 google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java create mode 100644 google-taglib/rss/tlds/google-rss.tld diff --git a/google-taglib/rss/.cvsignore b/google-taglib/rss/.cvsignore new file mode 100644 index 0000000..3586368 --- /dev/null +++ b/google-taglib/rss/.cvsignore @@ -0,0 +1,3 @@ +build +dist +*.bat \ No newline at end of file diff --git a/google-taglib/rss/GoogleRSS.iml b/google-taglib/rss/GoogleRSS.iml new file mode 100644 index 0000000..36999e8 --- /dev/null +++ b/google-taglib/rss/GoogleRSS.iml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google-taglib/rss/GoogleRSS.ipr b/google-taglib/rss/GoogleRSS.ipr new file mode 100644 index 0000000..f2bee3d --- /dev/null +++ b/google-taglib/rss/GoogleRSS.ipr @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google-taglib/rss/GoogleRSS.iws b/google-taglib/rss/GoogleRSS.iws new file mode 100644 index 0000000..81df5c0 --- /dev/null +++ b/google-taglib/rss/GoogleRSS.iws @@ -0,0 +1,747 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google-taglib/rss/LICENSE.txt b/google-taglib/rss/LICENSE.txt new file mode 100644 index 0000000..001be53 --- /dev/null +++ b/google-taglib/rss/LICENSE.txt @@ -0,0 +1,30 @@ +Google RSS Tag Library License + +Copyright (c) 2003-2004, clevercactus ltd. +Copyright (c) 2003-2004, Erik C. Thauvin (erik@thauvin.net) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +Neither the name of the author nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/google-taglib/rss/README.txt b/google-taglib/rss/README.txt new file mode 100644 index 0000000..65a8552 --- /dev/null +++ b/google-taglib/rss/README.txt @@ -0,0 +1,71 @@ +Google RSS Tag Library README +============================= + + +Overview +======== + +This README file describes the Google RSS Tag Library distribution. + +The Google RSS Tag Library is an extension to, and thus requires, +the Google Tag Library, which can be found at: + + + + +See the "LICENSE.txt" file for licensing details. + +The Google RSS Tag Library uses the Google Web APIs, but is not associated +with or sponsored by Google, Inc. + + +Installation +============ + +The Google RSS Tag Library requires a JSP (1.1 or higher) container, such +as Tomcat. + +To use the Google RSS Tag Library, simply copy the library's JAR file +(google-rss.jar) to your application's WEB-INF/lib directory. The Tag Library +Descriptor (google-rss.tld) should be placed in your application's WEB-INF +directory. + +You should also modify your web application deployment descriptor (web.xml) +file to map the Google RSS Tag Library TLD URI to its location: + + + /google-rss-taglib + /WEB-INF/google-rss.tld + + + +TagLib Directive +================ + +Using the Google RSS Tag Library is easy; you simply need to import it into +your JSP pages using the taglib directive. For instance, you would include +the following line at the top of your JSP page: + + <%@taglib uri="/google-rss-taglib" prefix="rss"%> + + +SearchResults Tag +================= + +The tag is used to display the search results returned +by a Google search (performed using the Google Tag Library) in RSS format. + +For example: + + <%@ page contentType="text/xml" %> + <%@ taglib uri="/google-taglib" prefix="google" %> + <%@ taglib uri="/google-rss-taglib" prefix="rss" %> + my search query + + +Please refer to the Google Tag Library documentation for detailed information +on performing searches. + + +=========================================================================== +$Id$ \ No newline at end of file diff --git a/google-taglib/rss/build.properties b/google-taglib/rss/build.properties new file mode 100644 index 0000000..e89ace1 --- /dev/null +++ b/google-taglib/rss/build.properties @@ -0,0 +1,27 @@ +# Version +version=1.0 + +# Project +project.name=google-rss +release.name=${project.name}-taglib-${version} + +# Locations +src.dir=src +build.dir=build +dist.dir=dist +lib.dir=../lib +tlds.dir=tlds + +# Google +google.jar=../dist/google.jar +google.tld=../dist/google.tld + +# Examples +ex.dir=${project.name}-examples + +# Source +src.excludes=${lib.dir}/googleapi.jar + +# Docs +doc.license=LICENSE.txt +doc.readme=README.txt \ No newline at end of file diff --git a/google-taglib/rss/build.xml b/google-taglib/rss/build.xml new file mode 100644 index 0000000..71db1bb --- /dev/null +++ b/google-taglib/rss/build.xml @@ -0,0 +1,112 @@ + + + Google RSS Tag Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google-taglib/rss/google-rss-examples/README.txt b/google-taglib/rss/google-rss-examples/README.txt new file mode 100644 index 0000000..9bdbd8b --- /dev/null +++ b/google-taglib/rss/google-rss-examples/README.txt @@ -0,0 +1,66 @@ +Google RSS Tag Library Examples README +====================================== + + +Overview +======== + +This README file describes the Google RSS Tag Library Examples web +application. + +This web application contains a collection of examples demonstrating the +usage of the Google JSP RSS Tag Library. For more information about using +the custom tag library in your own web applications, please refer to the +Google RSS Tag Library documentation. + +The Google RSS Tag Library is an extension to the Google Tag Library, which +can be found at: + + + +See the "LICENSE.txt" file for licensing details. + +The Google RSS Tag Library uses the Google Web APIs, but is not associated +with or sponsored by Google, Inc. + + +Google Web APIs +=============== + +The Google Web APIs Java library is required in order to use the Examples web +application. The library's JAR file (googleapi.jar) should be placed into the +application's WEB-INF/lib directory. + + http://www.google.com/apis/download.html + +You must also register with Google (free) in order to obtain a license key. +The license key is required to access Google's Web Services. + + https://www.google.com/accounts/NewAccount + + +Google License Key +================== + +The license key can be specified as a context parameter in the web +application deployment descriptor (web.xml) as follows: + + + google_key + 000000000000000000000000 + + +The license key can also be temporarily specified from the index page of +the web application. + + +Examples +======== + +The following example is included: + + - Perform a simple Google RSS search + + +=========================================================================== +$Id$ \ No newline at end of file diff --git a/google-taglib/rss/google-rss-examples/WEB-INF/web.xml b/google-taglib/rss/google-rss-examples/WEB-INF/web.xml new file mode 100644 index 0000000..2d63d72 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/WEB-INF/web.xml @@ -0,0 +1,42 @@ + + + + google-rss-examples + Google RSS Examples Web Application + + google_key + + The Google Web APIs client authorization key. + + + google_proxy_host + + The host to use as an HTTP proxy. + + + google_proxy_port + + The port to use as an HTTP proxy. + + + google_proxy_username + + The username required for the HTTP proxy. + + + google_proxy_password + + The password required for the HTTP proxy. + + + index.html + + + /google-taglib + /WEB-INF/google.tld + + + /google-rss-taglib + /WEB-INF/google-rss.tld + + diff --git a/google-taglib/rss/google-rss-examples/index.html b/google-taglib/rss/google-rss-examples/index.html new file mode 100644 index 0000000..9639482 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/index.html @@ -0,0 +1,71 @@ + + + +Google RSS Tag Library Examples + + + + + +Google RSS Tag Library Examples +

+This is a collection of examples demonstrating the usage of the Google RSS JSP Tag Library. +

+

+The Google RSS Tag Library is an extension to the Google Tag Library. +

+

+The Google Web APIs Java library is required in order to use the Google RSS Tag +Library. The library's JAR file (googleapi.jar) should be placed +into the application's WEB-INF/lib directory. +

+ +

+You must also register with Google (free) in order to obtain a license key. The +license key is required to access Google's Web Services. +

+ +

+The license key can be specified as a context parameter in the web application +deployment descriptor (web.xml) as follows: +

+
+
<context-param>
<param-name>google_key</param-name>
<param-value>000000000000000000000000</param-value>
</context-param>
+
+

+The license key can also be temporarily specified using the following: +

+ +

+The included examples will allow you to: +

+ +

 

+

+The Google RSS Tag Library uses the Google Web APIs, but is not associated with or sponsored by Google, Inc.
+Click here for licensing information.
+

+ + diff --git a/google-taglib/rss/google-rss-examples/key.html b/google-taglib/rss/google-rss-examples/key.html new file mode 100644 index 0000000..4fa97a3 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/key.html @@ -0,0 +1,16 @@ + + + +Set Google Key + + + + +
+   +
+ + diff --git a/google-taglib/rss/google-rss-examples/key.jsp b/google-taglib/rss/google-rss-examples/key.jsp new file mode 100644 index 0000000..cf30658 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/key.jsp @@ -0,0 +1,21 @@ +<% + // Copyright (c) 2002-2004, Erik C. Thauvin + // All rights reserved. + + String key = request.getParameter("key"); + + if ((key != null)&& (key.trim().length() > 0)) + { + pageContext.setAttribute("google_key", key, PageContext.APPLICATION_SCOPE); +%> + <%@include file="search.html"%> +<% + } + else + { +%> + <%@include file="key.html"%> +<% + } +%> + diff --git a/google-taglib/rss/google-rss-examples/rss.jsp b/google-taglib/rss/google-rss-examples/rss.jsp new file mode 100644 index 0000000..0c7d8b5 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/rss.jsp @@ -0,0 +1 @@ +<%@ page contentType="text/xml" %><%@ taglib uri="/google-taglib" prefix="google" %><%@ taglib uri="/google-rss-taglib" prefix="rss" %> diff --git a/google-taglib/rss/google-rss-examples/search.html b/google-taglib/rss/google-rss-examples/search.html new file mode 100644 index 0000000..9367268 --- /dev/null +++ b/google-taglib/rss/google-rss-examples/search.html @@ -0,0 +1,16 @@ + + + +Search Google + + + + +
+   +
+ + diff --git a/google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java b/google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java new file mode 100644 index 0000000..292111c --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +import org.xml.sax.SAXException; + +import java.io.PrintWriter; +import java.util.Date; + +/** + * A class that uses JAXP and SAX to print an SearchResults 2.0 feed to a PrintWriter. + * Output of the SearchResults happens as data is added. See the main() method for a + * simple usage example. + * + * @version 1.0, 29/08/2003 + * @author Diego Doval + */ +public +class AtomGenerator + extends FeedGenerator +{ + /** + * The one and only constructor. + */ + public + AtomGenerator() + { + } + + /** + * Prints a valid SearchResults 2.0 header based on the information passed. + * + * @param title feed title + * @param link feed link + * @param description feed description + * @param author feed author (must be an email address) + * @param lastBuildDate the date the feed was built + * @throws FeedGenerationException + */ + public + void + printHeader(String title, String link, String description, String author, Date lastBuildDate) + throws FeedGenerationException + { + try { + String language = "en-us"; + String generatorName = "clevercactus atom generator 1.0"; + String generatorURL = "http://www.clevercactus.com/google/"; + String copyright = "Copyright (c) 2003-2004 clevercactus ltd."; + String authorName = "Diego Doval"; + + feedAttributes_d.clear(); + feedAttributes_d.addAttribute("", "", "version", "", "0.2"); + feedAttributes_d.addAttribute("", "", "xmlns", "", "http://purl.org/atom/ns#"); + feedAttributes_d.addAttribute("", "", "xml:lang", "", "en"); + transformerHandler_d.startElement("","","feed",feedAttributes_d); + + feedAttributes_d.clear(); + transformerHandler_d.startElement("","","author",feedAttributes_d); + transformerHandler_d.startElement("","","name",feedAttributes_d); + transformerHandler_d.characters(authorName.toCharArray(),0,authorName.length()); + transformerHandler_d.endElement("","","name"); + transformerHandler_d.endElement("","","author"); + + feedAttributes_d.clear(); + transformerHandler_d.startElement("","","title",feedAttributes_d); + transformerHandler_d.characters(title.toCharArray(),0,title.length()); + transformerHandler_d.endElement("","","title"); + transformerHandler_d.startElement("","","link",feedAttributes_d); + transformerHandler_d.characters(link.toCharArray(),0,link.length()); + transformerHandler_d.endElement("","","link"); + transformerHandler_d.startElement("","","tagline", feedAttributes_d); + transformerHandler_d.characters(description.toCharArray(),0,description.length()); + transformerHandler_d.endElement("","","tagline"); + transformerHandler_d.startElement("","","modified",elementAttributes_d); + String dtString = getAsISO8601String(lastBuildDate); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","modified"); + feedAttributes_d.addAttribute("", "", "name", "", generatorName); + transformerHandler_d.startElement("","","generator", feedAttributes_d); + transformerHandler_d.characters(generatorURL.toCharArray(),0, generatorURL.length()); + transformerHandler_d.endElement("","","generator"); + feedAttributes_d.clear(); + transformerHandler_d.startElement("","","copyright", feedAttributes_d); + transformerHandler_d.characters(copyright.toCharArray(),0,copyright.length()); + transformerHandler_d.endElement("","","copyright"); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + } + + /** + * Prints a valid SearchResults 2.0 item based on the information passed. + * + * @param title the entry title + * @param description the entry body/description + * @param link the entry's GUID + * @param date the entry publication date + * @throws FeedGenerationException + */ + public + void + printItem(String title, String description, String link, Date date) + throws FeedGenerationException + { + try { + elementAttributes_d.clear(); + + transformerHandler_d.startElement("","","entry",elementAttributes_d); + transformerHandler_d.startElement("","","title",elementAttributes_d); + transformerHandler_d.characters(title.toCharArray(),0,title.length()); + transformerHandler_d.endElement("","","title"); + + transformerHandler_d.startElement("","","issued",elementAttributes_d); + String dtString = getAsISO8601String(date); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","issued"); + + transformerHandler_d.startElement("","","modified",elementAttributes_d); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","modified"); + + transformerHandler_d.startElement("","","created",elementAttributes_d); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","created"); + + transformerHandler_d.startElement("","","link",elementAttributes_d); + transformerHandler_d.characters(link.toCharArray(),0,link.length()); + transformerHandler_d.endElement("","","link"); + + transformerHandler_d.startElement("","","id",elementAttributes_d); + transformerHandler_d.characters(link.toCharArray(),0,link.length()); + transformerHandler_d.endElement("","","id"); + + elementAttributes_d.clear(); + elementAttributes_d.addAttribute("", "", "type", "", "text/html"); + elementAttributes_d.addAttribute("", "", "mode", "", "escaped"); + elementAttributes_d.addAttribute("", "", "xml:lang", "", "en"); + + transformerHandler_d.startElement("","","content",elementAttributes_d); + transformerHandler_d.startCDATA(); + transformerHandler_d.characters(description.toCharArray(),0,description.length()); + transformerHandler_d.endCDATA(); + transformerHandler_d.endElement("","","content"); + + transformerHandler_d.endElement("","","entry"); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + + } + + /** + * Closes the feed's main elements (i.e., "rss" and "channel"). + * @throws FeedGenerationException + */ + public + void + close() + throws FeedGenerationException + { + try { + transformerHandler_d.endElement("","","feed"); + transformerHandler_d.endDocument(); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + } + + /** + * Simple test to generate a 2.0 feed. + */ + public static + void + main(String[] args) + { + try { + AtomGenerator gen = new AtomGenerator(); + gen.init(new PrintWriter(System.out)); + gen.printHeader("Test feed", "http://something/", "test feed desc", "test@test.com", new Date()); + gen.printItem("Item title 1", "Item desc 1", "http://guid/1234", new Date()); + gen.printItem("Item title 2", "Item desc 2", "http://guid/12342", new Date()); + gen.close(); + } + catch (FeedGenerationException e) { + e.printStackTrace(); + } + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java b/google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java new file mode 100644 index 0000000..fb33e0f --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +/** + * Used to simplify exception handling in the RSSGenerator class. Internal + * Exceptions in that class will be wrapped in an FeedGenerationException. + * + * @version 1.0, 29/08/2003 + * @author Diego Doval + */ +public +class FeedGenerationException + extends Exception +{ + public + FeedGenerationException() + { + } + + public + FeedGenerationException(Throwable cause) + { + super(cause); + } + + public + FeedGenerationException(String message) + { + super(message); + } + + public + FeedGenerationException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java b/google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java new file mode 100644 index 0000000..5879e6e --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +import org.xml.sax.helpers.AttributesImpl; +import org.xml.sax.SAXException; + +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.sax.SAXTransformerFactory; +import javax.xml.transform.sax.TransformerHandler; +import javax.xml.transform.Transformer; +import javax.xml.transform.OutputKeys; +import java.io.Writer; +import java.util.Date; +import java.util.Locale; +import java.text.SimpleDateFormat; + +/** + * A class that uses JAXP and SAX to print an feed to a PrintWriter. + * Output of the actual happens as data is added on the subclass. See the main() method for a + * simple usage example. + * + * @version 1.0, 29/08/2003 + * @author Diego Doval + */ +public abstract +class FeedGenerator +{ + protected Writer output_d; + protected StreamResult streamResult_d; + protected TransformerHandler transformerHandler_d; + protected SAXTransformerFactory saxTransformerFactory_d; + protected AttributesImpl elementAttributes_d; + protected AttributesImpl feedAttributes_d; + + public static SimpleDateFormat iso8601DateFormat_sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + public static SimpleDateFormat rfc822DateFormat_sd = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yy' 'HH:mm:ss' 'z", Locale.US); + + /** + * The one and only constructor. + */ + public + FeedGenerator() + { + } + + /** + * @param output writer to use for outputting the SearchResults + * @throws FeedGenerationException + */ + public + void + init(Writer output) + throws FeedGenerationException + { + output_d = output; + streamResult_d = new StreamResult(output_d); + feedAttributes_d = new AttributesImpl(); + elementAttributes_d = new AttributesImpl(); + try { + saxTransformerFactory_d = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); + transformerHandler_d = saxTransformerFactory_d.newTransformerHandler(); + Transformer trans = transformerHandler_d.getTransformer(); + trans.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1"); + trans.setOutputProperty(OutputKeys.INDENT,"yes"); + transformerHandler_d.setResult(streamResult_d); + transformerHandler_d.startDocument(); + } + catch (Exception e) { + throw new FeedGenerationException(e); + } + } + + /** + * Prints a valid header based on the information passed. + * + * @param title feed title + * @param link feed link + * @param description feed description + * @param author feed author (must be an email address) + * @param lastBuildDate the date the feed was built + * @throws FeedGenerationException + */ + public abstract + void + printHeader(String title, String link, String description, String author, Date lastBuildDate) + throws FeedGenerationException; + + /** + * Prints a valid SearchResults 2.0 item based on the information passed. + * + * @param title the entry title + * @param description the entry body/description + * @param link the entry's GUID + * @param date the entry publication date + * @throws FeedGenerationException + */ + public abstract + void + printItem(String title, String description, String link, Date date) + throws FeedGenerationException; + + /** + * Closes the feed's main elements + * @throws FeedGenerationException + */ + public abstract + void + close() + throws FeedGenerationException; + + /** + * Utility method to obtain a date in a string in RFC 822 date format + * + * @param date the date to + * @return a string with the date in RFC 822 format + */ + public final + String + getAsISO8601String(Date date) + { + String result = iso8601DateFormat_sd.format(date); + //convert 20030509T00:32:35+0100 returned by Java into 20030509T00:32:35+01:00 + //from the spec date/time 19980717T14:08:55 + result = result.substring(0, result.length()-2) + ":" + result.substring(result.length()-2); + return result; + } + + + /** + * Utility method to obtain a date in a string in RFC 822 date format + * + * @param date the date to + * @return a string with the date in RFC 822 format + */ + public final + String + getAsRFC822String(Date date) + { + return rfc822DateFormat_sd.format(date); + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java b/google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java new file mode 100644 index 0000000..a07fe81 --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +import java.util.HashMap; + +/** + * Date: 05-Sep-2003 + * Time: 20:41:19 + */ +public +class FeedGeneratorFactory +{ + public static HashMap feedTypes_sd = new HashMap(); + + public static final String FEED_TYPE_RSS = "rss"; + public static final String FEED_TYPE_ATOM = "atom"; + + static { + addGenerator(FEED_TYPE_RSS, RSSGenerator.class); + addGenerator(FEED_TYPE_ATOM, AtomGenerator.class); + } + + public static + boolean + supportsFormat(String type) + { + return type != null && (type.equals(FEED_TYPE_RSS) || type.equals(FEED_TYPE_ATOM)); + } + + public static + void + addGenerator(String type, Class cls) + { + feedTypes_sd.put(type, cls); + } + + public static + FeedGenerator + getGeneratorForType(String type) + { + Class cls = (Class) feedTypes_sd.get(type); + try { + return (FeedGenerator) cls.newInstance(); + } + catch (InstantiationException e) { + e.printStackTrace(); + } + catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java b/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java new file mode 100644 index 0000000..128ad70 --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +import com.google.soap.search.GoogleSearchResultElement; + +import java.io.Writer; +import java.io.IOException; +import java.util.Iterator; +import java.util.Date; +import java.util.ArrayList; + +/** + * Date: 30-Oct-2003 + * Time: 13:41:41 + * @author Diego Doval + * @author Erik C. Thauvin + */ +public +class GoogleResultsWrapper +{ + ArrayList items_d = new ArrayList(); + + + private + GoogleResultsWrapper() + { + } + + private + Iterator + iterator() + { + return items_d.iterator(); + } + + private + void + addItem(GoogleResultsWrapperItem it) + { + items_d.add(it); + } + + private static + GoogleResultsWrapper + createWrapper(GoogleSearchResultElement[] elements) + { + if (elements == null || elements.length == 0) { + return null; + } + GoogleResultsWrapper wrapper = new GoogleResultsWrapper(); + for (int i = 0; i < elements.length; i++) { + GoogleSearchResultElement element = elements[i]; + wrapper.addItem(new GoogleResultsWrapperItem(element.getTitle(), element.getURL(), element.getSnippet())); + } + return wrapper; + } + + /** + * Output the results to a writer. + * + * @param out the writer to use + * @param elements the search result elements + * @param query the search query + * @param feedType the type of feed to use (options are "rss" and "atom") + */ + public static + void + outputResults(Writer out, GoogleSearchResultElement[] elements, String query, String feedType) + { + outputResults(out, createWrapper(elements), query, feedType); + } + + /** + * Output the results to a writer. + * + * @param out the writer to use + * @param wrapper the results object obtained from the parsing of results + * @param query the search query + * @param feedType the type of feed to use (options are "rss" and "atom") + */ + private static + void + outputResults(Writer out, GoogleResultsWrapper wrapper, String query, String feedType) + { + try { + if (out == null || feedType == null) { + try { + out.write("Null parameter in output results.\n"); + } + catch (IOException e1) { + } + return; + } + if (!feedType.equals(FeedGeneratorFactory.FEED_TYPE_RSS) + && !feedType.equals(FeedGeneratorFactory.FEED_TYPE_ATOM)) { + try { + out.write("Invalid feed type ("+feedType+"). Supported types are 'rss' and 'atom'.\n"); + } + catch (IOException e1) { + } + return; + } + try { + FeedGenerator gen = FeedGeneratorFactory.getGeneratorForType(feedType); + gen.init(out); + Date date = new Date(); + + String description; + if ((query == null) || (query.trim().length() == 0)) { + description = "Google Tag Library"; + } else { + description = "Search results for: \"" + query + '"'; + } + + gen.printHeader("Google Search Feed Output", "http://google-taglib.sourceforge.net/", description, "check@page.for.info", date); + if (wrapper != null) { + Iterator items = wrapper.iterator(); + while (items.hasNext()) { + GoogleResultsWrapperItem item = (GoogleResultsWrapperItem) items.next(); + gen.printItem(item.getTitle(), item.getSnippet(), item.getURL(), date); + } + } + gen.close(); + } + catch (FeedGenerationException e) { + try { + out.write("Error.\n"); + out.write(e.getMessage()); + } + catch (IOException e1) { + } + } + } + finally { + try { + out.close(); + } + catch (IOException e) { + } + } + } + +} \ No newline at end of file diff --git a/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java b/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java new file mode 100644 index 0000000..848c216 --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +/** + * Date: 30-Oct-2003 + * Time: 13:51:43 + * @author Diego Doval + */ +public +class GoogleResultsWrapperItem +{ + String title_d; + String text_d; + String url_d; + + public + GoogleResultsWrapperItem(String title, String url, String text) + { + title_d = title; + url_d = url; + text_d = text; + } + + public + String + getTitle() + { + return title_d; + } + + public + String + getSnippet() + { + return text_d; + } + + public + String + getURL() + { + return url_d; + } + + public + String + toString() + { + return "Title: "+title_d+"\nURL:"+url_d+"\nText:"+text_d+"\n"; + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java b/google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java new file mode 100644 index 0000000..e6a4b25 --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2003-2004 clevercactus ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +package com.clevercactus.google; + +import org.xml.sax.SAXException; + +import java.io.PrintWriter; +import java.util.Date; + +/** + * A class that uses JAXP and SAX to print an SearchResults 2.0 feed to a PrintWriter. + * Output of the SearchResults happens as data is added. See the main() method for a + * simple usage example. + * + * @version 1.0, 29/08/2003 + * @author Diego Doval + */ +public +class RSSGenerator + extends FeedGenerator +{ + + /** + * The one and only constructor. + */ + public + RSSGenerator() + { + } + + /** + * Prints a valid SearchResults 2.0 header based on the information passed. + * + * @param title feed title + * @param link feed link + * @param description feed description + * @param author feed author (must be an email address) + * @param lastBuildDate the date the feed was built + * @throws FeedGenerationException + */ + public + void + printHeader(String title, String link, String description, String author, Date lastBuildDate) + throws FeedGenerationException + { + try { + String language = "en-us"; + String generator = "clevercactus rss generator 1.0"; + + feedAttributes_d.clear(); + feedAttributes_d.addAttribute("", "", "version", "", "2.0"); + transformerHandler_d.startElement("","","rss",feedAttributes_d); + feedAttributes_d.clear(); + transformerHandler_d.startElement("","","channel",feedAttributes_d); + transformerHandler_d.startElement("","","title",feedAttributes_d); + transformerHandler_d.characters(title.toCharArray(),0,title.length()); + transformerHandler_d.endElement("","","title"); + transformerHandler_d.startElement("","","link",feedAttributes_d); + transformerHandler_d.characters(link.toCharArray(),0,link.length()); + transformerHandler_d.endElement("","","link"); + transformerHandler_d.startElement("","","description", feedAttributes_d); + transformerHandler_d.characters(description.toCharArray(),0,description.length()); + transformerHandler_d.endElement("","","description"); + transformerHandler_d.startElement("","","language", feedAttributes_d); + transformerHandler_d.characters(language.toCharArray(),0,language.length()); + transformerHandler_d.endElement("","","language"); + transformerHandler_d.startElement("","","lastBuildDate",elementAttributes_d); + String dtString = getAsRFC822String(lastBuildDate); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","lastBuildDate"); + transformerHandler_d.startElement("","","generator", feedAttributes_d); + transformerHandler_d.characters(generator.toCharArray(),0,generator.length()); + transformerHandler_d.endElement("","","generator"); + transformerHandler_d.startElement("","","managingEditor", feedAttributes_d); + transformerHandler_d.characters(author.toCharArray(),0,author.length()); + transformerHandler_d.endElement("","","managingEditor"); + transformerHandler_d.startElement("","","webMaster", feedAttributes_d); + transformerHandler_d.characters(author.toCharArray(),0,author.length()); + transformerHandler_d.endElement("","","webMaster"); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + } + + /** + * Prints a valid SearchResults 2.0 item based on the information passed. + * + * @param title the entry title + * @param description the entry body/description + * @param link the entry's GUID + * @param date the entry publication date + * @throws FeedGenerationException + */ + public + void + printItem(String title, String description, String link, Date date) + throws FeedGenerationException + { + try { + elementAttributes_d.clear(); + transformerHandler_d.startElement("","","item",elementAttributes_d); + elementAttributes_d.clear(); + transformerHandler_d.startElement("","","title",elementAttributes_d); + transformerHandler_d.characters(title.toCharArray(),0,title.length()); + transformerHandler_d.endElement("","","title"); + elementAttributes_d.clear(); + transformerHandler_d.startElement("","","description",elementAttributes_d); + transformerHandler_d.characters(description.toCharArray(),0,description.length()); + transformerHandler_d.endElement("","","description"); + elementAttributes_d.clear(); + transformerHandler_d.startElement("","","pubDate",elementAttributes_d); + String dtString = getAsRFC822String(date); + transformerHandler_d.characters(dtString.toCharArray(),0,dtString.length()); + transformerHandler_d.endElement("","","pubDate"); + elementAttributes_d.clear(); + transformerHandler_d.startElement("","","link",elementAttributes_d); + transformerHandler_d.characters(link.toCharArray(),0,link.length()); + transformerHandler_d.endElement("","","link"); + + transformerHandler_d.endElement("","","item"); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + + } + + /** + * Closes the feed's main elements (i.e., "rss" and "channel"). + * @throws FeedGenerationException + */ + public + void + close() + throws FeedGenerationException + { + try { + transformerHandler_d.endElement("","","channel"); + transformerHandler_d.endElement("","","rss"); + transformerHandler_d.endDocument(); + } + catch (SAXException e) { + throw new FeedGenerationException(e); + } + } + + + /** + * Simple test to generate a 2.0 feed. + */ + public static + void + main(String[] args) + { + try { + RSSGenerator gen = new RSSGenerator(); + gen.init(new PrintWriter(System.out)); + gen.printHeader("Test feed", "http://something/", "test feed desc", "test@test.com", new Date()); + gen.printItem("Item title 1", "Item desc 1", "guid", new Date()); + gen.printItem("Item title 2", "Item desc 2", "guid", new Date()); + gen.close(); + } + catch (FeedGenerationException e) { + e.printStackTrace(); + } + } +} diff --git a/google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java b/google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java new file mode 100644 index 0000000..61f44f0 --- /dev/null +++ b/google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java @@ -0,0 +1,132 @@ +/* + * @(#)SearchResults.java + * + * Copyright (c) 2003-2004, Erik C. Thauvin (erik@thauvin.net) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + * + */ +package com.clevercactus.google.taglibs; + +import com.clevercactus.google.GoogleResultsWrapper; + +import net.thauvin.google.GoogleSearchBean; +import net.thauvin.google.TagUtility; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.BodyTagSupport; + + +/** + * A custom tag used to display Google search results in RSS format. + * + * @author Erik C. Thauvin + * @version $Revision$, $Date$ + * + * @created Oct 30, 2003 + * @since 1.0 + */ +public class SearchResults extends BodyTagSupport +{ + /** + * The Google search bean. + */ + protected GoogleSearchBean bean = null; + + /** + * doEndTag method. + * + * @return EVAL_PAGE + * + * @throws JspException + */ + public int doEndTag() throws JspException + { + try + { + // Is the result valid? + if (bean != null) + { + // Output the feed + GoogleResultsWrapper.outputResults(pageContext.getOut(), + bean.getResultElements(), + bean.getResultProperty("searchKeywords"), + "rss"); + } + } + catch (Exception e) + { + throw TagUtility.outputError("rss", e); + } + + // Reset the values + reset(); + + return EVAL_PAGE; + } + + /** + * doStartTag method. + * + * @return SKIP_BODY. + * + * @throws JspException + */ + public int doStartTag() throws JspException + { + // Get the Google bean + bean = TagUtility.getGoogleSearchBean(pageContext); + + return SKIP_BODY; + } + + /** + * Release method. + */ + public void release() + { + super.release(); + + // Reset the bean + bean = null; + + // Reset the values + reset(); + } + + /** + * Reset the values. + */ + protected void reset() + { + // super.reset(); + } +} diff --git a/google-taglib/rss/tlds/google-rss.tld b/google-taglib/rss/tlds/google-rss.tld new file mode 100644 index 0000000..06ee349 --- /dev/null +++ b/google-taglib/rss/tlds/google-rss.tld @@ -0,0 +1,22 @@ + + + + + + @version@ + + 1.1 + + google-rss + + http://www.thauvin.net/taglibs/google-rss-taglib-@version@ + + The Google RSS Tag Library. + + + searchResults + com.clevercactus.google.taglibs.SearchResults + empty + Displays Google search results in RSS format. + + From 4b001a91788142e93e451d1980be3014848eda64 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 9 Feb 2004 00:51:29 +0000 Subject: [PATCH 7/9] Added src build target. --- google-taglib/rss/GoogleRSS.iws | 17 +++----- google-taglib/rss/README-BUILD.txt | 67 ++++++++++++++++++++++++++++++ google-taglib/rss/README.txt | 4 +- google-taglib/rss/build.properties | 15 ++++--- google-taglib/rss/build.xml | 16 +++++++ 5 files changed, 99 insertions(+), 20 deletions(-) create mode 100644 google-taglib/rss/README-BUILD.txt diff --git a/google-taglib/rss/GoogleRSS.iws b/google-taglib/rss/GoogleRSS.iws index 81df5c0..a22af7d 100644 --- a/google-taglib/rss/GoogleRSS.iws +++ b/google-taglib/rss/GoogleRSS.iws @@ -353,7 +353,7 @@ - + @@ -386,13 +386,7 @@ - - - - - - @@ -401,7 +395,7 @@ - + @@ -416,7 +410,6 @@ - + diff --git a/google-taglib/rss/README-BUILD.txt b/google-taglib/rss/README-BUILD.txt new file mode 100644 index 0000000..e8cafe9 --- /dev/null +++ b/google-taglib/rss/README-BUILD.txt @@ -0,0 +1,67 @@ +Google RSS Tag Library README (BUILD) +===================================== + + +Overview +======== + +This README file describes the Google RSS Tag Library source distribution. + +The Google RSS Tag Library is an extension to, and thus requires, the +Google Tag Library, which can be found at: + + + + +See the "LICENSE.txt" file for licensing details. + +The Google RSS Tag Library uses the Google Web APIs, but is not associated +with or sponsored by Google, Inc. + +Google Web APIs +=============== + +The Google Web APIs Java library is required in order to build the Google +RSS Tag Library. The library's JAR file (googleapi.jar) should be placed +into the lib directory. + + http://www.google.com/apis/download.html + + +Building the Source +=================== + +The Google RSS Tag Library is intended to be build directly within the +Google Tag Library source tree: + + /google-taglib/rss/ + + +The Google RSS Tag Library is built using Ant. + + http://ant.apache.org/ + + +To build the JAR, to do the following: + + ant + +To build the TLD, do the following: + + ant tld + +To build the release archive, do the following: + + ant release + +To build the Examples WAR, do the following: + + ant examples + +To list all available build targets, do the following: + + ant -projecthelp + + +=========================================================================== +$Id$ \ No newline at end of file diff --git a/google-taglib/rss/README.txt b/google-taglib/rss/README.txt index 65a8552..b90b5ad 100644 --- a/google-taglib/rss/README.txt +++ b/google-taglib/rss/README.txt @@ -7,8 +7,8 @@ Overview This README file describes the Google RSS Tag Library distribution. -The Google RSS Tag Library is an extension to, and thus requires, -the Google Tag Library, which can be found at: +The Google RSS Tag Library is an extension to, and thus requires, the +Google Tag Library, which can be found at: diff --git a/google-taglib/rss/build.properties b/google-taglib/rss/build.properties index e89ace1..0171c3d 100644 --- a/google-taglib/rss/build.properties +++ b/google-taglib/rss/build.properties @@ -5,17 +5,19 @@ version=1.0 project.name=google-rss release.name=${project.name}-taglib-${version} +# Google Tag Library +google.dir=.. +google.target=jar +google.jar=../dist/google.jar +google.tld=../dist/google.tld + # Locations src.dir=src build.dir=build dist.dir=dist -lib.dir=../lib +lib.dir=${google.dir}/lib tlds.dir=tlds -# Google -google.jar=../dist/google.jar -google.tld=../dist/google.tld - # Examples ex.dir=${project.name}-examples @@ -24,4 +26,5 @@ src.excludes=${lib.dir}/googleapi.jar # Docs doc.license=LICENSE.txt -doc.readme=README.txt \ No newline at end of file +doc.readme=README.txt +doc.src=README-BUILD.txt \ No newline at end of file diff --git a/google-taglib/rss/build.xml b/google-taglib/rss/build.xml index 71db1bb..d51e9e0 100644 --- a/google-taglib/rss/build.xml +++ b/google-taglib/rss/build.xml @@ -25,6 +25,7 @@ + @@ -96,6 +97,21 @@ + + + + + + + + + + + + + + + From 3937236341ad869415d33cbb406efa2f55723097 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 9 Feb 2004 00:56:15 +0000 Subject: [PATCH 8/9] Added outer root directory in zip archive. --- google-taglib/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-taglib/build.xml b/google-taglib/build.xml index 1fad8de..dca0cc0 100644 --- a/google-taglib/build.xml +++ b/google-taglib/build.xml @@ -112,7 +112,7 @@ - + From 324f5b1005fc49668e684c72cdbfcdd24a1eeb1d Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 7 Jun 2017 14:45:06 -0700 Subject: [PATCH 9/9] Git cleanup. --- google-taglib/.cvsignore => .gitignore | 0 google-taglib/CHANGES.txt => CHANGES.txt | 0 CVSROOT/checkoutlist | 13 --------- CVSROOT/commitinfo | 15 ---------- CVSROOT/config | 14 ---------- CVSROOT/cvswrappers | 23 ---------------- CVSROOT/editinfo | 21 -------------- CVSROOT/loginfo | 26 ------------------ CVSROOT/modules | 26 ------------------ CVSROOT/notify | 12 -------- CVSROOT/rcsinfo | 13 --------- CVSROOT/taginfo | 20 -------------- CVSROOT/verifymsg | 21 -------------- .../GoogleTagLib.iml => GoogleTagLib.iml | 0 .../GoogleTagLib.ipr => GoogleTagLib.ipr | 0 .../GoogleTagLib.iws => GoogleTagLib.iws | 0 .../README-BUILD.txt => README-BUILD.txt | 0 google-taglib/README.txt => README.txt | 0 .../build.properties => build.properties | 0 google-taglib/build.xml => build.xml | 0 .../README.txt | 0 .../WEB-INF/web.xml | 0 .../advanced.html | 0 .../advanced.jsp | 0 .../cache.html | 0 .../cache.jsp | 0 .../index.html | 0 .../key.html | 0 .../key.jsp | 0 .../search.html | 0 .../search.jsp | 0 .../spelling.html | 0 .../spelling.jsp | 0 .../WEB-INF/web.xml | 0 .../index.html | 0 .../index.jsp | 0 .../test/error.jsp | 0 .../google/cachedPage/testSpecification.jsp | 0 .../test/google/element/testSpecification.jsp | 0 .../google/endIndex/testSpecification.jsp | 0 .../estimatedTotal/testSpecification.jsp | 0 .../test/google/index.jsp | 0 .../test/google/next/testSpecification.jsp | 0 .../google/previous/testSpecification.jsp | 0 .../test/google/search/testSpecification.jsp | 0 .../searchComments/testSpecification.jsp | 0 .../google/searchQuery/testSpecification.jsp | 0 .../google/searchResult/testSpecification.jsp | 0 .../google/searchTime/testSpecification.jsp | 0 .../google/searchTips/testSpecification.jsp | 0 .../google/spelling/testSpecification.jsp | 0 .../google/startIndex/testSpecification.jsp | 0 .../test/images/spacer.gif | Bin .../test/images/tagunit.gif | Bin .../test/images/white-separator.gif | Bin .../test/index.jsp | 0 .../test/license.html | 0 .../test/page.css | 0 .../test/results.jsp | 0 {google-taglib/htdocs => htdocs}/about.html | 0 {google-taglib/htdocs => htdocs}/docs.html | 0 {google-taglib/htdocs => htdocs}/howto.html | 0 .../htdocs => htdocs}/images/arrow.gif | Bin .../htdocs => htdocs}/images/arrow.jpg | Bin .../htdocs => htdocs}/images/cached.jpg | Bin .../images/cachedresults.jpg | Bin .../htdocs => htdocs}/images/duktumbl.gif | Bin .../htdocs => htdocs}/images/duktumbl.png | Bin .../htdocs => htdocs}/images/google_sm.gif | Bin .../htdocs => htdocs}/images/google_sm.png | Bin .../htdocs => htdocs}/images/jars25.gif | Bin .../htdocs => htdocs}/images/search.jpg | Bin .../images/searchresults.jpg | Bin .../htdocs => htdocs}/images/spelling.jpg | Bin .../htdocs => htdocs}/images/uml.jpg | Bin .../htdocs => htdocs}/images/yellowarrow.gif | Bin .../htdocs => htdocs}/includes/google.css | 0 {google-taglib/htdocs => htdocs}/index.html | 0 {google-taglib/htdocs => htdocs}/license.html | 0 {google-taglib/htdocs => htdocs}/uml.html | 0 {google-taglib/lib => lib}/doccheck.jar | Bin {google-taglib/lib => lib}/googleapi.jar | Bin {google-taglib/lib => lib}/servlet.jar | Bin {google-taglib/lib => lib}/tagunit.jar | Bin {google-taglib/lib => lib}/tlddoc.jar | Bin .../LICENSE-activation.txt | 0 .../LICENSE-apache-soap.txt | 0 .../licenses => licenses}/LICENSE-crimson.txt | 0 .../LICENSE-doccheck.html | 0 .../licenses => licenses}/LICENSE-google.txt | 0 .../LICENSE-javamail.txt | 0 .../licenses => licenses}/LICENSE-tagunit.txt | 0 .../licenses => licenses}/LICENSE.txt | 0 {google-taglib/rss => rss}/.cvsignore | 0 {google-taglib/rss => rss}/GoogleRSS.iml | 0 {google-taglib/rss => rss}/GoogleRSS.ipr | 0 {google-taglib/rss => rss}/GoogleRSS.iws | 0 {google-taglib/rss => rss}/LICENSE.txt | 0 {google-taglib/rss => rss}/README-BUILD.txt | 0 {google-taglib/rss => rss}/README.txt | 0 {google-taglib/rss => rss}/build.properties | 0 {google-taglib/rss => rss}/build.xml | 0 .../google-rss-examples/README.txt | 0 .../google-rss-examples/WEB-INF/web.xml | 0 .../google-rss-examples/index.html | 0 .../rss => rss}/google-rss-examples/key.html | 0 .../rss => rss}/google-rss-examples/key.jsp | 0 .../rss => rss}/google-rss-examples/rss.jsp | 0 .../google-rss-examples/search.html | 0 .../clevercactus/google/AtomGenerator.java | 0 .../google/FeedGenerationException.java | 0 .../clevercactus/google/FeedGenerator.java | 0 .../google/FeedGeneratorFactory.java | 0 .../google/GoogleResultsWrapper.java | 0 .../google/GoogleResultsWrapperItem.java | 0 .../com/clevercactus/google/RSSGenerator.java | 0 .../google/taglibs/SearchResults.java | 0 .../rss => rss}/tlds/google-rss.tld | 0 .../net/thauvin/google/GoogleSearchBean.java | 0 .../net/thauvin/google/TagUtility.java | 0 .../net/thauvin/google/package.html | 0 .../thauvin/google/taglibs/CachedPage.java | 0 .../net/thauvin/google/taglibs/Element.java | 0 .../net/thauvin/google/taglibs/EndIndex.java | 0 .../google/taglibs/EstimatedTotal.java | 0 .../thauvin/google/taglibs/KeySupport.java | 0 .../net/thauvin/google/taglibs/Next.java | 0 .../net/thauvin/google/taglibs/Previous.java | 0 .../thauvin/google/taglibs/QuerySupport.java | 0 .../net/thauvin/google/taglibs/Search.java | 0 .../google/taglibs/SearchComments.java | 0 .../thauvin/google/taglibs/SearchQuery.java | 0 .../thauvin/google/taglibs/SearchResult.java | 0 .../google/taglibs/SearchResultSupport.java | 0 .../thauvin/google/taglibs/SearchTime.java | 0 .../thauvin/google/taglibs/SearchTips.java | 0 .../net/thauvin/google/taglibs/Spelling.java | 0 .../thauvin/google/taglibs/StartIndex.java | 0 .../thauvin/google/taglibs/StyleSupport.java | 0 .../net/thauvin/google/taglibs/package.html | 0 {google-taglib/tlds => tlds}/google-1.2.tld | 0 {google-taglib/tlds => tlds}/google.tld | 0 142 files changed, 204 deletions(-) rename google-taglib/.cvsignore => .gitignore (100%) rename google-taglib/CHANGES.txt => CHANGES.txt (100%) delete mode 100644 CVSROOT/checkoutlist delete mode 100644 CVSROOT/commitinfo delete mode 100644 CVSROOT/config delete mode 100644 CVSROOT/cvswrappers delete mode 100644 CVSROOT/editinfo delete mode 100644 CVSROOT/loginfo delete mode 100644 CVSROOT/modules delete mode 100644 CVSROOT/notify delete mode 100644 CVSROOT/rcsinfo delete mode 100644 CVSROOT/taginfo delete mode 100644 CVSROOT/verifymsg rename google-taglib/GoogleTagLib.iml => GoogleTagLib.iml (100%) rename google-taglib/GoogleTagLib.ipr => GoogleTagLib.ipr (100%) rename google-taglib/GoogleTagLib.iws => GoogleTagLib.iws (100%) rename google-taglib/README-BUILD.txt => README-BUILD.txt (100%) rename google-taglib/README.txt => README.txt (100%) rename google-taglib/build.properties => build.properties (100%) rename google-taglib/build.xml => build.xml (100%) rename {google-taglib/google-examples => google-examples}/README.txt (100%) rename {google-taglib/google-examples => google-examples}/WEB-INF/web.xml (100%) rename {google-taglib/google-examples => google-examples}/advanced.html (100%) rename {google-taglib/google-examples => google-examples}/advanced.jsp (100%) rename {google-taglib/google-examples => google-examples}/cache.html (100%) rename {google-taglib/google-examples => google-examples}/cache.jsp (100%) rename {google-taglib/google-examples => google-examples}/index.html (100%) rename {google-taglib/google-examples => google-examples}/key.html (100%) rename {google-taglib/google-examples => google-examples}/key.jsp (100%) rename {google-taglib/google-examples => google-examples}/search.html (100%) rename {google-taglib/google-examples => google-examples}/search.jsp (100%) rename {google-taglib/google-examples => google-examples}/spelling.html (100%) rename {google-taglib/google-examples => google-examples}/spelling.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/WEB-INF/web.xml (100%) rename {google-taglib/google-tagunit => google-tagunit}/index.html (100%) rename {google-taglib/google-tagunit => google-tagunit}/index.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/error.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/cachedPage/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/element/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/endIndex/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/estimatedTotal/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/index.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/next/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/previous/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/search/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/searchComments/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/searchQuery/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/searchResult/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/searchTime/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/searchTips/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/spelling/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/google/startIndex/testSpecification.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/images/spacer.gif (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/images/tagunit.gif (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/images/white-separator.gif (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/index.jsp (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/license.html (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/page.css (100%) rename {google-taglib/google-tagunit => google-tagunit}/test/results.jsp (100%) rename {google-taglib/htdocs => htdocs}/about.html (100%) rename {google-taglib/htdocs => htdocs}/docs.html (100%) rename {google-taglib/htdocs => htdocs}/howto.html (100%) rename {google-taglib/htdocs => htdocs}/images/arrow.gif (100%) rename {google-taglib/htdocs => htdocs}/images/arrow.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/cached.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/cachedresults.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/duktumbl.gif (100%) rename {google-taglib/htdocs => htdocs}/images/duktumbl.png (100%) rename {google-taglib/htdocs => htdocs}/images/google_sm.gif (100%) rename {google-taglib/htdocs => htdocs}/images/google_sm.png (100%) rename {google-taglib/htdocs => htdocs}/images/jars25.gif (100%) rename {google-taglib/htdocs => htdocs}/images/search.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/searchresults.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/spelling.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/uml.jpg (100%) rename {google-taglib/htdocs => htdocs}/images/yellowarrow.gif (100%) rename {google-taglib/htdocs => htdocs}/includes/google.css (100%) rename {google-taglib/htdocs => htdocs}/index.html (100%) rename {google-taglib/htdocs => htdocs}/license.html (100%) rename {google-taglib/htdocs => htdocs}/uml.html (100%) rename {google-taglib/lib => lib}/doccheck.jar (100%) rename {google-taglib/lib => lib}/googleapi.jar (100%) rename {google-taglib/lib => lib}/servlet.jar (100%) rename {google-taglib/lib => lib}/tagunit.jar (100%) rename {google-taglib/lib => lib}/tlddoc.jar (100%) rename {google-taglib/licenses => licenses}/LICENSE-activation.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE-apache-soap.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE-crimson.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE-doccheck.html (100%) rename {google-taglib/licenses => licenses}/LICENSE-google.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE-javamail.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE-tagunit.txt (100%) rename {google-taglib/licenses => licenses}/LICENSE.txt (100%) rename {google-taglib/rss => rss}/.cvsignore (100%) rename {google-taglib/rss => rss}/GoogleRSS.iml (100%) rename {google-taglib/rss => rss}/GoogleRSS.ipr (100%) rename {google-taglib/rss => rss}/GoogleRSS.iws (100%) rename {google-taglib/rss => rss}/LICENSE.txt (100%) rename {google-taglib/rss => rss}/README-BUILD.txt (100%) rename {google-taglib/rss => rss}/README.txt (100%) rename {google-taglib/rss => rss}/build.properties (100%) rename {google-taglib/rss => rss}/build.xml (100%) rename {google-taglib/rss => rss}/google-rss-examples/README.txt (100%) rename {google-taglib/rss => rss}/google-rss-examples/WEB-INF/web.xml (100%) rename {google-taglib/rss => rss}/google-rss-examples/index.html (100%) rename {google-taglib/rss => rss}/google-rss-examples/key.html (100%) rename {google-taglib/rss => rss}/google-rss-examples/key.jsp (100%) rename {google-taglib/rss => rss}/google-rss-examples/rss.jsp (100%) rename {google-taglib/rss => rss}/google-rss-examples/search.html (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/AtomGenerator.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/FeedGenerationException.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/FeedGenerator.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/FeedGeneratorFactory.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/GoogleResultsWrapper.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/GoogleResultsWrapperItem.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/RSSGenerator.java (100%) rename {google-taglib/rss => rss}/src/com/clevercactus/google/taglibs/SearchResults.java (100%) rename {google-taglib/rss => rss}/tlds/google-rss.tld (100%) rename {google-taglib/src => src}/net/thauvin/google/GoogleSearchBean.java (100%) rename {google-taglib/src => src}/net/thauvin/google/TagUtility.java (100%) rename {google-taglib/src => src}/net/thauvin/google/package.html (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/CachedPage.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/Element.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/EndIndex.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/EstimatedTotal.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/KeySupport.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/Next.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/Previous.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/QuerySupport.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/Search.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchComments.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchQuery.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchResult.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchResultSupport.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchTime.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/SearchTips.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/Spelling.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/StartIndex.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/StyleSupport.java (100%) rename {google-taglib/src => src}/net/thauvin/google/taglibs/package.html (100%) rename {google-taglib/tlds => tlds}/google-1.2.tld (100%) rename {google-taglib/tlds => tlds}/google.tld (100%) diff --git a/google-taglib/.cvsignore b/.gitignore similarity index 100% rename from google-taglib/.cvsignore rename to .gitignore diff --git a/google-taglib/CHANGES.txt b/CHANGES.txt similarity index 100% rename from google-taglib/CHANGES.txt rename to CHANGES.txt diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist deleted file mode 100644 index b04b350..0000000 --- a/CVSROOT/checkoutlist +++ /dev/null @@ -1,13 +0,0 @@ -# The "checkoutlist" file is used to support additional version controlled -# administrative files in $CVSROOT/CVSROOT, such as template files. -# -# The first entry on a line is a filename which will be checked out from -# the corresponding RCS file in the $CVSROOT/CVSROOT directory. -# The remainder of the line is an error message to use if the file cannot -# be checked out. -# -# File format: -# -# [] -# -# comment lines begin with '#' diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo deleted file mode 100644 index b19e7b7..0000000 --- a/CVSROOT/commitinfo +++ /dev/null @@ -1,15 +0,0 @@ -# The "commitinfo" file is used to control pre-commit checks. -# The filter on the right is invoked with the repository and a list -# of files to check. A non-zero exit of the filter program will -# cause the commit to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/config b/CVSROOT/config deleted file mode 100644 index ff43ec0..0000000 --- a/CVSROOT/config +++ /dev/null @@ -1,14 +0,0 @@ -# Set this to "no" if pserver shouldn't check system users/passwords -#SystemAuth=no - -# Put CVS lock files in this directory rather than directly in the repository. -#LockDir=/var/lock/cvs - -# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top -# level of the new working directory when using the `cvs checkout' -# command. -#TopLevelAdmin=no - -# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the -# history file, or a subset as needed (ie `TMAR' logs all write operations) -#LogHistory=TOFEWGCMAR diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers deleted file mode 100644 index 0accaf1..0000000 --- a/CVSROOT/cvswrappers +++ /dev/null @@ -1,23 +0,0 @@ -# This file affects handling of files based on their names. -# -# The -t/-f options allow one to treat directories of files -# as a single file, or to transform a file in other ways on -# its way in and out of CVS. -# -# The -m option specifies whether CVS attempts to merge files. -# -# The -k option specifies keyword expansion (e.g. -kb for binary). -# -# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) -# -# wildcard [option value][option value]... -# -# where option is one of -# -f from cvs filter value: path to filter -# -t to cvs filter value: path to filter -# -m update methodology value: MERGE or COPY -# -k expansion mode value: b, o, kkv, &c -# -# and value is a single-quote delimited value. -# For example: -#*.gif -k 'b' diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo deleted file mode 100644 index d78886c..0000000 --- a/CVSROOT/editinfo +++ /dev/null @@ -1,21 +0,0 @@ -# The "editinfo" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo deleted file mode 100644 index 5a59f0a..0000000 --- a/CVSROOT/loginfo +++ /dev/null @@ -1,26 +0,0 @@ -# The "loginfo" file controls where "cvs commit" log information -# is sent. The first entry on a line is a regular expression which must match -# the directory that the change is being made to, relative to the -# $CVSROOT. If a match is found, then the remainder of the line is a filter -# program that should expect log information on its standard input. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name ALL appears as a regular expression it is always used -# in addition to the first matching regex or DEFAULT. -# -# You may specify a format string as part of the -# filter. The string is composed of a `%' followed -# by a single format character, or followed by a set of format -# characters surrounded by `{' and `}' as separators. The format -# characters are: -# -# s = file name -# V = old version number (pre-checkin) -# v = new version number (post-checkin) -# -# For example: -#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog -# or -#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index cb9e9ef..0000000 --- a/CVSROOT/modules +++ /dev/null @@ -1,26 +0,0 @@ -# Three different line formats are valid: -# key -a aliases... -# key [options] directory -# key [options] directory files... -# -# Where "options" are composed of: -# -i prog Run "prog" on "cvs commit" from top-level of module. -# -o prog Run "prog" on "cvs checkout" of module. -# -e prog Run "prog" on "cvs export" of module. -# -t prog Run "prog" on "cvs rtag" of module. -# -u prog Run "prog" on "cvs update" of module. -# -d dir Place module in directory "dir" instead of module name. -# -l Top-level directory only -- do not recurse. -# -# NOTE: If you change any of the "Run" options above, you'll have to -# release and re-checkout any working directories of these modules. -# -# And "directory" is a path to a directory relative to $CVSROOT. -# -# The "-a" option specifies an alias. An alias is interpreted as if -# everything on the right of the "-a" had been typed on the command line. -# -# You can encode a module within a module by using the special '&' -# character to interpose another module into the current module. This -# can be useful for creating a module that consists of many directories -# spread out over the entire source repository. diff --git a/CVSROOT/notify b/CVSROOT/notify deleted file mode 100644 index 34f0bc2..0000000 --- a/CVSROOT/notify +++ /dev/null @@ -1,12 +0,0 @@ -# The "notify" file controls where notifications from watches set by -# "cvs watch add" or "cvs edit" are sent. The first entry on a line is -# a regular expression which is tested against the directory that the -# change is being made to, relative to the $CVSROOT. If it matches, -# then the remainder of the line is a filter program that should contain -# one occurrence of %s for the user to notify, and information on its -# standard input. -# -# "ALL" or "DEFAULT" can be used in place of the regular expression. -# -# For example: -#ALL mail %s -s "CVS notification" diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo deleted file mode 100644 index 49e59f4..0000000 --- a/CVSROOT/rcsinfo +++ /dev/null @@ -1,13 +0,0 @@ -# The "rcsinfo" file is used to control templates with which the editor -# is invoked on commit and import. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being made to, relative to the -# $CVSROOT. For the first match that is found, then the remainder of the -# line is the name of the file that contains the template. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo deleted file mode 100644 index 274a46d..0000000 --- a/CVSROOT/taginfo +++ /dev/null @@ -1,20 +0,0 @@ -# The "taginfo" file is used to control pre-tag checks. -# The filter on the right is invoked with the following arguments: -# -# $1 -- tagname -# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d -# $3 -- repository -# $4-> file revision [file revision ...] -# -# A non-zero exit of the filter program will cause the tag to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg deleted file mode 100644 index 86f747c..0000000 --- a/CVSROOT/verifymsg +++ /dev/null @@ -1,21 +0,0 @@ -# The "verifymsg" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. diff --git a/google-taglib/GoogleTagLib.iml b/GoogleTagLib.iml similarity index 100% rename from google-taglib/GoogleTagLib.iml rename to GoogleTagLib.iml diff --git a/google-taglib/GoogleTagLib.ipr b/GoogleTagLib.ipr similarity index 100% rename from google-taglib/GoogleTagLib.ipr rename to GoogleTagLib.ipr diff --git a/google-taglib/GoogleTagLib.iws b/GoogleTagLib.iws similarity index 100% rename from google-taglib/GoogleTagLib.iws rename to GoogleTagLib.iws diff --git a/google-taglib/README-BUILD.txt b/README-BUILD.txt similarity index 100% rename from google-taglib/README-BUILD.txt rename to README-BUILD.txt diff --git a/google-taglib/README.txt b/README.txt similarity index 100% rename from google-taglib/README.txt rename to README.txt diff --git a/google-taglib/build.properties b/build.properties similarity index 100% rename from google-taglib/build.properties rename to build.properties diff --git a/google-taglib/build.xml b/build.xml similarity index 100% rename from google-taglib/build.xml rename to build.xml diff --git a/google-taglib/google-examples/README.txt b/google-examples/README.txt similarity index 100% rename from google-taglib/google-examples/README.txt rename to google-examples/README.txt diff --git a/google-taglib/google-examples/WEB-INF/web.xml b/google-examples/WEB-INF/web.xml similarity index 100% rename from google-taglib/google-examples/WEB-INF/web.xml rename to google-examples/WEB-INF/web.xml diff --git a/google-taglib/google-examples/advanced.html b/google-examples/advanced.html similarity index 100% rename from google-taglib/google-examples/advanced.html rename to google-examples/advanced.html diff --git a/google-taglib/google-examples/advanced.jsp b/google-examples/advanced.jsp similarity index 100% rename from google-taglib/google-examples/advanced.jsp rename to google-examples/advanced.jsp diff --git a/google-taglib/google-examples/cache.html b/google-examples/cache.html similarity index 100% rename from google-taglib/google-examples/cache.html rename to google-examples/cache.html diff --git a/google-taglib/google-examples/cache.jsp b/google-examples/cache.jsp similarity index 100% rename from google-taglib/google-examples/cache.jsp rename to google-examples/cache.jsp diff --git a/google-taglib/google-examples/index.html b/google-examples/index.html similarity index 100% rename from google-taglib/google-examples/index.html rename to google-examples/index.html diff --git a/google-taglib/google-examples/key.html b/google-examples/key.html similarity index 100% rename from google-taglib/google-examples/key.html rename to google-examples/key.html diff --git a/google-taglib/google-examples/key.jsp b/google-examples/key.jsp similarity index 100% rename from google-taglib/google-examples/key.jsp rename to google-examples/key.jsp diff --git a/google-taglib/google-examples/search.html b/google-examples/search.html similarity index 100% rename from google-taglib/google-examples/search.html rename to google-examples/search.html diff --git a/google-taglib/google-examples/search.jsp b/google-examples/search.jsp similarity index 100% rename from google-taglib/google-examples/search.jsp rename to google-examples/search.jsp diff --git a/google-taglib/google-examples/spelling.html b/google-examples/spelling.html similarity index 100% rename from google-taglib/google-examples/spelling.html rename to google-examples/spelling.html diff --git a/google-taglib/google-examples/spelling.jsp b/google-examples/spelling.jsp similarity index 100% rename from google-taglib/google-examples/spelling.jsp rename to google-examples/spelling.jsp diff --git a/google-taglib/google-tagunit/WEB-INF/web.xml b/google-tagunit/WEB-INF/web.xml similarity index 100% rename from google-taglib/google-tagunit/WEB-INF/web.xml rename to google-tagunit/WEB-INF/web.xml diff --git a/google-taglib/google-tagunit/index.html b/google-tagunit/index.html similarity index 100% rename from google-taglib/google-tagunit/index.html rename to google-tagunit/index.html diff --git a/google-taglib/google-tagunit/index.jsp b/google-tagunit/index.jsp similarity index 100% rename from google-taglib/google-tagunit/index.jsp rename to google-tagunit/index.jsp diff --git a/google-taglib/google-tagunit/test/error.jsp b/google-tagunit/test/error.jsp similarity index 100% rename from google-taglib/google-tagunit/test/error.jsp rename to google-tagunit/test/error.jsp diff --git a/google-taglib/google-tagunit/test/google/cachedPage/testSpecification.jsp b/google-tagunit/test/google/cachedPage/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/cachedPage/testSpecification.jsp rename to google-tagunit/test/google/cachedPage/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/element/testSpecification.jsp b/google-tagunit/test/google/element/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/element/testSpecification.jsp rename to google-tagunit/test/google/element/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/endIndex/testSpecification.jsp b/google-tagunit/test/google/endIndex/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/endIndex/testSpecification.jsp rename to google-tagunit/test/google/endIndex/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/estimatedTotal/testSpecification.jsp b/google-tagunit/test/google/estimatedTotal/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/estimatedTotal/testSpecification.jsp rename to google-tagunit/test/google/estimatedTotal/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/index.jsp b/google-tagunit/test/google/index.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/index.jsp rename to google-tagunit/test/google/index.jsp diff --git a/google-taglib/google-tagunit/test/google/next/testSpecification.jsp b/google-tagunit/test/google/next/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/next/testSpecification.jsp rename to google-tagunit/test/google/next/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/previous/testSpecification.jsp b/google-tagunit/test/google/previous/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/previous/testSpecification.jsp rename to google-tagunit/test/google/previous/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/search/testSpecification.jsp b/google-tagunit/test/google/search/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/search/testSpecification.jsp rename to google-tagunit/test/google/search/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/searchComments/testSpecification.jsp b/google-tagunit/test/google/searchComments/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/searchComments/testSpecification.jsp rename to google-tagunit/test/google/searchComments/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/searchQuery/testSpecification.jsp b/google-tagunit/test/google/searchQuery/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/searchQuery/testSpecification.jsp rename to google-tagunit/test/google/searchQuery/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/searchResult/testSpecification.jsp b/google-tagunit/test/google/searchResult/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/searchResult/testSpecification.jsp rename to google-tagunit/test/google/searchResult/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/searchTime/testSpecification.jsp b/google-tagunit/test/google/searchTime/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/searchTime/testSpecification.jsp rename to google-tagunit/test/google/searchTime/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/searchTips/testSpecification.jsp b/google-tagunit/test/google/searchTips/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/searchTips/testSpecification.jsp rename to google-tagunit/test/google/searchTips/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/spelling/testSpecification.jsp b/google-tagunit/test/google/spelling/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/spelling/testSpecification.jsp rename to google-tagunit/test/google/spelling/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/google/startIndex/testSpecification.jsp b/google-tagunit/test/google/startIndex/testSpecification.jsp similarity index 100% rename from google-taglib/google-tagunit/test/google/startIndex/testSpecification.jsp rename to google-tagunit/test/google/startIndex/testSpecification.jsp diff --git a/google-taglib/google-tagunit/test/images/spacer.gif b/google-tagunit/test/images/spacer.gif similarity index 100% rename from google-taglib/google-tagunit/test/images/spacer.gif rename to google-tagunit/test/images/spacer.gif diff --git a/google-taglib/google-tagunit/test/images/tagunit.gif b/google-tagunit/test/images/tagunit.gif similarity index 100% rename from google-taglib/google-tagunit/test/images/tagunit.gif rename to google-tagunit/test/images/tagunit.gif diff --git a/google-taglib/google-tagunit/test/images/white-separator.gif b/google-tagunit/test/images/white-separator.gif similarity index 100% rename from google-taglib/google-tagunit/test/images/white-separator.gif rename to google-tagunit/test/images/white-separator.gif diff --git a/google-taglib/google-tagunit/test/index.jsp b/google-tagunit/test/index.jsp similarity index 100% rename from google-taglib/google-tagunit/test/index.jsp rename to google-tagunit/test/index.jsp diff --git a/google-taglib/google-tagunit/test/license.html b/google-tagunit/test/license.html similarity index 100% rename from google-taglib/google-tagunit/test/license.html rename to google-tagunit/test/license.html diff --git a/google-taglib/google-tagunit/test/page.css b/google-tagunit/test/page.css similarity index 100% rename from google-taglib/google-tagunit/test/page.css rename to google-tagunit/test/page.css diff --git a/google-taglib/google-tagunit/test/results.jsp b/google-tagunit/test/results.jsp similarity index 100% rename from google-taglib/google-tagunit/test/results.jsp rename to google-tagunit/test/results.jsp diff --git a/google-taglib/htdocs/about.html b/htdocs/about.html similarity index 100% rename from google-taglib/htdocs/about.html rename to htdocs/about.html diff --git a/google-taglib/htdocs/docs.html b/htdocs/docs.html similarity index 100% rename from google-taglib/htdocs/docs.html rename to htdocs/docs.html diff --git a/google-taglib/htdocs/howto.html b/htdocs/howto.html similarity index 100% rename from google-taglib/htdocs/howto.html rename to htdocs/howto.html diff --git a/google-taglib/htdocs/images/arrow.gif b/htdocs/images/arrow.gif similarity index 100% rename from google-taglib/htdocs/images/arrow.gif rename to htdocs/images/arrow.gif diff --git a/google-taglib/htdocs/images/arrow.jpg b/htdocs/images/arrow.jpg similarity index 100% rename from google-taglib/htdocs/images/arrow.jpg rename to htdocs/images/arrow.jpg diff --git a/google-taglib/htdocs/images/cached.jpg b/htdocs/images/cached.jpg similarity index 100% rename from google-taglib/htdocs/images/cached.jpg rename to htdocs/images/cached.jpg diff --git a/google-taglib/htdocs/images/cachedresults.jpg b/htdocs/images/cachedresults.jpg similarity index 100% rename from google-taglib/htdocs/images/cachedresults.jpg rename to htdocs/images/cachedresults.jpg diff --git a/google-taglib/htdocs/images/duktumbl.gif b/htdocs/images/duktumbl.gif similarity index 100% rename from google-taglib/htdocs/images/duktumbl.gif rename to htdocs/images/duktumbl.gif diff --git a/google-taglib/htdocs/images/duktumbl.png b/htdocs/images/duktumbl.png similarity index 100% rename from google-taglib/htdocs/images/duktumbl.png rename to htdocs/images/duktumbl.png diff --git a/google-taglib/htdocs/images/google_sm.gif b/htdocs/images/google_sm.gif similarity index 100% rename from google-taglib/htdocs/images/google_sm.gif rename to htdocs/images/google_sm.gif diff --git a/google-taglib/htdocs/images/google_sm.png b/htdocs/images/google_sm.png similarity index 100% rename from google-taglib/htdocs/images/google_sm.png rename to htdocs/images/google_sm.png diff --git a/google-taglib/htdocs/images/jars25.gif b/htdocs/images/jars25.gif similarity index 100% rename from google-taglib/htdocs/images/jars25.gif rename to htdocs/images/jars25.gif diff --git a/google-taglib/htdocs/images/search.jpg b/htdocs/images/search.jpg similarity index 100% rename from google-taglib/htdocs/images/search.jpg rename to htdocs/images/search.jpg diff --git a/google-taglib/htdocs/images/searchresults.jpg b/htdocs/images/searchresults.jpg similarity index 100% rename from google-taglib/htdocs/images/searchresults.jpg rename to htdocs/images/searchresults.jpg diff --git a/google-taglib/htdocs/images/spelling.jpg b/htdocs/images/spelling.jpg similarity index 100% rename from google-taglib/htdocs/images/spelling.jpg rename to htdocs/images/spelling.jpg diff --git a/google-taglib/htdocs/images/uml.jpg b/htdocs/images/uml.jpg similarity index 100% rename from google-taglib/htdocs/images/uml.jpg rename to htdocs/images/uml.jpg diff --git a/google-taglib/htdocs/images/yellowarrow.gif b/htdocs/images/yellowarrow.gif similarity index 100% rename from google-taglib/htdocs/images/yellowarrow.gif rename to htdocs/images/yellowarrow.gif diff --git a/google-taglib/htdocs/includes/google.css b/htdocs/includes/google.css similarity index 100% rename from google-taglib/htdocs/includes/google.css rename to htdocs/includes/google.css diff --git a/google-taglib/htdocs/index.html b/htdocs/index.html similarity index 100% rename from google-taglib/htdocs/index.html rename to htdocs/index.html diff --git a/google-taglib/htdocs/license.html b/htdocs/license.html similarity index 100% rename from google-taglib/htdocs/license.html rename to htdocs/license.html diff --git a/google-taglib/htdocs/uml.html b/htdocs/uml.html similarity index 100% rename from google-taglib/htdocs/uml.html rename to htdocs/uml.html diff --git a/google-taglib/lib/doccheck.jar b/lib/doccheck.jar similarity index 100% rename from google-taglib/lib/doccheck.jar rename to lib/doccheck.jar diff --git a/google-taglib/lib/googleapi.jar b/lib/googleapi.jar similarity index 100% rename from google-taglib/lib/googleapi.jar rename to lib/googleapi.jar diff --git a/google-taglib/lib/servlet.jar b/lib/servlet.jar similarity index 100% rename from google-taglib/lib/servlet.jar rename to lib/servlet.jar diff --git a/google-taglib/lib/tagunit.jar b/lib/tagunit.jar similarity index 100% rename from google-taglib/lib/tagunit.jar rename to lib/tagunit.jar diff --git a/google-taglib/lib/tlddoc.jar b/lib/tlddoc.jar similarity index 100% rename from google-taglib/lib/tlddoc.jar rename to lib/tlddoc.jar diff --git a/google-taglib/licenses/LICENSE-activation.txt b/licenses/LICENSE-activation.txt similarity index 100% rename from google-taglib/licenses/LICENSE-activation.txt rename to licenses/LICENSE-activation.txt diff --git a/google-taglib/licenses/LICENSE-apache-soap.txt b/licenses/LICENSE-apache-soap.txt similarity index 100% rename from google-taglib/licenses/LICENSE-apache-soap.txt rename to licenses/LICENSE-apache-soap.txt diff --git a/google-taglib/licenses/LICENSE-crimson.txt b/licenses/LICENSE-crimson.txt similarity index 100% rename from google-taglib/licenses/LICENSE-crimson.txt rename to licenses/LICENSE-crimson.txt diff --git a/google-taglib/licenses/LICENSE-doccheck.html b/licenses/LICENSE-doccheck.html similarity index 100% rename from google-taglib/licenses/LICENSE-doccheck.html rename to licenses/LICENSE-doccheck.html diff --git a/google-taglib/licenses/LICENSE-google.txt b/licenses/LICENSE-google.txt similarity index 100% rename from google-taglib/licenses/LICENSE-google.txt rename to licenses/LICENSE-google.txt diff --git a/google-taglib/licenses/LICENSE-javamail.txt b/licenses/LICENSE-javamail.txt similarity index 100% rename from google-taglib/licenses/LICENSE-javamail.txt rename to licenses/LICENSE-javamail.txt diff --git a/google-taglib/licenses/LICENSE-tagunit.txt b/licenses/LICENSE-tagunit.txt similarity index 100% rename from google-taglib/licenses/LICENSE-tagunit.txt rename to licenses/LICENSE-tagunit.txt diff --git a/google-taglib/licenses/LICENSE.txt b/licenses/LICENSE.txt similarity index 100% rename from google-taglib/licenses/LICENSE.txt rename to licenses/LICENSE.txt diff --git a/google-taglib/rss/.cvsignore b/rss/.cvsignore similarity index 100% rename from google-taglib/rss/.cvsignore rename to rss/.cvsignore diff --git a/google-taglib/rss/GoogleRSS.iml b/rss/GoogleRSS.iml similarity index 100% rename from google-taglib/rss/GoogleRSS.iml rename to rss/GoogleRSS.iml diff --git a/google-taglib/rss/GoogleRSS.ipr b/rss/GoogleRSS.ipr similarity index 100% rename from google-taglib/rss/GoogleRSS.ipr rename to rss/GoogleRSS.ipr diff --git a/google-taglib/rss/GoogleRSS.iws b/rss/GoogleRSS.iws similarity index 100% rename from google-taglib/rss/GoogleRSS.iws rename to rss/GoogleRSS.iws diff --git a/google-taglib/rss/LICENSE.txt b/rss/LICENSE.txt similarity index 100% rename from google-taglib/rss/LICENSE.txt rename to rss/LICENSE.txt diff --git a/google-taglib/rss/README-BUILD.txt b/rss/README-BUILD.txt similarity index 100% rename from google-taglib/rss/README-BUILD.txt rename to rss/README-BUILD.txt diff --git a/google-taglib/rss/README.txt b/rss/README.txt similarity index 100% rename from google-taglib/rss/README.txt rename to rss/README.txt diff --git a/google-taglib/rss/build.properties b/rss/build.properties similarity index 100% rename from google-taglib/rss/build.properties rename to rss/build.properties diff --git a/google-taglib/rss/build.xml b/rss/build.xml similarity index 100% rename from google-taglib/rss/build.xml rename to rss/build.xml diff --git a/google-taglib/rss/google-rss-examples/README.txt b/rss/google-rss-examples/README.txt similarity index 100% rename from google-taglib/rss/google-rss-examples/README.txt rename to rss/google-rss-examples/README.txt diff --git a/google-taglib/rss/google-rss-examples/WEB-INF/web.xml b/rss/google-rss-examples/WEB-INF/web.xml similarity index 100% rename from google-taglib/rss/google-rss-examples/WEB-INF/web.xml rename to rss/google-rss-examples/WEB-INF/web.xml diff --git a/google-taglib/rss/google-rss-examples/index.html b/rss/google-rss-examples/index.html similarity index 100% rename from google-taglib/rss/google-rss-examples/index.html rename to rss/google-rss-examples/index.html diff --git a/google-taglib/rss/google-rss-examples/key.html b/rss/google-rss-examples/key.html similarity index 100% rename from google-taglib/rss/google-rss-examples/key.html rename to rss/google-rss-examples/key.html diff --git a/google-taglib/rss/google-rss-examples/key.jsp b/rss/google-rss-examples/key.jsp similarity index 100% rename from google-taglib/rss/google-rss-examples/key.jsp rename to rss/google-rss-examples/key.jsp diff --git a/google-taglib/rss/google-rss-examples/rss.jsp b/rss/google-rss-examples/rss.jsp similarity index 100% rename from google-taglib/rss/google-rss-examples/rss.jsp rename to rss/google-rss-examples/rss.jsp diff --git a/google-taglib/rss/google-rss-examples/search.html b/rss/google-rss-examples/search.html similarity index 100% rename from google-taglib/rss/google-rss-examples/search.html rename to rss/google-rss-examples/search.html diff --git a/google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java b/rss/src/com/clevercactus/google/AtomGenerator.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/AtomGenerator.java rename to rss/src/com/clevercactus/google/AtomGenerator.java diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java b/rss/src/com/clevercactus/google/FeedGenerationException.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/FeedGenerationException.java rename to rss/src/com/clevercactus/google/FeedGenerationException.java diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java b/rss/src/com/clevercactus/google/FeedGenerator.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/FeedGenerator.java rename to rss/src/com/clevercactus/google/FeedGenerator.java diff --git a/google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java b/rss/src/com/clevercactus/google/FeedGeneratorFactory.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/FeedGeneratorFactory.java rename to rss/src/com/clevercactus/google/FeedGeneratorFactory.java diff --git a/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java b/rss/src/com/clevercactus/google/GoogleResultsWrapper.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapper.java rename to rss/src/com/clevercactus/google/GoogleResultsWrapper.java diff --git a/google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java b/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java rename to rss/src/com/clevercactus/google/GoogleResultsWrapperItem.java diff --git a/google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java b/rss/src/com/clevercactus/google/RSSGenerator.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/RSSGenerator.java rename to rss/src/com/clevercactus/google/RSSGenerator.java diff --git a/google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java b/rss/src/com/clevercactus/google/taglibs/SearchResults.java similarity index 100% rename from google-taglib/rss/src/com/clevercactus/google/taglibs/SearchResults.java rename to rss/src/com/clevercactus/google/taglibs/SearchResults.java diff --git a/google-taglib/rss/tlds/google-rss.tld b/rss/tlds/google-rss.tld similarity index 100% rename from google-taglib/rss/tlds/google-rss.tld rename to rss/tlds/google-rss.tld diff --git a/google-taglib/src/net/thauvin/google/GoogleSearchBean.java b/src/net/thauvin/google/GoogleSearchBean.java similarity index 100% rename from google-taglib/src/net/thauvin/google/GoogleSearchBean.java rename to src/net/thauvin/google/GoogleSearchBean.java diff --git a/google-taglib/src/net/thauvin/google/TagUtility.java b/src/net/thauvin/google/TagUtility.java similarity index 100% rename from google-taglib/src/net/thauvin/google/TagUtility.java rename to src/net/thauvin/google/TagUtility.java diff --git a/google-taglib/src/net/thauvin/google/package.html b/src/net/thauvin/google/package.html similarity index 100% rename from google-taglib/src/net/thauvin/google/package.html rename to src/net/thauvin/google/package.html diff --git a/google-taglib/src/net/thauvin/google/taglibs/CachedPage.java b/src/net/thauvin/google/taglibs/CachedPage.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/CachedPage.java rename to src/net/thauvin/google/taglibs/CachedPage.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/Element.java b/src/net/thauvin/google/taglibs/Element.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/Element.java rename to src/net/thauvin/google/taglibs/Element.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/EndIndex.java b/src/net/thauvin/google/taglibs/EndIndex.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/EndIndex.java rename to src/net/thauvin/google/taglibs/EndIndex.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/EstimatedTotal.java b/src/net/thauvin/google/taglibs/EstimatedTotal.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/EstimatedTotal.java rename to src/net/thauvin/google/taglibs/EstimatedTotal.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/KeySupport.java b/src/net/thauvin/google/taglibs/KeySupport.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/KeySupport.java rename to src/net/thauvin/google/taglibs/KeySupport.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/Next.java b/src/net/thauvin/google/taglibs/Next.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/Next.java rename to src/net/thauvin/google/taglibs/Next.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/Previous.java b/src/net/thauvin/google/taglibs/Previous.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/Previous.java rename to src/net/thauvin/google/taglibs/Previous.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/QuerySupport.java b/src/net/thauvin/google/taglibs/QuerySupport.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/QuerySupport.java rename to src/net/thauvin/google/taglibs/QuerySupport.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/Search.java b/src/net/thauvin/google/taglibs/Search.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/Search.java rename to src/net/thauvin/google/taglibs/Search.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchComments.java b/src/net/thauvin/google/taglibs/SearchComments.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchComments.java rename to src/net/thauvin/google/taglibs/SearchComments.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java b/src/net/thauvin/google/taglibs/SearchQuery.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java rename to src/net/thauvin/google/taglibs/SearchQuery.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchResult.java b/src/net/thauvin/google/taglibs/SearchResult.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchResult.java rename to src/net/thauvin/google/taglibs/SearchResult.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchResultSupport.java b/src/net/thauvin/google/taglibs/SearchResultSupport.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchResultSupport.java rename to src/net/thauvin/google/taglibs/SearchResultSupport.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchTime.java b/src/net/thauvin/google/taglibs/SearchTime.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchTime.java rename to src/net/thauvin/google/taglibs/SearchTime.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchTips.java b/src/net/thauvin/google/taglibs/SearchTips.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/SearchTips.java rename to src/net/thauvin/google/taglibs/SearchTips.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/Spelling.java b/src/net/thauvin/google/taglibs/Spelling.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/Spelling.java rename to src/net/thauvin/google/taglibs/Spelling.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/StartIndex.java b/src/net/thauvin/google/taglibs/StartIndex.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/StartIndex.java rename to src/net/thauvin/google/taglibs/StartIndex.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/StyleSupport.java b/src/net/thauvin/google/taglibs/StyleSupport.java similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/StyleSupport.java rename to src/net/thauvin/google/taglibs/StyleSupport.java diff --git a/google-taglib/src/net/thauvin/google/taglibs/package.html b/src/net/thauvin/google/taglibs/package.html similarity index 100% rename from google-taglib/src/net/thauvin/google/taglibs/package.html rename to src/net/thauvin/google/taglibs/package.html diff --git a/google-taglib/tlds/google-1.2.tld b/tlds/google-1.2.tld similarity index 100% rename from google-taglib/tlds/google-1.2.tld rename to tlds/google-1.2.tld diff --git a/google-taglib/tlds/google.tld b/tlds/google.tld similarity index 100% rename from google-taglib/tlds/google.tld rename to tlds/google.tld