/*
* -----------------------------------------------------------------------
* File: $HeadURL: http://keith-laptop/svn/krs/LanguageTest/trunk/org.thanlwinsoft.languagetest/src/org/thanlwinsoft/languagetest/eclipse/wizards/ModuleContentProvider.java $
* Revision $LastChangedRevision: 1388 $
* Last Modified: $LastChangedDate: 2009-01-31 19:32:00 +0700 (Sat, 31 Jan 2009) $
* Last Change by: $LastChangedBy: keith $
* -----------------------------------------------------------------------
* Copyright (C) 2007 Keith Stribley <devel@thanlwinsoft.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
* -----------------------------------------------------------------------
*/
package org.thanlwinsoft.languagetest.eclipse.wizards;
import java.util.ArrayList;
import java.util.Vector;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.thanlwinsoft.languagetest.eclipse.LanguageTestPlugin;
import org.thanlwinsoft.languagetest.eclipse.natures.LanguageModuleNature;
import org.thanlwinsoft.languagetest.eclipse.natures.LanguageUserNature;
import org.thanlwinsoft.languagetest.language.test.TestManager;
import org.thanlwinsoft.languagetest.language.test.XmlBeansTestModule;
/**
* @author keith
*
*/
public class ModuleContentProvider implements ITreeContentProvider
{
public final static String EXTENSION = NewLangModuleWizardPage.EXTENSION;
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose()
{
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
{
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object parentElement)
{
Object [] children = null;
try
{
if (parentElement instanceof IContainer)
{
IResource[] members = ((IContainer)parentElement).members();
Vector<IResource> foldersModules = new Vector<IResource>(members.length);
for (int i = 0; i < members.length; i++)
{
String extension = members[i].getFileExtension();
if (members[i] instanceof IContainer)
{
if (members[i].getName().equals(TestManager.HISTORY_DIR))
continue;
if (((IContainer)members[i]).members().length > 0 &&
members[i].getName().startsWith(".") == false &&
(extension == null || !(extension
.equalsIgnoreCase(XmlBeansTestModule.FOLDER_EXT))))
{
foldersModules.add(members[i]);
}
}
else if (extension != null &&
extension.equalsIgnoreCase(EXTENSION) &&
members[i].getName().startsWith(".") == false)
{
foldersModules.add(members[i]);
}
}
children = foldersModules.toArray();
}
}
catch (CoreException e)
{
LanguageTestPlugin.log(IStatus.WARNING, e.getLocalizedMessage(), e);
}
return children;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object element)
{
if (element instanceof IResource)
{
return ((IResource)element).getParent();
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object element)
{
if (element instanceof IContainer)
{
try
{
IContainer c = (IContainer)element;
if (c.isAccessible() && c.members().length > 0)
return true;
}
catch (CoreException e)
{
LanguageTestPlugin.log(IStatus.WARNING,
e.getLocalizedMessage(), e);
}
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement)
{
if (inputElement instanceof Object [])
return (Object[])inputElement;
if (inputElement instanceof IContainer)
{
try
{
IResource[] members = ((IContainer)inputElement).members();
ArrayList<IResource> l = new ArrayList<IResource>(members.length);
for (int i = 0; i < members.length; i++)
{
if (members[i].isAccessible())
{
if (members[i] instanceof IProject)
{
IProject p = (IProject)members[i];
if (p.hasNature(LanguageModuleNature.ID) ||
p.hasNature(LanguageUserNature.ID))
{
l.add(p);
}
}
else l.add(members[i]);
}
}
return l.toArray();
}
catch (CoreException e)
{
LanguageTestPlugin.log(IStatus.WARNING,
e.getLocalizedMessage(), e);
}
}
return null;
}
}