package net.codjo.dataprocess.gui.plugin;
import net.codjo.dataprocess.client.RepositoryClientHelper;
import net.codjo.dataprocess.client.UserClientHelper;
import net.codjo.dataprocess.client.UtilsClientHelper;
import net.codjo.dataprocess.common.DataProcessConstants;
import net.codjo.dataprocess.common.exception.DataProcessException;
import net.codjo.dataprocess.common.userparam.User;
import net.codjo.dataprocess.common.userparam.User.Repository;
import net.codjo.dataprocess.gui.util.DataProcessGuiEvent;
import net.codjo.dataprocess.gui.util.GuiContextUtils;
import net.codjo.dataprocess.gui.util.GuiUtils;
import net.codjo.mad.client.request.RequestException;
import net.codjo.mad.gui.framework.MutableGuiContext;
import java.util.Observable;
import java.util.Observer;
/**
*
*/
public class RepositoryChangeEventListener implements Observer {
private User user;
private MutableGuiContext ctxt;
private DataProcessGuiPlugin dataProcessGuiPlugin;
public RepositoryChangeEventListener(DataProcessGuiPlugin dataProcessGuiPlugin,
User user,
MutableGuiContext ctxt) {
this.dataProcessGuiPlugin = dataProcessGuiPlugin;
this.user = user;
this.ctxt = ctxt;
}
public void update(Observable ob, Object arg) {
if (arg instanceof DataProcessGuiEvent) {
DataProcessGuiEvent event = (DataProcessGuiEvent)arg;
String eventName = event.getName();
DataProcessGuiConfiguration configuration = dataProcessGuiPlugin.getConfiguration();
try {
if (DataProcessGuiEvent.PRE_CHANGE_REPOSITORY_EVENT.equals(eventName)) {
String oldRepositoryId = event.getValue().toString();
DataProcessGuiPluginHelper.saveDataProcessContext(oldRepositoryId, ctxt, configuration);
if (user.getUserName().equals(UtilsClientHelper.cmdMapServer(ctxt,
DataProcessConstants.MapCommand.GET,
oldRepositoryId, ""))) {
UtilsClientHelper.cmdMapServer(ctxt, DataProcessConstants.MapCommand.REMOVE,
oldRepositoryId, "");
}
}
else if (DataProcessGuiEvent.POST_CHANGE_REPOSITORY_EVENT.equals(eventName)) {
String selectedRepositoryId = event.getValue().toString();
DataProcessGuiPluginHelper.loadDataProcessContext(selectedRepositoryId, ctxt,
configuration);
String repositoryName = RepositoryClientHelper.getAllRepositoryNames(ctxt)
.get(selectedRepositoryId);
user.setCurrentRepository(repositoryName);
GuiContextUtils.setCurrentRepository(ctxt, selectedRepositoryId);
Repository repository = user.getRepository(repositoryName);
if (repository != null) {
repository.updateExpirydate();
}
new UserClientHelper().save(ctxt, configuration.getUser());
dataProcessGuiPlugin.updateToolBar();
}
else if (DataProcessGuiEvent.UPDATE_USER_EVENT.equals(eventName)) {
if (user.getCurrentRepository() != null) {
DataProcessGuiPluginHelper.saveDataProcessContext(
Integer.toString(RepositoryClientHelper.getRepositoryIdFromName(ctxt,
user.getCurrentRepository())),
ctxt, configuration);
}
copyUser((User)event.getValue(), user);
String repositoryId = DataProcessGuiPluginHelper.getCurrentRepositoryId(user, ctxt);
DataProcessGuiPluginHelper.loadDataProcessContext(repositoryId, ctxt, configuration);
new UserClientHelper().save(ctxt, configuration.getUser());
dataProcessGuiPlugin.updateToolBar();
}
}
catch (DataProcessException ex) {
GuiUtils.showErrorDialog(ctxt.getMainFrame(), getClass(), "Erreur", ex);
}
catch (RequestException ex) {
GuiUtils.showErrorDialog(ctxt.getMainFrame(), getClass(), "Erreur interne", ex);
}
}
}
private static void copyUser(User userFrom, User userTo) {
userTo.setCurrentRepository(userFrom.getCurrentRepository());
userTo.removeAllRepository();
for (Repository repository : userFrom.getRepositoryList()) {
userTo.addRepository(repository);
}
}
}