package org.openbel.framework.test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; import static org.openbel.framework.common.util.TestUtilities.randomElement; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openbel.framework.api.AnnotationFilterCriteria; import org.openbel.framework.api.Kam.KamEdge; import org.openbel.framework.api.internal.KAMCatalogDao.AnnotationFilter; import org.openbel.framework.api.internal.KAMStoreDaoImpl.Annotation; import org.openbel.framework.api.internal.KAMStoreDaoImpl.BelStatement; import org.openbel.framework.api.KAMStoreException; import org.openbel.framework.common.InvalidArgument; /** * Test filtering of statements by annotation on the KAM Edge. The test * assumes that the {@link Constants#SMALL_CORPUS_KAM_NAME} is present in the * KAM store. * * <p> * The {@link KamEdge edge} to be tested is retrieved at random. * </p> * * @author Anthony Bargnesi <abargnesi@selventa.com> */ public class AnnotationFilterIT extends KAMStoreTest { private KamEdge edge; private Annotation ann1; private Annotation ann2; @Before public void setup() throws KAMStoreException { setupKamStore(Constants.SMALL_CORPUS_KAM_NAME); // find first edge with two statements having at least one annotation final Collection<KamEdge> edges = testKam.getEdges(); List<BelStatement> bs = new ArrayList<BelStatement>(); boolean hasAnnotations = false; while (!hasAnnotations) { edge = randomElement(edges); bs = ks.getSupportingEvidence(edge); if (bs.size() == 1) { hasAnnotations = bs.get(0).getAnnotationList().size() >= 2; } } ann1 = bs.get(0).getAnnotationList().get(0); ann2 = bs.get(0).getAnnotationList().get(1); } @After public void teardown() { teardownKamStore(); } @Test public void includeOnlyFilter() { AnnotationFilter filter = testKam.getKamInfo().createAnnotationFilter(); AnnotationFilterCriteria criteria = new AnnotationFilterCriteria( ann1.getAnnotationType()); criteria.setInclude(true); criteria.getValues().add(ann1.getValue()); filter.add(criteria); List<BelStatement> filteredStmts = null; try { filteredStmts = ks.getSupportingEvidence(edge, filter); } catch (InvalidArgument e) { e.printStackTrace(); } catch (KAMStoreException e) { e.printStackTrace(); } assertThat(filteredStmts, is(notNullValue())); if (filteredStmts != null) { assertThat(filteredStmts.size(), is(1)); } } @Test public void excludeOnlyFilter() { AnnotationFilter filter = testKam.getKamInfo().createAnnotationFilter(); AnnotationFilterCriteria criteria = new AnnotationFilterCriteria( ann2.getAnnotationType()); criteria.setInclude(false); criteria.getValues().add(ann2.getValue()); filter.add(criteria); List<BelStatement> filteredStmts = null; try { filteredStmts = ks.getSupportingEvidence(edge, filter); } catch (InvalidArgument e) { e.printStackTrace(); } catch (KAMStoreException e) { e.printStackTrace(); } assertThat(filteredStmts, is(notNullValue())); if (filteredStmts != null) { assertThat(filteredStmts.size(), is(0)); } } @Test public void includeExcludeFilter() { AnnotationFilter filter = testKam.getKamInfo().createAnnotationFilter(); AnnotationFilterCriteria criteria1 = new AnnotationFilterCriteria(ann1.getAnnotationType()); criteria1.setInclude(true); criteria1.getValues().add(ann1.getValue()); filter.add(criteria1); AnnotationFilterCriteria criteria2 = new AnnotationFilterCriteria(ann2.getAnnotationType()); criteria2.setInclude(false); criteria2.getValues().add(ann2.getValue()); filter.add(criteria2); List<BelStatement> filteredStmts = null; try { filteredStmts = ks.getSupportingEvidence(edge, filter); } catch (InvalidArgument e) { e.printStackTrace(); } catch (KAMStoreException e) { e.printStackTrace(); } assertThat(filteredStmts, is(notNullValue())); if (filteredStmts != null) { assertThat(filteredStmts.size(), is(0)); } } }