/**
*
*/
package org.erlide.wrangler.refactoring.duplicatedcode.ui;
import java.util.List;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.erlide.wrangler.refactoring.duplicatedcode.DuplicatesUIManager;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.AbstractResultTreeObject;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.AbstractResultTreeParent;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.DuplicatedCodeElement;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.ResultTreeRoot;
/**
* Content provider for the duplicates view.
*
* @author Gyorgy Orosz
*
*/
public class DuplicatesViewContentProvider
implements ITreeContentProvider, IDuplicatedCodeResultDisplayer {
private final DuplicatesView duplicatedCodeView;
DuplicatesViewContentProvider(final DuplicatesView duplicatedCodeView) {
this.duplicatedCodeView = duplicatedCodeView;
DuplicatesUIManager.setDuplicatedCodeResultDisplayer(this);
}
private ResultTreeRoot invisibleRoot;
@Override
public void inputChanged(final Viewer v, final Object oldInput,
final Object newInput) {
}
@Override
public void dispose() {
}
@Override
public Object[] getElements(final Object parent) {
if (parent.equals(duplicatedCodeView.getViewSite())) {
if (invisibleRoot == null) {
initialize();
}
return getChildren(invisibleRoot);
}
return getChildren(parent);
}
@Override
public Object getParent(final Object child) {
if (child instanceof AbstractResultTreeObject) {
return ((AbstractResultTreeObject) child).getParent();
}
return null;
}
@Override
public Object[] getChildren(final Object parent) {
if (parent instanceof AbstractResultTreeParent) {
return ((AbstractResultTreeParent) parent).getChildren();
}
return new Object[0];
}
@Override
public boolean hasChildren(final Object parent) {
if (parent instanceof AbstractResultTreeParent) {
return ((AbstractResultTreeParent) parent).hasChildren();
}
return false;
}
private void initialize() {
invisibleRoot = new ResultTreeRoot();
}
/**
* Add a child to the view.
*
* @param child
* child to be added.
*/
public void addChild(final AbstractResultTreeObject child) {
invisibleRoot.addChild(child);
}
@Override
public void showResult(final List<DuplicatedCodeElement> result) {
invisibleRoot.dropChildren();
if (result != null) {
for (final DuplicatedCodeElement d : result) {
invisibleRoot.addChild(d);
}
}
duplicatedCodeView.refresh();
}
}