1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // All rights reserved. This program and the accompanying materials 6 // are made available under the terms of the Eclipse Public License v1.0 7 // and Apache License v2.0 which accompanies this distribution. 8 // 9 // The Eclipse Public License is available at 10 // http://www.eclipse.org/legal/epl-v10.html 11 // 12 // The Apache License v2.0 is available at 13 // http://www.opensource.org/licenses/apache2.0.php 14 // 15 // You may elect to redistribute this code under either of these licenses. 16 // ======================================================================== 17 // 18 19 package org.eclipse.jetty.start.graph; 20 21 import java.util.HashSet; 22 import java.util.Set; 23 24 /** 25 * Should match against the provided set of {@link Selection#getCriteria()} values. 26 * <p> 27 * Incomplete set is considered to be no-match. 28 */ 29 public class CriteriaSetPredicate implements Predicate 30 { 31 private final Set<String> criteriaSet; 32 33 public CriteriaSetPredicate(String... criterias) 34 { 35 this.criteriaSet = new HashSet<>(); 36 37 for (String name : criterias) 38 { 39 this.criteriaSet.add(name); 40 } 41 } 42 43 @Override 44 public boolean match(Node<?> node) 45 { 46 Set<Selection> selections = node.getSelections(); 47 if (selections == null) 48 { 49 // empty sources list 50 return false; 51 } 52 53 Set<String> actualCriterias = node.getSelectedCriteriaSet(); 54 55 if (actualCriterias.size() != criteriaSet.size()) 56 { 57 // non-equal sized set 58 return false; 59 } 60 61 for (String actualCriteria : actualCriterias) 62 { 63 if (!this.criteriaSet.contains(actualCriteria)) 64 { 65 return false; 66 } 67 } 68 return true; 69 } 70 71 }