org.gastro.rcp.internal.department.OrdersView.java Source code

Java tutorial

Introduction

Here is the source code for org.gastro.rcp.internal.department.OrdersView.java

Source

/*
 * Copyright (c) 2009-2012, 2015 Eike Stepper (Berlin, Germany) and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eike Stepper - initial API and implementation
 *
 *  Initial Publication:
 *    Eclipse Magazin - http://www.eclipse-magazin.de
 */
package org.gastro.rcp.internal.department;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider.FontAndColorProvider;

import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.part.ViewPart;

import com.swtdesigner.ResourceManager;
import com.swtdesigner.SWTResourceManager;

import org.gastro.business.BusinessDay;
import org.gastro.business.Order;
import org.gastro.business.OrderDetail;
import org.gastro.business.OrderState;
import org.gastro.inventory.Department;
import org.gastro.inventory.Product;
import org.gastro.rcp.IModel;
import org.gastro.rcp.IModel.ITransactionalOperation;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Eike Stepper
 */
public class OrdersView extends ViewPart {
    public static final String ID = "org.gastro.rcp.orders.view";

    private static final AdapterFactory FACTORY = IModel.INSTANCE.getAdapterFactory();

    private TreeViewer treeViewer;

    private Adapter businessDayAdapter = new AdapterImpl() {
        @Override
        public void notifyChanged(Notification msg) {
            try {
                treeViewer.getTree().getDisplay().asyncExec(new Runnable() {
                    public void run() {
                        try {
                            treeViewer.refresh(true);
                            treeViewer.expandAll();
                        } catch (Exception ex) {
                        }
                    }
                });
            } catch (Exception ex) {
            }
        }
    };

    public OrdersView() {
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    @Override
    public void setFocus() {
    }

    @Override
    public void dispose() {
        IModel.INSTANCE.getBusinessDay().eAdapters().remove(businessDayAdapter);
        super.dispose();
    }

    /**
     * This is a callback that will allow us to create the viewer and initialize it.
     */
    @Override
    public void createPartControl(Composite parent) {
        BusinessDay businessDay = IModel.INSTANCE.getBusinessDay();
        businessDay.eAdapters().add(businessDayAdapter);

        {
            treeViewer = new TreeViewer(parent, SWT.NONE);
            treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                public void selectionChanged(SelectionChangedEvent event) {
                    Object object = ((IStructuredSelection) event.getSelection()).getFirstElement();
                    if (object instanceof OrderDetail) {
                        OrderDetail orderDetail = (OrderDetail) object;
                        IModel.INSTANCE.modify(orderDetail, new ITransactionalOperation<OrderDetail>() {
                            public Object execute(OrderDetail orderDetail) {
                                orderDetail
                                        .setState(orderDetail.getState() == OrderState.ORDERED ? OrderState.SERVED
                                                : OrderState.ORDERED);
                                return null;
                            }
                        });

                        treeViewer.refresh(true);
                    }
                }
            });

            Tree tree = treeViewer.getTree();
            tree.setToolTipText("Klicken um Zustand zu wechseln");
            tree.setForeground(SWTResourceManager.getColor(SWT.COLOR_DARK_BLUE));
            tree.setFont(SWTResourceManager.getFont("Segoe UI", 16, SWT.BOLD));
            {
                TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
                TreeColumn trclmnTitel = treeViewerColumn.getColumn();
                trclmnTitel.setToolTipText("Klicken um Zustand zu wechseln");
                trclmnTitel.setWidth(400);
                trclmnTitel.setText("Angebot");
            }

            {
                TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
                TreeColumn trclmnQuantity = treeViewerColumn.getColumn();
                trclmnQuantity.setResizable(false);
                trclmnQuantity.setAlignment(SWT.RIGHT);
                trclmnQuantity.setWidth(50);
                trclmnQuantity.setText("Menge");
            }

            {
                TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
                TreeColumn trclmnPreis = treeViewerColumn.getColumn();
                trclmnPreis.setAlignment(SWT.RIGHT);
                trclmnPreis.setResizable(false);
                trclmnPreis.setWidth(100);
                trclmnPreis.setText("Preis");
            }

            {
                TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
                TreeColumn trclmnSumme = treeViewerColumn.getColumn();
                trclmnSumme.setAlignment(SWT.RIGHT);
                trclmnSumme.setResizable(false);
                trclmnSumme.setWidth(100);
                trclmnSumme.setText("Summe");
            }

            treeViewer.setContentProvider(new AdapterFactoryContentProvider(FACTORY) {
                @Override
                public Object[] getElements(Object object) {
                    return getChildren(object);
                }

                @Override
                public Object[] getChildren(Object object) {
                    Department department = (Department) IModel.INSTANCE.getStation();
                    if (object instanceof BusinessDay) {
                        BusinessDay businessDay = (BusinessDay) object;
                        List<Object> result = new ArrayList<Object>();
                        for (Order order : businessDay.getOrders()) {
                            for (OrderDetail orderDetail : order.getOrderDetails()) {
                                if (orderDetail.getState() == OrderState.ORDERED) {
                                    Product product = orderDetail.getOffering().getProduct();
                                    if (product != null) {
                                        if (product.getDepartment() != department) {
                                            continue;
                                        }
                                    }

                                    result.add(order);
                                    break;
                                }
                            }
                        }

                        return result.toArray();
                    }

                    if (object instanceof Order) {
                        Order order = (Order) object;
                        List<Object> result = new ArrayList<Object>();
                        for (OrderDetail orderDetail : order.getOrderDetails()) {
                            Product product = orderDetail.getOffering().getProduct();
                            if (product == null || product.getDepartment() == department) {
                                result.add(orderDetail);
                            }
                        }

                        return result.toArray();
                    }

                    return super.getChildren(object);
                }

                @Override
                public boolean hasChildren(Object object) {
                    return getChildren(object).length != 0;
                }
            });

            treeViewer.setLabelProvider(new FontAndColorProvider(FACTORY, treeViewer) {
                @Override
                public String getColumnText(Object object, int columnIndex) {
                    if (object instanceof Order) {
                        Order order = (Order) object;
                        switch (columnIndex) {
                        case 0:
                            return order.getTable().getStationID();
                        case 1:
                        case 2:
                        case 3:
                            return "";
                        }
                    }

                    if (object instanceof OrderDetail) {
                        OrderDetail orderDetail = (OrderDetail) object;
                        switch (columnIndex) {
                        case 0:
                            return orderDetail.getOffering().getName();
                        case 1:
                            return "" + orderDetail.getQuantity() + "x";
                        case 2:
                            return formatPrice(orderDetail.getOffering().getPrice());
                        case 3:
                            return formatPrice(orderDetail.getOffering().getPrice() * orderDetail.getQuantity());
                        }
                    }

                    return super.getColumnText(object, columnIndex);
                }

                @Override
                public Image getColumnImage(Object object, int columnIndex) {
                    if (columnIndex == 0 && object instanceof OrderDetail) {
                        OrderDetail orderDetail = (OrderDetail) object;
                        if (orderDetail.getState() == OrderState.ORDERED) {
                            return ResourceManager.getPluginImage("org.gastro.rcp.department", "icons/ordered.gif");
                        }

                        return ResourceManager.getPluginImage("org.gastro.rcp.department", "icons/served.gif");
                    }

                    return null;
                }

                @Override
                public Color getForeground(Object object, int columnIndex) {
                    if (object instanceof OrderDetail) {
                        OrderDetail orderDetail = (OrderDetail) object;
                        if (orderDetail.getState() != OrderState.ORDERED) {
                            return treeViewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GRAY);
                        }
                    }

                    return super.getForeground(object, columnIndex);
                }

                private String formatPrice(float price) {
                    return NumberFormat.getCurrencyInstance().format(price);
                }
            });

            treeViewer.setInput(businessDay);
            treeViewer.expandAll();
        }
    }
}