de.hybris.platform.b2bacceleratorfacades.order.populators.B2BApprovalDataPopulator.java Source code

Java tutorial

Introduction

Here is the source code for de.hybris.platform.b2bacceleratorfacades.order.populators.B2BApprovalDataPopulator.java

Source

/*
 * [y] hybris Platform
 *
 * Copyright (c) 2000-2013 hybris AG
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of hybris
 * ("Confidential Information"). You shall not disclose such Confidential
 * Information and shall use it only in accordance with the terms of the
 * license agreement you entered into with hybris.
 * 
 *  
 */
package de.hybris.platform.b2bacceleratorfacades.order.populators;

import de.hybris.platform.b2b.services.B2BWorkflowIntegrationService;
import de.hybris.platform.b2bacceleratorfacades.order.data.B2BOrderApprovalData;
import de.hybris.platform.b2bacceleratorfacades.order.data.B2BOrderHistoryEntryData;
import de.hybris.platform.commercefacades.order.data.OrderData;
import de.hybris.platform.converters.Populator;
import de.hybris.platform.converters.Converters;
import de.hybris.platform.core.model.order.OrderModel;
import de.hybris.platform.orderhistory.model.OrderHistoryEntryModel;
import de.hybris.platform.servicelayer.dto.converter.Converter;
import de.hybris.platform.workflow.enums.WorkflowActionStatus;
import de.hybris.platform.workflow.model.WorkflowActionModel;
import de.hybris.platform.workflow.model.WorkflowDecisionModel;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.beanutils.BeanToPropertyValueTransformer;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.PredicateUtils;
import org.springframework.beans.factory.annotation.Required;

/**
 * Populates {@link de.hybris.platform.workflow.model.WorkflowActionModel} to {@link de.hybris.platform.b2bacceleratorfacades.order.data.B2BOrderApprovalData}.
 */
public class B2BApprovalDataPopulator implements Populator<WorkflowActionModel, B2BOrderApprovalData> {
    private B2BWorkflowIntegrationService b2bWorkflowIntegrationService;
    private Converter<OrderModel, OrderData> orderConverter;
    private Converter<OrderHistoryEntryModel, B2BOrderHistoryEntryData> b2bOrderHistoryEntryConverter;

    @Override
    public void populate(final WorkflowActionModel source, final B2BOrderApprovalData target) {
        final OrderModel orderModel = getB2bWorkflowIntegrationService().getOrderFromAction(source);
        target.setWorkflowActionModelCode(source.getCode());
        target.setB2bOrderData(getOrderConverter().convert(orderModel));

        target.setAllDecisions(new ArrayList<String>(CollectionUtils.collect(source.getDecisions(),
                new BeanToPropertyValueTransformer(WorkflowDecisionModel.QUALIFIER) {
                    @Override
                    public Object transform(final Object object) {
                        final Object original = super.transform(object);
                        if (original instanceof String) {
                            return ((String) super.transform(object)).toUpperCase();
                        } else {
                            return original;
                        }
                    }
                })));

        if (source.getSelectedDecision() != null) {
            target.setSelectedDecision(source.getSelectedDecision().getName());
        }
        target.setApprovalComments(source.getComment());
        if (WorkflowActionStatus.IN_PROGRESS.equals(source.getStatus())) {
            target.setApprovalDecisionRequired(true);
        }

        final List<B2BOrderHistoryEntryData> orderHistoryEntriesData = Converters
                .convertAll(orderModel.getHistoryEntries(), getB2bOrderHistoryEntryConverter());
        //TODO:Add the QUOTE and MERCHANT keywords in enum as a dictionary for filtering
        target.setQuotesApprovalHistoryEntriesData(
                filterOrderHistoryEntriesForApprovalStage(orderHistoryEntriesData, "QUOTE"));
        target.setMerchantApprovalHistoryEntriesData(
                filterOrderHistoryEntriesForApprovalStage(orderHistoryEntriesData, "MERCHANT"));
        target.setOrderHistoryEntriesData(orderHistoryEntriesData);
    }

    public B2BWorkflowIntegrationService getB2bWorkflowIntegrationService() {
        return b2bWorkflowIntegrationService;
    }

    @Required
    public void setB2bWorkflowIntegrationService(
            final B2BWorkflowIntegrationService b2bWorkflowIntegrationService) {
        this.b2bWorkflowIntegrationService = b2bWorkflowIntegrationService;
    }

    public Converter<OrderModel, OrderData> getOrderConverter() {
        return orderConverter;
    }

    @Required
    public void setOrderConverter(final Converter<OrderModel, OrderData> orderConverter) {
        this.orderConverter = orderConverter;
    }

    public Converter<OrderHistoryEntryModel, B2BOrderHistoryEntryData> getB2bOrderHistoryEntryConverter() {
        return b2bOrderHistoryEntryConverter;
    }

    @Required
    public void setB2bOrderHistoryEntryConverter(
            final Converter<OrderHistoryEntryModel, B2BOrderHistoryEntryData> b2bOrderHistoryEntryConverter) {
        this.b2bOrderHistoryEntryConverter = b2bOrderHistoryEntryConverter;
    }

    protected List<B2BOrderHistoryEntryData> filterOrderHistoryEntriesForApprovalStage(
            final List<B2BOrderHistoryEntryData> orderHistoryEntries, final String orderApprovalStage) {

        final Collection<B2BOrderHistoryEntryData> outputList = CollectionUtils.select(orderHistoryEntries,
                applyApprovalStagePredicate(orderApprovalStage));
        if (outputList != null && !outputList.isEmpty()) {
            final List<B2BOrderHistoryEntryData> selectedList = new ArrayList<B2BOrderHistoryEntryData>(
                    outputList.size());
            selectedList.addAll(outputList);

            CollectionUtils.filter(orderHistoryEntries,
                    PredicateUtils.notPredicate(applyApprovalStagePredicate(orderApprovalStage)));
            return selectedList;
        }
        return null;
    }

    protected Predicate applyApprovalStagePredicate(final String orderApprovalStage) {
        return new Predicate() {
            @Override
            public boolean evaluate(final Object object) {
                final B2BOrderHistoryEntryData orderHistoryEntryData = (B2BOrderHistoryEntryData) object;
                if (orderHistoryEntryData.getPreviousOrderVersionData() != null) {
                    final String previousOrderStatus = orderHistoryEntryData.getPreviousOrderVersionData()
                            .getStatus().toString();
                    return (previousOrderStatus.contains(orderApprovalStage));
                }
                return false;
            }
        };
    }
}