/**
*
*/
package org.nightlabs.jfire.trade.ui.reserve;
import java.lang.reflect.InvocationTargetException;
import javax.jdo.FetchPlan;
import javax.jdo.JDOHelper;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.IWizardPage;
import org.nightlabs.base.ui.wizard.DynamicPathWizardDialog;
import org.nightlabs.base.ui.wizard.IDynamicPathWizardListener;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.JFireEjb3Factory;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.person.Person;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.Offer;
import org.nightlabs.jfire.trade.Order;
import org.nightlabs.jfire.trade.TradeManagerRemote;
import org.nightlabs.jfire.trade.dao.LegalEntityDAO;
import org.nightlabs.jfire.trade.dao.OrderDAO;
import org.nightlabs.jfire.trade.id.OrderID;
import org.nightlabs.jfire.trade.ui.articlecontainer.detail.CustomerPaymentDeliveryWizard;
import org.nightlabs.jfire.transfer.id.AnchorID;
import org.nightlabs.progress.NullProgressMonitor;
/**
* @author daniel[at]nightlabs[dot]de
*
*/
public class ReservationPaymentDeliveryWizard
extends CustomerPaymentDeliveryWizard
{
/**
* @param personSearchText
* @param orderID
* @param transferMode
* @param side
*/
public ReservationPaymentDeliveryWizard(String personSearchText,
OrderID orderID, byte transferMode, Side side)
{
super(personSearchText, orderID, transferMode, side);
}
protected boolean canReserve()
{
// check for selected person
Person selectedPerson = getPersonSearchWizardPage().getSelectedPerson();
if (selectedPerson == null) {
return false;
}
// is the load additional data job still running
if (getPersonSearchWizardPage().isLoadAdditionalDataJobRunning()) {
return false;
}
// check can order be reserved => are all contained offers not finalized
Order order = OrderDAO.sharedInstance().getOrder(getOrderID(), new String[] {FetchPlan.DEFAULT, Order.FETCH_GROUP_OFFERS},
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
for (Offer offer : order.getOffers()) {
boolean finalized = offer.isFinalized();
if (finalized)
return false;
}
// check for anonymous legal entity
LegalEntity selectedLegalEntity = getPersonSearchWizardPage().getSelectedLegalEntity();
if (selectedLegalEntity != null) {
LegalEntity anonymousLegalEntity = LegalEntityDAO.sharedInstance().getAnonymousLegalEntity(new NullProgressMonitor());
AnchorID selectedID = (AnchorID) JDOHelper.getObjectId(selectedLegalEntity);
AnchorID anonymousID = (AnchorID) JDOHelper.getObjectId(anonymousLegalEntity);
if (selectedID.equals(anonymousID)) {
return false;
}
}
return true;
}
protected boolean performReservation()
{
try {
getContainer().run(false, false, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
setTransfersSuccessful(false);
LegalEntity selectedLegalEntity = getPersonSearchWizardPage().getSelectedLegalEntity();
if (selectedLegalEntity == null) {
Person selectedPerson = getPersonSearchWizardPage().getSelectedPerson();
selectedLegalEntity = createLegalEntityForPerson(selectedPerson);
}
if (selectedLegalEntity != null) {
AnchorID customerID = (AnchorID) JDOHelper.getObjectId(selectedLegalEntity);
TradeManagerRemote tm;
try {
tm = JFireEjb3Factory.getRemoteBean(TradeManagerRemote.class, Login.getLogin().getInitialContextProperties());
tm.createReservation(getOrderID(), customerID);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
setTransfersSuccessful(true);
}
});
}
catch (Exception e) {
throw new RuntimeException(e);
}
return true;
}
@Override
public void setContainer(IWizardContainer wizardContainer) {
super.setContainer(wizardContainer);
if (wizardContainer instanceof DynamicPathWizardDialog) {
DynamicPathWizardDialog dlg = (DynamicPathWizardDialog) wizardContainer;
dlg.addListener(new IDynamicPathWizardListener(){
@Override
public void pageChanged(IWizardPage currentPage) {
}
@Override
public void buttonPressed(int buttonId) {
if (buttonId == ReservationWizardDialog.RESERVATION_ID) {
performReservation();
}
}
});
}
}
protected ReservationWizardDialog getReservationWizardDialog()
{
IWizardContainer container = getContainer();
if (container instanceof ReservationWizardDialog) {
ReservationWizardDialog dlg = (ReservationWizardDialog) container;
return dlg;
}
return null;
}
}