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
+