/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.gui.plugin;
import net.codjo.dataprocess.client.RepositoryClientHelper;
import net.codjo.dataprocess.client.UserClientHelper;
import net.codjo.dataprocess.client.UserLoginTrackerClientHelper;
import net.codjo.dataprocess.client.UtilsClientHelper;
import net.codjo.dataprocess.common.Log;
import net.codjo.dataprocess.common.exception.RepositoryException;
import net.codjo.dataprocess.common.exception.UserManagerException;
import net.codjo.dataprocess.common.userparam.User;
import net.codjo.dataprocess.common.userparam.User.Repository;
import net.codjo.dataprocess.common.util.UserLoginTracker;
import net.codjo.dataprocess.gui.repository.AbstractToolbarRepoConfig;
import net.codjo.dataprocess.gui.repository.ToolbarRepoConfig;
import net.codjo.dataprocess.gui.selector.RepositoryComboBox;
import net.codjo.dataprocess.gui.util.ErrorDialog;
import net.codjo.dataprocess.gui.util.GuiContextUtils;
import net.codjo.dataprocess.gui.util.GuiUtils;
import net.codjo.dataprocess.gui.util.action.RegisterAction;
import net.codjo.dataprocess.gui.util.action.RegisterActionProvider;
import net.codjo.i18n.common.Language;
import net.codjo.i18n.common.TranslationManager;
import net.codjo.mad.client.request.RequestException;
import net.codjo.mad.gui.base.GuiConfiguration;
import net.codjo.mad.gui.framework.GuiEvent;
import net.codjo.mad.gui.framework.MutableGuiContext;
import net.codjo.mad.gui.i18n.AbstractInternationalizableGuiPlugin;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Observable;
import java.util.Observer;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import static net.codjo.dataprocess.common.DataProcessConstants.MapCommand.GET;
import static net.codjo.dataprocess.common.DataProcessConstants.MapCommand.REMOVE;
/**
*
*/
public final class DataProcessGuiPlugin extends AbstractInternationalizableGuiPlugin {
private DataProcessGuiConfiguration configuration;
private MutableGuiContext ctxt;
private JPanel toolBarPanel = new JPanel();
private RepositoryComboBox repositoryComboBox;
private JPanel repositoryPanel;
public DataProcessGuiPlugin() {
configuration = new DataProcessGuiConfiguration(this);
}
@Override
protected void registerLanguageBundles(TranslationManager translationManager) {
translationManager.addBundle("net.codjo.dataprocess.gui.i18n", Language.FR);
translationManager.addBundle("net.codjo.dataprocess.gui.i18n", Language.EN);
}
@Override
public void stop() throws Exception {
User user = configuration.getUser();
if (user != null) {
UserClientHelper userClientHelper = new UserClientHelper();
String repositoryName = user.getCurrentRepository();
try {
if (repositoryName != null) {
Repository repository = user.getRepository(repositoryName);
if (repository != null) {
repository.updateExpirydate();
}
String repositoryId = Integer.toString(RepositoryClientHelper.getRepositoryIdFromName(
ctxt, repositoryName));
DataProcessGuiPluginHelper.saveDataProcessContext(repositoryId, ctxt, configuration);
}
userClientHelper.save(ctxt, user);
}
catch (RepositoryException ex) {
Log.error(DataProcessGuiPluginHelper.class, ex);
}
catch (UserManagerException ex) {
GuiUtils.showErrorDialog(ctxt.getMainFrame(), DataProcessGuiPluginHelper.class,
"La sauvegarde du param�trage de l'utilisateur a �chou�", ex);
}
}
if (ctxt != null) {
String currentRepositoryId = GuiContextUtils.getCurrentRepository(ctxt);
if (System.getProperty("user.name").equals(UtilsClientHelper.cmdMapServer(ctxt, GET,
currentRepositoryId,
""))) {
UtilsClientHelper.cmdMapServer(ctxt, REMOVE, currentRepositoryId, "");
}
UserLoginTrackerClientHelper.removeUser(ctxt, configuration.getUser().getUserName());
}
}
@Override
public void initGui(GuiConfiguration guiConfiguration) throws Exception {
super.initGui(guiConfiguration);
ctxt = guiConfiguration.getGuiContext();
RegisterActionProvider register = new RegisterAction(guiConfiguration, this);
RegisterActionHelper.registerAction(register);
configuration.setGlobalParameter(Arrays.asList(""), ctxt);
GuiContextUtils.putDataProcessContext(ctxt, configuration.getDataProcessContext());
RepositoryClientHelper.putRepositoryNameMap(ctxt, configuration.getRepositoryNameMap());
RepositoryClientHelper.reinitializeRepositoryCache(ctxt);
try {
UserClientHelper userClientHelper = new UserClientHelper();
configuration.setUser(DataProcessGuiPluginHelper.userFactory(System.getProperty("user.name"),
userClientHelper,
ctxt));
}
catch (UserManagerException ex) {
String errorMsg = "Impossible de r�cup�rer le param�trage ou d'en cr�er un nouveau pour "
+ System.getProperty("user.name");
Log.error(getClass(), errorMsg, ex);
ErrorDialog.show(ctxt.getMainFrame(), errorMsg, ex);
System.exit(-1);
}
String repositoryId = DataProcessGuiPluginHelper.getCurrentRepositoryId(configuration.getUser(),
ctxt);
DataProcessGuiPluginHelper.loadDataProcessContext(repositoryId, ctxt, configuration);
initRepositoryComboBox();
initToolBar();
updateToolBar();
ctxt.addObserver(new RepositoryChangeEventListener(this, configuration.getUser(), ctxt));
ctxt.addObserver(repositoryComboBox);
ctxt.addObserver(new LoginEventObserver());
startServerPingTask();
initIcons();
}
private void startServerPingTask() {
if (configuration.getServerPingDelay() != 0) {
new Timer().schedule(new ServerPingTask(), 0, configuration.getServerPingDelay());
}
else {
try {
UserLoginTrackerClientHelper.addUser(ctxt, buildUserLoginTracker());
}
catch (Exception ex) {
Log.error(getClass(), "Erreur interne concernant le suivie des personnes connect�es.", ex);
}
}
}
private UserLoginTracker buildUserLoginTracker() throws UnknownHostException {
InetAddress localhostAddress = Inet4Address.getLocalHost();
String ip = localhostAddress.getHostAddress();
String hostname = localhostAddress.getHostName();
User user = configuration.getUser();
return new UserLoginTracker(user.getUserName(), user.getCurrentRepository(), ip, hostname, null);
}
private static void initIcons() {
UIManager.put("dataprocess.exit",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/exit.gif")));
UIManager.put("dataprocess.alpha_sort",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/alpha_mode.gif")));
UIManager.put("dataprocess.text",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/text.gif")));
UIManager.put("dataprocess.execute",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/Manager.gif")));
UIManager.put("dataprocess.configure",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/configure.gif")));
UIManager.put("dataprocess.add",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/include.png")));
UIManager.put("dataprocess.add2",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/Add2.gif")));
UIManager.put("dataprocess.remove",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/exclude.png")));
UIManager.put("dataprocess.copy",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/Copy.gif")));
UIManager.put("dataprocess.edit",
new ImageIcon(DataProcessGuiPlugin.class.getResource("/images/edit.gif")));
}
public void updateToolBar() {
String repositoryId = configuration.getUser().getCurrentRepository();
ToolbarRepoConfig toolbarRepoConfig = configuration.getToolBarRepoConfig(repositoryId);
toolBarPanel.invalidate();
toolBarPanel.removeAll();
JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.LINE_AXIS));
jPanel.add(repositoryPanel);
jPanel.add(Box.createRigidArea(new Dimension(100, 0)));
toolBarPanel.add(jPanel, BorderLayout.EAST);
if (toolbarRepoConfig != null) {
toolBarPanel.add(toolbarRepoConfig.build(ctxt, configuration), BorderLayout.WEST);
}
else {
toolBarPanel.add(new DefaultToolbarRepoConfig().build(ctxt, configuration), BorderLayout.WEST);
}
toolBarPanel.validate();
}
private void initToolBar() {
toolBarPanel.setOpaque(false);
toolBarPanel.setLayout(new BorderLayout());
ctxt.putProperty("toolbarPanel", toolBarPanel);
}
private void initRepositoryComboBox() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.gridy = 0;
gridBagConstraints1.ipadx = 0;
gridBagConstraints1.insets = new Insets(1, 1, 1, 1);
gridBagConstraints1.gridx = 0;
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.gridy = 0;
gridBagConstraints2.ipadx = 100;
gridBagConstraints2.fill = GridBagConstraints.NONE;
gridBagConstraints2.insets = new Insets(0, 6, 0, 0);
gridBagConstraints2.gridx = 1;
repositoryComboBox = new RepositoryComboBox(ctxt);
repositoryComboBox.updateGuiOnRepositoryChange(true);
try {
repositoryComboBox.loadAuthorisedRepository(configuration.getUser());
}
catch (RequestException ex) {
String errorMsg = "Impossible de charger la liste des r�f�rentiels de traitement";
Log.error(getClass(), errorMsg + " :\n" + ex.getLocalizedMessage());
ErrorDialog.show(ctxt.getMainFrame(), errorMsg, ex);
}
panel.add(new JLabel("R�f�rentiel:"), gridBagConstraints1);
panel.add(repositoryComboBox, gridBagConstraints2);
repositoryPanel = panel;
try {
if (configuration.getUser().getCurrentRepository() != null) {
repositoryComboBox.setOldSelectedRepository(RepositoryClientHelper.
getRepositoryIdFromName(ctxt, configuration.getUser().getCurrentRepository()));
repositoryComboBox.setSelectedRepository(configuration.getUser().getCurrentRepository());
}
}
catch (RepositoryException ex) {
GuiUtils.showErrorDialog(ctxt.getMainFrame(), getClass(), "Erreur", ex);
}
catch (RequestException ex) {
GuiUtils.showErrorDialog(ctxt.getMainFrame(), getClass(), "Erreur interne", ex);
}
repositoryComboBox.setFont(new Font("Arial", Font.PLAIN, 18));
repositoryComboBox.setForeground(new Color(0, 0, 128));
}
public DataProcessGuiConfiguration getConfiguration() {
return configuration;
}
private static class DefaultToolbarRepoConfig extends AbstractToolbarRepoConfig {
private DefaultToolbarRepoConfig() {
super("");
}
}
private class ServerPingTask extends TimerTask {
@Override
public void run() {
try {
UserLoginTrackerClientHelper.addUser(ctxt, buildUserLoginTracker());
}
catch (Exception ex) {
Log.error(getClass(), "Erreur interne concernant le suivie des personnes connect�es.", ex);
}
}
}
private class LoginEventObserver implements Observer {
public void update(Observable ob, Object arg) {
if (arg instanceof GuiEvent) {
GuiEvent guiEvent = (GuiEvent)arg;
if (guiEvent.getName().equals(GuiEvent.LOGIN.getName())) {
GuiUtils.showRepositoryMessage(ctxt, configuration.getUser());
}
}
}
}
}