package org.freeplane.core.user;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.freeplane.core.extension.IExtension;
import org.freeplane.features.mode.Controller;
public class UserAccountController implements IExtension {
private final List<IUserAccountChangeListener> listeners = new ArrayList<IUserAccountChangeListener>();
private IUserAccount activeUser;
public static void install(Controller controller) {
controller.addExtension(UserAccountController.class, new UserAccountController());
}
public static UserAccountController getController() {
return Controller.getCurrentController().getExtension(UserAccountController.class);
}
public void setActiveUser(IUserAccount user) {
if(user != this.activeUser) {
fireDeactivate(this.activeUser);
this.activeUser = user;
fireActivated(this.activeUser);
}
}
public IUserAccount getActiveUser() {
return this.activeUser;
}
public List<IUserAccount> getUsers() {
if(activeUser == null) {
return Collections.emptyList();
}
return Arrays.asList(new IUserAccount[]{activeUser});
}
public void addUserAccountChangeListener(IUserAccountChangeListener listener) {
if(listener == null) {
return;
}
synchronized (listeners) {
if(!listeners.contains(listener)) {
listeners.add(0, listener);
}
}
}
public void removeUserAccountChangeListener(IUserAccountChangeListener listener) {
if(listener == null) {
return;
}
synchronized (listeners) {
listeners.remove(listener);
}
}
private void fireActivated(IUserAccount user) {
UserAccountChangeEvent evt = new UserAccountChangeEvent(this, user);
synchronized (listeners) {
for (IUserAccountChangeListener listener : listeners) {
listener.activated(evt);
}
}
}
private void fireDeactivate(IUserAccount user) {
UserAccountChangeEvent evt = new UserAccountChangeEvent(this, user);
synchronized (listeners) {
for (IUserAccountChangeListener listener : listeners) {
listener.aboutToDeactivate(evt);
}
}
}
}