Skip to content
Snippets Groups Projects
Commit 30783fca authored by opitzju's avatar opitzju
Browse files

Projekt erstellt, Vorlage eingefügt.

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 1585 additions and 0 deletions
/dbs2_uebung7.iml
/.idea/
pom.xml 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>dbs2_uebung7</artifactId>
<version>1.0-SNAPSHOT</version>
<name>dbs2_uebung7</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
package edu.hsh.dbs2.imdb;
import javax.swing.SwingUtilities;
import edu.hsh.dbs2.imdb.gui.SearchMovieDialog;
import edu.hsh.dbs2.imdb.gui.SearchMovieDialogCallback;
public class Starter {
/**
* @param args
* @throws Throwable
*/
public static void main(String[] args) throws Throwable {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Starter().run();
}
});
}
public void run() {
SearchMovieDialogCallback callback = new SearchMovieDialogCallback();
SearchMovieDialog sd = new SearchMovieDialog(callback);
sd.setVisible(true);
}
}
package edu.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.util.ArrayList;
import java.util.List;
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.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
* Dialog um einen Character eines Filmes zu aendern.
* Es kann eine neue Person (d.h. ein neuer Schauspieler) ausgewaehlt werden,
* und es kann Name und Alias des Characters veraendert werden.
* Die Position wird indirekt ueber die Sortierung der Liste im Movie-Dialog
* festgelegt.
*/
public class CharacterDialog extends JDialog {
private static final long serialVersionUID = 1L;
private JLabel labCharacter;
private JTextField txtCharacter;
private JLabel labAlias;
private JTextField txtAlias;
private JLabel labPlayer;
private JTextField txtPlayer;
private JList<String> lstPersons;
private JScrollPane scrPersons;
private JPanel pnlButtons;
private JButton btnOk;
private JButton btnCancel;
private String outcome = "cancel";
private CharacterDialogCallback callback;
private String player;
public CharacterDialog(CharacterDialogCallback callback) {
this.callback = callback;
setTitle("Movie Character");
setSize(200, 200);
setModal(true);
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
// Festlegen, dass die GUI-Elemente die Gitterfelder in
// waagerechter Richtung ausfuellen:
gbc.fill = GridBagConstraints.BOTH;
// Die Abstaende der einzelnen GUI-Elemente zu den gedachten
// Gitterlinien festgelegen:
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridx = 0;
gbc.gridy = 0;
labCharacter = new JLabel("Character:");
layout.setConstraints(labCharacter, gbc);
add(labCharacter);
gbc.gridx = 1;
gbc.gridy = 0;
txtCharacter = new JTextField(50);
layout.setConstraints(txtCharacter, gbc);
add(txtCharacter);
gbc.gridx = 0;
gbc.gridy = 1;
labAlias = new JLabel("Alias:");
layout.setConstraints(labAlias, gbc);
add(labAlias);
gbc.gridx = 1;
gbc.gridy = 1;
txtAlias = new JTextField(50);
layout.setConstraints(txtAlias, gbc);
add(txtAlias);
gbc.gridx = 0;
gbc.gridy = 3;
labPlayer = new JLabel("Player:");
layout.setConstraints(labPlayer, gbc);
add(labPlayer);
gbc.gridx = 1;
gbc.gridy = 3;
txtPlayer = new JTextField(50);
layout.setConstraints(txtPlayer, gbc);
add(txtPlayer);
txtPlayer.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent arg0) {
loadPersonList();
}
@Override
public void insertUpdate(DocumentEvent arg0) {
loadPersonList();
}
@Override
public void removeUpdate(DocumentEvent arg0) {
loadPersonList();
}
});
gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridheight = 4;
gbc.gridwidth = 2;
lstPersons = new JList<String>();
scrPersons = new JScrollPane(lstPersons);
layout.setConstraints(scrPersons, gbc);
add(scrPersons);
lstPersons.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (lstPersons.getSelectedIndex() != -1) {
String player = lstPersons.getSelectedValue();
setPlayer(player);
}
}
});
gbc.gridx = 0;
gbc.gridy = 8;
gbc.gridheight = 1;
gbc.gridwidth = 2;
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";
setVisible(false);
}
});
btnCancel = new JButton("Cancel");
pnlButtons.add(btnCancel);
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
outcome = "cancel";
setVisible(false);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
setResizable(false);
pack();
setLocationRelativeTo(null);
}
public void start() {
pack();
outcome = "cancel";
setVisible(true);
}
public void setCharacter(String character) {
txtCharacter.setText(character);
}
public String getCharacter() {
return txtCharacter.getText();
}
public void setAlias(String alias) {
txtAlias.setText(alias);
}
public String getAlias() {
return txtAlias.getText();
}
public void setPlayer(String player) {
txtPlayer.setText(player);
this.player = player;
}
public String getPlayer() {
return this.player;
}
public String getOutcome() {
return outcome;
}
/**
* Neuladen der Personenliste. Wird immer aufgerufen, wenn der Text im Dialogfeld "schauspieler"
* geaendert wurde.
*/
private void loadPersonList() {
List<String> p;
if (txtPlayer.getText().isEmpty()) {
p = new ArrayList<String>();
} else {
p = callback.getPersonList(txtPlayer.getText());
}
lstPersons.setListData(p.toArray(new String[0]));
}
}
package edu.hsh.dbs2.imdb.gui;
import java.util.List;
import javax.swing.JOptionPane;
import edu.hsh.dbs2.imdb.logic.PersonManager;
public class CharacterDialogCallback {
private PersonManager pm = new PersonManager();
public List<String> getPersonList(String text) {
try {
List<String> persons = pm.getPersonList(text);
return persons;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Fehler bei der Personensuche: \n" + e.getMessage());
e.printStackTrace();
return null;
}
}
}
package edu.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 edu.hsh.dbs2.imdb.logic.dto.CharacterDTO;
import edu.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);
}
}
}
package edu.hsh.dbs2.imdb.gui;
import edu.hsh.dbs2.imdb.logic.dto.CharacterDTO;
public class MovieDialogCallback {
public CharacterDTO addCharacter() {
CharacterDialogCallback callback = new CharacterDialogCallback();
CharacterDialog cd = new CharacterDialog(callback);
cd.setVisible(true);
if (cd.getOutcome().equals("ok")) {
CharacterDTO mc = new CharacterDTO();
mc.setCharacter(cd.getCharacter());
mc.setAlias(cd.getAlias());
mc.setPlayer(cd.getPlayer());
return mc;
} else
return null;
}
public void editCharacter(CharacterDTO character) {
CharacterDialogCallback callback = new CharacterDialogCallback();
CharacterDialog cd = new CharacterDialog(callback);
cd.setCharacter(character.getCharacter());
cd.setAlias(character.getAlias());
cd.setPlayer(character.getPlayer());
cd.start();
if (cd.getOutcome().equals("ok")) {
character.setCharacter(cd.getCharacter());
character.setAlias(cd.getAlias());
character.setPlayer(cd.getPlayer());
}
}
}
package edu.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.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import edu.hsh.dbs2.imdb.logic.dto.MovieDTO;
public class SearchMovieDialog extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField txtSearch;
private JButton btnSearch;
private JTable tabResult;
private JScrollPane scrResult;
private JButton btnAdd;
private JButton btnEdit;
private JButton btnDelete;
private TabModelMovie tabModel;
private SearchMovieDialogCallback callback;
public SearchMovieDialog(SearchMovieDialogCallback callback) {
this.callback = callback;
setTitle("Search");
setSize(200, 200);
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
// Festlegen, dass die GUI-Elemente die Gitterfelder in
// waagerechter Richtung ausfuellen:
gbc.fill = GridBagConstraints.BOTH;
// Die Abstaende der einzelnen GUI-Elemente zu den gedachten
// Gitterlinien festgelegen:
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridx = 0;
gbc.gridy = 0;
txtSearch = new JTextField(50);
layout.setConstraints(txtSearch, gbc);
add(txtSearch);
gbc.gridx = 1;
gbc.gridy = 0;
btnSearch = new JButton("Search");
layout.setConstraints(btnSearch, gbc);
add(btnSearch);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 8;
tabResult = new JTable();
tabResult.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabResult.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrResult = new JScrollPane(tabResult);
layout.setConstraints(scrResult, gbc);
add(scrResult);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridheight = 1;
btnAdd = new JButton("Add");
layout.setConstraints(btnAdd, gbc);
add(btnAdd);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridheight = 1;
btnEdit = new JButton("Edit");
layout.setConstraints(btnEdit, gbc);
add(btnEdit);
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridheight = 1;
btnDelete = new JButton("Delete");
layout.setConstraints(btnDelete, gbc);
add(btnDelete);
tabResult.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
editMovie();
}
}
});
btnSearch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
search();
}
});
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addMovie();
}
});
btnEdit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
editMovie();
}
});
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
deleteMovie();
}
});
WindowListener windowListener = new WindowAdapter() {
public void windowClosing(WindowEvent w) {
System.exit(0);
}
};
this.addWindowListener(windowListener);
setResizable(false);
pack();
setLocationRelativeTo(null);
}
private MovieDTO getSelection() {
if (tabResult.getSelectedRow() != -1)
return tabModel.getRow(tabResult.getSelectedRow());
else
return null;
}
private void addMovie() {
callback.addMovie();
search();
}
private void editMovie() {
if (getSelection() == null)
JOptionPane.showMessageDialog(null, "Bitte zuerst einen Film auswaehlen!");
else {
callback.editMovie(getSelection().getId());
search();
}
}
private void deleteMovie() {
callback.deleteMovie(getSelection().getId());
search();
}
private void search() {
int row = tabResult.getSelectedRow();
List<MovieDTO> result = callback.runSearch(txtSearch.getText());
if (result != null) {
tabModel = new TabModelMovie(result);
tabResult.setModel(tabModel);
tabResult.getColumnModel().getColumn(0).setPreferredWidth(60);
tabResult.getColumnModel().getColumn(1).setPreferredWidth(300);
tabResult.getColumnModel().getColumn(2).setPreferredWidth(60);
tabResult.getColumnModel().getColumn(3).setPreferredWidth(60);
tabResult.getSelectionModel().setSelectionInterval(row, row);
}
pack();
}
}
package edu.hsh.dbs2.imdb.gui;
import java.util.ArrayList;
import java.util.List;
import edu.hsh.dbs2.imdb.logic.GenreManager;
import edu.hsh.dbs2.imdb.logic.MovieManager;
import edu.hsh.dbs2.imdb.logic.dto.MovieDTO;
public class SearchMovieDialogCallback {
private MovieManager mm = new MovieManager();
private GenreManager gm = new GenreManager();
public List<MovieDTO> runSearch(String search) {
List<MovieDTO> movies;
try {
movies = mm.getMovieList(search);
} catch (Exception e) {
new ShowErrorDialog("Fehler beim der Suche", e);
movies = new ArrayList<MovieDTO>();
}
return movies;
}
public void addMovie() {
movieDialog(null);
}
public void editMovie(long movieId) {
movieDialog(movieId);
}
public void deleteMovie(long movieId) {
try {
mm.deleteMovie(movieId);
} catch (Exception e) {
new ShowErrorDialog("Fehler beim Löschen des Films", e);
}
}
private void movieDialog(Long movieId) {
MovieDTO movie;
if (movieId == null)
movie = new MovieDTO();
else {
try {
movie = mm.getMovie(movieId);
} catch (Exception e) {
new ShowErrorDialog("Fehler beim Laden des Films", e);
return;
}
}
List<String> allGenres;
try {
allGenres = gm.getGenres();
} catch (Exception e) {
new ShowErrorDialog("Fehler beim Laden der Genres", e);
return;
}
MovieDialog movieDialog = new MovieDialog(new MovieDialogCallback(), allGenres);
movieDialog.setMovie(movie);
boolean finished = false;
while (!finished) {
movieDialog.setVisible(true);
finished = true;
if (movieDialog.getOutcome().equals("ok")) {
try {
mm.insertUpdateMovie(movie);
} catch (Exception e) {
new ShowErrorDialog("Fehler beim Speichern des Films", e);
finished = false; // Movie Dialog offen halten
}
}
}
}
}
package edu.hsh.dbs2.imdb.gui;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class ShowErrorDialog extends JDialog {
private static final long serialVersionUID = 1L;
private JTextArea txtError;
private JButton btnOk;
public ShowErrorDialog(String msg, Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
setTitle(msg);
setSize(200, 200);
setModal(true);
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
// Festlegen, dass die GUI-Elemente die Gitterfelder in
// waagerechter Richtung ausfuellen:
gbc.fill = GridBagConstraints.BOTH;
// Die Abstaende der einzelnen GUI-Elemente zu den gedachten
// Gitterlinien festgelegen:
gbc.insets = new Insets(2, 2, 2, 2);
gbc.gridx = 0;
gbc.gridy = 0;
txtError = new JTextArea(sw.toString());
JScrollPane scroll = new JScrollPane(txtError);
scroll.setPreferredSize(new Dimension(800, 400));
layout.setConstraints(scroll, gbc);
add(scroll);
gbc.gridx = 0;
gbc.gridy = 1;
btnOk = new JButton("OK");
layout.setConstraints(btnOk, gbc);
add(btnOk);
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
this.setResizable(false);
this.setSize(new Dimension(800, 400));
pack();
setLocationRelativeTo(null);
setVisible(true);
}
}
package edu.hsh.dbs2.imdb.gui;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import edu.hsh.dbs2.imdb.logic.dto.CharacterDTO;
/**
* Tabellenmodell, welches die Daten fuer eine Tabelle mit allen Characteren
* eines Movies bereitstellt und verwaltet
*/
public class TabModelCharacter extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<CharacterDTO> data;
private List<String> columns = new ArrayList<String>();
public TabModelCharacter(List<CharacterDTO> data) {
this.data = data;
columns.add("Character");
columns.add("Alias");
columns.add("Player");
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int row, int column) {
if (column == 0)
return data.get(row).getCharacter();
else if (column == 1)
return data.get(row).getAlias();
else if (column == 2)
return data.get(row).getPlayer();
return null;
}
@Override
public String getColumnName(int column) {
return columns.get(column);
}
public List<CharacterDTO> getData() {
return data;
}
public void up(int index) {
if (index > 0 && index < data.size()) {
CharacterDTO element = data.remove(index);
data.add(index-1, element);
}
}
public void down(int index) {
if (index >= 0 && index < data.size()-1) {
CharacterDTO element = data.remove(index);
data.add(index+1, element);
}
}
public CharacterDTO getRow(int row) {
return data.get(row);
}
public void addRow(CharacterDTO row) {
data.add(row);
}
public void deleteRow(int row) {
data.remove(row);
}
}
package edu.hsh.dbs2.imdb.gui;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import edu.hsh.dbs2.imdb.logic.dto.MovieDTO;
/**
* Tabellenmodell fuer eine Tabelle mit allen Filmen
*/
public class TabModelMovie extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<MovieDTO> data;
private List<String> columns = new ArrayList<String>();
public TabModelMovie(List<MovieDTO> data) {
this.data = data;
columns.add("Id");
columns.add("Title");
columns.add("Type");
columns.add("Year");
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int row, int column) {
if (column == 0)
return data.get(row).getId();
else if (column == 1)
return data.get(row).getTitle();
else if (column == 2)
return data.get(row).getType();
else if (column == 3)
return data.get(row).getYear();
return null;
}
@Override
public String getColumnName(int column) {
return columns.get(column);
}
public List<MovieDTO> getData() {
return data;
}
public void up(int index) {
if (index > 0 && index < data.size()) {
MovieDTO element = data.remove(index);
data.add(index-1, element);
}
}
public void down(int index) {
if (index >= 0 && index < data.size()-1) {
MovieDTO element = data.remove(index);
data.add(index+1, element);
}
}
public MovieDTO getRow(int row) {
return data.get(row);
}
public void addRow(MovieDTO row) {
data.add(row);
}
public void deleteRow(int row) {
data.remove(row);
}
public void changeRow(int row, MovieDTO rowData) {
data.set(row, rowData);
}
}
package edu.hsh.dbs2.imdb.gui;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
/**
* Tabellenmodell mit allen Daten fuer einen Tabelle aus Personen
*
*/
public class TabModelPerson extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private ArrayList<String> data;
private ArrayList<String> columns = new ArrayList<String>();
public TabModelPerson(ArrayList<String> data) {
this.data = data;
columns.add("Name");
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int row, int column) {
if (column == 0)
return data.get(row);
return null;
}
@Override
public String getColumnName(int column) {
return columns.get(column);
}
public ArrayList<String> getData() {
return data;
}
public void up(int index) {
if (index > 0 && index < data.size()) {
String element = data.remove(index);
data.add(index-1, element);
}
}
public void down(int index) {
if (index >= 0 && index < data.size()-1) {
String element = data.remove(index);
data.add(index+1, element);
}
}
public String getRow(int row) {
return data.get(row);
}
public void addRow(String row) {
data.add(row);
}
public void deleteRow(int row) {
data.remove(row);
}
public void changeRow(int row, String rowData) {
data.set(row, rowData);
}
}
package edu.hsh.dbs2.imdb.logic;
import java.util.ArrayList;
import java.util.List;
public class GenreManager {
/**
* Ermittelt eine vollstaendige Liste aller in der Datenbank abgelegten Genres
* Die Genres werden alphabetisch sortiert zurueckgeliefert.
* @return Alle Genre-Namen als String-Liste
* @throws Exception
*/
public List<String> getGenres() throws Exception {
// TODO
return new ArrayList<>();
}
}
package edu.hsh.dbs2.imdb.logic;
import java.util.ArrayList;
import java.util.List;
import edu.hsh.dbs2.imdb.logic.dto.*;
public class MovieManager {
/**
* Ermittelt alle Filme, deren Filmtitel den Suchstring enthaelt.
* Wenn der String leer ist, sollen alle Filme zurueckgegeben werden.
* Der Suchstring soll ohne Ruecksicht auf Gross/Kleinschreibung verarbeitet werden.
* @param search Suchstring.
* @return Liste aller passenden Filme als MovieDTO
* @throws Exception
*/
public List<MovieDTO> getMovieList(String search) throws Exception {
// TODO
return new ArrayList<>();
}
/**
* Speichert die uebergebene Version des Films neu in der Datenbank oder aktualisiert den
* existierenden Film.
* Dazu werden die Daten des Films selbst (Titel, Jahr, Typ) beruecksichtigt,
* aber auch alle Genres, die dem Film zugeordnet sind und die Liste der Charaktere
* auf den neuen Stand gebracht.
* @param movie Film-Objekt mit Genres und Charakteren.
* @throws Exception
*/
public void insertUpdateMovie(MovieDTO movieDTO) throws Exception {
// TODO
}
/**
* Loescht einen Film aus der Datenbank. Es werden auch alle abhaengigen Objekte geloescht,
* d.h. alle Charaktere und alle Genre-Zuordnungen.
* @param movie
* @throws Exception
*/
public void deleteMovie(long movieId) throws Exception {
// TODO Auto-generated method stub
}
/**
* Liefert die Daten eines einzelnen Movies zurück
* @param movieId
* @return
* @throws Exception
*/
public MovieDTO getMovie(long movieId) throws Exception {
// TODO Auto-generated method stub
return null;
}
}
package edu.hsh.dbs2.imdb.logic;
import java.util.ArrayList;
import java.util.List;
public class PersonManager {
/**
* Liefert eine Liste aller Personen, deren Name den Suchstring enthaelt.
* @param text Suchstring
* @return Liste mit passenden Personennamen, die in der Datenbank eingetragen sind.
* @throws Exception
*/
public List<String> getPersonList(String text) throws Exception {
// TODO
return new ArrayList<>();
}
}
package edu.hsh.dbs2.imdb.logic.dto;
/**
* Data Transfer Object (DTO) fuer Objekte der Klasse Character
* Enthaelt alles noetige fuer die Kommunikation GUI <-> Geschaeftslogik.
*/
public class CharacterDTO {
private String character;
private String alias;
private String player;
public CharacterDTO(CharacterDTO that) {
this.character = that.character;
this.player = that.player;
this.alias = that.alias;
}
public CharacterDTO() {
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public String getPlayer() {
return player;
}
public void setPlayer(String player) {
this.player = player;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
}
package edu.hsh.dbs2.imdb.logic.dto;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Data Transfer Object (DTO) fuer Objekte der Klasse Movie
* Enthaelt alles noetige fuer die Kommunikation GUI <-> Geschaeftslogik.
* Dazue gehoeren auch alle dem Movie zugeordneten Genres und Charaktere.
* Enthaelt die ID; falls es sich um einen neuen Movie handelt, der noch nicht
* in der Datenbank vorhanden ist, ist die ID null.
* @author felix
*/
public class MovieDTO {
private Long id = null;
private String title = "";
private String type = "C";
private int year = 0;
private Set<String> genres = new HashSet<String>();
private List<CharacterDTO> characters = new ArrayList<CharacterDTO>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public void addGenre(String genre) {
genres.add(genre);
}
public void addCharacter(CharacterDTO cdto) {
characters.add(cdto);
}
public Set<String> getGenres() {
return genres;
}
public List<CharacterDTO> getCharacters() {
return characters;
}
public void setCharacters(List<CharacterDTO> characters) {
this.characters = characters;
}
public void setGenres(Set<String> genres2) {
this.genres = genres2;
}
}
package edu.hsh.dbs2.imdb.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
private static Connection conn;
static {
conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@dboracleserv.inform.hs-hannover.de:1521:db01", "user", "pwd");
conn.setAutoCommit(false);
System.out.println("Connect durchgefuehrt ....");
} catch (Exception e) {
System.err.println("Error while connecting to database");
e.printStackTrace();
System.exit(1);
}
}
public static Connection getConnection() {
return conn;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment