package org.jactr.eclipse.production.content;
/*
* default logging
*/
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.antlr.runtime.tree.CommonTree;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.zest.core.viewers.IGraphContentProvider;
import org.jactr.eclipse.production.view.ProductionSequenceView;
import org.jactr.tools.analysis.production.relationships.IRelationship;
import org.jactr.tools.analysis.production.relationships.ProductionRelationships;
public class AllContentProvider implements IGraphContentProvider
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(AllContentProvider.class);
private Map<CommonTree, ProductionRelationships> _relationships;
private ProductionSequenceView _viewer;
public AllContentProvider(ProductionSequenceView view)
{
_viewer = view;
}
public Object[] getElements(Object input)
{
Set<IRelationship> relationships = new HashSet<IRelationship>();
ArrayList<IRelationship> headsAndTails = new ArrayList<IRelationship>();
for(ProductionRelationships rels : _relationships.values())
{
headsAndTails.addAll(rels.getHeadRelationships());
headsAndTails.addAll(rels.getTailRelationships());
for (IRelationship rel : headsAndTails)
if (_viewer.isShowingAmbiguous() && rel.getScore() == 0)
relationships.add(rel);
else if (_viewer.isShowingPositive() && rel.getScore() > 0)
relationships.add(rel);
else if (_viewer.isShowingNegative() && rel.getScore() < 0)
relationships.add(rel);
headsAndTails.clear();
}
return relationships.toArray();
}
// public Object[] getElements(Object inputElement)
// {
// if (_relationships == null) return new Object[0];
//
// /*
// * return only relationships in one direction
// */
// // Collection<IRelationship> relationships = new
// ArrayList<IRelationship>();
// // for (ProductionRelationships relationship : _relationships.values())
// // for (IRelationship relation : relationship.getHeadRelationships())
// // if (relation.getScore() != 0) relationships.add(relation);
// //
// // return relationships.toArray();
// return _relationships.keySet().toArray();
// }
public void dispose()
{
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
{
_relationships = (Map<CommonTree, ProductionRelationships>) newInput;
}
// public Object[] getRelationships(Object source, Object dest)
// {
// Collection<IRelationship> relationships = new ArrayList<IRelationship>();
// ProductionRelationships relations = _relationships.get(source);
//
// if (relations != null)
// {
// for (IRelationship relation : relations.getTailRelationships())
// if (relation.getTailProduction() == dest) relationships.add(relation);
// }
//
// return relationships.toArray();
// }
public Object getDestination(Object rel)
{
return ((IRelationship) rel).getTailProduction();
}
public Object getSource(Object rel)
{
return ((IRelationship) rel).getHeadProduction();
}
}