352 lines
8.2 KiB
Java
352 lines
8.2 KiB
Java
package de.hsh.dbs2.imdb.gui;
|
|
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.Insets;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import javax.swing.JButton;
|
|
import javax.swing.JDialog;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JList;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTable;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.ListSelectionModel;
|
|
|
|
import de.hsh.dbs2.imdb.logic.dto.CharacterDTO;
|
|
import de.hsh.dbs2.imdb.logic.dto.MovieDTO;
|
|
|
|
public class MovieDialog extends JDialog {
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private JLabel labId;
|
|
private JLabel txtId;
|
|
|
|
private JLabel labTitle;
|
|
private JTextField txtTitle;
|
|
|
|
private JLabel labYear;
|
|
private JTextField txtYear;
|
|
|
|
private JLabel labType;
|
|
private JTextField txtType;
|
|
|
|
private JLabel labGenre;
|
|
private JList<String> lstGenre;
|
|
private JScrollPane scrGenre;
|
|
|
|
private JPanel pnlButtons;
|
|
private JButton btnOk;
|
|
private JButton btnCancel;
|
|
|
|
private JTable tabCharacters;
|
|
private JScrollPane scrCharacters;
|
|
|
|
private JButton btnUp;
|
|
private JButton btnDown;
|
|
private JButton btnAdd;
|
|
private JButton btnEdit;
|
|
private JButton btnDelete;
|
|
|
|
private String outcome = "cancel";
|
|
|
|
private MovieDialogCallback callback;
|
|
private TabModelCharacter tabModel;
|
|
|
|
private MovieDTO movie;
|
|
|
|
public MovieDialog(MovieDialogCallback callback, List<String> allGenres) {
|
|
this.callback = callback;
|
|
|
|
setTitle("Movie");
|
|
setSize(400, 200);
|
|
setModal(true);
|
|
|
|
GridBagLayout layout = new GridBagLayout();
|
|
setLayout(layout);
|
|
|
|
GridBagConstraints gbc = new GridBagConstraints();
|
|
gbc.fill = GridBagConstraints.BOTH;
|
|
gbc.insets = new Insets(2, 2, 2, 2);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 0;
|
|
labId = new JLabel("Id:");
|
|
layout.setConstraints(labId, gbc);
|
|
add(labId);
|
|
|
|
gbc.gridx = 1;
|
|
gbc.gridy = 0;
|
|
txtId = new JLabel("");
|
|
layout.setConstraints(txtId, gbc);
|
|
add(txtId);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 1;
|
|
labTitle = new JLabel("Title:");
|
|
layout.setConstraints(labTitle, gbc);
|
|
add(labTitle);
|
|
|
|
gbc.gridx = 1;
|
|
gbc.gridy = 1;
|
|
txtTitle = new JTextField(50);
|
|
layout.setConstraints(txtTitle, gbc);
|
|
add(txtTitle);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 2;
|
|
labYear = new JLabel("Year:");
|
|
layout.setConstraints(labYear, gbc);
|
|
add(labYear);
|
|
|
|
gbc.gridx = 1;
|
|
gbc.gridy = 2;
|
|
txtYear = new JTextField(4);
|
|
layout.setConstraints(txtYear, gbc);
|
|
add(txtYear);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 3;
|
|
labType = new JLabel("Type:");
|
|
layout.setConstraints(labType, gbc);
|
|
add(labType);
|
|
|
|
gbc.gridx = 1;
|
|
gbc.gridy = 3;
|
|
txtType = new JTextField(1);
|
|
layout.setConstraints(txtType, gbc);
|
|
add(txtType);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 4;
|
|
labGenre = new JLabel("Genres:");
|
|
layout.setConstraints(labGenre, gbc);
|
|
add(labGenre);
|
|
|
|
gbc.gridx = 1;
|
|
gbc.gridy = 4;
|
|
gbc.gridheight = 4;
|
|
lstGenre = new JList<String>();
|
|
scrGenre = new JScrollPane(lstGenre);
|
|
layout.setConstraints(scrGenre, gbc);
|
|
add(scrGenre);
|
|
|
|
gbc.gridx = 0;
|
|
gbc.gridy = 8;
|
|
gbc.gridheight = 1;
|
|
gbc.gridwidth = 4;
|
|
pnlButtons = new JPanel();
|
|
layout.setConstraints(pnlButtons, gbc);
|
|
add(pnlButtons);
|
|
|
|
btnOk = new JButton("OK");
|
|
pnlButtons.add(btnOk);
|
|
|
|
btnOk.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
outcome = "ok";
|
|
updateMovie();
|
|
setVisible(false);
|
|
}
|
|
});
|
|
|
|
btnCancel = new JButton("Cancel");
|
|
pnlButtons.add(btnCancel);
|
|
|
|
btnCancel.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
outcome = "cancel";
|
|
setVisible(false);
|
|
}
|
|
});
|
|
|
|
lstGenre.setListData(allGenres.toArray(new String[0]));
|
|
|
|
gbc.gridx = 2;
|
|
gbc.gridy = 0;
|
|
gbc.gridheight = 8;
|
|
gbc.gridwidth = 1;
|
|
gbc.fill = GridBagConstraints.BOTH;
|
|
tabCharacters = new JTable();
|
|
tabCharacters.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
|
|
tabCharacters.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
scrCharacters = new JScrollPane(tabCharacters);
|
|
layout.setConstraints(scrCharacters, gbc);
|
|
add(scrCharacters);
|
|
|
|
gbc.gridx = 3;
|
|
gbc.gridy = 0;
|
|
gbc.gridheight = 1;
|
|
btnUp = new JButton("Up");
|
|
layout.setConstraints(btnUp, gbc);
|
|
add(btnUp);
|
|
|
|
btnUp.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
moveCharacterUp();
|
|
}
|
|
});
|
|
|
|
gbc.gridx = 3;
|
|
gbc.gridy = 1;
|
|
gbc.gridheight = 1;
|
|
btnDown = new JButton("Down");
|
|
layout.setConstraints(btnDown, gbc);
|
|
add(btnDown);
|
|
|
|
btnDown.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
moveCharacterDown();
|
|
}
|
|
});
|
|
|
|
gbc.gridx = 3;
|
|
gbc.gridy = 2;
|
|
btnAdd = new JButton("Add");
|
|
layout.setConstraints(btnAdd, gbc);
|
|
add(btnAdd);
|
|
|
|
btnAdd.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
addCharacter();
|
|
}
|
|
});
|
|
|
|
gbc.gridx = 3;
|
|
gbc.gridy = 3;
|
|
btnEdit = new JButton("Edit");
|
|
layout.setConstraints(btnEdit, gbc);
|
|
add(btnEdit);
|
|
|
|
btnEdit.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
editCharacter();
|
|
}
|
|
});
|
|
|
|
gbc.gridx = 3;
|
|
gbc.gridy = 4;
|
|
btnDelete = new JButton("Delete");
|
|
layout.setConstraints(btnDelete, gbc);
|
|
add(btnDelete);
|
|
|
|
btnDelete.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
deleteCharacter();
|
|
}
|
|
});
|
|
|
|
tabCharacters.addMouseListener(new MouseAdapter() {
|
|
public void mouseClicked(MouseEvent e) {
|
|
if (e.getClickCount() == 2) {
|
|
editCharacter();
|
|
}
|
|
}
|
|
});
|
|
|
|
setResizable(false);
|
|
pack();
|
|
setLocationRelativeTo(null);
|
|
}
|
|
|
|
public void setMovie(MovieDTO movie) {
|
|
this.movie = movie;
|
|
txtId.setText(movie.getId() == null ? "" : ("" + movie.getId()) );
|
|
txtTitle.setText(movie.getTitle());
|
|
txtYear.setText("" + movie.getYear());
|
|
txtType.setText(("" + movie.getType()).trim());
|
|
|
|
int [] indices = new int[movie.getGenres().size()];
|
|
int j = 0;
|
|
for (String genre : movie.getGenres()) {
|
|
for (int i = 0; i < lstGenre.getModel().getSize(); i++) {
|
|
if (lstGenre.getModel().getElementAt(i).equals(genre))
|
|
indices[j++] = i;
|
|
}
|
|
}
|
|
lstGenre.setSelectedIndices(indices);
|
|
|
|
tabModel = new TabModelCharacter(movie.getCharacters());
|
|
tabCharacters.setModel(tabModel);
|
|
|
|
tabCharacters.getColumnModel().getColumn(0).setPreferredWidth(150);
|
|
tabCharacters.getColumnModel().getColumn(1).setPreferredWidth(150);
|
|
tabCharacters.getColumnModel().getColumn(2).setPreferredWidth(150);
|
|
|
|
pack();
|
|
}
|
|
|
|
public void updateMovie() {
|
|
// Werte aus den Dialogfeldern in den Movie uebernehmen
|
|
movie.setTitle(txtTitle.getText());
|
|
movie.setYear(Integer.parseInt(txtYear.getText()));
|
|
movie.setType(txtType.getText());
|
|
|
|
// In der Liste selektiere Genres in die Liste im Movie uebernehmen
|
|
Set<String> genres = new HashSet<String>();
|
|
for (int i : lstGenre.getSelectedIndices()) {
|
|
String genre = lstGenre.getModel().getElementAt(i);
|
|
genres.add(genre);
|
|
}
|
|
movie.setGenres(genres);
|
|
}
|
|
|
|
public String getOutcome() {
|
|
return outcome;
|
|
}
|
|
|
|
|
|
public void moveCharacterUp() {
|
|
int sel = tabCharacters.getSelectedRow();
|
|
if (sel > 0) {
|
|
tabModel.up(sel);
|
|
tabModel.fireTableDataChanged();
|
|
tabCharacters.setRowSelectionInterval(sel - 1, sel - 1);
|
|
}
|
|
}
|
|
|
|
public void moveCharacterDown() {
|
|
int sel = tabCharacters.getSelectedRow();
|
|
if (sel < tabCharacters.getRowCount() - 1) {
|
|
tabModel.down(tabCharacters.getSelectedRow());
|
|
tabModel.fireTableDataChanged();
|
|
tabCharacters.setRowSelectionInterval(sel + 1, sel + 1);
|
|
}
|
|
}
|
|
|
|
public void addCharacter() {
|
|
CharacterDTO character = callback.addCharacter();
|
|
if (character != null) {
|
|
tabModel.addRow(character);
|
|
tabModel.fireTableDataChanged();
|
|
}
|
|
}
|
|
|
|
public void editCharacter() {
|
|
int row = tabCharacters.getSelectedRow();
|
|
CharacterDTO mc = tabModel.getRow(row);
|
|
callback.editCharacter(mc);
|
|
tabModel.fireTableDataChanged();
|
|
}
|
|
|
|
public void deleteCharacter() {
|
|
int row = tabCharacters.getSelectedRow();
|
|
if (row >= 0) {
|
|
tabModel.deleteRow(tabCharacters.getSelectedRow());
|
|
tabModel.fireTableDataChanged();
|
|
if (row >= tabModel.getRowCount())
|
|
row--;
|
|
if (row >= 0)
|
|
tabCharacters.setRowSelectionInterval(row, row);
|
|
}
|
|
}
|
|
}
|