net.cbtltd.client.panel.ReportPopup.java Source code

Java tutorial

Introduction

Here is the source code for net.cbtltd.client.panel.ReportPopup.java

Source

/**
 * @author   bookingnet
 * @
 * @version   4.0.0
 */
package net.cbtltd.client.panel;

import net.cbtltd.client.AbstractRoot;
import net.cbtltd.client.GuardedRequest;
import net.cbtltd.client.field.AbstractField;
import net.cbtltd.client.field.AbstractField.Level;
import net.cbtltd.client.field.ReportButtonItem;
import net.cbtltd.client.field.SuggestField;
import net.cbtltd.client.field.TextAreaField;
import net.cbtltd.client.field.TextField;
import net.cbtltd.client.resource.Hosts;
import net.cbtltd.client.resource.report.ReportBundle;
import net.cbtltd.client.resource.report.ReportConstants;
import net.cbtltd.client.resource.report.ReportCssResource;
import net.cbtltd.shared.License;
import net.cbtltd.shared.Mail;
import net.cbtltd.shared.NameIdAction;
import net.cbtltd.shared.Party;
import net.cbtltd.shared.Report;
import net.cbtltd.shared.Service;
import net.cbtltd.shared.Text;
import net.cbtltd.shared.mail.MailSend;
import net.cbtltd.shared.party.PartyRead;

import com.allen_sauer.gwt.log.client.Log;
import com.bookingnet.config.RazorConfig;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;

/** The Class ReportPopup is to generate and display report instances. */
public class ReportPopup extends AbstractPopup<Mail> {

    private static final ReportConstants CONSTANTS = GWT.create(ReportConstants.class);
    private static final Hosts HOSTS = GWT.create(Hosts.class);
    private static final ReportBundle BUNDLE = ReportBundle.INSTANCE;
    private static final ReportCssResource CSS = BUNDLE.css();

    private static GuardedRequest<Mail> mailSend;
    private static GuardedRequest<Party> partyRead;

    private static SuggestField partyField;
    private static TextField emailaddressField;
    private static TextField emailsubjectField;
    private static TextAreaField emailcontentField;

    private static String url;

    /** Instantiates a new report pop up panel. */
    public ReportPopup() {
        super(true);
        createActions();
        setWidget(createContent());
        CSS.ensureInjected();
        setStylePrimaryName(AbstractField.CSS.cbtAbstractPopup());
    }

    private static ReportPopup instance;

    /**
     * Gets the single instance of ReportPopup.
     *
     * @return single instance of ReportPopup
     */
    public static synchronized ReportPopup getInstance() {
        if (instance == null) {
            instance = new ReportPopup();
        }
        return instance;
    }

    /**
     * Shows the panel for the specified report.
     *
     * @param report the specified report.
     */
    public void show(Report report) {
        if (report == null) {
            AbstractField.addMessage(Level.ERROR, AbstractField.CONSTANTS.errReport(), emailcontentField);
        } else {
            url = HOSTS.reportUrl() + report.getId() + "." + report.getFormat();
            center();
        }
    }

    /**
     * Shows the panel for the specified report.
     *
     * @param report the specified report.
     */
    public void show(ReportButtonItem report) {
        if (report == null) {
            AbstractField.addMessage(Level.ERROR, AbstractField.CONSTANTS.errReport(), emailcontentField);
        } else {
            url = HOSTS.reportUrl() + report.getId() + "." + report.getFormat();
            center();
        }
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.form.AbstractForm#onChange(com.google.gwt.event.dom.client.ChangeEvent)
     */
    @Override
    public void onChange(ChangeEvent change) {
        if (partyField.sent(change)) {
            partyRead.execute();
        }
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.panel.AbstractPopup#getValue()
     */
    @Override
    public Mail getValue() {
        return getValue(new Mail());
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.panel.AbstractPopup#getValue(java.lang.Object)
     */
    private Mail getValue(Mail mail) {
        mail.setRecipients(emailaddressField.getValue());
        mail.setSubject(emailsubjectField.getValue());
        String content = emailcontentField.getValue() + "\n" + CONSTANTS.reportContentPre() + url + " "
                + CONSTANTS.reportContentPost();
        mail.setContent(content);
        Log.debug("getValue " + mail);
        return mail;
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.panel.AbstractPopup#setValue(java.lang.Object)
     */
    public void setValue(Mail mail) {
        Log.debug("setValue " + mail);
        if (mail == null) {
            return;
        } else {
            setResetting(true);
            emailaddressField.setValue(mail.getRecipients());
            emailcontentField.setValue(mail.getContent());
            emailsubjectField.setValue(mail.getSubject());
            setResetting(false);
        }
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.form.AbstractForm#getValue(net.cbtltd.shared.api.HasState)
     */
    private Party getValue(Party party) {
        party.setOrganizationid(AbstractRoot.getOrganizationid());
        party.setActorid(AbstractRoot.getActorid());
        party.setId(partyField.getValue());
        Log.debug("getValue " + party);
        return party;
    }

    /* (non-Javadoc)
     * @see net.cbtltd.client.form.AbstractForm#setValue(net.cbtltd.shared.api.HasState)
     */
    public void setValue(Party party) {
        Log.debug("setValue " + party);
        if (party == null) {
            onReset(Party.CREATED);
        } else {
            setResetting(true);
            onStateChange(party.getState());
            partyField.setValue(party.getId());
            emailaddressField.setValue(party.getEmailaddresses());
            emailaddressField.setEnabled(hasState(Party.INITIAL) || party.noRoles());
            setResetting(false);
        }
    }

    /*
     * Creates the panel of report fields.
     * 
     * @return the panel of report fields.
     */
    private VerticalPanel createContent() {
        final VerticalPanel form = new VerticalPanel();
        final Label title = new Label(CONSTANTS.emailTitle());
        title.addStyleName(AbstractField.CSS.cbtAbstractPopupLabel());
        form.add(title);

        final Label closeButton = new Label();
        closeButton.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                ReportPopup.this.hide();
            }
        });
        closeButton.addStyleName(AbstractField.CSS.cbtAbstractPopupClose());
        form.add(closeButton);

        //-----------------------------------------------
        // Party (Addressee) field
        //-----------------------------------------------
        partyField = new SuggestField(this, null, new NameIdAction(Service.PARTY), CONSTANTS.addresseeLabel(), 20,
                tab++);
        //      customerField.setType(Party.Type.Customer.name());
        partyField.setHelpText(CONSTANTS.addresseeHelp());

        final Image customerButton = new Image(AbstractField.BUNDLE.plus());
        customerButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                PartyPopup.getInstance().show(Party.Type.Customer, partyField, null);
            }
        });
        customerButton.setTitle(CONSTANTS.addresseebuttonHelp());
        partyField.addButton(customerButton);
        form.add(partyField);

        //-----------------------------------------------
        // Email Address field
        //-----------------------------------------------
        emailaddressField = new TextField(this, null, CONSTANTS.emailaddressLabel(), tab++);
        emailaddressField.setMaxLength(100);
        form.add(emailaddressField);

        //-----------------------------------------------
        // Email Subject field
        //-----------------------------------------------
        emailsubjectField = new TextField(this, null, CONSTANTS.emailsubjectLabel(), tab++);
        emailsubjectField.setMaxLength(100);
        form.add(emailsubjectField);

        //-----------------------------------------------
        // Email Contents field
        //-----------------------------------------------
        emailcontentField = new TextAreaField(this, null, CONSTANTS.emailcontentLabel(), tab++);
        emailcontentField.setFieldStyle(CSS.emailcontentField());
        emailcontentField.setMaxLength(Text.MAX_TEXT_SIZE);
        form.add(emailcontentField);

        form.add(createCommands());

        onRefresh();
        onReset(Report.CREATED);
        return form;
    }

    /*
     * Creates the command bar.
     * 
     * @return the command bar.
     */
    private HorizontalPanel createCommands() {
        final HorizontalPanel bar = new HorizontalPanel();
        bar.addStyleName(AbstractField.CSS.cbtAbstractCommand());

        //-----------------------------------------------
        // Save button
        //-----------------------------------------------
        final Button sendButton = new Button(CONSTANTS.emailButton(), new ClickHandler() {
            public void onClick(ClickEvent event) {
                mailSend.execute();
            }
        });
        sendButton.addStyleName(AbstractField.CSS.cbtCommandButton());
        sendButton.addStyleName(AbstractField.CSS.cbtGradientGreen());
        bar.add(sendButton);

        //-----------------------------------------------
        // Preview button
        //-----------------------------------------------
        final Button previewButton = new Button(CONSTANTS.previewLabel(), new ClickHandler() {
            public void onClick(ClickEvent event) {
                Window.open(url, "Report", "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes");
            }
        });
        previewButton.addStyleName(AbstractField.CSS.cbtCommandButton());
        previewButton.addStyleName(AbstractField.CSS.cbtGradientBlue());
        bar.add(previewButton);

        //-----------------------------------------------
        // Cancel button
        //-----------------------------------------------
        final Button cancelButton = new Button(AbstractField.CONSTANTS.allCancel(), new ClickHandler() {
            public void onClick(ClickEvent event) {
                hide();
            }
        });
        cancelButton.addStyleName(AbstractField.CSS.cbtCommandButton());
        cancelButton.addStyleName(AbstractField.CSS.cbtGradientRed());
        bar.add(cancelButton);

        return bar;
    }

    /* Creates the actions that may be executed. */
    private void createActions() {

        //-----------------------------------------------
        // Send Email having URL to Report
        //-----------------------------------------------
        mailSend = new GuardedRequest<Mail>() {

            protected boolean error() {
                return (ifMessage(emailaddressField.noValue(), Level.ERROR,
                        AbstractField.CONSTANTS.errEmailaddress(), emailaddressField)
                        || ifMessage(!Party.isEmailAddress(emailaddressField.getValue()), Level.ERROR,
                                AbstractField.CONSTANTS.errEmailaddress(), emailaddressField)
                        || ifMessage(emailsubjectField.noValue(), Level.TERSE,
                                AbstractField.CONSTANTS.errEmailsubject(), emailsubjectField)
                        || ifMessage(emailcontentField.noValue(), Level.TERSE,
                                AbstractField.CONSTANTS.errEmailcontent(), emailcontentField));
            }

            protected void send() {
                super.send(getValue(new MailSend()));
            }

            protected void receive(Mail mail) {
                ReportPopup.this.hide();
            }
        };

        //-----------------------------------------------
        // Read Party 
        //-----------------------------------------------
        partyRead = new GuardedRequest<Party>() {
            protected boolean error() {
                return partyField.noValue();
            }

            protected void send() {
                super.send(getValue(new PartyRead()));
            }

            protected void receive(Party response) {
                setValue(response);
            }
        };
    }
}