PasteBeanLinkEnabledChecker( final ILinkCreatorService linkCreatorService, final IProvider<Collection<ILinkCreation>> linkProvider, final IBeanSelectionProvider<SOURCE_BEAN_TYPE> source, final IBeanListModel<LINKABLE_BEAN_TYPE> linkedModel, final Object expectedBeanTypeId, final Class<?> expectedBeanType, final boolean serviceBasedEnabledChecking) { Assert.paramNotNull(linkCreatorService, "linkCreatorService"); Assert.paramNotNull(linkProvider, "linkProvider"); Assert.paramNotNull(source, "source"); Assert.paramNotNull(expectedBeanTypeId, "expectedBeanTypeId"); Assert.paramNotNull(expectedBeanType, "expectedBeanType"); this.linkCreatorService = linkCreatorService; this.linkProvider = linkProvider; this.source = source; this.linkedModel = linkedModel; this.serviceBasedEnabledChecking = serviceBasedEnabledChecking; this.disposed = false; this.conditionsChanged = true; this.sourceListener = new IBeanSelectionListener<SOURCE_BEAN_TYPE>() { @Override public void selectionChanged(final IBeanSelectionEvent<SOURCE_BEAN_TYPE> selectionEvent) { onConditionsChanged(); } }; source.addBeanSelectionListener(sourceListener); this.linkedModelListener = new BeanListModelListenerAdapter<LINKABLE_BEAN_TYPE>() { @Override public void beansChanged() { onConditionsChanged(); } }; if (linkedModel != null) { linkedModel.addBeanListModelListener(linkedModelListener); } this.clipboardEnabledChecker = new ClipboardSelectionEnabledChecker(expectedBeanTypeId, expectedBeanType); clipboardEnabledChecker.addChangeListener( new IChangeListener() { @Override public void changed() { onConditionsChanged(); } }); }
@Override public void dispose() { disposed = true; if (executionTask != null && !executionTask.isCanceled()) { executionTask.cancel(); } clipboardEnabledChecker.dispose(); source.removeBeanSelectionListener(sourceListener); if (linkedModel != null) { linkedModel.removeBeanListModelListener(linkedModelListener); } super.dispose(); }