/*****************************************************************************
* Copyright (c) 2012 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.infra.widgets.strategy;
import java.util.List;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.papyrus.infra.widgets.providers.EncapsulatedContentProvider;
public class StrategyBasedContentProvider extends EncapsulatedContentProvider {
protected TreeBrowseStrategy browseStrategy;
protected TreeBrowseStrategy revealStrategy;
protected StructuredViewer viewer;
public StrategyBasedContentProvider(TreeBrowseStrategy browseStrategy, TreeBrowseStrategy revealStrategy) {
setRevealStrategy(revealStrategy);
setBrowseStrategy(browseStrategy);
}
public void setBrowseStrategy(TreeBrowseStrategy strategy) {
if(strategy != null) {
browseStrategy = strategy;
encapsulated = browseStrategy;
}
}
public void setRevealStrategy(TreeBrowseStrategy strategy) {
if(strategy != null) {
revealStrategy = strategy;
}
}
@Override
public void dispose() {
super.dispose();
browseStrategy = null;
revealStrategy = null;
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
super.inputChanged(viewer, oldInput, newInput);
if(viewer instanceof StructuredViewer) {
this.viewer = (StructuredViewer)viewer;
} else {
this.viewer = null;
}
revealStrategy.inputChanged(viewer, oldInput, newInput);
browseStrategy.inputChanged(viewer, oldInput, newInput);
}
/**
* {@inheritDoc}
*
* Reveals and selects the given semantic elements
*/
@Override
public void revealSemanticElement(List<?> semanticElementsList) {
revealStrategy.revealSemanticElement(semanticElementsList);
// List<Object> containerElements = new LinkedList<Object>();
//
// for(Object semanticElement : semanticElementsList) {
// TreePath path = revealStrategy.findPath(semanticElement, getElements(viewer.getInput()));
// if(path.getSegmentCount() > 0) {
// viewer.reveal(path);
// containerElements.add(path.getLastSegment());
// }
// }
//
// viewer.setSelection(new StructuredSelection(containerElements));
}
@Override
public TreeBrowseStrategy getBrowseStrategy() {
return browseStrategy;
}
@Override
public TreeBrowseStrategy getRevealStrategy() {
return revealStrategy;
}
}