Dépôt officiel du code source de l'ERP OpenConcerto
Rev 139 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.openconcerto.modules.extensionbuilder.translation.field;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.DocumentEvent;
import org.openconcerto.modules.extensionbuilder.Extension;
import org.openconcerto.modules.extensionbuilder.translation.LocaleSelector;
import org.openconcerto.ui.DefaultGridBagConstraints;
import org.openconcerto.ui.JLabelBold;
public class TableTranslationEditorPanel extends JPanel {
private final List<JComponent> hideableComponents = new ArrayList<JComponent>();
final JTextField textSingular1 = new JTextField();
final JTextField textSingular2 = new JTextField();
final JTextField textPlural1 = new JTextField();
final JTextField textPlural2 = new JTextField();
private Map<String, JTextField> map1 = new HashMap<String, JTextField>();
private Map<String, JTextField> map2 = new HashMap<String, JTextField>();
private Map<JTextField, String> fieldsMap = new HashMap<JTextField, String>();
TableTranslationEditorPanel(final Extension extension, final String tableName) {
this.setLayout(new GridBagLayout());
GridBagConstraints c = new DefaultGridBagConstraints();
c.gridwidth = 2;
c.fill = GridBagConstraints.NONE;
this.add(new JLabelBold("Table " + tableName), c);
c.gridy++;
c.gridwidth = 1;
// Languages
c.weightx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(new JLabel("Langue et pays", SwingConstants.RIGHT), c);
final String[] isoLanguages = Locale.getISOLanguages();
System.out.println(isoLanguages.length);
final LocaleSelector comboLang1 = new LocaleSelector();
c.weightx = 1;
c.gridx++;
c.fill = GridBagConstraints.NONE;
this.add(comboLang1, c);
c.weightx = 0;
c.gridx++;
c.gridheight = 3;
c.fill = GridBagConstraints.BOTH;
final JSeparator sep = new JSeparator(JSeparator.VERTICAL);
this.add(sep, c);
this.hideableComponents.add(sep);
c.gridheight = 1;
c.weightx = 1;
c.gridx++;
c.fill = GridBagConstraints.NONE;
final LocaleSelector comboLang2 = new LocaleSelector();
this.hideableComponents.add(comboLang2);
comboLang2.setLocale(Locale.ENGLISH);
this.add(comboLang2, c);
// Singular
c.gridx = 0;
c.gridy++;
c.weightx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(new JLabel("Singulier", SwingConstants.RIGHT), c);
c.gridx++;
this.add(this.textSingular1, c);
c.gridx += 2;
this.hideableComponents.add(this.textSingular2);
this.add(this.textSingular2, c);
// Plural
c.gridx = 0;
c.gridy++;
c.weightx = 0;
this.add(new JLabel("Pluriel", SwingConstants.RIGHT), c);
c.gridx++;
this.add(this.textPlural1, c);
c.gridx += 2;
this.hideableComponents.add(this.textPlural2);
this.add(this.textPlural2, c);
// Fields
c.gridx = 0;
c.gridy++;
c.gridwidth = 2;
c.fill = GridBagConstraints.NONE;
this.add(new JLabelBold("Champs de la table"), c);
c.gridwidth = 1;
List<String> fieldsName = getFieldsName(extension, tableName);
c.gridy++;
c.gridheight = fieldsName.size();
c.gridx = 2;
c.fill = GridBagConstraints.BOTH;
final JSeparator sep2 = new JSeparator(JSeparator.VERTICAL);
this.hideableComponents.add(sep2);
this.add(sep2, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridheight = 1;
for (String fName : fieldsName) {
c.gridx = 0;
c.weightx = 0;
this.add(new JLabel(fName, SwingConstants.RIGHT), c);
c.gridx++;
final JTextField t1 = new JTextField();
this.map1.put(fName, t1);
this.fieldsMap.put(t1, fName);
this.add(t1, c);
c.gridx += 2;
final JTextField t2 = new JTextField();
this.hideableComponents.add(t2);
this.fieldsMap.put(t2, fName);
this.map2.put(fName, t2);
this.add(t2, c);
c.gridy++;
}
c.gridx = 0;
c.gridy++;
c.weighty = 1;
c.weightx = 0;
this.add(new JPanel(), c);
// TODO: ajouter la checkbox pour masquer
// TODO: repercuter les modifs dans les traductions
updateUIFrom(extension, tableName, comboLang1.getLocale(), comboLang2.getLocale());
comboLang1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateUIFrom(extension, tableName, comboLang1.getLocale(), null);
}
});
comboLang2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateUIFrom(extension, tableName, null, comboLang2.getLocale());
}
});
this.textSingular1.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setTableSingularTranslation(tableName, comboLang1.getLocale(), text);
}
});
this.textSingular2.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setTableSingularTranslation(tableName, comboLang2.getLocale(), text);
}
});
this.textPlural1.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setTablePluralTranslation(tableName, comboLang1.getLocale(), text);
}
});
this.textPlural2.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setTablePluralTranslation(tableName, comboLang2.getLocale(), text);
}
});
for (final JTextField textField : this.map1.values()) {
textField.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setFieldTranslation(tableName, TableTranslationEditorPanel.this.fieldsMap.get(textField), comboLang1.getLocale(), text);
}
});
}
for (final JTextField textField : this.map2.values()) {
textField.getDocument().addDocumentListener(new SimpleDocumentListener() {
@Override
public void changedUpdate(DocumentEvent e, String text) {
extension.setFieldTranslation(tableName, TableTranslationEditorPanel.this.fieldsMap.get(textField), comboLang2.getLocale(), text);
}
});
}
}
private void updateUIFrom(Extension extension, String tableName, Object l1, Object l2) {
if (l1 != null) {
final String lang = l1.toString();
updateUI(extension, tableName, lang, this.textSingular1, this.textPlural1, this.map1);
}
if (l2 != null) {
final String lang = l2.toString();
updateUI(extension, tableName, lang, this.textSingular2, this.textPlural2, this.map2);
}
}
private void updateUI(Extension extension, String tableName, final String lang, JTextField textSingular, JTextField textPlural, Map<String, JTextField> map) {
final TableTranslation tTrans = extension.getTableTranslation(lang, tableName);
if (tTrans != null && tTrans.getSingular() != null) {
textSingular.setText(tTrans.getSingular());
} else {
textSingular.setText("");
}
if (tTrans != null && tTrans.getPlural() != null) {
textPlural.setText(tTrans.getPlural());
} else {
textPlural.setText("");
}
for (String fName : map.keySet()) {
String t = extension.getFieldTranslation(lang, tableName, fName);
if (t != null) {
map.get(fName).setText(t);
} else {
map.get(fName).setText("");
}
}
}
private List<String> getFieldsName(Extension extension, String tableName) {
final Set<String> l = new HashSet<String>();
l.addAll(extension.getAllKnownFieldName(tableName));
// + champs traduit dans l'extension
List<String> lT = extension.getTranslatedFieldOfTable(tableName);
l.addAll(lT);
l.remove("ARCHIVE");
l.remove("ORDRE");
l.remove("ID_USER_COMMON_CREATE");
l.remove("ID_USER_COMMON_MODIFY");
// Sort
final ArrayList<String> result = new ArrayList<String>();
result.addAll(l);
Collections.sort(result);
return result;
}
}