package org.nightlabs.jfire.trade.admin.ui.gridpriceconfig; import org.eclipse.core.runtime.ListenerList; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Composite; import org.nightlabs.jfire.store.id.ProductTypeID; public abstract class AbstractCellReferenceProductTypeSelector implements CellReferenceProductTypeSelector { private Composite composite = null; private PriceConfigComposite priceConfigComposite = null; public Composite createComposite(Composite parent) { if (composite != null) throw new IllegalStateException("createComposite(...) has already been called! Have already a composite!"); //$NON-NLS-1$ composite = _createComposite(parent); // composite.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) // { // ((Composite)e.getSource()).removeDisposeListener(this); // onDispose(); // } // }); return composite; } public void setPriceConfigComposite(PriceConfigComposite priceConfigComposite) { this.priceConfigComposite = priceConfigComposite; } public PriceConfigComposite getPriceConfigComposite() { return priceConfigComposite; } public Composite getComposite() { return composite; } protected abstract Composite _createComposite(Composite parent); private ListenerList selectionChangedListeners = new ListenerList(); public void addSelectionChangedListener(ISelectionChangedListener listener) { selectionChangedListeners.add(listener); } public void removeSelectionChangedListener(ISelectionChangedListener listener) { selectionChangedListeners.remove(listener); } public ISelection getSelection() { return new StructuredSelection(getSelectedProductTypeID()); } public void setSelection(ISelection selection) { // Not yet implemented, since the wizard currently only creates new cell references - it doesn't modify existing ones, yet. throw new UnsupportedOperationException("NYI"); //$NON-NLS-1$ } protected void fireSelectionChangedEvent() { ISelection selection = getSelection(); if (selection == null) throw new IllegalStateException("getSelection() must not return null!"); //$NON-NLS-1$ // check whether the selection contains a ProductTypeID IStructuredSelection sel = (IStructuredSelection) selection; if (!sel.isEmpty() && !(sel.getFirstElement() instanceof ProductTypeID)) throw new IllegalStateException("getSelection() returned an IStructuredSelection which contains an instance of an illegal type! Expected is " + ProductTypeID.class.getName() + " but found " + (sel.getFirstElement() == null ? null : sel.getFirstElement().getClass().getName())); //$NON-NLS-1$ //$NON-NLS-2$ Object[] listeners = selectionChangedListeners.getListeners(); if (listeners.length == 0) return; SelectionChangedEvent event = new SelectionChangedEvent(this, getSelection()); for (Object l : listeners) ((ISelectionChangedListener)l).selectionChanged(event); } }