001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.dialog;
017
018 import java.beans.PropertyChangeEvent;
019 import java.beans.PropertyChangeListener;
020
021 import javax.swing.JComponent;
022
023 import org.springframework.richclient.core.DefaultMessage;
024 import org.springframework.richclient.core.Message;
025 import org.springframework.richclient.core.Severity;
026 import org.springframework.richclient.util.EventListenerListHelper;
027 import org.springframework.util.ObjectUtils;
028
029 /**
030 * A concrete implementation of the <code>Messagable</code> interface. Primarily
031 * intended to be used as a delegate for the messagable functionality of
032 * more complex classes.
033 *
034 * @author Oliver Hutchison
035 * @see DefaultMessagePane
036 */
037 public class DefaultMessageAreaModel implements Messagable {
038
039 private Messagable delegate;
040
041 private Message message = DefaultMessage.EMPTY_MESSAGE;
042
043 private EventListenerListHelper listenerList = new EventListenerListHelper(PropertyChangeListener.class);
044
045 public DefaultMessageAreaModel() {
046 this.delegate = this;
047 }
048
049 public DefaultMessageAreaModel(Messagable delegate) {
050 this.delegate = delegate;
051 }
052
053 /**
054 * @return Returns the delegateFor.
055 */
056 protected Messagable getDelegateFor() {
057 return delegate;
058 }
059
060 public Message getMessage() {
061 return message;
062 }
063
064 public boolean hasInfoMessage() {
065 return message.getSeverity() == Severity.INFO;
066 }
067
068 public boolean hasErrorMessage() {
069 return message.getSeverity() == Severity.ERROR;
070 }
071
072 public boolean hasWarningMessage() {
073 return message.getSeverity() == Severity.WARNING;
074 }
075
076 public void setMessage(Message message) {
077 if (message == null) {
078 message = DefaultMessage.EMPTY_MESSAGE;
079 }
080 if (ObjectUtils.nullSafeEquals(this.message, message)) {
081 return;
082 }
083 Message oldMsg = this.message;
084 this.message = message;
085 fireMessageUpdated(oldMsg, this.message);
086 }
087
088 public void renderMessage(JComponent component) {
089 message.renderMessage(component);
090 }
091
092 protected void fireMessageUpdated(Message oldMsg, Message newMsg) {
093 listenerList.fire("propertyChange", new PropertyChangeEvent(delegate, MESSAGE_PROPERTY, oldMsg, newMsg));
094 }
095
096 public void addPropertyChangeListener(PropertyChangeListener listener) {
097 listenerList.add(listener);
098 }
099
100 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
101 if (MESSAGE_PROPERTY.equals(propertyName)) {
102 listenerList.add(listener);
103 }
104 }
105
106 public void removePropertyChangeListener(PropertyChangeListener listener) {
107 listenerList.remove(listener);
108 }
109
110 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
111 if (MESSAGE_PROPERTY.equals(propertyName)) {
112 listenerList.remove(listener);
113 }
114 }
115 }