001: /*
002: * Copyright (c) 2007, Sun Microsystems, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * * Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * * Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * * Neither the name of Sun Microsystems, Inc. nor the names of its contributors
015: * may be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
028: * THE POSSIBILITY OF SUCH DAMAGE.
029: */
030: package org.myorg.feedreader;
031:
032: import java.io.IOException;
033: import java.net.URL;
034: import java.util.HashMap;
035: import java.util.Map;
036: import javax.swing.JEditorPane;
037: import javax.swing.JScrollPane;
038: import org.openide.util.Exceptions;
039: import org.openide.util.NbBundle;
040: import org.openide.windows.TopComponent;
041:
042: /**
043: * A top component with an embedded JEditorPane based HTML browser.
044: */
045: final class BrowserTopComponent extends TopComponent {
046:
047: /** The cache of opened browser components. */
048: private static Map browserComponents = new HashMap();
049:
050: private final JScrollPane scrollPane;
051: private final JEditorPane editorPane;
052:
053: private final String title;
054: private String url;
055:
056: private BrowserTopComponent(String title) {
057: this .title = title;
058: setName(title);
059: setToolTipText(NbBundle.getMessage(BrowserTopComponent.class,
060: "HINT_BrowserTopComponent"));
061:
062: scrollPane = new javax.swing.JScrollPane();
063: editorPane = new javax.swing.JEditorPane();
064:
065: editorPane.setContentType("text/html");
066: editorPane.setEditable(false);
067:
068: setLayout(new java.awt.BorderLayout());
069: scrollPane.setViewportView(editorPane);
070: add(scrollPane, java.awt.BorderLayout.CENTER);
071: }
072:
073: public static synchronized BrowserTopComponent getBrowserComponent(
074: String title) {
075: BrowserTopComponent win = (BrowserTopComponent) browserComponents
076: .get(title);
077: if (win == null) {
078: win = new BrowserTopComponent(title);
079: browserComponents.put(title, win);
080: }
081: return win;
082: }
083:
084: public int getPersistenceType() {
085: return TopComponent.PERSISTENCE_NEVER;
086: }
087:
088: public void componentOpened() {
089: // TODO add custom code on component opening
090: }
091:
092: public synchronized void componentClosed() {
093: browserComponents.remove(title);
094: }
095:
096: public void setPage(String url) {
097: this .url = url;
098: try {
099: editorPane.setPage(new URL(this .url));
100: } catch (IOException ioe) {
101: Exceptions.printStackTrace(ioe);
102: }
103: }
104:
105: }
|