package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse;
import java.util.Collection;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.nightlabs.base.ui.composite.TimerText;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.jfire.store.id.ProductID;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* @author Daniel Mazurek - daniel [at] nightlabs [dot] de
*
*/
public class ReverseProductComposite
extends XComposite
{
private Button reverseAllButton;
private Button reverseArticleButton;
// private Button reversePaymentAndDeliveryButton;
// private Button releaseArticlesButton;
private boolean reverseAll;
private boolean reverseArticle;
// private boolean reversePaymentAndDelivery;
// private boolean releaseArticles;
private TimerText productIDText;
private String text;
private ListenerList listeners;
/**
* @param parent
* @param style
*/
public ReverseProductComposite(Composite parent, int style)
{
super(parent, style);
listeners = new ListenerList();
XComposite wrapper = new XComposite(parent, SWT.NONE);
Composite searchWrapper = new XComposite(wrapper, SWT.NONE);
searchWrapper.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label label = new Label(searchWrapper, SWT.NONE);
label.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.ReverseProductComposite.label")); //$NON-NLS-1$
productIDText = new TimerText(searchWrapper, wrapper.getBorderStyle());
productIDText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
productIDText.setFocus();
productIDText.addModifyListener(new ModifyListener(){
@Override
public void modifyText(ModifyEvent e) {
text = productIDText.getText();
}
});
Composite chooseComposite = new XComposite(wrapper, SWT.NONE);
reverseAllButton = new Button(chooseComposite, SWT.RADIO);
reverseAllButton.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.ReverseProductComposite.button.reverseAll.text")); //$NON-NLS-1$
reverseAllButton.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent e) {
reverseAll = true;
reverseArticle = false;
fireReverseProductEvent();
}
});
reverseArticleButton = new Button(chooseComposite, SWT.RADIO);
reverseArticleButton.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.ReverseProductComposite.button.reverseOnlyArticle.text")); //$NON-NLS-1$
reverseArticleButton.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent e) {
reverseAll = false;
reverseArticle = true;
fireReverseProductEvent();
}
});
// reversePaymentAndDeliveryButton = new Button(chooseComposite, SWT.CHECK);
// reversePaymentAndDeliveryButton.setText("Reverse Payment And Delivery");
// reversePaymentAndDeliveryButton.addSelectionListener(new SelectionAdapter(){
// @Override
// public void widgetSelected(SelectionEvent e) {
// reversePaymentAndDelivery = reversePaymentAndDeliveryButton.getSelection();
// releaseArticlesButton.setEnabled(reversePaymentAndDelivery);
// if (!reversePaymentAndDelivery) {
// releaseArticlesButton.setSelection(false);
// }
// fireReverseProductEvent();
// }
// });
//
// releaseArticlesButton = new Button(chooseComposite, SWT.CHECK);
// releaseArticlesButton.setText("Release Articles");
// releaseArticlesButton.addSelectionListener(new SelectionAdapter(){
// @Override
// public void widgetSelected(SelectionEvent e) {
// releaseArticles = releaseArticlesButton.getSelection();
// fireReverseProductEvent();
// }
// });
reverseAllButton.setSelection(true);
reverseArticleButton.setSelection(false);
// reversePaymentAndDeliveryButton.setSelection(true);
reverseAll = reverseAllButton.getSelection();
reverseArticle = reverseArticleButton.getSelection();
// releaseArticles = releaseArticlesButton.getSelection();
// reversePaymentAndDelivery = reversePaymentAndDeliveryButton.getSelection();
}
public boolean isReverseAll() {
return reverseAll;
}
public boolean isReverseArticle() {
return reverseArticle;
}
// public boolean isReleaseArticles() {
// return releaseArticles;
// }
//
// public boolean isReversePaymentAndDelivery() {
// return reversePaymentAndDelivery;
// }
public ProductID getProductID(ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.ReverseProductComposite.job.name"), 100); //$NON-NLS-1$
try {
Collection<IProductIDParser> parsers = ProductIDParserRegistry.sharedInstance().getProductIDParser();
for (IProductIDParser parser : parsers) {
ProductID productID = parser.getProductID(text, new SubProgressMonitor(monitor, 100 / parsers.size()));
if (productID != null) {
return productID;
}
}
return null;
} finally {
monitor.done();
}
}
public TimerText getProductIDText() {
return productIDText;
}
public void addReverseProductListener(IReverseProductListener listener) {
listeners.add(listener);
}
public void removeReverseProductListener(IReverseProductListener listener) {
listeners.remove(listener);
}
private void fireReverseProductEvent()
{
ReverseProductEvent event = new ReverseProductEvent(reverseAll, reverseArticle,
// reversePaymentAndDelivery, releaseArticles);
false, false);
for (Object o : listeners.getListeners()) {
((IReverseProductListener) o).reverseProductChanged(event);
}
}
}