// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.ui.dialog;
import java.util.ArrayList;
import java.util.List;
import net.sf.eclipsefp.haskell.buildwrapper.BuildWrapperPlugin;
import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescription;
import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescriptionLoader;
import net.sf.eclipsefp.haskell.core.util.ResourceUtil;
import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/** the content provider for the source folder selection dialog.
*
* @author Leif Frenzel
*/
class SourceFolderCP implements ITreeContentProvider {
@Override
public Object[] getElements( final Object inputElement ) {
return ResourceUtil.getHaskellProjects( ( IWorkspaceRoot )inputElement );
}
@Override
public Object[] getChildren( final Object parentElement ) {
List<IFolder> list = new ArrayList<>();
/*if( parentElement instanceof IHaskellProject ) {
IHaskellProject hsProject = ( IHaskellProject )parentElement;
Set<IPath> sourcePaths = hsProject.getSourcePaths();
for( IPath sourcePath: sourcePaths ) {
IProject project = hsProject.getResource();
if( !sourcePath.equals( project.getProjectRelativePath() ) ) {
list.add( project.getFolder( sourcePath ) );
}
}
}*/
if (parentElement instanceof IProject){
IProject project =(IProject)parentElement;
IFile f=BuildWrapperPlugin.getCabalFile(project );
try {
PackageDescription pd=PackageDescriptionLoader.load(f);
for (String sourcePath:pd.getStanzasBySourceDir().keySet()){
if( sourcePath.length()>0) {
list.add(project.getFolder( sourcePath ));
}
}
} catch( CoreException ex ) {
HaskellUIPlugin.log( ex );
}
}
return list.toArray();
}
@Override
public boolean hasChildren( final Object element ) {
return element instanceof IProject;
}
@Override
public Object getParent( final Object element ) {
return null;
}
@Override
public void dispose() {
// unused
}
@Override
public void inputChanged( final Viewer viewer,
final Object oldInput,
final Object newInput ) {
// unused
}
}