/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.gui.tables; import net.codjo.dataprocess.common.Log; import net.codjo.dataprocess.common.userparam.DefaultUserCodec; import net.codjo.dataprocess.common.userparam.User; import net.codjo.dataprocess.common.userparam.User.Repository; import net.codjo.dataprocess.common.userparam.UserCodec; import net.codjo.dataprocess.gui.selector.RepositoryComboBox; import net.codjo.dataprocess.gui.util.AbstractDetailWindow; import net.codjo.dataprocess.gui.util.DataProcessGuiEvent; import net.codjo.dataprocess.gui.util.GuiUtils; import net.codjo.mad.client.request.RequestException; import net.codjo.mad.gui.framework.GuiContext; import net.codjo.mad.gui.framework.LocalGuiContext; import net.codjo.mad.gui.request.DetailDataSource; import net.codjo.mad.gui.request.event.DataSourceAdapter; import net.codjo.mad.gui.request.event.DataSourceEvent; import com.thoughtworks.xstream.core.BaseException; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.border.TitledBorder; /** * */ public class UserDetailWindow extends AbstractDetailWindow { private JTextArea textAreaXml; private GuiContext ctxt; public UserDetailWindow(final DetailDataSource dataSource) throws RequestException { super(dataSource, "Droits des utilisateurs sur les r�f�rentiels de traitement"); ctxt = dataSource.getGuiContext(); dataSource.addDataSourceListener(new DataSourceAdapter() { @Override public void beforeSaveEvent(DataSourceEvent event) { UserCodec userCodec = new DefaultUserCodec(); User user = userCodec.fromXml(textAreaXml.getText()); String userName = dataSource.getFieldValue("userName"); user.setUserName(userName); user.setDefaultRepository(); textAreaXml.setText(userCodec.toXml(user)); textAreaXml.setCaretPosition(0); } @Override public void saveEvent(DataSourceEvent event) { User user = new DefaultUserCodec().fromXml(textAreaXml.getText()); String userName = dataSource.getFieldValue("userName"); user.setUserName(userName); user.setDefaultRepository(); if (System.getProperty("user.name").equals(userName)) { dataSource.getGuiContext().sendEvent(new DataProcessGuiEvent( DataProcessGuiEvent.UPDATE_USER_EVENT, user)); } } }); } @Override protected void postInitGui() { super.postInitGui(); UserCodec userCodec = new DefaultUserCodec(); if (textAreaXml.getText().trim().length() == 0) { textAreaXml.setText(userCodec.toXml(new User())); textAreaXml.setCaretPosition(0); } else { try { userCodec.fromXml(textAreaXml.getText()); } catch (BaseException ex) { Log.error(getClass(), "Erreur de param�trage", ex); JOptionPane.showMessageDialog(getGuiContext().getMainFrame(), "Le param�trage de cet utilisateur ne semble pas correcte.\n" + "Un param�trage par d�faut va vous �tre propos�.", "Information importante", JOptionPane.WARNING_MESSAGE); User user = new User(); textAreaXml.setText(userCodec.toXml(user)); textAreaXml.setCaretPosition(0); } } } @Override protected void declareFields() throws RequestException { addFieldToPage("Param�trage", "userName", "Identifiant de l'utilisateur", new JTextField()); textAreaXml = new JTextArea(); textAreaXml.setRows(14); addField("userParam", "Param�tres de l'utilisateur", textAreaXml); buildGui(); } private void buildGui() { GuiUtils.setSize(this, 600, 500); RepositoryComboBox repositoryComboBox = new RepositoryComboBox(new LocalGuiContext(ctxt)); repositoryComboBox.loadData(); JButton addButton = new JButton(UIManager.getIcon("dataprocess.add")); addButton.setToolTipText("Ajouter un r�f�rentiel de traitement au param�trage"); JButton removeButton = new JButton(UIManager.getIcon("dataprocess.remove")); removeButton.setToolTipText("Supprimer un r�f�rentiel de traitement du param�trage"); JButton addAllButton = new JButton("Tous", UIManager.getIcon("dataprocess.add")); addAllButton.setToolTipText("Ajouter tous les r�f�rentiels de traitement au param�trage"); JButton removeAllButton = new JButton("Tous", UIManager.getIcon("dataprocess.remove")); removeAllButton.setToolTipText("Supprimer tous les r�f�rentiels de traitement du param�trage"); addButton.setBorderPainted(false); removeButton.setBorderPainted(false); GuiUtils.setSize(addButton, 15, 14); GuiUtils.setSize(removeButton, 15, 14); JPanel actionAllPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); JPanel repositoryNameComboBoxPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); repositoryNameComboBoxPanel.add(getRepositoryComboBoxPanel(repositoryComboBox)); repositoryNameComboBoxPanel.add(addButton); repositoryNameComboBoxPanel.add(removeButton); repositoryNameComboBoxPanel.add(addAllButton); repositoryNameComboBoxPanel.add(removeAllButton); JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.setBorder(new TitledBorder(" Ajout/suppression de r�f�rentiel de traitement ")); mainPanel.add(repositoryNameComboBoxPanel, BorderLayout.NORTH); mainPanel.add(actionAllPanel, BorderLayout.CENTER); addComponent("", mainPanel); addButton.addActionListener(new RepositoryNameComboBoxListener(repositoryComboBox) { @Override protected void doAction() { addRepository(); } }); removeButton.addActionListener(new RepositoryNameComboBoxListener(repositoryComboBox) { @Override protected void doAction() { removeRepository(); } }); addAllButton.addActionListener(new RepositoryNameComboBoxListener(repositoryComboBox) { @Override protected void doAction() { addAllRepository(); } }); removeAllButton.addActionListener(new RepositoryNameComboBoxListener(repositoryComboBox) { @Override protected void doAction() { removeAllRepository(); } }); } private static JPanel getRepositoryComboBoxPanel(RepositoryComboBox repositoryComboBox) { JPanel jContentPane = new JPanel(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, 10, 0, 0); gridBagConstraints2.gridx = 1; jContentPane.add(new JLabel("R�f�rentiel:"), gridBagConstraints1); jContentPane.add(repositoryComboBox, gridBagConstraints2); return jContentPane; } private abstract class RepositoryNameComboBoxListener implements ActionListener { private User user; private RepositoryComboBox repositoryComboBox; protected RepositoryNameComboBoxListener(RepositoryComboBox repositoryComboBox) { this.repositoryComboBox = repositoryComboBox; } public void actionPerformed(ActionEvent evt) { UserCodec userCodec = new DefaultUserCodec(); if (textAreaXml.getText().trim().length() == 0) { user = new User(); textAreaXml.setText(userCodec.toXml(user)); textAreaXml.setCaretPosition(0); } else { user = userCodec.fromXml(textAreaXml.getText()); } doAction(); textAreaXml.setText(userCodec.toXml(user)); textAreaXml.setCaretPosition(0); } public void removeAllRepository() { user.removeAllRepository(); } public void removeRepository() { if (repositoryComboBox.getModel().getSize() > 0) { user.removeRepository(repositoryComboBox.getSelectedValueToDisplay("repositoryName")); } } public void addRepository() { if (repositoryComboBox.getModel().getSize() > 0) { user.addRepository( new Repository(repositoryComboBox.getSelectedValueToDisplay("repositoryName"), getExpirydate(), Integer.toString(getExpiryday()))); } } public void addAllRepository() { for (int i = 0; i < repositoryComboBox.getItemCount(); i++) { user.addRepository(new Repository(repositoryComboBox.getValueAt(i, "repositoryName"), getExpirydate(), Integer.toString(getExpiryday()))); } } protected abstract void doAction(); } private static String getExpirydate() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, getExpiryday()); return new SimpleDateFormat("dd-MM-yyyy").format(cal.getTime()); } private static int getExpiryday() { String userEnvironment = System.getProperty("user.environment"); if (userEnvironment != null && userEnvironment.startsWith("Production")) { return 45; } else if (userEnvironment != null && userEnvironment.startsWith("Recette")) { return 180; } else { return 180; } } }