/** * Copyright 2011-2017 Asakusa Framework Team. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.asakusafw.testdriver.excel; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.asakusafw.testdriver.rule.DataModelCondition; /** * Kind of predicate about all set of model object. * @since 0.2.0 */ public enum TotalConditionKind { /** * Accepts iff all data matched. */ STRICT("Strict", //$NON-NLS-1$ Messages.getString("TotalConditionKind.titleStrict")), //$NON-NLS-1$ /** * Accepts iff only existing expected data matched. */ SKIP_UNEXPECTED("Expect", //$NON-NLS-1$ Messages.getString("TotalConditionKind.titleExpect"), //$NON-NLS-1$ DataModelCondition.IGNORE_UNEXPECTED), /** * Accepts iff only existing actual data matched. */ SKIP_ABSENT("Actual", //$NON-NLS-1$ Messages.getString("TotalConditionKind.titleActual"), //$NON-NLS-1$ DataModelCondition.IGNORE_ABSENT), /** * Accepts iff only existing expected and actual data matched. */ INTERSECT("Intersect", //$NON-NLS-1$ Messages.getString("TotalConditionKind.titleIntersect"), //$NON-NLS-1$ DataModelCondition.IGNORE_UNEXPECTED, DataModelCondition.IGNORE_ABSENT), /** * Always accepts. */ SKIP_ALL("-", //$NON-NLS-1$ Messages.getString("TotalConditionKind.titleIgnore"), //$NON-NLS-1$ DataModelCondition.IGNORE_UNEXPECTED, DataModelCondition.IGNORE_ABSENT, DataModelCondition.IGNORE_MATCHED), ; private final String symbol; private final String title; private final Set<DataModelCondition> predicates; private final String text; TotalConditionKind(String symbol, String title, DataModelCondition... conditions) { assert symbol != null; assert title != null; assert conditions != null; this.symbol = symbol; this.title = title; this.predicates = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(conditions))); this.text = Util.buildText(symbol, title); } /** * Returns a title of this kind. * @return the title */ public String getTitle() { return title; } /** * Returns predicates corresponded to this. * @return the predicates */ public Set<DataModelCondition> getPredicates() { return predicates; } /** * Retutns a constant of this enum from the corresponded textual representation. * @param text a textual representation * @return the corresponding constant, or {@code null} if does not exist * @throws IllegalArgumentException if some parameters were {@code null} */ public static TotalConditionKind fromOption(String text) { if (text == null) { throw new IllegalArgumentException("text must not be null"); //$NON-NLS-1$ } String symbol = Util.extractSymbol(text); for (TotalConditionKind kind : values()) { if (kind.symbol.equalsIgnoreCase(symbol)) { return kind; } } return null; } /** * Returns options as text. * @return the option * @throws IllegalArgumentException if some parameters were {@code null} */ public static String[] getOptions() { TotalConditionKind[] values = values(); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { options[i] = values[i].text; } return options; } }