package org.nightlabs.jfire.trade.ui.repository.editor;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.nightlabs.base.ui.entity.editor.EntityEditor;
import org.nightlabs.base.ui.entity.editor.EntityEditorPageController;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jdo.query.QueryCollection;
import org.nightlabs.jfire.store.ProductTransfer;
import org.nightlabs.jfire.store.dao.ProductTransferDAO;
import org.nightlabs.jfire.store.query.ProductTransferIDQuery;
import org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.jfire.transfer.id.AnchorID;
import org.nightlabs.jfire.transfer.id.TransferID;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
class ProductTransferPageController
extends EntityEditorPageController
{
private ProductTransferIDQuery productTransferQuery = new ProductTransferIDQuery();
private QueryCollection<ProductTransferIDQuery> queryWrapper =
new QueryCollection<ProductTransferIDQuery>(TransferID.class, productTransferQuery);
private List<ProductTransfer> productTransferList = null;
public ProductTransferPageController(EntityEditor editor)
{
super(editor);
productTransferQuery.setCurrentAnchorID(getCurrentRepositoryID());
queryWrapper.setToExclude(30); // load initially only the last 30 results
// TODO add listener for new transfers (needs to check, whether the new transfers match the criteria before displaying them!)
}
@Override
public void dispose()
{
// TODO remove listener for new transfers
super.dispose();
}
@Override
public void doLoad(ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.ui.repository.editor.ProductTransferPageController.loadingProductTransfersJobMonitor.task.name"), 100); //$NON-NLS-1$
List<ProductTransfer> productTransfers = ProductTransferDAO.sharedInstance().getProductTransfers(
queryWrapper,
ProductTransferTable.FETCH_GROUPS_PRODUCT_TRANSFER,
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 100));
this.productTransferList = productTransfers;
monitor.done();
setLoaded(true); // must be done before fireModifyEvent!
fireModifyEvent(null, productTransfers);
}
@Override
public boolean doSave(ProgressMonitor monitor)
{
return true;
}
/**
* This method must be called on the UI thread!
*/
public void fireProductTransferQueryChange()
{
propertyChangeSupport.firePropertyChange(PROPERTY_PRODUCT_TRANSFER_QUERY, null, queryWrapper);
Job job = new Job(Messages.getString("org.nightlabs.jfire.trade.ui.repository.editor.ProductTransferPageController.loadingProductTransfersJob.name")) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor)
{
doLoad(monitor);
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule();
}
public AnchorID getCurrentRepositoryID()
{
return ((RepositoryEditorInput)getEntityEditor().getEditorInput()).getJDOObjectID();
}
public ProductTransferIDQuery getProductTransferQuery()
{
return productTransferQuery;
}
public List<ProductTransfer> getProductTransferList()
{
return productTransferList;
}
public static final String PROPERTY_PRODUCT_TRANSFER_QUERY = "productTransferQuery"; //$NON-NLS-1$
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
/**
* Add a {@link PropertyChangeListener} which will be triggered on the UI thread. Currently,
* the only property available is {@link #PROPERTY_PRODUCT_TRANSFER_QUERY} which
* references the object returned by {@link #getQueryWrapper()}.
*
* @param listener The listener to be added.
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
/**
* @param fromInclude
* @see org.nightlabs.jdo.query.QueryCollection#setFromInclude(long)
*/
public void setFromInclude(long fromInclude)
{
queryWrapper.setFromInclude(fromInclude);
}
/**
* @param toExclude
* @see org.nightlabs.jdo.query.QueryCollection#setToExclude(long)
*/
public void setToExclude(long toExclude)
{
queryWrapper.setToExclude(toExclude);
}
/**
* @return
* @see org.nightlabs.jdo.query.QueryCollection#getFromInclude()
*/
public long getFromInclude()
{
return queryWrapper.getFromInclude();
}
/**
* @return
* @see org.nightlabs.jdo.query.QueryCollection#getToExclude()
*/
public long getToExclude()
{
return queryWrapper.getToExclude();
}
/**
* @return the queryWrapper
*/
public QueryCollection<ProductTransferIDQuery> getQueryWrapper()
{
return queryWrapper;
}
}