/** * Get all children matching the specified query. * * @param patterns * The query to use for finding relevant child nodes * @return All found children, or empty list if none found. */ public List<Node> get(final Pattern... patterns) { return AbsoluteGetQuery.INSTANCE.execute(this, includeRootPatternFirst(patterns)); }
/** * {@inheritDoc} * * @see org.jboss.shrinkwrap.descriptor.spi.node.Query#execute(org.jboss.shrinkwrap.descriptor.spi.node.Node, * org.jboss.shrinkwrap.descriptor.spi.node.Pattern[]) */ @Override public List<Node> execute(final Node node, final Pattern... patterns) throws IllegalArgumentException { // Precondition checks QueryUtil.validateNodeAndPatterns(node, patterns); // Delegate to recursive handler, starting at the top return findMatch(node, Arrays.asList(patterns)); }
/** * Get all children matching the specified query. * * @param patterns * The query to use for finding relevant child nodes * @return All found children, or empty list if none found. */ public List<Node> get(final Pattern... patterns) { return AbsoluteGetQuery.INSTANCE.execute(this, includeRootPatternFirst(patterns)); }
/** * {@inheritDoc} * * @see org.jboss.shrinkwrap.descriptor.spi.node.Query#execute(org.jboss.shrinkwrap.descriptor.spi.node.Node, * org.jboss.shrinkwrap.descriptor.spi.node.Pattern[]) */ @Override public List<Node> execute(final Node node, final Pattern... patterns) throws IllegalArgumentException { // Precondition checks QueryUtil.validateNodeAndPatterns(node, patterns); // Delegate to recursive handler, starting at the top return findMatch(node, Arrays.asList(patterns)); }
/** * {@inheritDoc} * * @see org.jboss.shrinkwrap.descriptor.spi.node.Query#execute(org.jboss.shrinkwrap.descriptor.spi.node.Node, * org.jboss.shrinkwrap.descriptor.spi.node.Pattern[]) */ @Override public Node execute(final Node node, final Pattern... patterns) { // Precondition checks QueryUtil.validateNodeAndPatterns(node, patterns); final List<Node> nodes = AbsoluteGetQuery.INSTANCE.execute(node, patterns); if (nodes == null || nodes.isEmpty()) { return null; } if (nodes.size() > 1) { throw new IllegalArgumentException("Multiple nodes matching expression found"); } return nodes.get(0); }
protected List<Node> findMatch(Node start, List<Pattern> patterns) { // Get the next pattern in sequence final Pattern pattern = patterns.get(0); if (!pattern.matches(start)) { return Collections.emptyList(); } // Hold the matched Nodes final List<Node> matchedNodes = new ArrayList<Node>(); if (patterns.size() == 1) { matchedNodes.add(start); return matchedNodes; } for (final Node child : start.getChildren()) { // Only use patterns that haven't already matched final List<Pattern> remainingPatterns = patterns.subList(1, patterns.size()); // Recursion point matchedNodes.addAll(findMatch(child, remainingPatterns)); } return matchedNodes; }
/** * {@inheritDoc} * * @see org.jboss.shrinkwrap.descriptor.spi.node.Query#execute(org.jboss.shrinkwrap.descriptor.spi.node.Node, * org.jboss.shrinkwrap.descriptor.spi.node.Pattern[]) */ @Override public Node execute(final Node node, final Pattern... patterns) { // Precondition checks QueryUtil.validateNodeAndPatterns(node, patterns); final List<Node> nodes = AbsoluteGetQuery.INSTANCE.execute(node, patterns); if (nodes == null || nodes.isEmpty()) { return null; } if (nodes.size() > 1) { throw new IllegalArgumentException("Multiple nodes matching expression found"); } return nodes.get(0); }
protected List<Node> findMatch(Node start, List<Pattern> patterns) { // Get the next pattern in sequence final Pattern pattern = patterns.get(0); if (!pattern.matches(start)) { return Collections.emptyList(); } // Hold the matched Nodes final List<Node> matchedNodes = new ArrayList<Node>(); if (patterns.size() == 1) { matchedNodes.add(start); return matchedNodes; } for (final Node child : start.getChildren()) { // Only use patterns that haven't already matched final List<Pattern> remainingPatterns = patterns.subList(1, patterns.size()); // Recursion point matchedNodes.addAll(findMatch(child, remainingPatterns)); } return matchedNodes; }