/* * #%L * App Reservation Basic * %% * Copyright (C) 2011 - 2012 Talend Inc. * %% * 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. * #L% */ package org.talend.esb.client.app; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; 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.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.table.AbstractTableModel; import org.talend.esb.client.model.CarReserveModel; import org.talend.esb.client.model.CarSearchModel; import org.talend.services.crm.types.CustomerDetailsType; import org.talend.services.reservation.types.ConfirmationType; import org.talend.services.reservation.types.RESCarType; import org.talend.services.reservation.types.RESStatusType; public class CarRentalClientGui extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private static final String CONFIRM = "CONFIRM"; private static final String SELECT = "SELECT"; private static final String FIND = "FIND"; class CarTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private final String[] COL_NAMES = { Messages.CarRentalClient_Brand , Messages.CarRentalClient_Model , Messages.CarRentalClient_BookingClass , Messages.CarRentalClient_DayRate , Messages.CarRentalClient_WeekEndRate , Messages.CarRentalClient_Insurance}; List<RESCarType> myCars = new ArrayList<RESCarType>(); public void setData(List<RESCarType> cars) { myCars = cars; this.fireTableDataChanged(); } public int getRowCount() { return myCars.size(); } public int getColumnCount() { return COL_NAMES.length; } public String getColumnName(int column) { return COL_NAMES[column]; } public Object getValueAt(int rowIndex, int columnIndex) { RESCarType c = myCars.get(rowIndex); switch(columnIndex) { case 0: return c.getBrand(); case 1: return c.getDesignModel(); case 2: return c.getClazz(); case 3: return c.getRateDay(); case 4: return c.getRateWeekend(); case 5: return c.getSecurityGuarantee(); } return null; } } private CarSearchModel search; private CarReserveModel reserve; private JFrame appFrame; private CardLayout cardlist; private JPanel content; private JPanel findPanel; private JButton cmdFind; private JButton cmdFindCancel; private JButton cmdSelect; private JButton cmdSelectBack; private JButton cmdSelectCancel; private JButton cmdClose; private JComboBox cUser; private JFormattedTextField tPickupDate; private JFormattedTextField tReturnDate; private JPanel selectPanel; private JPanel confirmPanel; private CarTableModel ctm = new CarTableModel(); private JTextField tReservationId; private JLabel lStatus; private JTextField tName; private JTextField tEMail; private JTextField tCity; private JTextField tStatus; private JTextField tBrand; private JTextField tModel; private JTextField tPickup; private JTextField tReturn; private JTextField tCredits; private JTextField tDaily; private JTextField tWeekEnd; private JTable selectTable; public CarRentalClientGui(CarSearchModel searchModel, CarReserveModel reserveModel) { this.search = searchModel; this.reserve = reserveModel; this.setLayout(new BorderLayout(5, 5)); this.setBackground(Color.WHITE); add(createHeaderPanel(), BorderLayout.NORTH); findPanel = createFindPanel(); selectPanel = createSelectionPanel(); confirmPanel = createConfirmationPanel(); content = createPanel(); cardlist = new CardLayout(); content.setLayout(cardlist); content.add(findPanel, FIND); content.add(selectPanel, SELECT); content.add(confirmPanel, CONFIRM); add(content, BorderLayout.CENTER); } private ImageIcon createImageIcon(String path) { URL imgURL = getClass().getClassLoader().getResource(path); return (imgURL != null) ? new ImageIcon(imgURL) : null; } private JPanel createPanel() { JPanel p = new JPanel(new BorderLayout(2, 2)); p.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); p.setBackground(Color.WHITE); return p; } private GridBagConstraints createGridBagConstants() { return new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2); } private void addField(JPanel p, GridBagConstraints gbc, JLabel l, JComponent t, int x, int y) { gbc.gridx = x; gbc.gridy = y; p.add(l, gbc); ++gbc.gridx; p.add(t, gbc); } private JPanel createHeaderPanel() { JPanel header = createPanel(); header.add(new JLabel(Messages.CarRentalClient_Title), BorderLayout.WEST); header.add(new JLabel(createImageIcon("talend.gif")), BorderLayout.EAST); return header; } private JPanel createStepPanel(String stepImage) { JPanel imgPanel = createPanel(); imgPanel.add(new JLabel(createImageIcon(stepImage)), BorderLayout.CENTER); return imgPanel; } private JPanel createFindInput() { DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); JPanel searchInp = createPanel(); searchInp.setLayout(new GridBagLayout()); GridBagConstraints gbc = createGridBagConstants(); JLabel lUser = new JLabel(Messages.CarRentalClient_User); cUser = new JComboBox(new String[] {"aebert", "jdoe", "bbrindle", "rlambert"}); cUser.setSelectedIndex(0); cUser.setEditable(true); addField(searchInp, gbc, lUser, cUser, 1, 1); JLabel lPickupDate = new JLabel(Messages.CarRentalClient_Pickup); tPickupDate = new JFormattedTextField(df); tPickupDate.setValue(new Date()); addField(searchInp, gbc, lPickupDate, tPickupDate, 1, 2); JLabel lReturnDate = new JLabel(Messages.CarRentalClient_Return); tReturnDate = new JFormattedTextField(df); tReturnDate.setValue(new Date()); addField(searchInp, gbc, lReturnDate, tReturnDate, 1, 3); JPanel spacer = createPanel(); spacer.setPreferredSize(new Dimension(0, 300)); ++gbc.gridy; searchInp.add(spacer, gbc); return searchInp; } private JPanel createFindPanel() { JPanel p = createPanel(); p.add(createStepPanel("step1.gif"), BorderLayout.NORTH); p.add(createFindInput(), BorderLayout.CENTER); p.add(createFindCommands(), BorderLayout.SOUTH); return p; } private JPanel createFindCommands() { JPanel searchCmd = createPanel(); searchCmd.setLayout(new BoxLayout(searchCmd, BoxLayout.LINE_AXIS)); searchCmd.add(Box.createRigidArea(new Dimension(380, 0))); cmdFindCancel = new JButton(Messages.CarRentalClient_CmdCancel); cmdFindCancel.addActionListener(this); cmdFind = new JButton(Messages.CarRentalClient_CmdFind); cmdFind.addActionListener(this); searchCmd.add(cmdFindCancel); searchCmd.add(Box.createRigidArea(new Dimension(50, 0))); searchCmd.add(cmdFind); return searchCmd; } private JPanel createSelectionPanel() { JPanel select = createPanel(); select.add(createStepPanel("step2.gif"), BorderLayout.NORTH); select.add(createSelectionInput(), BorderLayout.CENTER); select.add(createSelectionCommands(), BorderLayout.SOUTH); return select; } private JPanel createSelectionInput() { JPanel selectInp = createPanel(); JPanel pInfo = createPanel(); pInfo.add(new JLabel(Messages.CarRentalClient_Offering), BorderLayout.NORTH); pInfo.add(new JLabel(Messages.CarRentalClient_SelectInfo), BorderLayout.SOUTH); selectTable = new JTable(ctm); selectTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(selectTable); selectInp.add(pInfo, BorderLayout.NORTH); selectInp.add(scrollPane, BorderLayout.SOUTH); return selectInp; } private JPanel createSelectionCommands() { JPanel selectCmd = createPanel(); selectCmd.setLayout(new BoxLayout(selectCmd, BoxLayout.LINE_AXIS)); cmdSelectBack = new JButton(Messages.CarRentalClient_CmdBack); cmdSelectBack.addActionListener(this); selectCmd.add(cmdSelectBack); selectCmd.add(Box.createRigidArea(new Dimension(240, 0))); cmdSelectCancel = new JButton(Messages.CarRentalClient_CmdCancel); cmdSelectCancel.addActionListener(this); cmdSelect = new JButton(Messages.CarRentalClient_CmdReserve); cmdSelect.addActionListener(this); selectCmd.add(cmdFindCancel); selectCmd.add(Box.createRigidArea(new Dimension(25, 0))); selectCmd.add(cmdSelect); return selectCmd; } private JPanel createConfirmationPanel() { JPanel confirm = createPanel(); confirm.add(createStepPanel("step3.gif"), BorderLayout.NORTH); confirm.add(createConfirmationContent(), BorderLayout.CENTER); confirm.add(createConfirmCommands(), BorderLayout.SOUTH); return confirm; } private JPanel createConfirmationContent() { JPanel confCont = createPanel(); confCont.add(createConfirmationHeader(), BorderLayout.NORTH); JPanel confMain = createPanel(); confMain.add(createCustomerDetails(), BorderLayout.NORTH); confMain.add(createCarDetails(), BorderLayout.CENTER); confMain.add(createReservationDetails(), BorderLayout.SOUTH); confCont.add(confMain, BorderLayout.CENTER); return confCont; } private JPanel createConfirmationHeader() { JPanel cHeader = createPanel(); cHeader.setLayout(new GridBagLayout()); GridBagConstraints gbc = createGridBagConstants(); lStatus = new JLabel(); JLabel lReservationId = new JLabel(Messages.CarRentalClient_ReservationID); tReservationId = new JTextField(15); tReservationId.setEditable(false); gbc.gridwidth = 2; gbc.gridx = 0; gbc.gridy = 0; cHeader.add(lStatus, gbc); gbc.gridwidth = 1; addField(cHeader, gbc, lReservationId, tReservationId, 0, 1); return cHeader; } private JPanel createCustomerDetails() { JPanel cDetails = createPanel(); cDetails.setLayout(new GridBagLayout()); cDetails.setBorder(BorderFactory.createTitledBorder(Messages.CarRentalClient_CustomerDetails)); GridBagConstraints gbc = createGridBagConstants(); JLabel lName = new JLabel(Messages.CarRentalClient_Name); tName = new JTextField(25); tName.setEditable(false); addField(cDetails, gbc, lName, tName, 1, 1); JLabel lEMail = new JLabel(Messages.CarRentalClient_eMail); tEMail = new JTextField(25); tEMail.setEditable(false); addField(cDetails, gbc, lEMail, tEMail, 1, 2); JLabel lCity = new JLabel(Messages.CarRentalClient_City); tCity = new JTextField(25); tCity.setEditable(false); addField(cDetails, gbc, lCity, tCity, 1, 3); JLabel lStatus = new JLabel(Messages.CarRentalClient_Status); tStatus = new JTextField(25); tStatus.setEditable(false); addField(cDetails, gbc, lStatus, tStatus, 1, 4); return cDetails; } private JPanel createCarDetails() { JPanel cDetails = createPanel(); cDetails.setLayout(new GridBagLayout()); cDetails.setBorder(BorderFactory.createTitledBorder(Messages.CarRentalClient_CarDetails)); GridBagConstraints gbc = createGridBagConstants(); JLabel lBrand = new JLabel(Messages.CarRentalClient_Brand); tBrand = new JTextField(25); tBrand.setEditable(false); addField(cDetails, gbc, lBrand, tBrand, 1, 1); JLabel lModel = new JLabel(Messages.CarRentalClient_Model); tModel = new JTextField(25); tModel.setEditable(false); addField(cDetails, gbc, lModel, tModel, 1, 2); return cDetails; } private JPanel createReservationDetails() { JPanel cDetails = createPanel(); cDetails.setLayout(new GridBagLayout()); cDetails.setBorder(BorderFactory.createTitledBorder(Messages.CarRentalClient_ReservationDetails)); GridBagConstraints gbc = createGridBagConstants(); JLabel lPickup = new JLabel(Messages.CarRentalClient_Pickup); tPickup = new JTextField(10); tPickup.setEditable(false); addField(cDetails, gbc, lPickup, tPickup, 1, 1); JLabel lReturn = new JLabel(Messages.CarRentalClient_Return); tReturn = new JTextField(10); tReturn.setEditable(false); addField(cDetails, gbc, lReturn, tReturn, 3, 1); JLabel lDaily = new JLabel(Messages.CarRentalClient_DayRate); tDaily = new JTextField(5); tDaily.setEditable(false); addField(cDetails, gbc, lDaily, tDaily, 1, 2); JLabel lWeekEnd = new JLabel(Messages.CarRentalClient_WeekEndRate); tWeekEnd = new JTextField(5); tWeekEnd.setEditable(false); addField(cDetails, gbc, lWeekEnd, tWeekEnd, 3, 2); JLabel lCredits = new JLabel(Messages.CarRentalClient_Credits); tCredits = new JTextField(7); tCredits.setEditable(false); addField(cDetails, gbc, lCredits, tCredits, 1, 3); return cDetails; } private JPanel createConfirmCommands() { JPanel confirmCmd = createPanel(); confirmCmd.setLayout(new BoxLayout(confirmCmd, BoxLayout.LINE_AXIS)); cmdClose = new JButton(Messages.CarRentalClient_CmdClose); cmdClose.addActionListener(this); confirmCmd.add(Box.createRigidArea(new Dimension(440, 0))); confirmCmd.add(cmdClose); return confirmCmd; } /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI(CarSearchModel searchModel, CarReserveModel reserveModel) { //Create and set up the window. JFrame appFrame = new JFrame(Messages.CarRentalClient_Title); appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // Display the window centered on the screen Dimension d = appFrame.getToolkit().getScreenSize(); appFrame.setLocation((d.width / 2) - (appFrame.getWidth() / 2), (appFrame.getHeight() / 2)); CarRentalClientGui gui = new CarRentalClientGui(searchModel, reserveModel); gui.appFrame = appFrame; appFrame.setContentPane(gui); appFrame.pack(); appFrame.setVisible(true); appFrame.toFront(); } public static void openApp(final CarSearchModel searchModel, final CarReserveModel reserveModel) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(searchModel, reserveModel); } }); } public static void main(String[] args) { openApp(null, null); } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(cmdFind)) { if (search != null) { search.search((String) cUser.getSelectedItem() , tPickupDate.getText() , tReturnDate.getText()); ctm.setData(search.getCars()); } cardlist.show(content, SELECT); } else if (e.getSource().equals(cmdFindCancel) || e.getSource().equals(cmdClose)) { this.appFrame.dispose(); } else if (e.getSource().equals(cmdSelect)) { int pos = selectTable.getSelectedRow(); if (pos > -1) { if (search != null) { RESStatusType resStatus = reserve.reserveCar(search.getCustomer() , search.getCars().get(pos) , tPickupDate.getText() , tReturnDate.getText()); ConfirmationType confirm = reserve.getConfirmation(resStatus , search.getCustomer() , search.getCars().get(pos) , tPickupDate.getText() , tReturnDate.getText()); RESCarType car = confirm.getCar(); CustomerDetailsType customer = confirm.getCustomer(); lStatus.setText(confirm.getDescription()); tReservationId.setText(confirm.getReservationId()); tName.setText(customer.getName()); tEMail.setText(customer.getEmail()); tCity.setText(customer.getCity()); tStatus.setText(customer.getStatus().name()); tBrand.setText(car.getBrand()); tModel.setText(car.getDesignModel()); tPickup.setText(confirm.getFromDate()); tReturn.setText(confirm.getToDate()); tDaily.setText(car.getRateDay()); tWeekEnd.setText(car.getRateWeekend()); tCredits.setText(confirm.getCreditPoints().toString()); } cardlist.show(content, CONFIRM); } } else if (e.getSource().equals(cmdSelectBack)) { cardlist.show(content, FIND); } } }