Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Copyright (c) Elastic Path Software Inc., 2007
- */
- package com.elasticpath.cmclient.fulfillment.editors.order;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.LinkedList;
- import java.util.List;
- import org.apache.commons.lang.StringUtils;
- import org.apache.log4j.Logger;
- import org.eclipse.core.databinding.DataBindingContext;
- import org.eclipse.jface.dialogs.MessageDialog;
- import org.eclipse.jface.viewers.ISelectionChangedListener;
- import org.eclipse.jface.viewers.IStructuredContentProvider;
- import org.eclipse.jface.viewers.IStructuredSelection;
- import org.eclipse.jface.viewers.ITableLabelProvider;
- import org.eclipse.jface.viewers.LabelProvider;
- import org.eclipse.jface.viewers.SelectionChangedEvent;
- import org.eclipse.jface.viewers.Viewer;
- import org.eclipse.swt.events.SelectionEvent;
- import org.eclipse.swt.events.SelectionListener;
- import org.eclipse.swt.graphics.Image;
- import org.eclipse.swt.widgets.Button;
- import org.eclipse.swt.widgets.Composite;
- import org.eclipse.ui.forms.editor.FormPage;
- import org.eclipse.ui.forms.widgets.ExpandableComposite;
- import org.eclipse.ui.forms.widgets.FormToolkit;
- import com.elasticpath.cmclient.core.Application;
- import com.elasticpath.cmclient.core.editors.AbstractCmClientEditorPageSectionPart;
- import com.elasticpath.cmclient.core.editors.AbstractCmClientFormEditor;
- import com.elasticpath.cmclient.core.ui.framework.CompositeFactory;
- import com.elasticpath.cmclient.core.ui.framework.IEpLayoutComposite;
- import com.elasticpath.cmclient.core.ui.framework.IEpLayoutData;
- import com.elasticpath.cmclient.core.ui.framework.IEpTableViewer;
- import com.elasticpath.cmclient.core.ui.framework.EpControlFactory.EpState;
- import com.elasticpath.cmclient.fulfillment.FulfillmentImageRegistry;
- import com.elasticpath.cmclient.fulfillment.FulfillmentMessages;
- import com.elasticpath.cmclient.fulfillment.domain.OrderPaymentPresenter;
- import com.elasticpath.cmclient.fulfillment.domain.impl.OrderPaymentPresenterFactory;
- import com.elasticpath.commons.constants.ContextIdNames;
- import com.elasticpath.commons.util.PaymentsComparatorFactory;
- import com.elasticpath.domain.misc.EmailProperties;
- import com.elasticpath.domain.misc.OrderEmailPropertyHelper;
- import com.elasticpath.domain.order.Order;
- import com.elasticpath.domain.order.OrderPayment;
- import com.elasticpath.service.EpServiceException;
- import com.elasticpath.service.misc.EmailService;
- /**
- * Represents the UI of order payment history section.
- */
- public class OrderPaymentsHistorySectionPart extends AbstractCmClientEditorPageSectionPart implements SelectionListener, ISelectionChangedListener {
- private static final Logger LOG = Logger.getLogger(OrderPaymentsHistorySectionPart.class);
- private static final int COLUMN_WIDTH_DATETIME = 120;
- private static final int COLUMN_WIDTH_SHIPMENT_ID = 120;
- private static final int COLUMN_WIDTH_PAYMENTTYPE = 100;
- private static final int COLUMN_WIDTH_TRANSACTIONTYPE = 100;
- private static final int COLUMN_WIDTH_PAYMENTDETIAL = 200;
- private static final int COLUMN_WIDTH_AMOUNT = 100;
- private static final int COLUMN_WIDTH_STATUS = 80;
- private static final int COLUMN_WIDTH_TRANSACTIONID = 100;
- private static final int COLUMN_WIDTH_REFERENCENUMBER = 120;
- private static final int COLUMN_INDEX_DATETIME = 0;
- private static final int COLUMN_INDEX_SHIPMENT_ID = 1;
- private static final int COLUMN_INDEX_PAYMENTTYPE = 2;
- private static final int COLUMN_INDEX_TRANSACTIONTYPE = 3;
- private static final int COLUMN_INDEX_PAYMENTDETAIL = 4;
- private static final int COLUMN_INDEX_AMOUNT = 5;
- private static final int COLUMN_INDEX_STATUS = 6;
- private static final int COLUMN_INDEX_TRANSACTIONID = 7;
- private static final int COLUMN_INDEX_REFERENCENUMBER = 8;
- private IEpTableViewer epTableViewer;
- private Button resendRefundReceiptButton;
- /**
- * Constructor.
- *
- * @param formPage the formpage
- * @param editor the CmClientFormEditor that contains the form
- */
- public OrderPaymentsHistorySectionPart(final FormPage formPage, final AbstractCmClientFormEditor editor) {
- super(formPage, editor, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED);
- // super(formPage, editor, ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); //| ExpandableComposite.EXPANDED);
- }
- /**
- * Creates the UI of the payment history section.
- *
- * @param client parent composite
- * @param toolkit Eclipse form toolkit
- */
- @Override
- protected void createControls(final Composite client, final FormToolkit toolkit) {
- final IEpLayoutComposite mainPane = CompositeFactory.createTableWrapLayoutComposite(client, 2, false);
- final IEpLayoutData tableData = mainPane.createLayoutData(IEpLayoutData.FILL, IEpLayoutData.FILL, false, false);
- epTableViewer = mainPane.addTableViewer(false, EpState.READ_ONLY, tableData);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_DateTime, COLUMN_WIDTH_DATETIME);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_ShipmentId, COLUMN_WIDTH_SHIPMENT_ID);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_PaymentType, COLUMN_WIDTH_PAYMENTTYPE);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_TransactionType, COLUMN_WIDTH_TRANSACTIONTYPE);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_PaymentDetails, COLUMN_WIDTH_PAYMENTDETIAL);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_Amount, COLUMN_WIDTH_AMOUNT);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_Status, COLUMN_WIDTH_STATUS);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_TransactionID, COLUMN_WIDTH_TRANSACTIONID);
- epTableViewer.addTableColumn(FulfillmentMessages.OrderPaymentHistorySection_TableTitle_ReferenceNumber, COLUMN_WIDTH_REFERENCENUMBER);
- epTableViewer.setContentProvider(new ViewContentProvider());
- epTableViewer.setLabelProvider(new ViewLabelProvider());
- epTableViewer.getSwtTableViewer().addSelectionChangedListener(this);
- final Image resendImage = FulfillmentImageRegistry.getImage(FulfillmentImageRegistry.REFUND_RECEIPT_RESEND);
- resendRefundReceiptButton = mainPane.addPushButton(FulfillmentMessages.PaymentHistorySection_RefundReceiptResend, resendImage,
- EpState.DISABLED, mainPane.createLayoutData(IEpLayoutData.FILL, IEpLayoutData.BEGINNING));
- resendRefundReceiptButton.addSelectionListener(this);
- }
- /**
- * Gets the section description.
- *
- * @return string
- */
- @Override
- protected String getSectionDescription() {
- return FulfillmentMessages.PaymentHistorySection_Description;
- }
- /**
- * Gets the section title.
- *
- * @return string
- */
- @Override
- protected String getSectionTitle() {
- return FulfillmentMessages.PaymentHistorySection_Title;
- }
- /**
- * Override to populate the controls with their initial values.
- */
- @Override
- protected void populateControls() {
- // Nothing to do.
- }
- /**
- * Not used.
- *
- * @param event the event object
- */
- public void widgetDefaultSelected(final SelectionEvent event) {
- // not used
- }
- /**
- * Invoked on selection event.
- *
- * @param event the event object
- */
- public void widgetSelected(final SelectionEvent event) {
- if (event.getSource() == resendRefundReceiptButton) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) epTableViewer.getSwtTableViewer().getSelection();
- final OrderPayment selectedOrderPayment = (OrderPayment) structuredSelection.getFirstElement();
- try {
- this.sendOrderRefundEmail((Order) this.getModel(), selectedOrderPayment, ""); //$NON-NLS-1$
- MessageDialog.openInformation(this.getEditor().getSite().getShell(), FulfillmentMessages.OrderActionResendConfirmationEmail,
- FulfillmentMessages.resendRefundReceiptEmailSuccess);
- } catch (EpServiceException e) {
- LOG.error("Error re-sending refund receipt customer.", e); //$NON-NLS-1$
- MessageDialog.openError(null, FulfillmentMessages.resendRefundReceiptEmailFailure_Title,
- FulfillmentMessages.resendRefundReceiptEmailFailure);
- }
- }
- }
- /**
- * Send an order refund email to the customer.
- */
- private void sendOrderRefundEmail(final Order order, final OrderPayment refundPayment, final String refundNote) {
- // Send order confirmation email to billing email address if it exists; otherwise fall back to customer email address
- String emailAddress = order.getBillingEmailAddress();
- if (StringUtils.isBlank(emailAddress)) {
- emailAddress = order.getCustomer().getEmail();
- }
- try {
- final EmailProperties orderRefundEmailProperties = this.getOrderEmailPropertyHelper().getOrderRefundEmailProperties(order, emailAddress,
- refundPayment, refundNote);
- this.getEmailService().sendMail(orderRefundEmailProperties);
- } catch (final Exception e) {
- // The Mailer is already catching email exceptions. Hence, most if not all exceptions will already be caught.
- // Catch remaining exception and allow refund process to continue.
- LOG.error("An error occured while sending order refund email to " + emailAddress, e); //$NON-NLS-1$
- }
- }
- /**
- * Returns an instance of {@link EmailService}.
- *
- * @return an instance of EmailService
- */
- private EmailService getEmailService() {
- return (EmailService) Application.getInstance().getBean(ContextIdNames.EMAIL_SERVICE);
- }
- /**
- * Returns an instance of {@link EmailService}.
- *
- * @return an instance of EmailService
- */
- private OrderEmailPropertyHelper getOrderEmailPropertyHelper() {
- return (OrderEmailPropertyHelper) Application.getInstance().getBean(ContextIdNames.EMAIL_PROPERTY_HELPER_ORDER);
- }
- /**
- * Override to perform the bindings between the controls and the domain model.
- *
- * @param bindingContext the binding context
- */
- @Override
- protected void bindControls(final DataBindingContext bindingContext) {
- // Nothing to do.
- }
- /**
- * Provides the column image for the payments table.
- */
- @SuppressWarnings("PMD.CyclomaticComplexity")
- class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
- /**
- * Get the column image.
- *
- * @param element not used
- * @param columnIndex the column to create an image for
- * @return the image
- */
- public Image getColumnImage(final Object element, final int columnIndex) {
- return null;
- }
- /**
- * Provide the content for each column.
- *
- * @param element element object
- * @param columnIndex index
- * @return the value for that column
- */
- @SuppressWarnings("PMD.CyclomaticComplexity")
- public String getColumnText(final Object element, final int columnIndex) {
- final OrderPaymentPresenter presenter = new OrderPaymentPresenterFactory().getOrderPaymentPresenter((OrderPayment) element);
- switch (columnIndex) {
- case COLUMN_INDEX_DATETIME:
- return presenter.getDisplayCreatedDate();
- case COLUMN_INDEX_SHIPMENT_ID:
- return presenter.getDisplayShipmentId();
- case COLUMN_INDEX_PAYMENTTYPE:
- return presenter.getDisplayPaymentMethod();
- case COLUMN_INDEX_TRANSACTIONTYPE:
- return presenter.getDisplayTransactionType();
- case COLUMN_INDEX_PAYMENTDETAIL:
- return presenter.getDisplayPaymentDetails();
- case COLUMN_INDEX_AMOUNT:
- if (presenter.getDisplayTransactionType().equals(OrderPayment.CREDIT_TRANSACTION)) {
- return decorateCredit(presenter.getDisplayPaymentAmount());
- }
- return presenter.getDisplayPaymentAmount();
- case COLUMN_INDEX_STATUS:
- return presenter.getDisplayStatus();
- case COLUMN_INDEX_TRANSACTIONID:
- return presenter.getDisplayTransactionId();
- case COLUMN_INDEX_REFERENCENUMBER:
- return presenter.getDisplayReferenceNumber();
- default:
- return StringUtils.EMPTY;
- }
- }
- private String decorateCredit(final String amount) {
- return '(' + amount + ')';
- }
- }
- /**
- * Provides the content for the payments.
- */
- class ViewContentProvider implements IStructuredContentProvider {
- /**
- * Called when the viewer input is changed.
- *
- * @param viewer the viewer
- * @param oldInput the old input
- * @param newInput the new input
- */
- public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
- // No action required
- }
- /**
- * Dispose the content.
- */
- public void dispose() {
- // Nothing to dispose
- }
- /**
- * Returns an array of elements to display.
- *
- * @param inputElement the input element (An Order)
- * @return an array of order payments
- */
- public Object[] getElements(final Object inputElement) {
- if (inputElement != null) {
- final HashSet<OrderPayment> payments = (HashSet<OrderPayment>) ((Order) inputElement).getOrderPayments();
- final List<OrderPayment> paymentsList = new LinkedList<OrderPayment>(payments);
- Collections.sort(paymentsList, PaymentsComparatorFactory.getOrderPaymentDateCompatator());
- if (payments != null) {
- return paymentsList.toArray();
- }
- }
- return new Object[0];
- }
- }
- /**
- * Refresh the section with order data.
- *
- * @param order the order
- */
- public void refreshData(final Order order) {
- epTableViewer.setInput(order);
- }
- /**
- * {@inheritDoc}
- */
- public void selectionChanged(final SelectionChangedEvent event) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
- final OrderPayment selectedOrderPayment = (OrderPayment) (structuredSelection).getFirstElement();
- final boolean isRefundOrderPayment = StringUtils.equals(OrderPayment.CREDIT_TRANSACTION, selectedOrderPayment.getTransactionType());
- resendRefundReceiptButton.setEnabled(isRefundOrderPayment);
- }
- }
Add Comment
Please, Sign In to add comment