Skip to content

Commit 99cd995

Browse files
authored
Merge pull request #5 from uo287568/HU09-LocalizacionDelEnvio
Hu09 localizacion del envio
2 parents fc418e2 + 878edaa commit 99cd995

6 files changed

+275
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package giis.demo.tkrun;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import javax.swing.JOptionPane;
7+
import javax.swing.table.TableModel;
8+
9+
import giis.demo.util.SwingUtil;
10+
11+
public class LocalizacionEnvioController {
12+
private LocalizacionEnvioModel model;
13+
private LocalizacionEnvioView view;
14+
15+
public LocalizacionEnvioController(LocalizacionEnvioModel localizacionEnvioModel, LocalizacionEnvioView localizacionEnvioView) {
16+
this.model = localizacionEnvioModel;
17+
this.view = localizacionEnvioView;
18+
//no hay inicializacion especifica del modelo, solo de la vista
19+
this.initView();
20+
}
21+
22+
public void initController() {
23+
view.getBtSalir().addActionListener(e -> SwingUtil.exceptionWrapper(() -> view.reset()));
24+
view.getBtBuscar().addActionListener(e -> buscarEnvio());
25+
}
26+
27+
private void buscarEnvio() {
28+
String nref = view.getTfNRef().getText();
29+
if(comprobarNRef(nref)) {
30+
int nrefNum = Integer.parseInt(nref);
31+
EnvioDisplayDTO envio = model.getEnvio(nrefNum);
32+
if(comprobarEnvio(envio, nrefNum)) {
33+
mostrarInfo(envio);
34+
mostrarMovimientos(nrefNum);
35+
}
36+
}
37+
}
38+
39+
private void mostrarMovimientos(int nrefNum) {
40+
List<MovimientosDisplayDTO> movimientos = model.getMovimientos(nrefNum);
41+
TableModel tmodel = SwingUtil.getTableModelFromPojos(movimientos, new String[] {"movimiento", "ubicacion","fechaMov"});
42+
view.getTbMovimientos().setModel(tmodel);
43+
SwingUtil.autoAdjustColumns(view.getTbMovimientos());
44+
if (movimientos.get(0).getMovimiento().equals("Entrega")) {
45+
view.getTfEstado().setText("ENTREGADO");
46+
} else {
47+
view.getTfEstado().setText("EN CAMINO");
48+
}
49+
}
50+
51+
private void mostrarInfo(EnvioDisplayDTO envio) {
52+
List<EnvioDisplayDTO> envios = new ArrayList<>();
53+
envios.add(envio);
54+
TableModel tmodel = SwingUtil.getTableModelFromPojos(envios, new String[] {"nref", "nombreEmisor", "correoEmisor","direccionEmisor","direccionReceptor"});
55+
view.getTbInfo().setModel(tmodel);
56+
SwingUtil.autoAdjustColumns(view.getTbInfo());
57+
view.getTfEstado().setText("REGISTRADO");
58+
}
59+
60+
private boolean comprobarEnvio(EnvioDisplayDTO envio, int nrefNum) {
61+
if (envio==null) {
62+
JOptionPane.showMessageDialog(null, "No existe un envío con el \nnúmero de referencia: " + nrefNum);
63+
return false;
64+
} else return true;
65+
}
66+
67+
private boolean comprobarNRef(String nref) {
68+
try {
69+
if(nref.isBlank() || Integer.parseInt(nref) <= 0) {
70+
JOptionPane.showMessageDialog(null, "Formato de número de referencia inválido");
71+
return false;
72+
} else return true;
73+
} catch (NumberFormatException e) {
74+
JOptionPane.showMessageDialog(null, "Formato de Número de referencia inválido");
75+
return false;
76+
}
77+
}
78+
79+
public void initView() {
80+
view.getFrame().setVisible(true);
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package giis.demo.tkrun;
2+
3+
import java.util.List;
4+
5+
import giis.demo.util.Database;
6+
/**
7+
* Acceso a los datos de carreras e inscripciones,
8+
* utilizado como modelo para el ejemplo de swing y para las pruebas unitarias y de interfaz de usuario.
9+
*
10+
* <br/>En los metodos de este ejemplo toda la logica de negocio se realiza mediante una unica query sql por lo que siempre
11+
* se utilizan los metodos de utilidad en la clase Database que usan apache commons-dbutils y controlan la conexion.
12+
* En caso de que en un mismo metodo se realicen diferentes queries se deberia controlar la conexion desde esta clase
13+
* (ver como ejemplo la implementacion en Database).
14+
*
15+
* <br/>Si utilizase algún otro framework para manejar la persistencia, la funcionalidad proporcionada por esta clase sería la asignada
16+
* a los Servicios, Repositorios y DAOs.
17+
*/
18+
public class LocalizacionEnvioModel {
19+
20+
private Database db=new Database();
21+
22+
public EnvioDisplayDTO getEnvio(int nrefNum) {
23+
String sql = "select * from envios where nref=?";
24+
List<EnvioDisplayDTO> envios = db.executeQueryPojo(EnvioDisplayDTO.class, sql, nrefNum);
25+
if(envios.isEmpty()) {
26+
return null;
27+
}
28+
return envios.get(0);
29+
}
30+
31+
public List<MovimientosDisplayDTO> getMovimientos(int nrefNum) {
32+
String sql = "select * from movimientos where nref=?";
33+
List<MovimientosDisplayDTO> movimientos = db.executeQueryPojo(MovimientosDisplayDTO.class, sql, nrefNum);
34+
return movimientos;
35+
}
36+
37+
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package giis.demo.tkrun;
2+
3+
import javax.swing.JFrame;
4+
import net.miginfocom.swing.MigLayout;
5+
import javax.swing.JLabel;
6+
import javax.swing.JTextField;
7+
import javax.swing.JButton;
8+
9+
import javax.swing.JPanel;
10+
import java.awt.Font;
11+
import java.awt.FlowLayout;
12+
import java.awt.Color;
13+
import javax.swing.JScrollPane;
14+
import javax.swing.JTable;
15+
16+
/**
17+
* Vista de la pantalla que muestra las carreras activas y permite interactuar con ellas.
18+
* <br/>Se ha generado con WindowBulder y modificado para ser conforme a MVC teniendo en cuenta:
19+
* - Se elimina main (es invocada desde CarrerasMain) y se incluye Title en el frame
20+
* - No se incluye ningun handler de eventos pues estos van en el controlador
21+
* - Las tablas se encierran en JOptionPane para que se puedan visualizar las cabeceras
22+
* - Se asinga nombre a las tablas si se van a automatizar la ejecucion de pruebas
23+
* - Incluye al final los metodos adicionales necesarios para acceder al UI desde el controlador
24+
*/
25+
public class LocalizacionEnvioView {
26+
27+
private JFrame frmTransportista;
28+
private JLabel lbTítulo;
29+
private JTextField tfNRef;
30+
private JPanel pnEnvio;
31+
private JLabel lbNRef;
32+
private JButton btnSalir;
33+
private JButton btBuscar;
34+
private JScrollPane pnMovimientos;
35+
private JTable tbMovimientos;
36+
private JLabel lbEstado;
37+
private JTextField tfEstado;
38+
private JLabel lbInfo;
39+
private JScrollPane pnInfo;
40+
private JTable tbInfo;
41+
private JLabel lbMovimientos;
42+
43+
/**
44+
* Create the application.
45+
*/
46+
public LocalizacionEnvioView() {
47+
initialize();
48+
}
49+
50+
/**
51+
* Initialize the contents of the frame.
52+
*/
53+
private void initialize() {
54+
frmTransportista = new JFrame();
55+
frmTransportista.setTitle("EnvíosTransportista");
56+
frmTransportista.setName("EnvíosTransportista");
57+
frmTransportista.setBounds(0, 0, 577, 438);
58+
frmTransportista.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
59+
frmTransportista.getContentPane().setLayout(new MigLayout("", "[grow]", "[][][][][][grow][][grow][][]"));
60+
61+
lbTítulo = new JLabel("Localización de un envío:");
62+
lbTítulo.setFont(new Font("Tahoma", Font.BOLD, 15));
63+
frmTransportista.getContentPane().add(lbTítulo, "cell 0 0");
64+
65+
pnEnvio = new JPanel();
66+
FlowLayout fl_pnEnvio = (FlowLayout) pnEnvio.getLayout();
67+
fl_pnEnvio.setAlignment(FlowLayout.LEFT);
68+
frmTransportista.getContentPane().add(pnEnvio, "cell 0 2,grow");
69+
70+
lbNRef = new JLabel("Número de referencia del envío: ");
71+
lbNRef.setFont(new Font("Tahoma", Font.PLAIN, 13));
72+
pnEnvio.add(lbNRef);
73+
74+
tfNRef = new JTextField();
75+
pnEnvio.add(tfNRef);
76+
tfNRef.setColumns(10);
77+
78+
btBuscar = new JButton("Buscar envío");
79+
btBuscar.setFont(new Font("Tahoma", Font.BOLD, 12));
80+
btBuscar.setBackground(Color.GREEN);
81+
pnEnvio.add(btBuscar);
82+
83+
lbEstado = new JLabel("El envío se encuentra en el estado: ");
84+
lbEstado.setFont(new Font("Tahoma", Font.PLAIN, 13));
85+
frmTransportista.getContentPane().add(lbEstado, "flowx,cell 0 3");
86+
87+
lbInfo = new JLabel("Información general del envío:");
88+
lbInfo.setFont(new Font("Tahoma", Font.PLAIN, 13));
89+
frmTransportista.getContentPane().add(lbInfo, "cell 0 4");
90+
91+
pnInfo = new JScrollPane();
92+
frmTransportista.getContentPane().add(pnInfo, "cell 0 5,grow");
93+
94+
tbInfo = new JTable();
95+
tbInfo.setDefaultEditor(Object.class, null); //readonly
96+
pnInfo.setViewportView(tbInfo);
97+
98+
lbMovimientos = new JLabel("Movimientos del envío:");
99+
lbMovimientos.setFont(new Font("Tahoma", Font.PLAIN, 13));
100+
frmTransportista.getContentPane().add(lbMovimientos, "cell 0 6");
101+
102+
pnMovimientos = new JScrollPane();
103+
frmTransportista.getContentPane().add(pnMovimientos, "cell 0 7,grow");
104+
105+
tbMovimientos = new JTable();
106+
tbMovimientos.setDefaultEditor(Object.class, null); //readonly
107+
pnMovimientos.setViewportView(tbMovimientos);
108+
109+
JPanel pnSalir = new JPanel();
110+
FlowLayout fl_pnSalir = (FlowLayout) pnSalir.getLayout();
111+
fl_pnSalir.setAlignment(FlowLayout.RIGHT);
112+
frmTransportista.getContentPane().add(pnSalir, "cell 0 9,grow");
113+
114+
btnSalir = new JButton("Salir");
115+
btnSalir.setForeground(Color.WHITE);
116+
btnSalir.setBackground(Color.RED);
117+
btnSalir.setFont(new Font("Tahoma", Font.BOLD, 12));
118+
pnSalir.add(btnSalir);
119+
120+
tfEstado = new JTextField();
121+
tfEstado.setFont(new Font("Tahoma", Font.BOLD, 13));
122+
tfEstado.setEditable(false);
123+
frmTransportista.getContentPane().add(tfEstado, "cell 0 3");
124+
tfEstado.setColumns(10);
125+
}
126+
127+
public void reset() {
128+
this.tfNRef.setText("");
129+
this.getFrame().setVisible(false);
130+
131+
}
132+
133+
//Getters y Setters anyadidos para acceso desde el controlador (repersentacion compacta)
134+
public JFrame getFrame() { return this.frmTransportista; }
135+
public JButton getBtSalir() { return this.btnSalir; }
136+
public JButton getBtBuscar() { return this.btBuscar; }
137+
public JTextField getTfNRef() { return tfNRef; }
138+
public JTextField getTfEstado() { return tfEstado; }
139+
public JTable getTbInfo() { return tbInfo; }
140+
public JTable getTbMovimientos() { return tbMovimientos; }
141+
}

src/main/java/giis/demo/tkrun/TransportistaController.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ private void buscarTransportista() {
3131
if(validarTransportista(transportista,numID)) {
3232
getListaPedidos(numID);
3333
}
34-
}
35-
34+
}
3635
}
3736

3837
private void getListaPedidos(int numID) {

src/main/java/giis/demo/tkrun/TransportistaView.java

+2
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ private void initialize() {
6262
frmTransportista.getContentPane().add(pnTransportista, "cell 0 2,grow");
6363

6464
lbID = new JLabel("ID transportista:");
65+
lbID.setFont(new Font("Tahoma", Font.PLAIN, 13));
6566
pnTransportista.add(lbID);
6667

6768
tfID = new JTextField();
69+
tfID.setFont(new Font("Tahoma", Font.PLAIN, 13));
6870
pnTransportista.add(tfID);
6971
tfID.setColumns(10);
7072

src/main/java/giis/demo/util/SwingMain.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public SwingMain() {
4848
private void initialize() {
4949
frame = new JFrame();
5050
frame.setTitle("Servicio de envíos");
51-
frame.setBounds(0, 0, 287, 185);
51+
frame.setBounds(0, 0, 314, 246);
5252
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
5353
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
5454

@@ -80,6 +80,15 @@ public void actionPerformed(ActionEvent e) {
8080
});
8181
frame.getContentPane().add(bntEnvioADomicilio);
8282

83+
JButton bntLocalizacion = new JButton("Localización de envíos");
84+
bntLocalizacion.addActionListener(new ActionListener() { //NOSONAR codigo autogenerado
85+
public void actionPerformed(ActionEvent e) {
86+
LocalizacionEnvioController controller=new LocalizacionEnvioController(new LocalizacionEnvioModel(), new LocalizacionEnvioView());
87+
controller.initController();
88+
}
89+
});
90+
frame.getContentPane().add(bntLocalizacion);
91+
8392
JButton btnEnviosTransportista = new JButton("Lista de envíos del transportista");
8493
btnEnviosTransportista.addActionListener(new ActionListener() { //NOSONAR codigo autogenerado
8594
public void actionPerformed(ActionEvent e) {

0 commit comments

Comments
 (0)