/* * Copyright 2015-present Facebook, Inc. * * 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.facebook.buck.rules.coercer; import com.facebook.buck.model.BuildTargetPattern; import com.facebook.buck.model.Pair; import com.facebook.buck.parser.BuildTargetPatternParser; import com.facebook.buck.rules.CellPathResolver; import com.facebook.buck.versions.TargetNodeTranslator; import com.facebook.buck.versions.TargetTranslatable; import com.google.common.collect.ImmutableList; import java.util.Optional; import java.util.regex.Pattern; public class PatternMatchedCollection<T> implements TargetTranslatable<PatternMatchedCollection<T>> { private final ImmutableList<Pair<Pattern, T>> values; private PatternMatchedCollection(ImmutableList<Pair<Pattern, T>> values) { this.values = values; } public ImmutableList<T> getMatchingValues(String string) { ImmutableList.Builder<T> matchingValues = ImmutableList.builder(); for (Pair<Pattern, T> pair : values) { if (pair.getFirst().matcher(string).find()) { matchingValues.add(pair.getSecond()); } } return matchingValues.build(); } public ImmutableList<Pair<Pattern, T>> getPatternsAndValues() { return values; } public ImmutableList<T> getValues() { ImmutableList.Builder<T> vals = ImmutableList.builder(); for (Pair<Pattern, T> value : values) { vals.add(value.getSecond()); } return vals.build(); } @Override public Optional<PatternMatchedCollection<T>> translateTargets( CellPathResolver cellPathResolver, BuildTargetPatternParser<BuildTargetPattern> pattern, TargetNodeTranslator translator) { Optional<ImmutableList<Pair<Pattern, T>>> translatedValues = translator.translate(cellPathResolver, pattern, values); return translatedValues.isPresent() ? Optional.of(new PatternMatchedCollection<>(translatedValues.get())) : Optional.empty(); } public static <T> PatternMatchedCollection<T> of() { return new PatternMatchedCollection<>(ImmutableList.<Pair<Pattern, T>>of()); } public static <T> Builder<T> builder() { return new Builder<>(); } public static final class Builder<T> { private final ImmutableList.Builder<Pair<Pattern, T>> builder = ImmutableList.builder(); public Builder<T> add(Pattern platformSelector, T value) { builder.add(new Pair<>(platformSelector, value)); return this; } public PatternMatchedCollection<T> build() { return new PatternMatchedCollection<>(builder.build()); } } }