package org.nightlabs.jfire.trade.admin.ui.tariffmapping;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.jdo.JDOHelper;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
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.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.jfire.accounting.Tariff;
import org.nightlabs.jfire.accounting.TariffMapping;
import org.nightlabs.jfire.accounting.id.TariffID;
import org.nightlabs.jfire.base.login.ui.part.LSDViewPart;
import org.nightlabs.jfire.trade.admin.ui.resource.Messages;
import org.nightlabs.jfire.trade.ui.tariff.TariffList;
public class TariffMappingView
extends LSDViewPart
{
public static final String ID_VIEW = TariffMappingView.class.getName();
private TariffList partnerTariffList;
private TariffList localTariffList;
private TariffMappingTable tariffMappingTable;
private Button createTariffMappingButton;
private Button removeTariffMappingButton;
// private Set<TariffID> partnerTariffIDs = null;
private Set<TariffID> localTariffIDsInMappingsForSelectedPartnerOrganisationID = null;
// private TariffList.TariffFilter partnerTariffFilter = new TariffList.TariffFilter() {
// public boolean includeTariff(Tariff tariff)
// {
// if (partnerTariffIDs == null) {
// Set<TariffMapping> tariffMappings = tariffMappingTable.getTariffMappings(true);
// Set<TariffID> tariffIDs = new HashSet<TariffID>(tariffMappings.size());
// for (TariffMapping tariffMapping : tariffMappings)
// tariffIDs.add((TariffID) JDOHelper.getObjectId(tariffMapping.getPartnerTariff()));
//
// partnerTariffIDs = tariffIDs;
// }
//
// return !partnerTariffIDs.contains(JDOHelper.getObjectId(tariff));
// }
// };
private TariffList.TariffFilter localTariffFilter = new TariffList.TariffFilter() {
public boolean includeTariff(Tariff tariff)
{
if (selectedPartnerTariff == null)
return false;
if (localTariffIDsInMappingsForSelectedPartnerOrganisationID == null) {
Set<TariffMapping> tariffMappings = tariffMappingTable.getTariffMappings(true);
Set<TariffID> tariffIDs = new HashSet<TariffID>(tariffMappings.size());
for (TariffMapping tariffMapping : tariffMappings) {
if (selectedPartnerTariff.getOrganisationID().equals(tariffMapping.getPartnerTariffOrganisationID()))
tariffIDs.add((TariffID) JDOHelper.getObjectId(tariffMapping.getLocalTariff()));
}
localTariffIDsInMappingsForSelectedPartnerOrganisationID = tariffIDs;
}
return !localTariffIDsInMappingsForSelectedPartnerOrganisationID.contains(JDOHelper.getObjectId(tariff));
}
};
private Tariff selectedPartnerTariff;
private Tariff selectedLocalTariff;
public void createPartContents(Composite parent)
{
XComposite page = new XComposite(parent, SWT.NONE);
SashForm sfMainVert = new SashForm(page, SWT.VERTICAL);
sfMainVert.setLayoutData(new GridData(GridData.FILL_BOTH));
SashForm sfTopHoriz = new SashForm(sfMainVert, SWT.HORIZONTAL);
partnerTariffList = new TariffList(sfTopHoriz, SWT.NONE, false, null); // partnerTariffFilter);
partnerTariffList.setOrganisationVisible(true);
partnerTariffList.setFilterOrganisationIDInverse(true);
partnerTariffList.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event)
{
selectedPartnerTariff = partnerTariffList.getSelectedTariff();
localTariffIDsInMappingsForSelectedPartnerOrganisationID = null; // we must nullify it, when the partner-organisationID changes, but currently, we nullify on every change - I'm too lazy ;-)
localTariffList.loadTariffs(null);
createTariffMappingButton.setEnabled(selectedPartnerTariff != null && selectedLocalTariff != null);
}
});
localTariffList = new TariffList(sfTopHoriz, SWT.NONE, false, localTariffFilter);
localTariffList.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event)
{
selectedLocalTariff = localTariffList.getSelectedTariff();
createTariffMappingButton.setEnabled(selectedPartnerTariff != null && selectedLocalTariff != null);
}
});
sfTopHoriz.setWeights(new int[] {50, 50});
XComposite bottom = new XComposite(sfMainVert, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
bottom.getGridLayout().numColumns = 2;
tariffMappingTable = new TariffMappingTable(bottom, SWT.NONE);
tariffMappingTable.loadTariffMappings();
tariffMappingTable.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event)
{
boolean enabled = !tariffMappingTable.getSelectedElements().isEmpty();
for (Iterator<?> it = tariffMappingTable.getSelectedElements().iterator(); it.hasNext(); ) {
TariffMapping tm = (TariffMapping) it.next();
if (JDOHelper.getObjectId(tm) != null)
enabled = false;
}
removeTariffMappingButton.setEnabled(enabled);
}
});
XComposite btnComp = new XComposite(bottom, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
btnComp.getGridData().grabExcessHorizontalSpace = false;
btnComp.getGridData().horizontalAlignment = GridData.BEGINNING;
createTariffMappingButton = new Button(btnComp, SWT.PUSH);
createTariffMappingButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createTariffMappingButton.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.tariffmapping.TariffMappingView.createTariffMappingButton.text")); //$NON-NLS-1$
createTariffMappingButton.setEnabled(false);
createTariffMappingButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
createTariffMappingButton.setEnabled(false);
createTariffMapping();
}
});
removeTariffMappingButton = new Button(btnComp, SWT.PUSH);
removeTariffMappingButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
removeTariffMappingButton.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.tariffmapping.TariffMappingView.removeTariffMappingButton.text")); //$NON-NLS-1$
removeTariffMappingButton.setEnabled(false);
removeTariffMappingButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
removeTariffMappingButton.setEnabled(false);
removeTariffMappings();
}
});
partnerTariffList.loadTariffs(null);
}
public void createTariffMapping()
{
if (selectedPartnerTariff == null || selectedLocalTariff == null)
return;
TariffMapping tm = new TariffMapping(selectedLocalTariff, selectedPartnerTariff);
tariffMappingTable.addClientOnlyTariffMapping(tm);
// partnerTariffIDs = null;
localTariffIDsInMappingsForSelectedPartnerOrganisationID = null;
partnerTariffList.loadTariffs(null);
localTariffList.loadTariffs(null);
}
public void removeTariffMappings()
{
List<TariffMapping> tariffMappingsToDelete = new ArrayList<TariffMapping>();
for (Iterator<?> it = tariffMappingTable.getSelectedElements().iterator(); it.hasNext();) {
TariffMapping tm = (TariffMapping) it.next();
if (JDOHelper.getObjectId(tm) == null)
tariffMappingsToDelete.add(tm);
}
if (tariffMappingsToDelete.isEmpty())
return;
tariffMappingTable.removeClientOnlyTariffMappings(tariffMappingsToDelete);
// partnerTariffIDs = null;
localTariffIDsInMappingsForSelectedPartnerOrganisationID = null;
partnerTariffList.loadTariffs(null);
localTariffList.loadTariffs(null);
}
public void storeClientOnlyTariffMappingsToServer()
{
tariffMappingTable.storeClientOnlyTariffMappingsToServer();
}
@Override
public void setFocus()
{
if (tariffMappingTable != null && !tariffMappingTable.isDisposed())
tariffMappingTable.setFocus();
}
}