001 /* sillyview : a free model-view-controller system for Java
002 * Copyright (C) 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/sillyview/sillyview/src/net/sourceforge/sillyview/HTMLPaneView.java,v 1.2 2004/05/15 01:58:51 tj_willis Exp $
019 */
020 package net.sourceforge.sillyview;
021
022 import javax.swing.*;
023 import javax.swing.event.HyperlinkListener;
024 import javax.swing.border.*;
025 import java.util.Map;
026 import java.util.Set;
027
028 /**
029 * This class connects a HTMLPane as a view to a WidgetModel. The text of
030 * the HTMLPane will be the WidgetModel.toString(). If you want to handle
031 * HyperlinkEvents such as when a user clicks a link or sublits a form, use
032 * <code>setToken(HYPERLINK_LISTENER,yourclass)</code>.
033 *
034 * The text will be updated whenever setToken() or setTokens() is called.
035 *
036 *
037 * @author <a href="mailto:tj_willis@users.sourceforge.net">T.J. Willis</a>
038 * @version 1.0
039 */
040 public class HTMLPaneView
041 extends HTMLPane
042 implements WidgetView
043 {
044
045 /**
046 * The model this view gets its data from.
047 *
048 */
049 protected WidgetModel mod;
050
051 /**
052 * A token for setting the view's hyperlink listener.
053 *
054 */
055 public static final String HYPERLINK_LISTENER = "<@_HYPERLINK_LISTENER>";
056
057 /**
058 * Creates a new <code>HTMLPaneView</code> instance backed by the given
059 * model.
060 *
061 * @param model a <code>WidgetModel</code> value
062 */
063 public HTMLPaneView (WidgetModel model) {
064 super ((String) (model.getCurrentModel ()));
065 mod = model;
066 }
067
068 /**
069 * Adds all the name/value pairs and then updates the model. If
070 * the named token already exists, replace the value. This is more
071 * efficient than many calls to setToken(), because model.getCurrentModel
072 * is only called once.
073 *
074 */
075 public final void addTokens (final Map < Object, Object > props) {
076 if (props == null) {
077 return; // FIXME: clear all tokens in model
078 }
079 Set keys = props.keySet ();
080 for (Object k : keys) {
081 String key = k.toString ();
082 mod.setToken (key, props.get (key));
083 }
084 setText (mod.getCurrentModel ().toString ());
085
086 }
087
088 /**
089 * Sets an individual token to the given value. Most will be
090 * sent to the backing model.
091 *
092 * @param key an <code>Object</code> value
093 * @param value an <code>Object</code> value
094 */
095 public final void setToken (final Object key, Object value) {
096 if (key == null)
097 return;
098
099 String ti = "";
100 if (value != null)
101 ti = value.toString ();
102
103 String la = key.toString ();
104
105 if (HYPERLINK_LISTENER.equals (la)) {
106 addHyperlinkListener ((HyperlinkListener) value);
107 return;
108 }
109 mod.setToken (key, value);
110 setText (mod.getCurrentModel ().toString ());
111 }
112
113 /**
114 * Gets the named value. Most values will be retrieved by the
115 * backing model.
116 *
117 * @param key an <code>Object</code> value
118 * @return an <code>Object</code> value
119 */
120 public final Object getValue (final Object key) {
121 if (key == null)
122 return null;
123 String la = key.toString ();
124 // if(TITLE.equals(la))
125 // return title;
126
127 return mod.getValue (key);
128 }
129
130 /**
131 * Gets the backing model.
132 *
133 * @return a <code>WidgetModel</code> value
134 */
135 public final WidgetModel getModel () {
136 return mod;
137 }
138
139 /**
140 * Sets the backing model.
141 *
142 * @param newModel a <code>WidgetModel</code> value
143 */
144 public final void setModel (WidgetModel newModel) {
145 mod = newModel;
146 }
147
148
149
150 }