package org.phenoscape.view;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.apache.commons.lang.StringUtils;
import org.jdesktop.xswingx.PromptSupport;
import org.obo.app.swing.TabActionTextField;
import org.phenoscape.controller.PhenexController;
import org.phenoscape.model.DataSet;
public class DataSetComponent extends PhenoscapeGUIComponent {
private JTextField curatorsField;
private JTextField publicationField;
private JTextField publicationLabelField;
private JTextField publicationURIField;
private JTextField publicationCitationField;
private JTextArea pubNotesField;
public DataSetComponent(String id, PhenexController controller) {
super(id, controller);
}
@Override
public void init() {
super.init();
this.initializeInterface();
}
private void initializeInterface() {
this.setLayout(new GridBagLayout());
this.curatorsField = new TabActionTextField();
PromptSupport.setPrompt("None", this.curatorsField);
this.curatorsField.setBackground(new JTextField().getBackground());
this.curatorsField.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
getController().getDataSet().setCurators(StringUtils.stripToNull(curatorsField.getText()));
}
});
this.publicationField = new TabActionTextField();
PromptSupport.setPrompt("None", this.publicationField);
this.publicationField.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
getController().getDataSet().setPublication(StringUtils.stripToNull(publicationField.getText()));
}
});
this.publicationLabelField = new TabActionTextField();
PromptSupport.setPrompt("None", this.publicationLabelField);
this.publicationLabelField.setBackground(new JTextField().getBackground());
this.publicationLabelField.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
getController().getDataSet().setPublicationLabel(StringUtils.stripToNull(publicationLabelField.getText()));
}
});
this.publicationURIField = new TabActionTextField();
PromptSupport.setPrompt("None", this.publicationURIField);
this.publicationURIField.setBackground(new JTextField().getBackground());
this.publicationURIField.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
getController().getDataSet().setPublicationURI(StringUtils.stripToNull(publicationURIField.getText()));
}
});
this.publicationCitationField = new TabActionTextField();
PromptSupport.setPrompt("None", this.publicationCitationField);
this.publicationCitationField.setBackground(new JTextField().getBackground());
this.publicationCitationField.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
getController().getDataSet().setPublicationCitation(StringUtils.stripToNull(publicationCitationField.getText()));
}
});
this.pubNotesField = new JTextArea();
this.pubNotesField.setLineWrap(true);
this.pubNotesField.setWrapStyleWord(true);
this.pubNotesField.getDocument().addDocumentListener(new PubNotesListener());
final GridBagConstraints curatorsLabelConstraints = new GridBagConstraints();
curatorsLabelConstraints.anchor = GridBagConstraints.EAST;
this.add(new JLabel("Curators:"), curatorsLabelConstraints);
final GridBagConstraints curatorsFieldConstraints = new GridBagConstraints();
curatorsFieldConstraints.gridx = 1;
curatorsFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
curatorsFieldConstraints.weightx = 1.0;
this.add(this.curatorsField, curatorsFieldConstraints);
final GridBagConstraints pubLabelLabelConstraints = new GridBagConstraints();
pubLabelLabelConstraints.anchor = GridBagConstraints.EAST;
pubLabelLabelConstraints.gridy = 1;
this.add(new JLabel("Publication Label:"), pubLabelLabelConstraints);
final GridBagConstraints pubLabelFieldConstraints = new GridBagConstraints();
pubLabelFieldConstraints.gridx = 1;
pubLabelFieldConstraints.gridy = 1;
pubLabelFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
pubLabelFieldConstraints.weightx = 1.0;
this.add(this.publicationLabelField, pubLabelFieldConstraints);
final GridBagConstraints pubDOILabelConstraints = new GridBagConstraints();
pubDOILabelConstraints.anchor = GridBagConstraints.EAST;
pubDOILabelConstraints.gridy = 2;
this.add(new JLabel("Publication DOI/URI:"), pubDOILabelConstraints);
final GridBagConstraints pubDOIFieldConstraints = new GridBagConstraints();
pubDOIFieldConstraints.gridx = 1;
pubDOIFieldConstraints.gridy = 2;
pubDOIFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
pubDOIFieldConstraints.weightx = 1.0;
this.add(this.publicationURIField, pubDOIFieldConstraints);
final GridBagConstraints fullCitationLabelConstraints = new GridBagConstraints();
fullCitationLabelConstraints.anchor = GridBagConstraints.EAST;
fullCitationLabelConstraints.gridy = 3;
this.add(new JLabel("Publication Citation:"), fullCitationLabelConstraints);
final GridBagConstraints fullCitationFieldConstraints = new GridBagConstraints();
fullCitationFieldConstraints.gridx = 1;
fullCitationFieldConstraints.gridy = 3;
fullCitationFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
fullCitationFieldConstraints.weightx = 1.0;
this.add(this.publicationCitationField, fullCitationFieldConstraints);
final GridBagConstraints pubNotesLabelConstraints = new GridBagConstraints();
pubNotesLabelConstraints.gridy = 4;
pubNotesLabelConstraints.gridwidth = 2;
pubNotesLabelConstraints.anchor = GridBagConstraints.WEST;
this.add(new JLabel("Publication Notes:"), pubNotesLabelConstraints);
final GridBagConstraints pubNotesFieldConstraints = new GridBagConstraints();
pubNotesFieldConstraints.gridy = 5;
pubNotesFieldConstraints.gridwidth = 2;
pubNotesFieldConstraints.fill = GridBagConstraints.BOTH;
pubNotesFieldConstraints.weightx = 1.0;
pubNotesFieldConstraints.weighty = 1.0;
this.add(new JScrollPane(this.pubNotesField), pubNotesFieldConstraints);
this.updateInterface();
this.getController().getDataSet().addPropertyChangeListener(DataSet.CURATORS, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
curatorsField.setText(getController().getDataSet().getCurators());
}
});
this.getController().getDataSet().addPropertyChangeListener(DataSet.PUBLICATION, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
publicationField.setText(getController().getDataSet().getPublication());
}
});
this.getController().getDataSet().addPropertyChangeListener(DataSet.PUBLICATION_LABEL, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
publicationLabelField.setText(getController().getDataSet().getPublicationLabel());
}
});
this.getController().getDataSet().addPropertyChangeListener(DataSet.PUBLICATION_URI, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
publicationURIField.setText(getController().getDataSet().getPublicationURI());
}
});
this.getController().getDataSet().addPropertyChangeListener(DataSet.PUBLICATION_CITATION, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
publicationCitationField.setText(getController().getDataSet().getPublicationCitation());
}
});
this.getController().getDataSet().addPropertyChangeListener(DataSet.PUBLICATION_NOTES, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
final String newNotes = getController().getDataSet().getPublicationNotes();
final String currentNotes = pubNotesField.getText();
if (!StringUtils.equals(newNotes, currentNotes)) {
pubNotesField.setText(newNotes);
}
}
});
}
private void updateInterface() {
this.curatorsField.setText(this.getController().getDataSet().getCurators());
this.publicationField.setText(this.getController().getDataSet().getPublication());
this.publicationLabelField.setText(this.getController().getDataSet().getPublicationLabel());
this.publicationURIField.setText(this.getController().getDataSet().getPublicationURI());
this.publicationCitationField.setText(this.getController().getDataSet().getPublicationCitation());
this.pubNotesField.setText(this.getController().getDataSet().getPublicationNotes());
}
private class PubNotesListener implements DocumentListener {
@Override
public void changedUpdate(DocumentEvent e) {
this.documentChanged();
}
@Override
public void insertUpdate(DocumentEvent e) {
this.documentChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
this.documentChanged();
}
private void documentChanged() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
getController().getDataSet().setPublicationNotes(pubNotesField.getText());
}
});
}
}
}