/* * Copyright 2012 MoonJava LTDA. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package br.com.moonjava.flight.controller.base; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.UIManager; import org.joda.time.DateTime; import br.com.moonjava.flight.model.base.Status; import br.com.moonjava.flight.model.base.Voo; import br.com.moonjava.flight.model.base.VooModel; import br.com.moonjava.flight.util.FormatDateTime; import br.com.moonjava.flight.util.RequestParamWrapper; import br.com.moonjava.flight.view.voo.ConsultarVooUI; /** * @version 1.0 Aug 29, 2012 * @contact tiago.aguiar@moonjava.com.br * */ public class ConsultarVooController extends ConsultarVooUI { private final JPanel conteudo; private final ResourceBundle bundle; private JButton atualizar; private JButton deletar; private JButton status; private List<Voo> list; private final List<Voo> voos = new ArrayList<Voo>(); public ConsultarVooController(JPanel conteudo, ResourceBundle bundle, JButton atualizar, JButton deletar, JButton status) { super(conteudo, bundle, atualizar, deletar, status); this.conteudo = conteudo; this.bundle = bundle; this.atualizar = atualizar; this.deletar = deletar; this.status = status; addConsultarListener(new ConsultarHandler()); addItemTableSelectedListener(new ItemTableSelectedHandler()); addVenderPassagemListener(new VenderPassagemHandler()); } /* * Construtor apenas para consultar voo vinda de vender passagem */ public ConsultarVooController(JPanel conteudo, ResourceBundle bundle) { super(conteudo, bundle, true); this.conteudo = conteudo; this.bundle = bundle; addConsultarListener(new ConsultarHandler()); addItemTableSelectedListener(new ItemTableSelectedPassagemHandler()); addVenderPassagemListener(new VenderPassagemHandler()); } private class ConsultarHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { RequestParamWrapper request = getParameters(); String partida = request.stringParam("partida"); String chegada = request.stringParam("chegada"); String country = getCountry(); String _partida = null; String _chegada = null; // Teste para atribuir o padrão AM e PM if (country.equals("US")) { String timePartida = request.stringParam("timePartida"); String timeChegada = request.stringParam("timeChegada"); _partida = String.format("%s %s", partida, timePartida); _chegada = String.format("%s %s", chegada, timeChegada); } else { _partida = partida; _chegada = chegada; } int index = request.intParam("status"); Status[] values = Status.values(); Status _status = values[index]; // Mascara padrão para a data String maskEmpty = " / / : "; DateTime dataPartida = null; DateTime dataChegada = null; if (!_partida.startsWith(maskEmpty)) { dataPartida = FormatDateTime.parseToDateTime(_partida, country); } if (!_chegada.startsWith(maskEmpty)) { dataChegada = FormatDateTime.parseToDateTime(_chegada, country); } request.set("partida", dataPartida); request.set("chegada", dataChegada); request.set("status", _status); // Exibe os vôos list = new VooModel().consultar(request); boolean isEmpty = showList(list); if (isEmpty) { messageFailed(); } else { repaint(); } } } private class ItemTableSelectedHandler extends MouseAdapter { @Override public void mouseClicked(MouseEvent e) { enableButtons(); JTable tabela = getTable(); // Os controladores de Deletar, Atualizar e Controlar Status // são objetos Singleton pois a cada evento (mouseClicked) // um objeto seria instanciado, ocasionando a ação // dos JOptionPane (definidos nestas classes) mais de uma vez. // Ex.: Deletar mais de um item sem um Singleton executará a JOptionPane // em questão a mesma quantidade de clicks (isso porque o HashCode de cada // objeto é diferente). Com Singleton, isso não ocorrerá porque há somente // um HashCode, logo, há somente um JOptionPane. DeletarVooController delete = DeletarVooController.getInstance(); delete.setAttributes(tabela, conteudo, bundle, atualizar, deletar, status); delete.setResult(false); delete.setList(list); AtualizarVooController atualiza = AtualizarVooController.getInstance(); atualiza.setAttributes(tabela, conteudo, bundle, atualizar, deletar, status); atualiza.setResult(false); atualiza.setList(list); ControlarStatusController ctrlStatus = ControlarStatusController.getInstance(); ctrlStatus.setAttributes(tabela, list, conteudo, bundle); ctrlStatus.setResult(false); status.addActionListener(ctrlStatus); } } /* * Usado somente na tela de vender passagem * */ private class ItemTableSelectedPassagemHandler extends MouseAdapter { private boolean flag; @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int[] rows = getTable().getSelectedRows(); if (rows.length == 1) { voos.add(list.get(rows[0])); // Verifica se o voo é de ida e volta int res = 0; if (!flag) { res = messagePassagemIdaVolta(); } if (res == 2) { addVoo(); } if (res != 2 && flag) { if (voos.get(0).getId() != voos.get(1).getId()) { addVoo(); } else { voos.remove(1); } } flag = true; } else { messageSelectFailed(); } } } // Substitui os nomes padrões dos OptionPane private void addVoo() { new VenderPassagemController(conteudo, bundle, voos); UIManager.put("OptionPane.okButtonText", "Ok"); UIManager.put("OptionPane.cancelButtonText", "Cancel"); } } private class VenderPassagemHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // busca voo selecionada int[] rows = getTable().getSelectedRows(); if (rows.length == 1) { voos.add(list.get(rows[0])); new VenderPassagemController(conteudo, bundle, voos); } else { messageSelectFailed(); } } } }