cz.zcu.kiv.eegdatabase.wui.ui.order.OrderItemPanel.java Source code

Java tutorial

Introduction

Here is the source code for cz.zcu.kiv.eegdatabase.wui.ui.order.OrderItemPanel.java

Source

/*******************************************************************************
 * This file is part of the EEG-database project
 * 
 *   ==========================================
 *  
 *   Copyright (C) 2013 by University of West Bohemia (http://www.zcu.cz/en/)
 *  
 *  ***********************************************************************************************************************
 *  
 *   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.
 *  
 *  ***********************************************************************************************************************
 *  
 *   OrderItemPanel.java, 2014/14/09 00:01 Jakub Rinkes
 ******************************************************************************/
package cz.zcu.kiv.eegdatabase.wui.ui.order;

import com.ibm.icu.text.SimpleDateFormat;
import cz.zcu.kiv.eegdatabase.data.pojo.*;
import cz.zcu.kiv.eegdatabase.wui.app.session.EEGDataBaseSession;
import cz.zcu.kiv.eegdatabase.wui.components.table.TimestampLabel;
import cz.zcu.kiv.eegdatabase.wui.components.utils.PageParametersUtils;
import cz.zcu.kiv.eegdatabase.wui.components.utils.ResourceUtils;
import cz.zcu.kiv.eegdatabase.wui.components.utils.StringUtils;
import cz.zcu.kiv.eegdatabase.wui.core.experiments.ExperimentsFacade;
import cz.zcu.kiv.eegdatabase.wui.core.promocode.PromoCodeFacade;
import cz.zcu.kiv.eegdatabase.wui.ui.experiments.ExperimentsDetailPage;
import cz.zcu.kiv.eegdatabase.wui.ui.experiments.ExperimentsPackageDownloadPage;
import cz.zcu.kiv.eegdatabase.wui.ui.experiments.components.ExperimentBuyDownloadLinkPanel;
import cz.zcu.kiv.eegdatabase.wui.ui.memberships.MembershipPlansDetailPage;
import cz.zcu.kiv.eegdatabase.wui.ui.order.components.PromoCodePopupForm;
import cz.zcu.kiv.eegdatabase.wui.ui.order.components.StringWrapper;
import cz.zcu.kiv.eegdatabase.wui.ui.shoppingCart.ShoppingCartPage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.PropertyListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;

import java.math.BigDecimal;
import java.util.Date;

public class OrderItemPanel extends Panel {

    private static final long serialVersionUID = 1L;
    protected Log log = LogFactory.getLog(getClass());

    @SpringBean
    private ExperimentsFacade facade;

    @SpringBean
    private PromoCodeFacade promoFacade;

    private IModel<String> showActionModel;
    private IModel<String> hideActionModel;

    private boolean malleable;

    public OrderItemPanel(String id, final IModel<OrderItem> model, final boolean malleable) {
        super(id, new CompoundPropertyModel<OrderItem>(model));

        this.malleable = malleable;

        showActionModel = ResourceUtils.getModel("action.show");
        hideActionModel = ResourceUtils.getModel("action.hide");

        final OrderItem modelItem = model.getObject();
        final Experiment experiment = model.getObject().getExperiment();
        final ExperimentPackage experimentPackage = model.getObject().getExperimentPackage();
        final MembershipPlan membershipPlan = model.getObject().getMembershipPlan();
        final ResearchGroup researchGroup = model.getObject().getResearchGroup();

        // prepare containers
        WebMarkupContainer experimentContainer = new WebMarkupContainer("experiment") {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return experiment != null;
            }
        };

        final WebMarkupContainer packageContainer = new WebMarkupContainer("package") {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return experimentPackage != null;
            }
        };

        WebMarkupContainer membershipPlanContainer = new WebMarkupContainer("membershipPlan") {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return membershipPlan != null;
            }
        };

        // prepare texts for experiment container
        int experimentId;
        String scenarioTitle;
        String date;
        if (experiment != null) {
            experimentId = experiment.getExperimentId();
            scenarioTitle = experiment.getScenario().getTitle();
            date = new SimpleDateFormat(StringUtils.DATE_TIME_FORMAT_PATTER, EEGDataBaseSession.get().getLocale())
                    .format((Date) experiment.getStartTime());
        } else {
            experimentId = 0;
            scenarioTitle = "";
            date = "";
        }

        int membershipPlanID;
        String membershipPlanName = "";
        String researchGroupName = "";

        if (membershipPlan != null) {
            membershipPlanName = membershipPlan.getName();
            membershipPlanID = membershipPlan.getMembershipId();
        } else {
            membershipPlanID = -1;
        }
        if (researchGroup != null) {
            researchGroupName = " for " + researchGroup.getDescription();
        } else {
            researchGroupName = "";
        }

        // add components for experiment container
        experimentContainer.add(new Label("experimentText1", ResourceUtils.getModel("text.order.item.experiment1",
                Integer.toString(experimentId), scenarioTitle)));
        experimentContainer
                .add(new Label("experimentText2", ResourceUtils.getModel("text.order.item.experiment2", date)));
        experimentContainer.add(new BookmarkablePageLink<Void>("detail", ExperimentsDetailPage.class,
                PageParametersUtils.getDefaultPageParameters(experimentId)));
        ExperimentBuyDownloadLinkPanel downloadExpLink = new ExperimentBuyDownloadLinkPanel("downloadExpLink",
                experiment, new Model<ExperimentLicence>());
        downloadExpLink.setVisible(EEGDataBaseSession.get().isExperimentPurchased(experimentId));
        experimentContainer.add(downloadExpLink);

        membershipPlanContainer.add(new Label("membershipPlanText1", membershipPlanName + researchGroupName));
        membershipPlanContainer.add(new BookmarkablePageLink<Void>("detail", MembershipPlansDetailPage.class,
                PageParametersUtils.getDefaultPageParameters(membershipPlanID)));
        final ModalWindow promoCodePopup = this.addPromoCodePopup(modelItem, membershipPlanContainer);

        // prepare texts for package container
        final int packageId;
        String name;
        String group;
        if (experimentPackage != null) {
            packageId = experimentPackage.getExperimentPackageId();
            name = experimentPackage.getName();
            group = experimentPackage.getResearchGroup() != null ? experimentPackage.getResearchGroup().getTitle()
                    : "";
        } else {
            packageId = 0;
            name = "";
            group = "";
        }

        // add components for package container
        packageContainer.add(new Label("packageText1", ResourceUtils.getModel("text.order.item.package1", name)));
        //packageContainer.add(new Label("packageText2", ResourceUtils.getModel("text.order.item.package2", group)));

        // add component for list of experiments in package
        final PropertyListView<Experiment> packageExperimentList = new PropertyListView<Experiment>("experiments",
                facade.getExperimentsByPackage(packageId)) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<Experiment> item) {
                item.add(new Label("experimentId"));
                item.add(new Label("scenario.title"));
                item.add(new TimestampLabel("date", item.getModelObject().getStartTime(),
                        StringUtils.DATE_TIME_FORMAT_PATTER));
                item.add(new BookmarkablePageLink<Void>("detail", ExperimentsDetailPage.class,
                        PageParametersUtils.getDefaultPageParameters(item.getModelObject().getExperimentId())));
            }
        };

        // add show hide link for list of experiments in package
        final Label showHideLinkLabel = new Label("showHideLinkLabel", showActionModel);
        AjaxLink<Void> showHideLink = new AjaxLink<Void>("detail") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {

                packageExperimentList.setVisible(!packageExperimentList.isVisible());
                if (packageExperimentList.isVisible())
                    showHideLinkLabel.setDefaultModel(hideActionModel);
                else
                    showHideLinkLabel.setDefaultModel(showActionModel);

                target.add(packageContainer);
            }
        };

        showHideLink.add(showHideLinkLabel);
        packageContainer.add(showHideLink);
        packageContainer.add(packageExperimentList);
        packageContainer.add(new BookmarkablePageLink<ExperimentsPackageDownloadPage>("downloadLink",
                ExperimentsPackageDownloadPage.class, PageParametersUtils.getDefaultPageParameters(packageId)) {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isVisible() {
                return !malleable;
            }

        });

        packageExperimentList.setVisible(false);

        experimentContainer.setOutputMarkupId(true);
        packageContainer.setOutputMarkupId(true);
        add(experimentContainer, packageContainer, membershipPlanContainer);
        //BookmarkablePageLink<Void> applyPromoCodeLink = new BookmarkablePageLink<Void>("applyPromoCode", BuyMembershipPlanPersonPage.class);
        //add(applyPromoCodeLink);

    }

    private ModalWindow addPromoCodePopup(final OrderItem parent, WebMarkupContainer membershipPlanContainer) {
        final ModalWindow popup = new ModalWindow("promoCodePopup");
        popup.setAutoSize(true);
        popup.setResizable(false);
        popup.setMinimalWidth(500);
        popup.setWidthUnit("px");
        popup.showUnloadConfirmation(false);

        PromoCodePopupForm popupForm = new PromoCodePopupForm(popup.getContentId(),
                new Model<StringWrapper>(new StringWrapper())) {

            @Override
            protected void onSubmitAction(IModel<StringWrapper> strWrapper, AjaxRequestTarget target,
                    Form<?> form) {
                String code = strWrapper.getObject().getValue();
                if (parent.getMembershipPlan() != null) {
                    if (parent.getResearchGroup() == null) {
                        if (promoFacade.isValidPersonalPlanCode(code)) {
                            PromoCode promoCode = promoFacade.getPromoCodeByKeyword(code);
                            parent.setPromoCode(promoCode);
                            double price = parent.getMembershipPlan().getPrice().doubleValue()
                                    * (1d - ((double) promoCode.getDiscount() / 100d));
                            parent.setPrice(new BigDecimal(price));
                        }
                    } else {
                        if (promoFacade.isValidGroupPlanCode(code)) {
                            PromoCode promoCode = promoFacade.getPromoCodeByKeyword(code);
                            parent.setPromoCode(promoCode);
                            double price = parent.getMembershipPlan().getPrice().doubleValue()
                                    * (1d - ((double) promoCode.getDiscount() / 100d));
                            parent.setPrice(new BigDecimal(price));
                        }
                    }
                }
                ModalWindow.closeCurrent(target);
                setResponsePage(ShoppingCartPage.class);
            }

            @Override
            protected void onCancelAction(IModel<StringWrapper> strWrapper, AjaxRequestTarget target,
                    Form<?> form) {
                ModalWindow.closeCurrent(target);
            }

        };
        popup.setContent(popupForm);
        membershipPlanContainer.add(popup);
        AjaxLink popupLink = new AjaxLink<Object>("applyPromoCode") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                //License l = this.getModelObject();
                //if (l!=null) System.out.println(l.getTitle());
                popup.show(target);
            }

        };
        popup.setOutputMarkupPlaceholderTag(true);
        popup.setVisibilityAllowed(true);
        String promoCode = "";
        if (parent.getPromoCode() != null) {
            promoCode = "Applied code: " + parent.getPromoCode().getKeyword() + " ("
                    + parent.getPromoCode().getDiscount() + "% off)";
        }
        membershipPlanContainer.add(new Label("promoCodeText", promoCode));
        membershipPlanContainer.add(popupLink);
        popupLink.setVisible(malleable);
        return popup;
    }

}