From 64017090b307bc43c56ace57cd03c230893ba2a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cort=C3=A9s?= Date: Tue, 7 May 2019 19:02:41 -0400 Subject: [PATCH] Agregada busqueda a vista de autor list Busca entre todos los campos de nombre, apellido paterno y apellido materno --- .../autor/AutorListController.java | 14 ++++++++++ .../java/xyz/danielcortes/models/Autor.java | 6 ++++- .../repository/AutorRepository.java | 22 +++++++++++++++- .../views/autor/AutorListPanel.form | 20 ++++++++++++-- .../views/autor/AutorListPanel.java | 26 +++++++++++++++++-- 5 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/main/java/xyz/danielcortes/controllers/autor/AutorListController.java b/src/main/java/xyz/danielcortes/controllers/autor/AutorListController.java index 499dae4..c6d3b55 100644 --- a/src/main/java/xyz/danielcortes/controllers/autor/AutorListController.java +++ b/src/main/java/xyz/danielcortes/controllers/autor/AutorListController.java @@ -14,18 +14,32 @@ public class AutorListController { public AutorListController(AutorListPanel view) { this.view = view; this.autorRepository = new AutorRepository(); + this.setupListeners(); } public void reload() { this.loadAutorTable(); } + private void setupListeners() { + this.view.getBuscarButton().addActionListener(e -> { + String term = this.view.getSearchField().getText(); + List autores = this.autorRepository.search(term); + this.loadAutorTable(autores); + }); + } + private void loadAutorTable() { List autores = this.autorRepository.getAll(); + loadAutorTable(autores); + } + + private void loadAutorTable(List autores) { BaseTableModel model = this.view.getAutorModel(); model.addRows(autores); } + public AutorListPanel getView() { return view; } diff --git a/src/main/java/xyz/danielcortes/models/Autor.java b/src/main/java/xyz/danielcortes/models/Autor.java index 53e6e02..325fba7 100644 --- a/src/main/java/xyz/danielcortes/models/Autor.java +++ b/src/main/java/xyz/danielcortes/models/Autor.java @@ -1,5 +1,6 @@ package xyz.danielcortes.models; +import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; @@ -14,7 +15,7 @@ import javax.persistence.Table; public class Autor { @Id - @GeneratedValue(strategy= GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Integer id; @@ -63,6 +64,9 @@ public class Autor { } public Set getLibros() { + if (this.libros == null) { + this.libros = new HashSet<>(); + } return libros; } diff --git a/src/main/java/xyz/danielcortes/repository/AutorRepository.java b/src/main/java/xyz/danielcortes/repository/AutorRepository.java index 02ea1b6..e82a10a 100644 --- a/src/main/java/xyz/danielcortes/repository/AutorRepository.java +++ b/src/main/java/xyz/danielcortes/repository/AutorRepository.java @@ -3,19 +3,39 @@ package xyz.danielcortes.repository; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import xyz.danielcortes.framework.PersistenceManager; import xyz.danielcortes.models.Autor; public class AutorRepository { + private EntityManager em; - public AutorRepository() { this.em = PersistenceManager.getEntityManager(); } + public AutorRepository() { + this.em = PersistenceManager.getEntityManager(); + } public List getAll() { TypedQuery query = em.createQuery("SELECT a FROM Autor a", Autor.class); return query.getResultList(); } + public List search(String term) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(Autor.class); + Root r = query.from(Autor.class); + query.where( + cb.or( + cb.like(cb.lower(r.get("nombre")), "%" + term.toLowerCase() + "%"), + cb.like(cb.lower(r.get("apellidoPaterno")), "%" + term.toLowerCase() + "%"), + cb.like(cb.lower(r.get("apellidoMaterno")), "%" + term.toLowerCase() + "%") + ) + ); + return em.createQuery(query).getResultList(); + } + public void save(Autor autor) { em.getTransaction().begin(); em.persist(autor); diff --git a/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.form b/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.form index 2495914..f5e4ed4 100644 --- a/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.form +++ b/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.form @@ -1,6 +1,6 @@
- + @@ -10,7 +10,7 @@ - + @@ -23,6 +23,22 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.java b/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.java index b7aac12..f349401 100644 --- a/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.java +++ b/src/main/java/xyz/danielcortes/views/autor/AutorListPanel.java @@ -4,10 +4,12 @@ import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; import java.awt.Dimension; import java.awt.Insets; +import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.JTextField; import xyz.danielcortes.framework.BaseTableModel; import xyz.danielcortes.models.Autor; @@ -15,6 +17,8 @@ public class AutorListPanel { private JPanel contentPane; private JTable autorTable; + private JTextField searchField; + private JButton buscarButton; private BaseTableModel autorModel; public JPanel getContentPane() { @@ -29,6 +33,14 @@ public class AutorListPanel { return autorModel; } + public JButton getBuscarButton() { + return buscarButton; + } + + public JTextField getSearchField() { + return searchField; + } + private void createUIComponents() { this.createAutorTable(); } @@ -67,14 +79,24 @@ public class AutorListPanel { private void $$$setupUI$$$() { createUIComponents(); contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(1, 1, new Insets(20, 20, 20, 20), -1, -1)); + contentPane.setLayout(new GridLayoutManager(2, 2, new Insets(20, 20, 20, 20), -1, -1)); final JScrollPane scrollPane1 = new JScrollPane(); contentPane.add(scrollPane1, - new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(400, -1), null, 0, false)); scrollPane1.setViewportView(autorTable); + searchField = new JTextField(); + contentPane.add(searchField, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, + GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + buscarButton = new JButton(); + buscarButton.setText("Buscar"); + contentPane.add(buscarButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, + GridConstraints.FILL_HORIZONTAL, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); } /**