709 } 710 711 /** 712 * Fetches a stream for the given URL, which is about to 713 * be loaded by the <code>setPage</code> method. By 714 * default, this simply opens the URL and returns the 715 * stream. This can be reimplemented to do useful things 716 * like fetch the stream from a cache, monitor the progress 717 * of the stream, etc. 718 * <p> 719 * This method is expected to have the side effect of 720 * establishing the content type, and therefore setting the 721 * appropriate <code>EditorKit</code> to use for loading the stream. 722 * <p> 723 * If this the stream was an http connection, redirects 724 * will be followed and the resulting URL will be set as 725 * the <code>Document.StreamDescriptionProperty</code> so that relative 726 * URL's can be properly resolved. 727 * 728 * @param page the URL of the page 729 */ 730 protected InputStream getStream(URL page) throws IOException { 731 final URLConnection conn = page.openConnection(); 732 if (conn instanceof HttpURLConnection) { 733 HttpURLConnection hconn = (HttpURLConnection) conn; 734 hconn.setInstanceFollowRedirects(false); 735 Object postData = getPostData(); 736 if (postData != null) { 737 handlePostData(hconn, postData); 738 } 739 int response = hconn.getResponseCode(); 740 boolean redirect = (response >= 300 && response <= 399); 741 742 /* 743 * In the case of a redirect, we want to actually change the URL 744 * that was input to the new, redirected URL 745 */ 746 if (redirect) { 747 String loc = conn.getHeaderField("Location"); 748 if (loc.startsWith("http", 0)) { 1695 /** 1696 * This class provides support for <code>AccessibleHypertext</code>, 1697 * and is used in instances where the <code>EditorKit</code> 1698 * installed in this <code>JEditorPane</code> is an instance of 1699 * <code>HTMLEditorKit</code>. 1700 * <p> 1701 * <strong>Warning:</strong> 1702 * Serialized objects of this class will not be compatible with 1703 * future Swing releases. The current serialization support is 1704 * appropriate for short term storage or RMI between applications running 1705 * the same version of Swing. As of 1.4, support for long term storage 1706 * of all JavaBeans™ 1707 * has been added to the <code>java.beans</code> package. 1708 * Please see {@link java.beans.XMLEncoder}. 1709 */ 1710 @SuppressWarnings("serial") // Same-version serialization only 1711 protected class AccessibleJEditorPaneHTML extends AccessibleJEditorPane { 1712 1713 private AccessibleContext accessibleContext; 1714 1715 public AccessibleText getAccessibleText() { 1716 return new JEditorPaneAccessibleHypertextSupport(); 1717 } 1718 1719 protected AccessibleJEditorPaneHTML () { 1720 HTMLEditorKit kit = (HTMLEditorKit)JEditorPane.this.getEditorKit(); 1721 accessibleContext = kit.getAccessibleContext(); 1722 } 1723 1724 /** 1725 * Returns the number of accessible children of the object. 1726 * 1727 * @return the number of accessible children of the object. 1728 */ 1729 public int getAccessibleChildrenCount() { 1730 if (accessibleContext != null) { 1731 return accessibleContext.getAccessibleChildrenCount(); 1732 } else { 1733 return 0; 1734 } 1735 } 1736 1737 /** 1738 * Returns the specified Accessible child of the object. The Accessible 1774 return null; 1775 } 1776 } else { 1777 return null; 1778 } 1779 } 1780 } 1781 1782 /** 1783 * What's returned by 1784 * <code>AccessibleJEditorPaneHTML.getAccessibleText</code>. 1785 * 1786 * Provides support for <code>AccessibleHypertext</code> in case 1787 * there is an HTML document being displayed in this 1788 * <code>JEditorPane</code>. 1789 * 1790 */ 1791 protected class JEditorPaneAccessibleHypertextSupport 1792 extends AccessibleJEditorPane implements AccessibleHypertext { 1793 1794 public class HTMLLink extends AccessibleHyperlink { 1795 Element element; 1796 1797 public HTMLLink(Element e) { 1798 element = e; 1799 } 1800 1801 /** 1802 * Since the document a link is associated with may have 1803 * changed, this method returns whether this Link is valid 1804 * anymore (with respect to the document it references). 1805 * 1806 * @return a flag indicating whether this link is still valid with 1807 * respect to the AccessibleHypertext it belongs to 1808 */ 1809 public boolean isValid() { 1810 return JEditorPaneAccessibleHypertextSupport.this.linksValid; 1811 } 1812 1813 /** 1814 * Returns the number of accessible actions available in this Link 1815 * If there are more than one, the first one is NOT considered the 1816 * "default" action of this LINK object (e.g. in an HTML imagemap). | 709 } 710 711 /** 712 * Fetches a stream for the given URL, which is about to 713 * be loaded by the <code>setPage</code> method. By 714 * default, this simply opens the URL and returns the 715 * stream. This can be reimplemented to do useful things 716 * like fetch the stream from a cache, monitor the progress 717 * of the stream, etc. 718 * <p> 719 * This method is expected to have the side effect of 720 * establishing the content type, and therefore setting the 721 * appropriate <code>EditorKit</code> to use for loading the stream. 722 * <p> 723 * If this the stream was an http connection, redirects 724 * will be followed and the resulting URL will be set as 725 * the <code>Document.StreamDescriptionProperty</code> so that relative 726 * URL's can be properly resolved. 727 * 728 * @param page the URL of the page 729 * @return a stream for the URL which is about to be loaded 730 * @throws IOException if an I/O problem occurs 731 */ 732 protected InputStream getStream(URL page) throws IOException { 733 final URLConnection conn = page.openConnection(); 734 if (conn instanceof HttpURLConnection) { 735 HttpURLConnection hconn = (HttpURLConnection) conn; 736 hconn.setInstanceFollowRedirects(false); 737 Object postData = getPostData(); 738 if (postData != null) { 739 handlePostData(hconn, postData); 740 } 741 int response = hconn.getResponseCode(); 742 boolean redirect = (response >= 300 && response <= 399); 743 744 /* 745 * In the case of a redirect, we want to actually change the URL 746 * that was input to the new, redirected URL 747 */ 748 if (redirect) { 749 String loc = conn.getHeaderField("Location"); 750 if (loc.startsWith("http", 0)) { 1697 /** 1698 * This class provides support for <code>AccessibleHypertext</code>, 1699 * and is used in instances where the <code>EditorKit</code> 1700 * installed in this <code>JEditorPane</code> is an instance of 1701 * <code>HTMLEditorKit</code>. 1702 * <p> 1703 * <strong>Warning:</strong> 1704 * Serialized objects of this class will not be compatible with 1705 * future Swing releases. The current serialization support is 1706 * appropriate for short term storage or RMI between applications running 1707 * the same version of Swing. As of 1.4, support for long term storage 1708 * of all JavaBeans™ 1709 * has been added to the <code>java.beans</code> package. 1710 * Please see {@link java.beans.XMLEncoder}. 1711 */ 1712 @SuppressWarnings("serial") // Same-version serialization only 1713 protected class AccessibleJEditorPaneHTML extends AccessibleJEditorPane { 1714 1715 private AccessibleContext accessibleContext; 1716 1717 /** 1718 * Returns the accessible text. 1719 * @return the accessible text 1720 */ 1721 public AccessibleText getAccessibleText() { 1722 return new JEditorPaneAccessibleHypertextSupport(); 1723 } 1724 1725 /** 1726 * Constructs an {@code AccessibleJEditorPaneHTML}. 1727 */ 1728 protected AccessibleJEditorPaneHTML () { 1729 HTMLEditorKit kit = (HTMLEditorKit)JEditorPane.this.getEditorKit(); 1730 accessibleContext = kit.getAccessibleContext(); 1731 } 1732 1733 /** 1734 * Returns the number of accessible children of the object. 1735 * 1736 * @return the number of accessible children of the object. 1737 */ 1738 public int getAccessibleChildrenCount() { 1739 if (accessibleContext != null) { 1740 return accessibleContext.getAccessibleChildrenCount(); 1741 } else { 1742 return 0; 1743 } 1744 } 1745 1746 /** 1747 * Returns the specified Accessible child of the object. The Accessible 1783 return null; 1784 } 1785 } else { 1786 return null; 1787 } 1788 } 1789 } 1790 1791 /** 1792 * What's returned by 1793 * <code>AccessibleJEditorPaneHTML.getAccessibleText</code>. 1794 * 1795 * Provides support for <code>AccessibleHypertext</code> in case 1796 * there is an HTML document being displayed in this 1797 * <code>JEditorPane</code>. 1798 * 1799 */ 1800 protected class JEditorPaneAccessibleHypertextSupport 1801 extends AccessibleJEditorPane implements AccessibleHypertext { 1802 1803 /** 1804 * An HTML link. 1805 */ 1806 public class HTMLLink extends AccessibleHyperlink { 1807 Element element; 1808 1809 /** 1810 * Constructs a {@code HTMLLink}. 1811 * @param e the element 1812 */ 1813 public HTMLLink(Element e) { 1814 element = e; 1815 } 1816 1817 /** 1818 * Since the document a link is associated with may have 1819 * changed, this method returns whether this Link is valid 1820 * anymore (with respect to the document it references). 1821 * 1822 * @return a flag indicating whether this link is still valid with 1823 * respect to the AccessibleHypertext it belongs to 1824 */ 1825 public boolean isValid() { 1826 return JEditorPaneAccessibleHypertextSupport.this.linksValid; 1827 } 1828 1829 /** 1830 * Returns the number of accessible actions available in this Link 1831 * If there are more than one, the first one is NOT considered the 1832 * "default" action of this LINK object (e.g. in an HTML imagemap). |