package net.bioclipse.specmol.ui.views;
import java.util.HashMap;
import java.util.Map;
import net.bioclipse.core.util.LogUtils;
import net.bioclipse.specmol.Activator;
import net.bioclipse.specmol.domain.IJumboSpecmol;
import nu.xom.Elements;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.xmlcml.cml.base.CMLElement;
import org.xmlcml.cml.element.CMLCml;
import org.xmlcml.cml.element.CMLMolecule;
import org.xmlcml.cml.element.CMLSpectrum;
public class SpecmolContentProvider implements ITreeContentProvider {
private static Map<CMLElement, IFile> parents=new HashMap<CMLElement, IFile>();
private static final Object[] NO_CHILDREN = new Object[0];
private final Logger logger = Logger.getLogger(SpecmolContentProvider.class);
public Object[] getChildren( Object parentElement ) {
if (parentElement instanceof IFile) {
//must be an assigned spectrum cml file
IFile modelFile = (IFile) parentElement;
IJumboSpecmol specmol;
try {
specmol = Activator.getDefault().getJavaSpecmolManager().loadSpecmol(modelFile);
CMLCml cmlcml= specmol.getJumboObject();
CMLMolecule mol = (CMLMolecule)cmlcml.getChildCMLElement("molecule", 0);
Elements spectra = cmlcml.getChildCMLElements( "spectrum");
CMLElement[] children =new CMLElement[spectra.size()+1];
children[0]=mol;
parents.put( children[0], modelFile );
for(int i=0;i<spectra.size();i++){
children[i+1]=(CMLElement) spectra.get( i );
if(((CMLSpectrum) spectra.get( i )).getId()==null)
((CMLSpectrum) spectra.get( i )).setId( "bcspectrum"+i );
parents.put( children[i+1], modelFile );
}
return children;
} catch ( Exception e ) {
LogUtils.handleException( e, logger );
}
return NO_CHILDREN;
}
if (parentElement instanceof CMLElement) {
return NO_CHILDREN;
}
return NO_CHILDREN;
}
public Object getParent( Object element ) {
return parents.get( element );
}
public boolean hasChildren( Object element ) {
if(element instanceof IFile)
return true;
else
return false;
}
public Object[] getElements( Object inputElement ) {
return getChildren(inputElement);
}
public void dispose() {
}
public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
}
}