| /******************************************************************************* |
| * 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 |
| * Michael Jastram - adding SUPPORTED_OPERATIONS |
| ******************************************************************************/ |
| package org.eclipse.rmf.reqif10.search.filter; |
| |
| import org.eclipse.rmf.reqif10.AttributeDefinition; |
| import org.eclipse.rmf.reqif10.AttributeDefinitionString; |
| import org.eclipse.rmf.reqif10.AttributeValueString; |
| import org.eclipse.rmf.reqif10.SpecElementWithAttributes; |
| import org.eclipse.rmf.reqif10.common.util.ReqIF10Util; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.collect.Sets; |
| |
| /** |
| * Filter for String-based values. |
| */ |
| public class StringFilter extends AbstractTextFilter { |
| |
| // TODO cross-check this with supported operators. |
| public static final ImmutableSet<Operator> SUPPORTED_OPERATORS = Sets |
| .immutableEnumSet(Operator.EQUALS, Operator.NOT_EQUALS, |
| Operator.CONTAINS, Operator.NOT_CONTAINS, Operator.REGEXP, Operator.IS_SET, Operator.IS_NOT_SET); |
| |
| /** |
| * Constructor used to create a filter for an |
| * {@link AttributeDefinitionString} |
| * |
| * @param operator |
| * the filter operator to use |
| * @param value |
| * the value to match |
| * @param attributeDefinition |
| * the attributeDefinition that defines the value of a SpecObject |
| * that should be matched |
| * @param caseSensitive |
| */ |
| public StringFilter(Operator operator, String value, |
| AttributeDefinitionString attributeDefinition, boolean caseSensitive) { |
| super(operator, value, null, (AttributeDefinition) attributeDefinition, |
| caseSensitive); |
| } |
| |
| /** |
| * Constructor used to create a filter for an {@link InternalAttribute} |
| * |
| * @param operator |
| * the filter operator to use |
| * @param value |
| * the value to match |
| * @param attributeDefinition |
| * the attributeDefinition that defines the value of a SpecObject |
| * that should be matched |
| * @param caseSensitive |
| */ |
| public StringFilter(Operator operator, String value, |
| InternalAttribute internalFeature, boolean caseSensitive) { |
| super(operator, value, internalFeature, null, caseSensitive); |
| } |
| |
| /** |
| * return the value of the Internal Attribute that is defined by |
| * internalAttribute |
| * |
| * @return |
| */ |
| protected String getInternalAttributeValue(SpecElementWithAttributes element) { |
| switch (internalAttribute) { |
| case IDENTIFIER: |
| return element.isSetIdentifier() ? element.getIdentifier() : null; |
| case DESC: |
| return element.isSetDesc() ? element.getDesc() : null; |
| case LONG_NAME: |
| return element.isSetLongName() ? element.getLongName() : null; |
| default: |
| throw new UnsupportedOperationException(); |
| } |
| } |
| |
| @Override |
| protected String getAttributeValue(SpecElementWithAttributes element) { |
| AttributeValueString attributeValue = (AttributeValueString) ReqIF10Util |
| .getAttributeValue(element, attributeDefinition); |
| if (attributeValue == null) { |
| return null; |
| } |
| |
| return attributeValue.getTheValue(); |
| } |
| |
| @Override |
| public ImmutableSet<Operator> getSupportedOperators() { |
| return SUPPORTED_OPERATORS; |
| } |
| |
| @Override |
| protected String getDefaultValue(SpecElementWithAttributes element) { |
| if (!AbstractAttributeFilter.isSetAttribute(element, attributeDefinition)){ |
| return null; |
| } |
| |
| if (attributeDefinition instanceof AttributeDefinitionString) { |
| AttributeDefinitionString ad = (AttributeDefinitionString) attributeDefinition; |
| return ad.isSetDefaultValue() ? ad.getDefaultValue().getTheValue() : null; |
| } |
| throw new IllegalStateException("Expected an AttributeDefinitionString as attribute but found " + attributeDefinition.getClass()); |
| } |
| |
| } |