ReservationData.java Source code

Java tutorial

Introduction

Here is the source code for ReservationData.java

Source

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-20 16:38:39 by JACK
 * $Id$
 * 
 *****************************************************************************/

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.wizard.WizardDialog;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;

import org.eclipse.jface.wizard.WizardPage;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.DialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.Wizard;

// The data model.
class ReservationData {
    Date arrivalDate;
    Date departureDate;
    int roomType;

    String customerName;
    String customerPhone;
    String customerEmail;
    String customerAddress;

    int creditCardType;
    String creditCardNumber;
    String creditCardExpiration;

    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("* HOTEL ROOM RESERVATION DETAILS *\n");
        sb.append("Arrival date:\t" + arrivalDate.toString() + "\n");
        sb.append("Departure date:\t" + departureDate.toString() + "\n");
        sb.append("Room type:\t" + roomType + "\n");
        sb.append("Customer name:\t" + customerName + "\n");
        sb.append("Customer email:\t" + customerEmail + "\n");
        sb.append("Credit card no.:\t" + creditCardNumber + "\n");

        return sb.toString();
    }
}

/**
 * 
 */
class ReservationWizard extends Wizard {

    static final String DIALOG_SETTING_FILE = "userInfo.xml";

    static final String KEY_CUSTOMER_NAME = "customer-name";
    static final String KEY_CUSTOMER_EMAIL = "customer-email";
    static final String KEY_CUSTOMER_PHONE = "customer-phone";
    static final String KEY_CUSTOMER_ADDRESS = "customer-address";

    // the model object. 
    ReservationData data = new ReservationData();

    public ReservationWizard() {
        setWindowTitle("Hotel room reservation wizard");
        setNeedsProgressMonitor(true);
        setDefaultPageImageDescriptor(ImageDescriptor.createFromFile(null, "icons/hotel.gif"));

        DialogSettings dialogSettings = new DialogSettings("userInfo");
        try {
            // loads existing settings if any. 
            dialogSettings.load(DIALOG_SETTING_FILE);
        } catch (IOException e) {
            e.printStackTrace();
        }

        setDialogSettings(dialogSettings);

    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.wizard.IWizard#addPages()
     */
    public void addPages() {
        addPage(new FrontPage());
        addPage(new CustomerInfoPage());
        addPage(new PaymentInfoPage());

    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.wizard.IWizard#performFinish()
     */
    public boolean performFinish() {
        if (getDialogSettings() != null) {
            getDialogSettings().put(KEY_CUSTOMER_NAME, data.customerName);
            getDialogSettings().put(KEY_CUSTOMER_PHONE, data.customerPhone);
            getDialogSettings().put(KEY_CUSTOMER_EMAIL, data.customerEmail);
            getDialogSettings().put(KEY_CUSTOMER_ADDRESS, data.customerAddress);
            try {
                // Saves the dialog settings into the specified file. 
                getDialogSettings().save(DIALOG_SETTING_FILE);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

        try {
            // puts the data into a database ...
            getContainer().run(true, true, new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                    monitor.beginTask("Store data", 100);
                    monitor.worked(40);

                    // store data here ...
                    System.out.println(data);

                    Thread.sleep(2000);
                    monitor.done();
                }
            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return true;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.wizard.IWizard#performCancel()
     */
    public boolean performCancel() {
        boolean ans = MessageDialog.openConfirm(getShell(), "Confirmation", "Are you sure to cancel the task?");
        if (ans)
            return true;
        else
            return false;
    }
}

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-20 20:08:05 by JACK
 * $Id$
 * 
 *****************************************************************************/

/**
 * 
 */
class PaymentInfoPage extends WizardPage {
    Combo comboCreditCardTypes;
    Text textCreditCardNumber;
    Text textCreditCardExpiration;

    public PaymentInfoPage() {
        super("PaymentInfo");
        setTitle("Payment information");
        setDescription("Please enter your credit card details");
        setPageComplete(false);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout(2, false));

        new Label(composite, SWT.NULL).setText("Credit card type: ");
        comboCreditCardTypes = new Combo(composite, SWT.READ_ONLY | SWT.BORDER);
        comboCreditCardTypes.add("American Express");
        comboCreditCardTypes.add("Master Card");
        comboCreditCardTypes.add("Visa");
        comboCreditCardTypes.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(composite, SWT.NULL).setText("Credit card number: ");
        textCreditCardNumber = new Text(composite, SWT.SINGLE | SWT.BORDER);
        textCreditCardNumber.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(composite, SWT.NULL).setText("Expiration (MM/YY)");
        textCreditCardExpiration = new Text(composite, SWT.SINGLE | SWT.BORDER);
        textCreditCardExpiration.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        comboCreditCardTypes.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                ((ReservationWizard) getWizard()).data.creditCardType = comboCreditCardTypes.getSelectionIndex();
                if (((ReservationWizard) getWizard()).data.creditCardNumber != null
                        && ((ReservationWizard) getWizard()).data.creditCardExpiration != null)
                    setPageComplete(true);
                else
                    setPageComplete(false);
            }
        });

        textCreditCardNumber.addListener(SWT.Modify, new Listener() {
            public void handleEvent(Event event) {
                ((ReservationWizard) getWizard()).data.creditCardNumber = textCreditCardNumber.getText();

                if (((ReservationWizard) getWizard()).data.creditCardNumber != null
                        && ((ReservationWizard) getWizard()).data.creditCardExpiration != null)
                    setPageComplete(true);
                else
                    setPageComplete(false);
            }
        });

        textCreditCardExpiration.addListener(SWT.Modify, new Listener() {
            public void handleEvent(Event event) {
                String text = textCreditCardExpiration.getText().trim();
                if (text.length() == 5 && text.charAt(2) == '/') {
                    ((ReservationWizard) getWizard()).data.creditCardExpiration = text;
                    setErrorMessage(null);
                } else {
                    ((ReservationWizard) getWizard()).data.creditCardExpiration = null;
                    setErrorMessage("Invalid expiration date: " + text);
                }

                if (((ReservationWizard) getWizard()).data.creditCardNumber != null
                        && ((ReservationWizard) getWizard()).data.creditCardExpiration != null)
                    setPageComplete(true);
                else
                    setPageComplete(false);
            }
        });

        setControl(composite);
    }

}

/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-20 19:18:40 by JACK $Id$
 *  
 ******************************************************************************/

/**
 *  
 */
class CustomerInfoPage extends WizardPage {
    Text textName;
    Text textPhone;
    Text textEmail;
    Text textAddress;

    public CustomerInfoPage() {
        super("CustomerInfo");
        setTitle("Customer Information");

        setPageComplete(false);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout(2, false));

        new Label(composite, SWT.NULL).setText("Full name: ");
        textName = new Text(composite, SWT.SINGLE | SWT.BORDER);
        textName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(composite, SWT.NULL).setText("Phone Number: ");
        textPhone = new Text(composite, SWT.SINGLE | SWT.BORDER);
        textPhone.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(composite, SWT.NULL).setText("Email address: ");
        textEmail = new Text(composite, SWT.SINGLE | SWT.BORDER);
        textEmail.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(composite, SWT.NULL).setText("Address: ");
        textAddress = new Text(composite, SWT.MULTI | SWT.BORDER);
        textAddress.setText("\r\n\r\n\r\n");
        textAddress.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        Listener listener = new Listener() {
            public void handleEvent(Event event) {
                if (event.widget == null || !(event.widget instanceof Text))
                    return;

                String string = ((Text) event.widget).getText();

                if (event.widget == textName) {
                    ((ReservationWizard) getWizard()).data.customerName = string;

                } else if (event.widget == textPhone) {
                    ((ReservationWizard) getWizard()).data.customerPhone = string;

                } else if (event.widget == textEmail) {
                    if (string.indexOf('@') < 0) {
                        setErrorMessage("Invalid email address: " + string);
                        ((ReservationWizard) getWizard()).data.customerEmail = null;
                    } else {
                        setErrorMessage(null);
                        ((ReservationWizard) getWizard()).data.customerEmail = string;
                    }
                } else if (event.widget == textAddress) {
                    ((ReservationWizard) getWizard()).data.customerAddress = string;
                }

                ReservationData data = ((ReservationWizard) getWizard()).data;
                if (data.customerName != null && data.customerPhone != null && data.customerEmail != null
                        && data.customerAddress != null) {
                    setPageComplete(true);
                } else {
                    setPageComplete(false);
                }
            }
        };

        textName.addListener(SWT.Modify, listener);
        textPhone.addListener(SWT.Modify, listener);
        textEmail.addListener(SWT.Modify, listener);
        textAddress.addListener(SWT.Modify, listener);

        if (getDialogSettings() != null && validDialogSettings()) {

            textName.setText(getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_NAME));

            textPhone.setText(getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_PHONE));

            textEmail.setText(getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_EMAIL));

            textAddress.setText(getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_ADDRESS));

        }

        setControl(composite);
    }

    private boolean validDialogSettings() {
        if (getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_NAME) == null
                || getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_ADDRESS) == null
                || getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_EMAIL) == null
                || getDialogSettings().get(ReservationWizard.KEY_CUSTOMER_PHONE) == null)
            return false;
        return true;
    }

}

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-20 15:09:10 by JACK
 * $Id$
 * 
 *****************************************************************************/

/**
 * 
 */
class FrontPage extends WizardPage {
    Combo comboRoomTypes;

    Combo comboArrivalYear;
    Combo comboArrivalMonth;
    Combo comboArrivalDay;
    Combo comboDepartureYear;
    Combo comboDepartureMonth;
    Combo comboDepartureDay;

    FrontPage() {
        super("FrontPage");
        setTitle("Your reservation information");
        setDescription("Select the type of room and your arrival date & departure date");
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        GridLayout gridLayout = new GridLayout(2, false);
        composite.setLayout(gridLayout);

        new Label(composite, SWT.NULL).setText("Arrival date: ");

        Composite compositeArrival = new Composite(composite, SWT.NULL);
        compositeArrival.setLayout(new RowLayout());

        String[] months = new String[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
                "Nov", "Dec" };

        Calendar calendar = new GregorianCalendar(); // today.
        ((ReservationWizard) getWizard()).data.arrivalDate = calendar.getTime();

        comboArrivalMonth = new Combo(compositeArrival, SWT.BORDER | SWT.READ_ONLY);
        for (int i = 0; i < months.length; i++)
            comboArrivalMonth.add(months[i]);
        comboArrivalMonth.select(calendar.get(Calendar.MONTH));

        comboArrivalDay = new Combo(compositeArrival, SWT.BORDER | SWT.READ_ONLY);
        for (int i = 0; i < 31; i++)
            comboArrivalDay.add("" + (i + 1));
        comboArrivalDay.select(calendar.get(Calendar.DAY_OF_MONTH) - 1);

        comboArrivalYear = new Combo(compositeArrival, SWT.BORDER | SWT.READ_ONLY);
        for (int i = 2004; i < 2010; i++)
            comboArrivalYear.add("" + i);
        comboArrivalYear.select(calendar.get(Calendar.YEAR) - 2004);

        calendar.add(Calendar.DATE, 1); // tomorrow. 
        ((ReservationWizard) getWizard()).data.departureDate = calendar.getTime();

        new Label(composite, SWT.NULL).setText("Departure date: ");

        Composite compositeDeparture = new Composite(composite, SWT.NULL | SWT.READ_ONLY);
        compositeDeparture.setLayout(new RowLayout());

        comboDepartureMonth = new Combo(compositeDeparture, SWT.NULL | SWT.READ_ONLY);
        for (int i = 0; i < months.length; i++)
            comboDepartureMonth.add(months[i]);
        comboDepartureMonth.select(calendar.get(Calendar.MONTH));

        comboDepartureDay = new Combo(compositeDeparture, SWT.NULL | SWT.READ_ONLY);
        for (int i = 0; i < 31; i++)
            comboDepartureDay.add("" + (i + 1));
        comboDepartureDay.select(calendar.get(Calendar.DAY_OF_MONTH) - 1);

        comboDepartureYear = new Combo(compositeDeparture, SWT.NULL | SWT.READ_ONLY);
        for (int i = 2004; i < 2010; i++)
            comboDepartureYear.add("" + i);
        comboDepartureYear.select(calendar.get(Calendar.YEAR) - 2004);

        // draws a line. 
        Label line = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);

        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
        gridData.horizontalSpan = 2;
        line.setLayoutData(gridData);

        new Label(composite, SWT.NULL).setText("Room type: ");
        comboRoomTypes = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
        comboRoomTypes.add("Standard room (rate: $198)");
        comboRoomTypes.add("Deluxe room (rate: $298)");
        comboRoomTypes.select(0);

        Listener selectionListener = new Listener() {
            public void handleEvent(Event event) {
                int arrivalDay = comboArrivalDay.getSelectionIndex() + 1;
                int arrivalMonth = comboArrivalMonth.getSelectionIndex();
                int arrivalYear = comboArrivalYear.getSelectionIndex() + 2004;

                int departureDay = comboDepartureDay.getSelectionIndex() + 1;
                int departureMonth = comboDepartureMonth.getSelectionIndex();
                int departureYear = comboDepartureYear.getSelectionIndex() + 2004;

                setDates(arrivalDay, arrivalMonth, arrivalYear, departureDay, departureMonth, departureYear);
            }
        };

        comboArrivalDay.addListener(SWT.Selection, selectionListener);
        comboArrivalMonth.addListener(SWT.Selection, selectionListener);
        comboArrivalYear.addListener(SWT.Selection, selectionListener);
        comboDepartureDay.addListener(SWT.Selection, selectionListener);
        comboDepartureMonth.addListener(SWT.Selection, selectionListener);
        comboDepartureYear.addListener(SWT.Selection, selectionListener);

        comboRoomTypes.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                ((ReservationWizard) getWizard()).data.roomType = comboRoomTypes.getSelectionIndex();
            }
        });

        setControl(composite);

    }

    // validates the dates and update the model data object. 
    private void setDates(int arrivalDay, int arrivalMonth, int arrivalYear, int departureDay, int departureMonth,
            int departureYear) {
        Calendar calendar = new GregorianCalendar();
        calendar.set(Calendar.DAY_OF_MONTH, arrivalDay);
        calendar.set(Calendar.MONTH, arrivalMonth);
        calendar.set(Calendar.YEAR, arrivalYear);

        Date arrivalDate = calendar.getTime();

        calendar.set(Calendar.DAY_OF_MONTH, departureDay);
        calendar.set(Calendar.MONTH, departureMonth);
        calendar.set(Calendar.YEAR, departureYear);

        Date departureDate = calendar.getTime();

        System.out.println(arrivalDate + " - " + departureDate);

        if (!arrivalDate.before(departureDate)) { // arrival date is before dep. date.
            setErrorMessage("The arrival date is not before the departure date");
            setPageComplete(false);
        } else {
            setErrorMessage(null); // clear error message. 
            setPageComplete(true);
            ((ReservationWizard) getWizard()).data.arrivalDate = arrivalDate;
            ((ReservationWizard) getWizard()).data.departureDate = departureDate;
        }
    }

}

/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-20 14:41:48 by JACK $Id$
 *  
 ******************************************************************************/

public class HotelReservation extends ApplicationWindow {
    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)
     */
    protected Control createContents(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("Make a reservation");
        button.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                ReservationWizard wizard = new ReservationWizard();

                WizardDialog dialog = new WizardDialog(getShell(), wizard);
                dialog.setBlockOnOpen(true);
                int returnCode = dialog.open();
                if (returnCode == Dialog.OK)
                    System.out.println(wizard.data);
                else
                    System.out.println("Cancelled");
            }
        });
        return button;
    }

    /**
     * @param parentShell
     */
    public HotelReservation(Shell parentShell) {
        super(parentShell);
    }

    public static void main(String[] args) {
        HotelReservation reservation = new HotelReservation(null);
        reservation.setBlockOnOpen(true);
        reservation.open();
    }
}