/* *****************************************************************************
* JFire - it's hot - Free ERP System - http://jfire.org *
* Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, *
* Boston, MA 02110-1301 USA *
* *
* Or get it online : *
* http://opensource.org/licenses/lgpl-license.php *
* *
* *
******************************************************************************/
package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse;
import java.util.ArrayList;
import java.util.List;
import javax.jdo.FetchPlan;
import javax.jdo.JDOHelper;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.base.ui.layout.WeightedTableLayout;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.base.ui.table.TableContentProvider;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.base.ui.wizard.DynamicPathWizard;
import org.nightlabs.base.ui.wizard.DynamicPathWizardPage;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jdo.ObjectIDUtil;
import org.nightlabs.jfire.base.JFireEjb3Factory;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.trade.Offer;
import org.nightlabs.jfire.trade.TradeManagerRemote;
import org.nightlabs.jfire.trade.id.OfferID;
import org.nightlabs.jfire.trade.id.OrderID;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.l10n.DateFormatter;
import org.nightlabs.progress.ProgressMonitor;
public class SelectOfferPage extends DynamicPathWizardPage
{
public static final int ACTION_CREATE = 1;
public static final int ACTION_SELECT = 2;
private Button createOfferRadio;
private Button selectOfferRadio;
private AbstractTableComposite<Offer> offerTable;
private List<Object> offers = new ArrayList<Object>(0); // holds either a String or instances of Offer
private Offer selectedOffer = null;
private OrderID orderID;
public SelectOfferPage(OrderID orderID)
{
super(SelectOfferPage.class.getName(), Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.title")); //$NON-NLS-1$
setDescription(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.description")); //$NON-NLS-1$
this.orderID = orderID;
}
@Override
public Control createPageContents(Composite parent)
{
XComposite page = new XComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
createOfferRadio = new Button(page, SWT.RADIO);
createOfferRadio.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.createOfferRadio.text")); //$NON-NLS-1$
createOfferRadio.setSelection(true);
selectOfferRadio = new Button(page, SWT.RADIO);
selectOfferRadio.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.selectOfferRadio.text")); //$NON-NLS-1$
selectOfferRadio.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
offerTable.setEnabled(selectOfferRadio.getSelection());
((DynamicPathWizard)getWizard()).updateDialog();
}
});
offerTable = new AbstractTableComposite<Offer>(page, SWT.NONE, true, page.getBorderStyle() | SWT.FULL_SELECTION | SWT.SINGLE) {
@Override
protected void createTableColumns(TableViewer tableViewer, Table table)
{
new TableColumn(table, SWT.RIGHT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.offerIDTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.createDateTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.createUserTableColumn.text")); //$NON-NLS-1$
table.setLayout(new WeightedTableLayout(new int[] {33, 33, 33}));
}
@Override
protected void setTableProvider(TableViewer tableViewer)
{
tableViewer.setContentProvider(new TableContentProvider());
tableViewer.setLabelProvider(new TableLabelProvider() {
public String getColumnText(Object element, int columnIndex)
{
if (element instanceof String) {
if (columnIndex == 0)
return (String)element;
else
return ""; //$NON-NLS-1$
}
Offer offer = (Offer) element;
switch (columnIndex) {
case 0:
return offer.getOfferIDPrefix() + '/' + ObjectIDUtil.longObjectIDFieldToString(offer.getOfferID());
case 1:
return DateFormatter.formatDateShortTimeHMS(offer.getCreateDT(), true);
case 2:
return offer.getCreateUser().getName() + " (" + offer.getCreateUser().getCompleteUserID() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
default:
return ""; //$NON-NLS-1$
}
}
});
}
};
offerTable.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event)
{
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
if (sel.isEmpty())
selectedOffer = null;
else {
Object selectedObject = sel.getFirstElement();
if (selectedObject instanceof Offer)
selectedOffer = (Offer) selectedObject;
else
selectedOffer = null;
}
((DynamicPathWizard)getWizard()).updateDialog();
}
});
offers.add(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.loadOffersPseudoEntry")); //$NON-NLS-1$
offerTable.setInput(offers);
offerTable.setEnabled(selectOfferRadio.getSelection());
new Job(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.SelectOfferPage.loadOffersJob.name")) { //$NON-NLS-1$
@Override
public IStatus run(ProgressMonitor monitor)
{
loadDataInJob();
return Status.OK_STATUS;
}
}.schedule();
return page;
}
// protected ReverseWizard getReverseWizard()
// {
// return (ReverseWizard) getWizard();
// }
private void loadDataInJob()
{
try {
TradeManagerRemote tradeManager = JFireEjb3Factory.getRemoteBean(TradeManagerRemote.class, Login.getLogin().getInitialContextProperties());
final List<Offer> l = tradeManager.getNonFinalizedNonEndedOffers(
// getReverseWizard().getOrderID(),
orderID,
FETCH_GROUPS_OFFERS, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT);
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
offers.clear();
offers.addAll(l);
if (!offerTable.isDisposed())
offerTable.refresh();
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static final String[] FETCH_GROUPS_OFFERS = new String[] {
FetchPlan.DEFAULT,
Offer.FETCH_GROUP_CREATE_USER
};
public int getAction()
{
int action = 0;
if (createOfferRadio.getSelection())
action = ACTION_CREATE;
else if (selectOfferRadio.getSelection())
action = ACTION_SELECT;
if (action == 0)
throw new IllegalStateException("action == 0!!!"); //$NON-NLS-1$
return action;
}
public Offer getSelectedOffer()
{
return selectedOffer;
}
public OfferID getSelectedOfferID()
{
if (selectedOffer == null)
return null;
return (OfferID) JDOHelper.getObjectId(selectedOffer);
}
@Override
public boolean isPageComplete()
{
return ACTION_CREATE == getAction() || (ACTION_SELECT == getAction() && getSelectedOffer() != null);
}
}