package org.bundlemaker.core.ui.event.selection.workbench.editor;
import org.bundlemaker.core.analysis.IAnalysisModelModifiedListener;
import org.bundlemaker.core.selection.IDependencySelection;
import org.bundlemaker.core.selection.IDependencySelectionChangedEvent;
import org.bundlemaker.core.selection.IDependencySelectionListener;
import org.bundlemaker.core.selection.Selection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public abstract class AbstractDependencySelectionAwareEditorPart extends AbstractPartLifecycleAwareEditorPart implements
IDependencySelectionListener, IAnalysisModelModifiedListener {
/** the current dependency selection */
private IDependencySelection _currentDependencySelection;
/**
* <p>
* Creates a new instance of type {@link AbstractDependencySelectionAwareEditorPart}.
* </p>
*/
public AbstractDependencySelectionAwareEditorPart() {
// init the selection
initDependencySelectionFromSelectionService();
}
/**
* {@inheritDoc}
*/
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
super.init(site, input);
//
Selection.instance().getDependencySelectionService().addDependencySelectionListener(getSelectionId(), this);
//
initDependencySelectionFromSelectionService();
}
/**
* {@inheritDoc}
*/
@Override
public void dispose() {
//
Selection.instance().getDependencySelectionService().removeDependencySelectionListener(this);
// call super
super.dispose();
}
/**
* {@inheritDoc}
*/
@Override
public final void dependencySelectionChanged(IDependencySelectionChangedEvent event) {
//
setDependencySelection(event.getSelection());
}
/**
* <p>
* </p>
*
* @return the currentDependency
*/
public IDependencySelection getCurrentDependencySelection() {
return _currentDependencySelection;
}
/**
* <p>
* </p>
*
* @param dependencySelection
* the currentDependencies to set
*/
public void setCurrentDependencies(IDependencySelection dependencySelection) {
// remove ArtifactModelChangedListener from 'old' model
unregisterArtifactModelChangedListener();
_currentDependencySelection = dependencySelection;
registerArtifactModelChangedListener();
}
/**
* <p>
* </p>
*
* @param dependencySelection
*/
protected void onSetDependencySelection(IDependencySelection dependencySelection) {
// empty body
}
/**
* <p>
* </p>
*
* @param dependencySelection
*
*/
protected final void setDependencySelection(final IDependencySelection dependencySelection) {
_currentDependencySelection = dependencySelection;
// init the dependencies
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
onSetDependencySelection(dependencySelection);
}
});
}
/**
* <p>
* </p>
*
* @return
*/
protected String getSelectionId() {
return Selection.MAIN_DEPENDENCY_SELECTION_ID;
}
/**
* <p>
* </p>
*/
private void unregisterArtifactModelChangedListener() {
if (_currentDependencySelection != null && _currentDependencySelection.hasDependencies()) {
_currentDependencySelection.getFirstDependency().getFrom().getRoot().removeAnalysisModelModifiedListener(this);
}
}
/**
* <p>
* </p>
*/
private void registerArtifactModelChangedListener() {
if (_currentDependencySelection != null && _currentDependencySelection.hasDependencies()) {
_currentDependencySelection.getFirstDependency().getFrom().getRoot().addAnalysisModelModifiedListener(this);
}
}
/**
* <p>
* </p>
*
*/
private void initDependencySelectionFromSelectionService() {
IDependencySelection dependencySelection = Selection.instance().getDependencySelectionService()
.getSelection(getSelectionId());
if (dependencySelection != null) {
setDependencySelection(dependencySelection);
}
}
}