blob: 87f5a9a1a1f19637ba15a298cfd86c7c06ad014f [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2018 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Alberto Debiasi - initial API and implementation
******************************************************************************/
package org.polarsys.chess.paramArchConfigurator.ui.wizard;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.papyrus.infra.widgets.editors.ICommitListener;
import org.eclipse.papyrus.infra.widgets.providers.IAdaptableContentProvider;
import org.eclipse.papyrus.infra.widgets.providers.IGraphicalContentProvider;
import org.eclipse.papyrus.infra.widgets.providers.IHierarchicContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.polarsys.chess.paramArchConfigurator.ui.wizard.page.LastPage;
public class TreeSelector {
private static final Logger logger = Logger.getLogger(TreeSelector.class);
private ILabelProvider labelProvider;
private ITreeContentProvider contentProvider;
private TreeViewer treeViewer;
private Composite composite;
private Object input = null;
// the final collection of selected elements, or null if this dialog was
// canceled
private Object[] result;
LastPage lastPage;
private final Set<ICommitListener> commitListeners = new HashSet<ICommitListener>();
/**
*
* Constructor.
*
* @param lastPage
*
* @param parentShell
* The parent shell in which this dialog will be opened
*/
public TreeSelector(Composite composite, LastPage lastPage) {
this.composite = composite;
this.lastPage = lastPage;
}
/**
* Sets the label provider for this dialog
*
* @param provider
*/
public void setLabelProvider(ILabelProvider provider) {
labelProvider = provider;
if (treeViewer != null) {
treeViewer.setLabelProvider(labelProvider);
}
}
/**
* Sets the ContentProvider for this dialog The ContentProvider may be a
* {@link IHierarchicContentProvider}
*
* @param provider
* The content provider for this dialog. May be a
* {@link IHierarchicContentProvider}
*/
public void setContentProvider(ITreeContentProvider provider) {
contentProvider = provider;
if (treeViewer != null) {
initViewerAndProvider();
}
if (contentProvider instanceof ICommitListener) {
commitListeners.add((ICommitListener) contentProvider);
}
}
protected void initViewerAndProvider() {
treeViewer.setContentProvider(contentProvider);
if (treeViewer.getInput() == null) {
doSetInput();
}
}
protected Composite getDialogArea() {
return (Composite) composite;
}
public void create() {
treeViewer = new TreeViewer(getDialogArea(), SWT.BORDER);
// treeViewer.setFilters(new ViewerFilter[]{ new PatternFilter() });
if (labelProvider != null) {
treeViewer.setLabelProvider(labelProvider);
}
if (contentProvider != null) {
initViewerAndProvider();
}
treeViewer.addFilter(new PackageViewFilter());
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
Object selectedElement = null;
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
IStructuredSelection sSelection = (IStructuredSelection) selection;
selectedElement = sSelection.getFirstElement();
}
if (contentProvider instanceof IHierarchicContentProvider) {
boolean isValidValue = ((IHierarchicContentProvider) contentProvider).isValidValue(selectedElement);
if (contentProvider instanceof IAdaptableContentProvider) {
selectedElement = ((IAdaptableContentProvider) contentProvider)
.getAdaptedValue(selectedElement);
}
if(lastPage.importArchitecture()){
if (isValidValue) {
setResult(Collections.singletonList(selectedElement));
} else {
setResult(Collections.emptyList());
}
lastPage.setPageComplete(isValidValue);
}
// getOkButton().setEnabled(isValidValue);*/
}
}
});
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
/*
* if (getOkButton().isEnabled()) { okPressed(); }
*/
}
});
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumHeight = 300;
data.minimumWidth = 300;
treeViewer.getTree().setLayoutData(data);
if (contentProvider instanceof IGraphicalContentProvider) {
IGraphicalContentProvider graphicalContentProvider = (IGraphicalContentProvider) contentProvider;
Composite beforeTreeComposite = new Composite(getDialogArea(), SWT.NONE);
beforeTreeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
beforeTreeComposite.setLayout(new FillLayout());
graphicalContentProvider.createBefore(beforeTreeComposite);
beforeTreeComposite.moveAbove(treeViewer.getTree());
// Composite afterTreeComposite = new Composite(getDialogArea(),
// SWT.NONE);
// afterTreeComposite.setLayout(new FillLayout());
// afterTreeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
// true, false));
// graphicalContentProvider.createAfter(afterTreeComposite);
}
/*
* List<?> initialSelection = new ArrayList<String>(); if
* (contentProvider instanceof IRevealSemanticElement) {
* ((IRevealSemanticElement)
* contentProvider).revealSemanticElement(initialSelection); } else if
* (!initialSelection.isEmpty()) { // even if the encapsulated provider
* is not a IRevealSemanticElement treeViewer.setSelection(new
* StructuredSelection(initialSelection.get(0)), true); }
*/
}
/**
* Get the TreeViewer used by this dialog
*
* @return The TreeViewer associated to this dialog
*/
protected TreeViewer getViewer() {
return treeViewer;
}
/**
* Sets the input object for this dialog's TreeViewer
*
* @param input
*/
public void setInput(Object input) {
this.input = input;
}
private void doSetInput() {
if (input == null) {
// Default non-null input for IStaticContentProvider
// (input-independent)
treeViewer.setInput(""); //$NON-NLS-1$
} else {
treeViewer.setInput(input);
}
}
protected void setResult(List<Object> newResult) {
if (newResult == null) {
result = null;
} else {
result = new Object[newResult.size()];
newResult.toArray(result);
}
}
public Object[] getResult() {
return result;
}
}