// Path: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java
// public static class Pattern
// {
//     private String pattern;
// 
//     private String[] parts;
// 
//     public Pattern( String pattern )
//     {
//         if ( pattern == null )
//         {
//             throw new NullPointerException( "pattern" );
//         }
// 
//         this.pattern = pattern;
// 
//         parts = pattern.split( ":", 7 );
// 
//         if ( parts.length == 7 )
//         {
//             throw new IllegalArgumentException( "Pattern contains too many delimiters." );
//         }
// 
//         for ( String part : parts )
//         {
//             if ( "".equals( part ) )
//             {
//                 throw new IllegalArgumentException( "Pattern or its part is empty." );
//             }
//         }
//     }
// 
//     public boolean match( Artifact artifact )
//         throws InvalidVersionSpecificationException
//     {
//         if ( artifact == null )
//         {
//             throw new NullPointerException( "artifact" );
//         }
// 
//         switch ( parts.length )
//         {
//             case 6:
//                 String classifier = artifact.getClassifier();
//                 if ( !matches( parts[5], classifier ) )
//                 {
//                     return false;
//                 }
//             case 5:
//                 String scope = artifact.getScope();
//                 if ( scope == null || scope.equals( "" ) )
//                 {
//                     scope = Artifact.SCOPE_COMPILE;
//                 }
// 
//                 if ( !matches( parts[4], scope ) )
//                 {
//                     return false;
//                 }
//             case 4:
//                 String type = artifact.getType();
//                 if ( type == null || type.equals( "" ) )
//                 {
//                     type = "jar";
//                 }
// 
//                 if ( !matches( parts[3], type ) )
//                 {
//                     return false;
//                 }
// 
//             case 3:
//                 if ( !matches( parts[2], artifact.getVersion() ) )
//                 {
//                     // CHECKSTYLE_OFF: LineLength
//                     if ( !AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( parts[2] ),
//                                                                    new DefaultArtifactVersion(
//                                                                                                artifact.getVersion() ) ) )
//                     // CHECKSTYLE_ON: LineLength
//                     {
//                         return false;
//                     }
//                 }
// 
//             case 2:
//                 if ( !matches( parts[1], artifact.getArtifactId() ) )
//                 {
//                     return false;
//                 }
//             case 1:
//                 return matches( parts[0], artifact.getGroupId() );
//             default:
//                 throw new AssertionError();
//         }
//     }
// 
//     private boolean matches( String expression, String input )
//     {
//         String regex =
//                 expression.replace( ".", "\\." ).replace( "*", ".*" ).replace( ":", "\\:" ).replace( '?', '.' )
//                         .replace( "[", "\\[" ).replace( "]", "\\]" ).replace( "(", "\\(" ).replace( ")", "\\)" );
// 
//         // TODO: Check if this can be done better or prevented earlier.
//         if ( input == null )
//         {
//             input = "";
//         }
// 
//         return java.util.regex.Pattern.matches( regex, input );
//     }
// 
//     @Override
//     public String toString()
//     {
//         return pattern;
//     }
// }


import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher.Pattern;
import org.apache.maven.shared.dependency.graph.DependencyNode;
                for ( Artifact artifact : dependencies )
                {
                    if ( compareDependency( resultPattern, artifact ) )
                    {
                        // only create if needed
                        if ( foundMatches == null )
                        {
                            foundMatches = new HashSet<Artifact>();
                        }
                        foundMatches.add( artifact );
                    }
                }
            }
        }
        return foundMatches;
    }

    /**
     * Compares the given pattern against the given artifact. The pattern should follow the format
     * <code>groupId:artifactId:version:type:scope:classifier</code>.
     * 
     * @param pattern The pattern to compare the artifact with.
     * @param artifact the artifact
     * @return <code>true</code> if the artifact matches one of the patterns
     * @throws EnforcerRuleException the enforcer rule exception
     */
    private static boolean compareDependency( String pattern, Artifact artifact )
        throws EnforcerRuleException
    {
    
// Path: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java
// public static class Pattern
// {
//     private String pattern;
// 
//     private String[] parts;
// 
//     public Pattern( String pattern )
//     {
//         if ( pattern == null )
//         {
//             throw new NullPointerException( "pattern" );
//         }
// 
//         this.pattern = pattern;
// 
//         parts = pattern.split( ":", 7 );
// 
//         if ( parts.length == 7 )
//         {
//             throw new IllegalArgumentException( "Pattern contains too many delimiters." );
//         }
// 
//         for ( String part : parts )
//         {
//             if ( "".equals( part ) )
//             {
//                 throw new IllegalArgumentException( "Pattern or its part is empty." );
//             }
//         }
//     }
// 
//     public boolean match( Artifact artifact )
//         throws InvalidVersionSpecificationException
//     {
//         if ( artifact == null )
//         {
//             throw new NullPointerException( "artifact" );
//         }
// 
//         switch ( parts.length )
//         {
//             case 6:
//                 String classifier = artifact.getClassifier();
//                 if ( !matches( parts[5], classifier ) )
//                 {
//                     return false;
//                 }
//             case 5:
//                 String scope = artifact.getScope();
//                 if ( scope == null || scope.equals( "" ) )
//                 {
//                     scope = Artifact.SCOPE_COMPILE;
//                 }
// 
//                 if ( !matches( parts[4], scope ) )
//                 {
//                     return false;
//                 }
//             case 4:
//                 String type = artifact.getType();
//                 if ( type == null || type.equals( "" ) )
//                 {
//                     type = "jar";
//                 }
// 
//                 if ( !matches( parts[3], type ) )
//                 {
//                     return false;
//                 }
// 
//             case 3:
//                 if ( !matches( parts[2], artifact.getVersion() ) )
//                 {
//                     // CHECKSTYLE_OFF: LineLength
//                     if ( !AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( parts[2] ),
//                                                                    new DefaultArtifactVersion(
//                                                                                                artifact.getVersion() ) ) )
//                     // CHECKSTYLE_ON: LineLength
//                     {
//                         return false;
//                     }
//                 }
// 
//             case 2:
//                 if ( !matches( parts[1], artifact.getArtifactId() ) )
//                 {
//                     return false;
//                 }
//             case 1:
//                 return matches( parts[0], artifact.getGroupId() );
//             default:
//                 throw new AssertionError();
//         }
//     }
// 
//     private boolean matches( String expression, String input )
//     {
//         String regex =
//                 expression.replace( ".", "\\." ).replace( "*", ".*" ).replace( ":", "\\:" ).replace( '?', '.' )
//                         .replace( "[", "\\[" ).replace( "]", "\\]" ).replace( "(", "\\(" ).replace( ")", "\\)" );
// 
//         // TODO: Check if this can be done better or prevented earlier.
//         if ( input == null )
//         {
//             input = "";
//         }
// 
//         return java.util.regex.Pattern.matches( regex, input );
//     }
// 
//     @Override
//     public String toString()
//     {
//         return pattern;
//     }
// }


// Path: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactUtils.java
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.plugins.enforcer.utils.ArtifactMatcher.Pattern;
import org.apache.maven.shared.dependency.graph.DependencyNode;

                for ( Artifact artifact : dependencies )
                {
                    if ( compareDependency( resultPattern, artifact ) )
                    {
                        // only create if needed
                        if ( foundMatches == null )
                        {
                            foundMatches = new HashSet<Artifact>();
                        }
                        foundMatches.add( artifact );
                    }
                }
            }
        }
        return foundMatches;
    }

    /**
     * Compares the given pattern against the given artifact. The pattern should follow the format
     * <code>groupId:artifactId:version:type:scope:classifier</code>.
     * 
     * @param pattern The pattern to compare the artifact with.
     * @param artifact the artifact
     * @return <code>true</code> if the artifact matches one of the patterns
     * @throws EnforcerRuleException the enforcer rule exception
     */
    private static boolean compareDependency( String pattern, Artifact artifact )
        throws EnforcerRuleException
    {
    
        ArtifactMatcher.Pattern am = new Pattern( pattern );