package com.limegroup.gnutella.gui.xml.editor.audio;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Arrays;
import javax.swing.DefaultComboBoxModel;
import com.limegroup.gnutella.FileDesc;
import com.limegroup.gnutella.gui.xml.editor.AutoCompleteComboBoxEditor;
import com.limegroup.gnutella.gui.xml.editor.MetaEditorPanel;
import com.limegroup.gnutella.gui.xml.editor.MetaEditorUtil;
import com.limegroup.gnutella.gui.xml.ComboBoxValue;
import com.limegroup.gnutella.xml.LimeXMLDocument;
import com.limegroup.gnutella.xml.LimeXMLNames;
import com.limegroup.gnutella.xml.LimeXMLSchema;
import com.limegroup.gnutella.xml.SchemaFieldInfo;
class AudioEditor extends MetaEditorPanel {
private String title = null;
private boolean titleEdited = false;
public AudioEditor(FileDesc fd, LimeXMLSchema schema, LimeXMLDocument doc) {
super(fd, schema, doc);
initComponents();
initLabels();
super.setName(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO));
AutoCompleteComboBoxEditor editor = new AutoCompleteComboBoxEditor();
genreComboBox.setEditor(editor);
initTextFields(); // sets the combo box model
editor.setModel(genreComboBox.getModel()); // use the model for auto complete
setMultiEdit(false);
}
public boolean hasChanged() {
return (titleEdited || super.hasChanged());
}
private void setMultiEdit(boolean multiEdit) {
titleLabel.setVisible(!multiEdit);
titleTextField.setVisible(!multiEdit);
setCheckBoxesVisible(multiEdit);
}
private void initTextFields() {
LimeXMLDocument doc = getDocument();
this.title = null;
String track = null;
String artist = null;
String album = null;
String genre = null;
String comments = null;
String year = null;
String type = null;
String language = null;
if (doc != null) {
title = doc.getValue(LimeXMLNames.AUDIO_TITLE);
track = doc.getValue(LimeXMLNames.AUDIO_TRACK);
artist = doc.getValue(LimeXMLNames.AUDIO_ARTIST);
album = doc.getValue(LimeXMLNames.AUDIO_ALBUM);
genre = doc.getValue(LimeXMLNames.AUDIO_GENRE);
comments = doc.getValue(LimeXMLNames.AUDIO_COMMENTS);
year = doc.getValue(LimeXMLNames.AUDIO_YEAR);
type = doc.getValue(LimeXMLNames.AUDIO_TYPE);
language = doc.getValue(LimeXMLNames.AUDIO_LANGUAGE);
}
addComponent(LimeXMLNames.AUDIO_TITLE, titleTextField);
addComponent(LimeXMLNames.AUDIO_ARTIST, artistCheckBox, artistTextField);
addComponent(LimeXMLNames.AUDIO_ALBUM, albumCheckBox, albumTextField);
addComponent(LimeXMLNames.AUDIO_YEAR, yearCheckBox, yearTextField);
addComponent(LimeXMLNames.AUDIO_TRACK, trackCheckBox, trackTextField);
addComponent(LimeXMLNames.AUDIO_LANGUAGE, languageCheckBox, languageTextField);
addComponent(LimeXMLNames.AUDIO_COMMENTS, commentsCheckBox, commentsTextArea);
addComponent(LimeXMLNames.AUDIO_TYPE, typeCheckBox, typeComboBox);
addComponent(LimeXMLNames.AUDIO_GENRE, genreCheckBox, genreComboBox);
if (title != null) {
titleTextField.setText(title);
}
if (artist != null) {
artistTextField.setText(artist);
}
if (album != null) {
albumTextField.setText(album);
}
if (year != null) {
yearTextField.setText(year);
}
if (track != null) {
trackTextField.setText(track);
}
if (language != null) {
languageTextField.setText(language);
}
if (comments != null) {
commentsTextArea.setText(comments);
commentsTextArea.setCaretPosition(0);
}
LimeXMLSchema schema = getSchema();
List enums = schema.getEnumerationFields();
Iterator it = enums.iterator();
while(it.hasNext()) {
SchemaFieldInfo infoField = (SchemaFieldInfo)it.next();
String currField = infoField.getCanonicalizedFieldName();
if (currField.equals(LimeXMLNames.AUDIO_GENRE)) {
ArrayList values = new ArrayList();
values.add(0, new ComboBoxValue());
addEnums(infoField.getEnumerationList(), values);
int index = 0;
if (genre != null && !genre.equals("")) {
ComboBoxValue value = new ComboBoxValue(genre);
if (!values.contains(value))
values.add(value);
}
Object[] arr = (Object[])values.toArray(new Object[0]);
Arrays.sort(arr);
if(genre != null && !genre.equals(""))
index = Arrays.asList(arr).indexOf(new ComboBoxValue(genre));
genreComboBox.setModel(new DefaultComboBoxModel(arr));
genreComboBox.setSelectedIndex(index);
genreComboBox.setMaximumRowCount(15);
} else if (currField.equals(LimeXMLNames.AUDIO_TYPE)) {
ArrayList values = new ArrayList();
values.add(0, new ComboBoxValue());
addEnums(infoField.getEnumerationList(), values);
int index = (type != null) ? values.indexOf(type) : 0;
Object[] arr = (Object[])values.toArray(new Object[0]);
Arrays.sort(arr);
typeComboBox.setModel(new DefaultComboBoxModel(arr));
typeComboBox.setSelectedIndex(index);
}
}
titleTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt) {
titleEdited = true;
}
});
setCheckBoxesSelected(false);
}
private void initLabels() {
titleLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_TITLE));
artistLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_ARTIST));
albumLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_ALBUM));
yearLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_YEAR));
trackLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_TRACK));
languageLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_LANGUAGE));
commentsLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_COMMENTS));
genreLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_GENRE));
typeLabel.setText(MetaEditorUtil.getStringResource(LimeXMLNames.AUDIO_TYPE));
}
public void prepareSave() {
if (title != null) {
String text = titleTextField.getText().trim();
if (text.equals("")) {
titleTextField.setText(title);
}
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JPanel spacer1;
javax.swing.JPanel spacer2;
javax.swing.JPanel spacer3;
javax.swing.JPanel spacer4;
titleLabel = new javax.swing.JLabel();
titleTextField = new com.limegroup.gnutella.gui.LimeTextField();
artistLabel = new javax.swing.JLabel();
artistTextField = new com.limegroup.gnutella.gui.LimeTextField();
albumLabel = new javax.swing.JLabel();
albumTextField = new com.limegroup.gnutella.gui.LimeTextField();
commentsLabel = new javax.swing.JLabel();
commentsScrollPane = new javax.swing.JScrollPane();
commentsTextArea = new javax.swing.JTextArea();
genreLabel = new javax.swing.JLabel();
genreComboBox = new javax.swing.JComboBox();
yearLabel = new javax.swing.JLabel();
trackLabel = new javax.swing.JLabel();
yearCheckBox = new javax.swing.JCheckBox();
artistCheckBox = new javax.swing.JCheckBox();
albumCheckBox = new javax.swing.JCheckBox();
commentsCheckBox = new javax.swing.JCheckBox();
genreCheckBox = new javax.swing.JCheckBox();
trackCheckBox = new javax.swing.JCheckBox();
languageLabel = new javax.swing.JLabel();
languageTextField = new com.limegroup.gnutella.gui.LimeTextField();
languageCheckBox = new javax.swing.JCheckBox();
typeLabel = new javax.swing.JLabel();
typeComboBox = new javax.swing.JComboBox();
typeCheckBox = new javax.swing.JCheckBox();
yearTextField = new com.limegroup.gnutella.gui.LimeTextField();
trackTextField = new com.limegroup.gnutella.gui.LimeTextField();
spacer1 = new javax.swing.JPanel();
spacer2 = new javax.swing.JPanel();
spacer3 = new javax.swing.JPanel();
spacer4 = new javax.swing.JPanel();
setLayout(new java.awt.GridBagLayout());
setNextFocusableComponent(titleTextField);
setOpaque(false);
titleLabel.setText("TITLE");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 300;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(titleLabel, gridBagConstraints);
titleTextField.setNextFocusableComponent(artistTextField);
titleTextField.setPreferredSize(new java.awt.Dimension(4, 22));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(titleTextField, gridBagConstraints);
artistLabel.setText("ARTIST");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 300;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(artistLabel, gridBagConstraints);
artistTextField.setNextFocusableComponent(yearTextField);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(artistTextField, gridBagConstraints);
albumLabel.setText("ALBUM");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(albumLabel, gridBagConstraints);
albumTextField.setNextFocusableComponent(trackTextField);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(albumTextField, gridBagConstraints);
commentsLabel.setText("COMMENTS");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 8;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(commentsLabel, gridBagConstraints);
commentsScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
commentsScrollPane.setPreferredSize(new java.awt.Dimension(22, 22));
commentsTextArea.setLineWrap(true);
commentsTextArea.setWrapStyleWord(true);
commentsTextArea.setMinimumSize(new java.awt.Dimension(8, 13));
commentsTextArea.setNextFocusableComponent(genreComboBox);
commentsTextArea.setPreferredSize(new java.awt.Dimension(8, 13));
commentsScrollPane.setViewportView(commentsTextArea);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 9;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.ipady = 80;
add(commentsScrollPane, gridBagConstraints);
genreLabel.setText("GENRE");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 10;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(genreLabel, gridBagConstraints);
genreComboBox.setEditable(true);
genreComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "", "GENRE1", "GENRE2", "GENRE3" }));
genreComboBox.setMinimumSize(new java.awt.Dimension(160, 22));
genreComboBox.setNextFocusableComponent(this);
genreComboBox.setPreferredSize(new java.awt.Dimension(160, 22));
genreComboBox.setAutoscrolls(true);
genreComboBox.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 11;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
add(genreComboBox, gridBagConstraints);
yearLabel.setText("YEAR");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(yearLabel, gridBagConstraints);
trackLabel.setText("TRACK");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(trackLabel, gridBagConstraints);
yearCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 3;
add(yearCheckBox, gridBagConstraints);
artistCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
add(artistCheckBox, gridBagConstraints);
albumCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
add(albumCheckBox, gridBagConstraints);
commentsCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 9;
add(commentsCheckBox, gridBagConstraints);
genreCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 11;
add(genreCheckBox, gridBagConstraints);
trackCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 5;
add(trackCheckBox, gridBagConstraints);
languageLabel.setText("LANGUAGE");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(languageLabel, gridBagConstraints);
languageTextField.setNextFocusableComponent(typeComboBox);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 7;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(languageTextField, gridBagConstraints);
languageCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 7;
add(languageCheckBox, gridBagConstraints);
typeLabel.setText("TYPE");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
add(typeLabel, gridBagConstraints);
typeComboBox.setMaximumRowCount(15);
typeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "", "TYPE1", "TYPE2", "TYPE3" }));
typeComboBox.setNextFocusableComponent(commentsTextArea);
typeComboBox.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 7;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(typeComboBox, gridBagConstraints);
typeCheckBox.setFocusPainted(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 7;
add(typeCheckBox, gridBagConstraints);
yearTextField.setNextFocusableComponent(albumTextField);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(yearTextField, gridBagConstraints);
trackTextField.setNextFocusableComponent(languageTextField);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(trackTextField, gridBagConstraints);
spacer1.setMaximumSize(new java.awt.Dimension(22, 10));
spacer1.setMinimumSize(new java.awt.Dimension(22, 10));
spacer1.setPreferredSize(new java.awt.Dimension(22, 10));
spacer1.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
add(spacer1, gridBagConstraints);
spacer2.setMaximumSize(new java.awt.Dimension(22, 10));
spacer2.setMinimumSize(new java.awt.Dimension(22, 10));
spacer2.setPreferredSize(new java.awt.Dimension(22, 10));
spacer2.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
add(spacer2, gridBagConstraints);
spacer3.setMinimumSize(new java.awt.Dimension(22, 10));
spacer3.setPreferredSize(new java.awt.Dimension(22, 10));
spacer3.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 4;
gridBagConstraints.gridy = 0;
add(spacer3, gridBagConstraints);
spacer4.setMinimumSize(new java.awt.Dimension(22, 10));
spacer4.setPreferredSize(new java.awt.Dimension(22, 10));
spacer4.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 12;
add(spacer4, gridBagConstraints);
}//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox albumCheckBox;
private javax.swing.JLabel albumLabel;
private com.limegroup.gnutella.gui.LimeTextField albumTextField;
private javax.swing.JCheckBox artistCheckBox;
private javax.swing.JLabel artistLabel;
private com.limegroup.gnutella.gui.LimeTextField artistTextField;
private javax.swing.JCheckBox commentsCheckBox;
private javax.swing.JLabel commentsLabel;
private javax.swing.JScrollPane commentsScrollPane;
private javax.swing.JTextArea commentsTextArea;
private javax.swing.JCheckBox genreCheckBox;
private javax.swing.JComboBox genreComboBox;
private javax.swing.JLabel genreLabel;
private javax.swing.JCheckBox languageCheckBox;
private javax.swing.JLabel languageLabel;
private com.limegroup.gnutella.gui.LimeTextField languageTextField;
private javax.swing.JLabel titleLabel;
private com.limegroup.gnutella.gui.LimeTextField titleTextField;
private javax.swing.JCheckBox trackCheckBox;
private javax.swing.JLabel trackLabel;
private com.limegroup.gnutella.gui.LimeTextField trackTextField;
private javax.swing.JCheckBox typeCheckBox;
private javax.swing.JComboBox typeComboBox;
private javax.swing.JLabel typeLabel;
private javax.swing.JCheckBox yearCheckBox;
private javax.swing.JLabel yearLabel;
private com.limegroup.gnutella.gui.LimeTextField yearTextField;
// End of variables declaration//GEN-END:variables
}