From e0105687fd275c82530a5d1b750b885c21269b4d Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Fri, 10 Oct 2003 09:31:22 +0000
Subject: [PATCH 01/30] This commit was manufactured by cvs2git to create tag
'taglib1-0'.
Sprout from master 2003-10-10 09:31:21 UTC Erik C. Thauvin 'Commit for 1.0 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 acb262f5d75d36f12f58bafd162b1c6b3f60bba7 Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Fri, 10 Oct 2003 20:17:18 +0000
Subject: [PATCH 02/30] Typos fixed.
---
google-taglib/htdocs/howto.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/google-taglib/htdocs/howto.html b/google-taglib/htdocs/howto.html
index ca6ec0d..2947655 100644
--- a/google-taglib/htdocs/howto.html
+++ b/google-taglib/htdocs/howto.html
@@ -71,7 +71,7 @@ body,td,font,.p,a{font-family:arial,sans-serif}
1. Search & Display the
- Results of a Goggle Search
+ Results of a Google Search
1.1 Create a Search Form
1.2 Create a Result Page
@@ -79,7 +79,7 @@ body,td,font,.p,a{font-family:arial,sans-serif}
- 2. Display a Page Cached by Goggle
+ 2. Display a Page Cached by Google
2.1 Create a Search From
2.2 Create a Result Page
@@ -88,7 +88,7 @@ body,td,font,.p,a{font-family:arial,sans-serif}
- 3. Display a Goggle Spelling Suggestion
+ 3. Display a Google Spelling Suggestion
3.1 Create a Search Form
3.2 Create a Result Page
From bed16e985b035b3f21842960388c7febb46063bd Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Mon, 13 Oct 2003 23:43:20 +0000
Subject: [PATCH 03/30] Added support for specifying a file type extension in
the search tag.
---
.../net/thauvin/google/GoogleSearchBean.java | 5 +
.../src/net/thauvin/google/TagUtility.java | 5 +
.../net/thauvin/google/taglibs/Search.java | 254 ++++++++++--------
google-taglib/tlds/google.tld | 5 +
4 files changed, 156 insertions(+), 113 deletions(-)
diff --git a/google-taglib/src/net/thauvin/google/GoogleSearchBean.java b/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
index eca459b..e120882 100644
--- a/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
+++ b/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
@@ -95,6 +95,11 @@ public class GoogleSearchBean
*/
public static final int DEFAULT_START = 0;
+ /**
+ * The default filetype.
+ */
+ public static final String DEFAULT_TYPE = "";
+
/**
* The next keyword.
*/
diff --git a/google-taglib/src/net/thauvin/google/TagUtility.java b/google-taglib/src/net/thauvin/google/TagUtility.java
index 20e56b2..8feadd2 100644
--- a/google-taglib/src/net/thauvin/google/TagUtility.java
+++ b/google-taglib/src/net/thauvin/google/TagUtility.java
@@ -147,6 +147,11 @@ public class TagUtility
*/
public static final String START_PARAM = "start";
+ /**
+ * The name of the (file) type request parameter.
+ */
+ public static final String TYPE_PARAM = "type";
+
/**
* Protected constructor to disable instantiation.
*/
diff --git a/google-taglib/src/net/thauvin/google/taglibs/Search.java b/google-taglib/src/net/thauvin/google/taglibs/Search.java
index be161e5..49f1d1f 100644
--- a/google-taglib/src/net/thauvin/google/taglibs/Search.java
+++ b/google-taglib/src/net/thauvin/google/taglibs/Search.java
@@ -42,7 +42,6 @@ import net.thauvin.google.TagUtility;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
-
/**
* A custom tag used to perform Google searches.
*
@@ -54,14 +53,15 @@ import javax.servlet.jsp.PageContext;
public class Search extends QuerySupport
{
private GoogleSearchBean bean = null;
- private String lr = GoogleSearchBean.DEFAULT_LR;
- private String restrict = GoogleSearchBean.DEFAULT_RESTRICT;
- private String site = GoogleSearchBean.DEFAULT_SITE;
private boolean cache = GoogleSearchBean.DEFAULT_CACHE;
private boolean filter = GoogleSearchBean.DEFAULT_FILTER;
- private boolean safeSearch = GoogleSearchBean.DEFAULT_SAFE_SEARCH;
+ private String lr = GoogleSearchBean.DEFAULT_LR;
private int maxResults = GoogleSearchBean.DEFAULT_MAX_RESULTS;
+ private String restrict = GoogleSearchBean.DEFAULT_RESTRICT;
+ private boolean safeSearch = GoogleSearchBean.DEFAULT_SAFE_SEARCH;
+ private String site = GoogleSearchBean.DEFAULT_SITE;
private int start = GoogleSearchBean.DEFAULT_START;
+ private String type = GoogleSearchBean.DEFAULT_TYPE;
/**
* Sets the cache attribute.
@@ -106,7 +106,7 @@ public class Search extends QuerySupport
}
catch (NumberFormatException e)
{
- ; // Do nothing
+ ;// Do nothing
}
}
@@ -153,116 +153,18 @@ public class Search extends QuerySupport
}
catch (NumberFormatException e)
{
- ; // Do nothing
+ ;// Do nothing
}
}
/**
- * doEndTag method.
+ * Sets the (file) type attribute
*
- * @return EVAL_PAGE
- * @exception JspException
+ * @param type The new attribute value.
*/
- public int doEndTag()
- throws JspException
+ public final void setType(String type)
{
- final String query = getQuery();
-
- if (TagUtility.isValidString(query, true))
- {
- try
- {
- bean.setProxyServer(pageContext.getServletContext()
- .getInitParameter(TagUtility.GOOGLE_PROXY_HOST),
- pageContext.getServletContext()
- .getInitParameter(TagUtility.GOOGLE_PROXY_PORT),
- pageContext.getServletContext()
- .getInitParameter(TagUtility.GOOGLE_PROXY_USERNAME),
- pageContext.getServletContext()
- .getInitParameter(TagUtility.GOOGLE_PROXY_PASSWORD));
-
- bean.getGoogleSearch(getKey(), getSite() + getQuery(),
- getStart(), getMaxResults(), getFilter(),
- getRestrict(), getSafeSearch(), getLr());
- }
- catch (Exception e)
- {
- throw TagUtility.outputError("search", e);
- }
- }
- else if (!getCache())
- {
- bean.reset();
- }
-
- // Reset the values
- reset();
-
- return EVAL_PAGE;
- }
-
- /**
- * doStartTag method.
- *
- * @return EVAL_BODY_TAG.
- * @exception JspException
- */
- public int doStartTag()
- throws JspException
- {
- // Get the Google bean
- bean = TagUtility.getGoogleSearchBean(pageContext);
-
- // Create a new bean if it doesn't exists
- if (bean == null)
- {
- try
- {
- bean = new GoogleSearchBean();
-
- // Set the bean as named session attribute
- pageContext.setAttribute(TagUtility.GOOGLE_SEARCH_BEAN, bean,
- PageContext.SESSION_SCOPE);
- }
- catch (Exception e)
- {
- throw new JspException("An unknown error ocurred while creating the Google search bean.");
- }
- }
-
- return EVAL_BODY_TAG;
- }
-
- /**
- * Release method.
- */
- public void release()
- {
- super.release();
-
- // Reset all attributes
- start = GoogleSearchBean.DEFAULT_START;
- maxResults = GoogleSearchBean.DEFAULT_MAX_RESULTS;
- filter = GoogleSearchBean.DEFAULT_FILTER;
- safeSearch = GoogleSearchBean.DEFAULT_SAFE_SEARCH;
- restrict = GoogleSearchBean.DEFAULT_RESTRICT;
- lr = GoogleSearchBean.DEFAULT_LR;
- site = GoogleSearchBean.DEFAULT_SITE;
- cache = GoogleSearchBean.DEFAULT_CACHE;
-
- // Reset the bean
- bean = null;
-
- // Reset the values
- reset();
- }
-
- /**
- * Reset the values.
- */
- protected void reset()
- {
- super.reset();
+ this.type = type;
}
/**
@@ -352,6 +254,23 @@ public class Search extends QuerySupport
return getIntParam(TagUtility.START_PARAM, start);
}
+ /**
+ * Returns the (file) type attribute.
+ *
+ * @return The attribute value
+ */
+ private final String getType()
+ {
+ String type = getStringParam(TagUtility.TYPE_PARAM, this.type);
+
+ if (type.length() > 0)
+ {
+ return (" filetype:" + type);
+ }
+
+ return "";
+ }
+
/**
* Converts a request parameter to a boolean.
*
@@ -362,7 +281,7 @@ public class Search extends QuerySupport
private boolean getBoolParam(String paramName, boolean defaultValue)
{
String param =
- TagUtility.getParameter(pageContext.getRequest(), paramName);
+ TagUtility.getParameter(pageContext.getRequest(), paramName);
if (TagUtility.isValidString(param, true))
{
@@ -382,7 +301,7 @@ public class Search extends QuerySupport
private int getIntParam(String paramName, int defaultValue)
{
String param =
- TagUtility.getParameter(pageContext.getRequest(), paramName);
+ TagUtility.getParameter(pageContext.getRequest(), paramName);
if (TagUtility.isValidString(param, true))
{
@@ -392,7 +311,7 @@ public class Search extends QuerySupport
}
catch (NumberFormatException e)
{
- ; // Do nothing
+ ;// Do nothing
}
}
@@ -409,7 +328,7 @@ public class Search extends QuerySupport
private String getStringParam(String paramName, String defaultValue)
{
String param =
- TagUtility.getParameter(pageContext.getRequest(), paramName);
+ TagUtility.getParameter(pageContext.getRequest(), paramName);
if (TagUtility.isValidString(param, true))
{
@@ -418,4 +337,113 @@ public class Search extends QuerySupport
return defaultValue;
}
+
+ /**
+ * doEndTag method.
+ *
+ * @return EVAL_PAGE
+ * @exception JspException
+ */
+ public int doEndTag()
+ throws JspException
+ {
+ final String query = getQuery();
+
+ if (TagUtility.isValidString(query, true))
+ {
+ try
+ {
+ bean.setProxyServer(pageContext.getServletContext()
+ .getInitParameter(TagUtility.GOOGLE_PROXY_HOST),
+ pageContext.getServletContext()
+ .getInitParameter(TagUtility.GOOGLE_PROXY_PORT),
+ pageContext.getServletContext()
+ .getInitParameter(TagUtility.GOOGLE_PROXY_USERNAME),
+ pageContext.getServletContext()
+ .getInitParameter(TagUtility.GOOGLE_PROXY_PASSWORD));
+
+ bean.getGoogleSearch(getKey(), getSite() + getQuery() + getType(),
+ getStart(), getMaxResults(), getFilter(),
+ getRestrict(), getSafeSearch(), getLr());
+ }
+ catch (Exception e)
+ {
+ throw TagUtility.outputError("search", e);
+ }
+ }
+ else if (!getCache())
+ {
+ bean.reset();
+ }
+
+ // Reset the values
+ reset();
+
+ return EVAL_PAGE;
+ }
+
+ /**
+ * doStartTag method.
+ *
+ * @return EVAL_BODY_TAG.
+ * @exception JspException
+ */
+ public int doStartTag()
+ throws JspException
+ {
+ // Get the Google bean
+ bean = TagUtility.getGoogleSearchBean(pageContext);
+
+ // Create a new bean if it doesn't exists
+ if (bean == null)
+ {
+ try
+ {
+ bean = new GoogleSearchBean();
+
+ // Set the bean as named session attribute
+ pageContext.setAttribute(TagUtility.GOOGLE_SEARCH_BEAN, bean,
+ PageContext.SESSION_SCOPE);
+ }
+ catch (Exception e)
+ {
+ throw new JspException("An unknown error ocurred while creating the Google search bean.");
+ }
+ }
+
+ return EVAL_BODY_TAG;
+ }
+
+ /**
+ * Release method.
+ */
+ public void release()
+ {
+ super.release();
+
+ // Reset all attributes
+ start = GoogleSearchBean.DEFAULT_START;
+ maxResults = GoogleSearchBean.DEFAULT_MAX_RESULTS;
+ filter = GoogleSearchBean.DEFAULT_FILTER;
+ safeSearch = GoogleSearchBean.DEFAULT_SAFE_SEARCH;
+ restrict = GoogleSearchBean.DEFAULT_RESTRICT;
+ lr = GoogleSearchBean.DEFAULT_LR;
+ site = GoogleSearchBean.DEFAULT_SITE;
+ cache = GoogleSearchBean.DEFAULT_CACHE;
+ type = GoogleSearchBean.DEFAULT_TYPE;
+
+ // Reset the bean
+ bean = null;
+
+ // Reset the values
+ reset();
+ }
+
+ /**
+ * Reset the values.
+ */
+ protected void reset()
+ {
+ super.reset();
+ }
}
diff --git a/google-taglib/tlds/google.tld b/google-taglib/tlds/google.tld
index ae1569d..990665d 100644
--- a/google-taglib/tlds/google.tld
+++ b/google-taglib/tlds/google.tld
@@ -162,6 +162,11 @@
false
true
+
+ type
+ false
+ true
+
From 31797b7b7cfb2a3cb22ad929b080855c53e04a1b Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Mon, 13 Oct 2003 23:44:03 +0000
Subject: [PATCH 04/30] Added Diego's info.
---
google-taglib/htdocs/about.html | 2 --
1 file changed, 2 deletions(-)
diff --git a/google-taglib/htdocs/about.html b/google-taglib/htdocs/about.html
index d274d20..0d80ec2 100644
--- a/google-taglib/htdocs/about.html
+++ b/google-taglib/htdocs/about.html
@@ -71,11 +71,9 @@ body,td,font,p,a{font-family:arial,sans-serif}
Matt Croydon
-
From 489f08cb6276a2ef4cc909573144366bd1ebc457 Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Tue, 14 Oct 2003 08:15:26 +0000
Subject: [PATCH 05/30] Added support for specifying a file type extension in
the search tag.
---
google-taglib/htdocs/docs.html | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/google-taglib/htdocs/docs.html b/google-taglib/htdocs/docs.html
index 3fd90bd..7290805 100644
--- a/google-taglib/htdocs/docs.html
+++ b/google-taglib/htdocs/docs.html
@@ -434,6 +434,15 @@ code {font-size:10pt}
site.
|
+
+
+
+ type
+
+ |
+ Specifies the file type to be searched. (e.g.: pdf) |
+ |
+
For detailed information on the above Google search options,
From 2242eb2cb26a98d623f5003c3825e76473c58baf Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Tue, 14 Oct 2003 13:01:12 +0000
Subject: [PATCH 06/30] Changed the behavior of the SearchQuery tag. By default
only the search keywords (or phrase) are returned. To return the full query
(including preset site and file type options) the "type" attribute should be
set to "full".
---
google-taglib/htdocs/docs.html | 44 +++++++------------
.../net/thauvin/google/GoogleSearchBean.java | 25 +++++++++++
.../net/thauvin/google/taglibs/Search.java | 2 +
.../thauvin/google/taglibs/SearchQuery.java | 37 ++++++++++++++--
google-taglib/tlds/google.tld | 7 ++-
5 files changed, 83 insertions(+), 32 deletions(-)
diff --git a/google-taglib/htdocs/docs.html b/google-taglib/htdocs/docs.html
index 7290805..8780f4a 100644
--- a/google-taglib/htdocs/docs.html
+++ b/google-taglib/htdocs/docs.html
@@ -427,7 +427,7 @@ code {font-size:10pt}
|
Restricts the search to documents within the specfied
@@ -437,7 +437,7 @@ code {font-size:10pt}
|
Specifies the file type to be searched. (e.g.: pdf) |
@@ -675,12 +675,9 @@ code {font-size:10pt}
The <google:next/> tag is used to
-
-
used to display a link to more search results.
The <google:previous/> tag is used to used to display a link
to previous search results.
-
Tag Syntax
@@ -739,11 +736,8 @@ code {font-size:10pt}
- The <google:searchComments/>
- tag is used to
-
-
- display the comments (if any) included with the current result set.
+ The <google:searchComments/>
+ tag is used to display the comments (if any) included with the current result set.
@@ -755,14 +749,15 @@ code {font-size:10pt}
|
- The <google:searchQuery/>
- tag is used to
-
-
- display the text of the current query.
-
+ The <google:searchQuery/>
tag is used to display
+ the text of the current query.
+ The specified search keywords (or phrase) are returned by default.
+ To display the full query (including preset site and
+ file type options), set the type
attribute
+ to full.
+
@@ -773,12 +768,9 @@ code {font-size:10pt}
- The <google:searchTime/>
- tag is used to
-
-
- display the total server time used to return the search results, measured in
- seconds.
+ The <google:searchTime/>
+ tag is used to display the total server time used to return the search results,
+ measured in seconds.
@@ -790,11 +782,9 @@ code {font-size:10pt}
- The <google:searchTips/>
- tag is used to
-
-
- display the tips (if any) included with the current result set.
+ The <google:searchTips/>
+ tag is used to display the tips (if any) included with the current result
+ set.
diff --git a/google-taglib/src/net/thauvin/google/GoogleSearchBean.java b/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
index e120882..32eb406 100644
--- a/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
+++ b/google-taglib/src/net/thauvin/google/GoogleSearchBean.java
@@ -115,6 +115,7 @@ public class GoogleSearchBean
"The authorization key has not been specified.";
private GoogleSearch service = null;
private GoogleSearchResult result = null;
+ private String keywords = null;
private GoogleSearchResultElement elements[] = null;
private boolean keySet = false;
private int maxResults = 10;
@@ -168,6 +169,26 @@ public class GoogleSearchBean
return keySet;
}
+ /**
+ * Sets the search keywords.
+ *
+ * @param keywords The keywords
+ */
+ public final void setKeywords(String keywords)
+ {
+ this.keywords = keywords;
+ }
+
+ /**
+ * Returns the keywords.
+ *
+ * @return The keywords value.
+ */
+ public final String getKeywords()
+ {
+ return this.keywords;
+ }
+
/**
* Sets the HTTP proxy host, port, user name and password.
*
@@ -578,6 +599,10 @@ public class GoogleSearchBean
{
return String.valueOf(result.getDocumentFiltering());
}
+ else if (property.equalsIgnoreCase("searchKeywords"))
+ {
+ return getKeywords();
+ }
else if (property.equalsIgnoreCase("searchQuery"))
{
return result.getSearchQuery();
diff --git a/google-taglib/src/net/thauvin/google/taglibs/Search.java b/google-taglib/src/net/thauvin/google/taglibs/Search.java
index 49f1d1f..c8b1f43 100644
--- a/google-taglib/src/net/thauvin/google/taglibs/Search.java
+++ b/google-taglib/src/net/thauvin/google/taglibs/Search.java
@@ -362,6 +362,8 @@ public class Search extends QuerySupport
pageContext.getServletContext()
.getInitParameter(TagUtility.GOOGLE_PROXY_PASSWORD));
+ bean.setKeywords(getQuery());
+
bean.getGoogleSearch(getKey(), getSite() + getQuery() + getType(),
getStart(), getMaxResults(), getFilter(),
getRestrict(), getSafeSearch(), getLr());
diff --git a/google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java b/google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java
index de530a7..47da919 100644
--- a/google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java
+++ b/google-taglib/src/net/thauvin/google/taglibs/SearchQuery.java
@@ -4,14 +4,14 @@
* Copyright (c) 2002-2003, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without
+ * 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,
+ * 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.
*
@@ -20,7 +20,7 @@
* 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,
+ * 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,
@@ -36,6 +36,8 @@
*/
package net.thauvin.google.taglibs;
+import net.thauvin.google.TagUtility;
+
/**
* A custom tag used to retrieve the query string of a Google search.
@@ -47,6 +49,28 @@ package net.thauvin.google.taglibs;
*/
public class SearchQuery extends SearchResultSupport
{
+ private String type = null;
+
+ /**
+ * Sets the type attribute
+ *
+ * @param type The new attribute value.
+ */
+ public final void setType(String type)
+ {
+ this.type = type;
+ }
+
+ /**
+ * Release method.
+ */
+ public void release()
+ {
+ super.release();
+
+ type = null;
+ }
+
/**
* Returns the property provided by this tag.
*
@@ -54,7 +78,12 @@ public class SearchQuery extends SearchResultSupport
*/
protected String getPropertyName()
{
- return "searchQuery";
+ if (TagUtility.isValidString(type) && type.equalsIgnoreCase("full"))
+ {
+ return "searchQuery";
+ }
+
+ return "searchKeywords";
}
/**
diff --git a/google-taglib/tlds/google.tld b/google-taglib/tlds/google.tld
index 990665d..68b0b49 100644
--- a/google-taglib/tlds/google.tld
+++ b/google-taglib/tlds/google.tld
@@ -181,7 +181,12 @@
net.thauvin.google.taglibs.SearchQuery
empty
Displays the current search query.
-
+
+ type
+ false
+ true
+
+
searchResult
From 4dbc60af5a6d2574eab9f91ab4592baaf32fe0a0 Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Thu, 16 Oct 2003 12:16:55 +0000
Subject: [PATCH 07/30] Added support for the src and tlddoc targets.
---
google-taglib/.cvsignore | 1 +
google-taglib/build.properties | 4 +++
google-taglib/build.xml | 53 +++++++++++++++++++++++-------
google-taglib/htdocs/about.html | 1 +
google-taglib/htdocs/docs.html | 6 ++--
google-taglib/htdocs/howto.html | 6 ++--
google-taglib/htdocs/index.html | 3 +-
google-taglib/htdocs/license.html | 1 +
google-taglib/lib/tlddoc.jar | Bin 0 -> 149902 bytes
google-taglib/tlds/google.tld | 27 +++++++++++++--
10 files changed, 81 insertions(+), 21 deletions(-)
create mode 100644 google-taglib/lib/tlddoc.jar
diff --git a/google-taglib/.cvsignore b/google-taglib/.cvsignore
index c92873e..ec05815 100644
--- a/google-taglib/.cvsignore
+++ b/google-taglib/.cvsignore
@@ -1,6 +1,7 @@
build
dist
javadoc
+tlddoc
*.bat
key.txt
ChangeLog
\ No newline at end of file
diff --git a/google-taglib/build.properties b/google-taglib/build.properties
index ae81e9c..ea86013 100644
--- a/google-taglib/build.properties
+++ b/google-taglib/build.properties
@@ -19,6 +19,10 @@ javadoc.dir=javadoc
javadoc.title=Google Tag Library
javadoc.packages=net.thauvin.google.*
+# TLDDoc
+tlddoc.dir=tlddoc
+
# Docs
+doc.dir=htdocs
doc.license=LICENSE.txt
doc.readme=README.txt
\ No newline at end of file
diff --git a/google-taglib/build.xml b/google-taglib/build.xml
index c497ff0..0aa066a 100644
--- a/google-taglib/build.xml
+++ b/google-taglib/build.xml
@@ -27,6 +27,7 @@
+
@@ -44,28 +45,33 @@
+
+
+
+
+
+
-
+
-
-
+
-
-
+
+
-
+
@@ -78,14 +84,30 @@
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -96,12 +118,21 @@
+
+
+
+
+
+
+
+
+
-
+
diff --git a/google-taglib/htdocs/about.html b/google-taglib/htdocs/about.html
index 0d80ec2..416ad05 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}
Documentation
HowTo
Javadoc
+ TLD
About
diff --git a/google-taglib/htdocs/docs.html b/google-taglib/htdocs/docs.html
index 8780f4a..a7592ba 100644
--- a/google-taglib/htdocs/docs.html
+++ b/google-taglib/htdocs/docs.html
@@ -32,10 +32,10 @@ code {font-size:10pt}
Overview
Download
-
Documentation
-
+
Documentation
HowTo
Javadoc
+ TLD
About
@@ -430,7 +430,7 @@ code {font-size:10pt}
site
- Restricts the search to documents within the specfied
+ | Restricts the search to documents within the specified
site. |
|
diff --git a/google-taglib/htdocs/howto.html b/google-taglib/htdocs/howto.html
index 2947655..a3205eb 100644
--- a/google-taglib/htdocs/howto.html
+++ b/google-taglib/htdocs/howto.html
@@ -32,9 +32,9 @@ body,td,font,.p,a{font-family:arial,sans-serif}
Overview
Download
Documentation
-
HowTo
-
- Javadoc
+
HowTo
+ Javadoc
+ TLD
About
diff --git a/google-taglib/htdocs/index.html b/google-taglib/htdocs/index.html
index 4af3e52..ec419cb 100644
--- a/google-taglib/htdocs/index.html
+++ b/google-taglib/htdocs/index.html
@@ -29,7 +29,8 @@ body,td,font,p,a{font-family:arial,sans-serif}
Download
Documentation
HowTo
- Javadoc
+ Javadoc
+ TLD
About
diff --git a/google-taglib/htdocs/license.html b/google-taglib/htdocs/license.html
index 64a9539..057c5e4 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}
Documentation
HowTo
Javadoc
+ TLD
About
diff --git a/google-taglib/lib/tlddoc.jar b/google-taglib/lib/tlddoc.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b82f56d2b7ec35729061ece05691ae6aed54a56d
GIT binary patch
literal 149902
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 JpfA5p8NO7r7j>aPYT0}yvUryb5rtE
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