/******************************************************************************* * Copyright (c) 2014 Formal Mind GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Ingo Weigelt - initial API and implementation ******************************************************************************/ package org.eclipse.rmf.reqif10.search.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.math.BigInteger; import java.util.GregorianCalendar; import java.util.LinkedList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.rmf.reqif10.AttributeDefinition; import org.eclipse.rmf.reqif10.AttributeDefinitionDate; import org.eclipse.rmf.reqif10.AttributeDefinitionInteger; import org.eclipse.rmf.reqif10.AttributeDefinitionString; import org.eclipse.rmf.reqif10.AttributeValue; import org.eclipse.rmf.reqif10.ReqIF; import org.eclipse.rmf.reqif10.SpecObject; import org.eclipse.rmf.reqif10.common.util.ReqIF10Util; import org.eclipse.rmf.reqif10.pror.testframework.AbstractItemProviderTest; import org.eclipse.rmf.reqif10.search.filter.DateFilter; import org.eclipse.rmf.reqif10.search.filter.IFilter; import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator; import org.eclipse.rmf.reqif10.search.filter.NumberFilter; import org.eclipse.rmf.reqif10.search.filter.SimpleCompoundFilter; import org.eclipse.rmf.reqif10.search.filter.StringFilter; import org.eclipse.rmf.reqif10.search.testdata.TestData; import org.junit.Test; public class SimpleCompoundFilterTest extends AbstractItemProviderTest { @Test public void testName() throws Exception { URI uri = TestData.getURI("testMultipleAttributes.reqif"); final Resource resource = editingDomain.getResourceSet().getResource(uri, true); final ReqIF reqif = (ReqIF) resource.getContents().get(0); SpecObject so = reqif.getCoreContent().getSpecObjects().get(0); AttributeDefinitionString adString = null; AttributeDefinitionDate adDate = null; AttributeDefinitionInteger adInteger = null; for (AttributeValue attributeValue : so.getValues()) { AttributeDefinition attributeDefinition = ReqIF10Util.getAttributeDefinition(attributeValue); System.out.println(attributeDefinition.getClass()); if (attributeDefinition instanceof AttributeDefinitionString) { adString = (AttributeDefinitionString) attributeDefinition; } if (attributeDefinition instanceof AttributeDefinitionInteger) { adInteger = (AttributeDefinitionInteger) attributeDefinition; } if (attributeDefinition instanceof AttributeDefinitionDate) { adDate = (AttributeDefinitionDate) attributeDefinition; } } LinkedList<IFilter> filters = new LinkedList<IFilter>(); filters.add(new DateFilter(Operator.AFTER, new GregorianCalendar(2014, 1, 1), null, adDate)); // matches filters.add(new NumberFilter(Operator.GREATER, new BigInteger("100"), null, adInteger)); // does not match filters.add(new StringFilter(Operator.CONTAINS, "c", adString, false)); // matches SimpleCompoundFilter orFilter = new SimpleCompoundFilter(filters, true); for (SpecObject specObject : reqif.getCoreContent().getSpecObjects()) { assertTrue(orFilter.match(specObject)); } SimpleCompoundFilter andFilter = new SimpleCompoundFilter(filters, false); for (SpecObject specObject : reqif.getCoreContent().getSpecObjects()) { assertFalse(andFilter.match(specObject)); } filters = new LinkedList<IFilter>(); filters.add(new DateFilter(Operator.AFTER, new GregorianCalendar(2014, 1, 1), null, adDate)); // matches filters.add(new StringFilter(Operator.CONTAINS, "c", adString, false)); // matches andFilter = new SimpleCompoundFilter(filters, false); for (SpecObject specObject : reqif.getCoreContent().getSpecObjects()) { assertTrue(andFilter.match(specObject)); } } }