package org.obo.annotation.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.obo.datamodel.OBOClass;
/** Controller for term & character selection */
public class SelectionManager {
// private static SelectionManager singleton;
private static Map<String, SelectionManager> groupToSelMan = new HashMap<String, SelectionManager>();
private List<TermSelectionListener> termListenerList;
private List<IDSelectionListener> IDListenerList;
public static void reset() {
groupToSelMan.clear();
}
public SelectionManager() {
termListenerList = new ArrayList<TermSelectionListener>(5);
IDListenerList = new ArrayList<IDSelectionListener>(5);
}
// TERM SELECTION
public void addTermSelectionListener(TermSelectionListener l) {
termListenerList.add(l);
}
public void removeTermSelectionListener(TermSelectionListener l) {
termListenerList.remove(l);
}
// ID SELECTION
public void addIDSelectionListener(IDSelectionListener l) {
IDListenerList.add(l);
}
public void removeIDSelectionListener(IDSelectionListener l) {
IDListenerList.remove(l);
}
// void addCharacterSelectionListener(CharacterSelectionListener l) {}
public void selectHistoryTerm(Object source, OBOClass oboClass,
UseTermListener l) {
boolean isMouseOver = false;
boolean isHyperlink = true;
TermSelectionEvent e = makeTermEvent(source, oboClass, l, isMouseOver,
isHyperlink);
fireTermSelect(e);
}
public void selectMouseOverTerm(Object source, OBOClass oboClass,
UseTermListener l) {
boolean isMouseOver = true;
boolean isHyperlink = false;
TermSelectionEvent e = makeTermEvent(source, oboClass, l, isMouseOver,
isHyperlink);
fireTermSelect(e);
}
/** select oboClass, if its not a hyperlink then fireTermSelect
if it is a hyperlink and its not getting fired its unclear to me what the point
of this is??? - MG */
public void selectTerm(Object source, OBOClass oboClass, boolean isHyperlink) {
boolean isMouseOver = false;
// System.out.println("ishyperlink="+isHyperlink);
TermSelectionEvent e = makeTermEvent(source, oboClass, null,
isMouseOver, isHyperlink);
if (!isHyperlink) // and if it is a hyperlink that whats the point???
fireTermSelect(e);
}
public void selectID(Object source, String id, String type) {
IDSelectionEvent e = makeIDEvent(source, id, type);
fireIDSelect(e);
}
private void fireIDSelect(IDSelectionEvent e) {
// need to make a copy of the term listener list to avoid
// co-modification problems
List<IDSelectionListener> temp = new ArrayList<IDSelectionListener>(
IDListenerList);
Iterator<IDSelectionListener> it = temp.iterator();
while (it.hasNext())
it.next().IDSelected(e);
}
private void fireTermSelect(TermSelectionEvent e) {
// need to make a copy of the term listener list to avoid
// co-modification problems
List<TermSelectionListener> temp = new ArrayList<TermSelectionListener>(
termListenerList);
Iterator<TermSelectionListener> it = temp.iterator();
while (it.hasNext())
it.next().termSelected(e);
}
// void selectTerm(String termName) {} ???
private TermSelectionEvent makeTermEvent(Object src, OBOClass oc,
UseTermListener l, boolean mouse, boolean link) {
return new TermSelectionEvent(src, oc, l, mouse, link);
}
private IDSelectionEvent makeIDEvent(Object src, String id, String type) {
return new IDSelectionEvent(src, id, type);
}
}