001: /*
002: * WebSphinx web-crawling toolkit
003: *
004: * Copyright (c) 1998-2002 Carnegie Mellon University. All rights
005: * reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
020: * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
021: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
022: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
023: * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
024: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
025: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
026: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
027: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
028: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
029: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: *
031: */
032:
033: package websphinx;
034:
035: import java.net.URL;
036: import java.net.MalformedURLException;
037:
038: /**
039: * Button element in an HTML form -- for example, <INPUT TYPE=submit> or <INPUT TYPE=image>.
040: *
041: * @author Rob Miller
042: * @see Page
043: * @see Link
044: */
045: public class FormButton extends Link {
046:
047: Form form;
048:
049: /**
050: * Make a LinkElement from a start tag and end tag and its containing form.
051: * The tags and form must be on the same page.
052: * @param startTag Start tag of button
053: * @param endTag End tag of button (or null if none)
054: * @param form Form containing this button
055: */
056: public FormButton(Tag startTag, Tag endTag, Form form)
057: throws MalformedURLException {
058: super (startTag, endTag, null);
059: this .form = form;
060: if (form == null)
061: throw new MalformedURLException();
062: }
063:
064: /**
065: * Get the URL.
066: * @return the URL of the link
067: */
068: public URL getURL() {
069: if (url == null)
070: try {
071: url = urlFromHref(getStartTag(), null);
072: } catch (MalformedURLException e) {
073: url = null;
074: }
075:
076: return url;
077: }
078:
079: /**
080: * Get the form.
081: * @return the form containing this button
082: */
083: public Form getForm() {
084: return form;
085: }
086:
087: /**
088: * Get the method used to access this link.
089: * @return GET or POST.
090: */
091: public int getMethod() {
092: return form.getMethod();
093: }
094:
095: /**
096: * Construct the URL for this button, from its start tag and a base URL (for relative references).
097: * @param tag Start tag of button, such as <INPUT TYPE=submit>.
098: * @param base Base URL used for relative references
099: * @return URL to which the button points
100: */
101: protected URL urlFromHref(Tag tag, URL base)
102: throws MalformedURLException {
103: if (parent == null || form == null)
104: // can't figure out URL until we're linked into an HTML element tree
105: // containing our complete form
106: return null;
107: return form.makeQuery(this);
108: }
109:
110: }
|