View Javadoc

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  /**
22   * Match against a specific {@link Selection#getCriteria()}, where
23   * there are no other {@link Selection#isExplicit()} specified.
24   */
25  public class UniqueCriteriaPredicate implements Predicate
26  {
27      private final String criteria;
28  
29      public UniqueCriteriaPredicate(String criteria)
30      {
31          this.criteria = criteria;
32      }
33  
34      @Override
35      public boolean match(Node<?> node)
36      {
37          if (node.getSelections().isEmpty())
38          {
39              // Empty selection list (no uniqueness to it)
40              return false;
41          }
42          
43          // Assume no match
44          boolean ret = false;
45          
46          for (Selection selection : node.getSelections())
47          {
48              if (criteria.equalsIgnoreCase(selection.getCriteria()))
49              {
50                  // Found a match
51                  ret = true;
52                  continue; // this criteria is always valid.
53              }
54              else if (selection.isExplicit())
55              {
56                  // Automatic failure
57                  return false;
58              }
59          }
60  
61          return ret;
62      }
63  }