// Path: core/client/src/main/java/de/danner_web/studip_client/data/PluginMessage.java
// public abstract class PluginMessage {
// 
// 	private List<ClickListener> listeners = new ArrayList<ClickListener>();
// 	
// 	private ClickListener showDetailView = new ClickListener() {
// 
// 		@Override
// 		public void onClick(PluginMessage message) {
// 			new PluginMessageDetailsView(message);
// 		}
// 	};
// 	
// 	public PluginMessage(ClickListener listener) {
// 		if (listener != null) {
// 			listeners.add(listener);
// 		}
// 	}
// 
// 	public void setShowDetailView(boolean b) {
// 		if (b) {
// 			if(!this.listeners.contains(showDetailView)){
// 				this.listeners.add(showDetailView);
// 			}
// 		} else {
// 			if(this.listeners.contains(showDetailView)){
// 				this.listeners.remove(showDetailView);
// 			}
// 		}
// 	}
// 
// 	public abstract String getText();
// 
// 	public abstract String getHeader();
// 
// 	public void addMessageListener(ClickListener listener) {
// 		if (listener != null) {
// 			this.listeners.add(listener);
// 		}
// 	}
// 
// 	public List<ClickListener> getMessageListener() {
// 		return listeners;
// 	}
// 
// 	public abstract int hashCode();
// 
// 	public abstract boolean equals(Object obj);
// 
// }


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.danner_web.studip_client.data.PluginMessage;
package de.danner_web.studip_client.model;



/**
 * Diese Singleton Klasse bietet allgemeine Funtkionen, die ein Plugin aufrufen
 * kann.
 * 
 * 
 * @author dominik
 * 
 */
public class Context {

	private Model model;
	
	private String name;

	/**
	 * Logger dieser Klasse.
	 */
	private static Logger logger = LogManager.getLogger();

	/**
	 * Konstuktor des Context
	 * 
	 * @param model
	 *            für den Zugriff
	 */
	Context(Model model) {
		this.model = model;
	}
	
	private void setName(String name){
		this.name = name;
	}
	
	Context createContextForPlugin(String name) {
		Context newContext = new Context(model);
		newContext.setName(name);
		return newContext;
	}

	/**
	 * Fügt einen Historyeintrag in der Verlaufsanzeigen hinzu.
	 * 
	 * Dieser Eintrag wird gleichzeitig mit Log4j persistent weggespeichert.
	 * 
	 * @param name
	 *            Name des Plugins
	 * @param text
	 *            Nachricht
	 */
	public void appendHistory(String text) {
		model.appendHistory(name, text);
		logger.info("History: " + name + ": " + text);
	}

	/**
	 * Fügt eine Popup Nachricht hinzu.
	 * 
	 * Diese Nachricht wird gleichzeitig im Verlauf aufgenommen und mit Log4j
	 * persistent weggespeichert.
	 * 
	 * 
	 * @param name
	 *            Name des Plugins
	 * @param header
	 *            Überschrift der Nachricht
	 * @param text
	 *            Nachricht
	 */
// Path: core/client/src/main/java/de/danner_web/studip_client/data/PluginMessage.java
// public abstract class PluginMessage {
// 
// 	private List<ClickListener> listeners = new ArrayList<ClickListener>();
// 	
// 	private ClickListener showDetailView = new ClickListener() {
// 
// 		@Override
// 		public void onClick(PluginMessage message) {
// 			new PluginMessageDetailsView(message);
// 		}
// 	};
// 	
// 	public PluginMessage(ClickListener listener) {
// 		if (listener != null) {
// 			listeners.add(listener);
// 		}
// 	}
// 
// 	public void setShowDetailView(boolean b) {
// 		if (b) {
// 			if(!this.listeners.contains(showDetailView)){
// 				this.listeners.add(showDetailView);
// 			}
// 		} else {
// 			if(this.listeners.contains(showDetailView)){
// 				this.listeners.remove(showDetailView);
// 			}
// 		}
// 	}
// 
// 	public abstract String getText();
// 
// 	public abstract String getHeader();
// 
// 	public void addMessageListener(ClickListener listener) {
// 		if (listener != null) {
// 			this.listeners.add(listener);
// 		}
// 	}
// 
// 	public List<ClickListener> getMessageListener() {
// 		return listeners;
// 	}
// 
// 	public abstract int hashCode();
// 
// 	public abstract boolean equals(Object obj);
// 
// }


// Path: core/client/src/main/java/de/danner_web/studip_client/model/Context.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.danner_web.studip_client.data.PluginMessage;

package de.danner_web.studip_client.model;



/**
 * Diese Singleton Klasse bietet allgemeine Funtkionen, die ein Plugin aufrufen
 * kann.
 * 
 * 
 * @author dominik
 * 
 */
public class Context {

	private Model model;
	
	private String name;

	/**
	 * Logger dieser Klasse.
	 */
	private static Logger logger = LogManager.getLogger();

	/**
	 * Konstuktor des Context
	 * 
	 * @param model
	 *            für den Zugriff
	 */
	Context(Model model) {
		this.model = model;
	}
	
	private void setName(String name){
		this.name = name;
	}
	
	Context createContextForPlugin(String name) {
		Context newContext = new Context(model);
		newContext.setName(name);
		return newContext;
	}

	/**
	 * Fügt einen Historyeintrag in der Verlaufsanzeigen hinzu.
	 * 
	 * Dieser Eintrag wird gleichzeitig mit Log4j persistent weggespeichert.
	 * 
	 * @param name
	 *            Name des Plugins
	 * @param text
	 *            Nachricht
	 */
	public void appendHistory(String text) {
		model.appendHistory(name, text);
		logger.info("History: " + name + ": " + text);
	}

	/**
	 * Fügt eine Popup Nachricht hinzu.
	 * 
	 * Diese Nachricht wird gleichzeitig im Verlauf aufgenommen und mit Log4j
	 * persistent weggespeichert.
	 * 
	 * 
	 * @param name
	 *            Name des Plugins
	 * @param header
	 *            Überschrift der Nachricht
	 * @param text
	 *            Nachricht
	 */
	public void appendPopup(PluginMessage message) {