| /******************************************************************************** |
| * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation |
| * |
| * See the NOTICE file(s) distributed with this work for additional |
| * information regarding copyright ownership. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.mdm.api.base.query; |
| |
| import java.util.Objects; |
| |
| /** |
| * Filter item contains either a {@link Condition} or an |
| * {@link BooleanOperator}. |
| * |
| * @since 1.0.0 |
| * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH |
| * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH |
| */ |
| public final class FilterItem { |
| |
| // ====================================================================== |
| // Class variables |
| // ====================================================================== |
| |
| /** |
| * Contains the {@link BooleanOperator#AND}. |
| */ |
| static final FilterItem AND = new FilterItem(BooleanOperator.AND); |
| |
| /** |
| * Contains the {@link BooleanOperator#OR}. |
| */ |
| static final FilterItem OR = new FilterItem(BooleanOperator.OR); |
| |
| /** |
| * Contains the {@link BooleanOperator#NOT}. |
| */ |
| static final FilterItem NOT = new FilterItem(BooleanOperator.NOT); |
| |
| /** |
| * Contains the {@link BooleanOperator#OPEN}. |
| */ |
| static final FilterItem OPEN = new FilterItem(BracketOperator.OPEN); |
| |
| /** |
| * Contains the {@link BooleanOperator#CLOSE}. |
| */ |
| static final FilterItem CLOSE = new FilterItem(BracketOperator.CLOSE); |
| |
| // ====================================================================== |
| // Instance variables |
| // ====================================================================== |
| |
| private final Condition condition; |
| private final BooleanOperator booleanOperator; |
| private final BracketOperator bracketOperator; |
| |
| // ====================================================================== |
| // Constructors |
| // ====================================================================== |
| |
| /** |
| * Constructor. |
| * |
| * @param condition The {@link Condition}. |
| */ |
| FilterItem(Condition condition) { |
| this.condition = condition; |
| this.bracketOperator = null; |
| this.booleanOperator = null; |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param booleanOperator The {@link BooleanOperator}. |
| */ |
| private FilterItem(BooleanOperator booleanOperator) { |
| this.condition = null; |
| this.bracketOperator = null; |
| this.booleanOperator = booleanOperator; |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param bracketoperator The {@link BracketOperator}. |
| */ |
| private FilterItem(BracketOperator bracketoperator) { |
| this.condition = null; |
| this.booleanOperator = null; |
| this.bracketOperator = bracketoperator; |
| } |
| |
| // ====================================================================== |
| // Public methods |
| // ====================================================================== |
| |
| /** |
| * Checks whether an {@link BooleanOperator} is contained. |
| * |
| * @return True if an {@code BooleanOperator} is contained. |
| */ |
| public boolean isBooleanOperator() { |
| return booleanOperator != null; |
| } |
| |
| /** |
| * Returns the contained {@link BooleanOperator}. |
| * |
| * @return The {@code BooleanOperator} is returned. |
| * @throws IllegalStateException Thrown if {@code BooleanOperator} is not |
| * contained. |
| */ |
| public BooleanOperator getBooleanOperator() { |
| if (isBooleanOperator()) { |
| return booleanOperator; |
| } |
| |
| throw new IllegalStateException("Item does not contain an booleanOperator."); |
| } |
| |
| /** |
| * Checks whether an {@link Condition} is contained. |
| * |
| * @return True if an {@code Condition} is contained. |
| */ |
| public boolean isCondition() { |
| return condition != null; |
| } |
| |
| /** |
| * Returns the contained {@link Condition}. |
| * |
| * @return The {@code Condition} is returned. |
| * @throws IllegalStateException Thrown if {@code Condition} is not contained. |
| */ |
| public Condition getCondition() { |
| if (isCondition()) { |
| return condition; |
| } |
| |
| throw new IllegalStateException("Item does not contain a condition."); |
| } |
| |
| /** |
| * Checks whether an {@link BrackerOperator} is contained. |
| * |
| * @return True if an {@code BracketOperator} is contained. |
| */ |
| public boolean isBracketOperator() { |
| return bracketOperator != null; |
| } |
| |
| /** |
| * Returns the contained {@link Condition}. |
| * |
| * @return The {@code Condition} is returned. |
| * @throws IllegalStateException Thrown if {@code Condition} is not contained. |
| */ |
| public BracketOperator getBracketOperator() { |
| if (isBracketOperator()) { |
| return bracketOperator; |
| } |
| |
| throw new IllegalStateException("Item does not contain a condition."); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Object#equals(java.lang.Object) |
| */ |
| @Override |
| public boolean equals(Object other) { |
| if (other == this) { |
| return true; |
| } |
| if (!(other instanceof FilterItem)) { |
| return false; |
| } |
| |
| FilterItem filterItem = (FilterItem) other; |
| |
| return Objects.equals(this.condition, filterItem.condition) |
| && Objects.equals(this.booleanOperator, filterItem.booleanOperator) |
| && Objects.equals(this.bracketOperator, filterItem.bracketOperator); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Object#hashCode() |
| */ |
| @Override |
| public int hashCode() { |
| return Objects.hash(condition, booleanOperator, bracketOperator); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Object#toString() |
| */ |
| @Override |
| public String toString() { |
| if (isBooleanOperator()) { |
| return " " + booleanOperator.toString() + " "; |
| } else if (isBracketOperator()) { |
| return bracketOperator.toString(); |
| } else { |
| return condition.toString(); |
| } |
| } |
| |
| } |