/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <hr>
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* This file has been modified by the OpenOLAT community. Changes are licensed
* under the Apache 2.0 license as the original file.
* <p>
*/
package org.olat.core.commons.chiefcontrollers;
import org.olat.core.gui.control.Event;
import org.olat.core.util.event.MultiUserEvent;
/**
* One can send a message to the ChiefControllers which appears on top.
* Typically this is used for setting maintenance messages, such as <i>system is
* going down in 10 minutes</i>.
* <p>
* A ChiefController per se is not listening to such events. It must implement
* <code>GenericEventListener</code> and add itself to the channel which can be
* found in the <code>ChiefControllerFactory</code>.
*
* @see org.olat.core.util.event.MultiUserEvent
* @see org.olat.core.util.event.OLATResourceableEventCenter
* @see org.olat.core.commons.chiefcontrollers.ChiefControllerFactory
* <P>
* Initial Date: 13.06.2006 <br>
* @author patrickb
*/
public class ChiefControllerMessageEvent extends MultiUserEvent {
private static final long serialVersionUID = -2235582801661115222L;
/**
* indicates removing clearing of maintenance message
*/
public static final ChiefControllerMessageEvent CLEAR = new ChiefControllerMessageEvent("CLR");
/**
*
*/
public static final String CHANGED_EVENT_CMD = Event.CHANGED_EVENT.getCommand();
private String msg;
//by default messages are show on all nodes in the cluster
private boolean clusterWideMessage = true;
public ChiefControllerMessageEvent(){
this(Event.CHANGED_EVENT.getCommand());
}
/**
*
* @param command
*/
private ChiefControllerMessageEvent(String command) {
super(command);
msg = null;
}
/**
*
* @return
*/
public String getMsg() {
return msg;
}
/**
*
* @param msg
*/
public void setMsg(String msg){
this.msg = msg;
}
public String toString() {
return "msg:"+msg+"|"+super.toString();
}
/**
*
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object event) {
if(event!=null && event instanceof ChiefControllerMessageEvent) {
ChiefControllerMessageEvent other = (ChiefControllerMessageEvent)event;
boolean sameCommand = other.getCommand().equals(this.getCommand());
String othersMsg = other.getMsg();
boolean sameMsg = ((msg == null && othersMsg == null));//case for CLEAR
sameMsg = sameMsg || (msg != null && msg.equals(othersMsg));//some msg compared to CLEAR or others
sameMsg = sameMsg || (othersMsg != null && othersMsg.equals(msg));// CLEAR compared to other msg
boolean sameClusterWide = clusterWideMessage == other.isClusterWideMessage();
return sameCommand && sameMsg && sameClusterWide;
}
return false;
}
/**
*
* @return
*/
public boolean isClusterWideMessage() {
return clusterWideMessage;
}
/**
*
* @param clusterWideMessage
*/
public void setClusterWideMessage(boolean clusterWideMessage) {
this.clusterWideMessage = clusterWideMessage;
}
@Override
public int hashCode() {
int hc = 5;
int hcMul = 7;
hc = hc * hcMul + (clusterWideMessage ? 0 : 1);
hc = hc * hcMul + (msg == null ? 0 : msg.hashCode());
return hc * hcMul + super.hashCode();
}
}