// Path: src/main/java/org/codehaus/mojo/enforcer/Dependency.java
// public class Dependency
// {
// 
//     private String groupId;
//     
//     private String artifactId;
//     
//     private String classifier;
//     
//     private String type;
//     
//     /**
//      * List of classes to ignore. Wildcard at the end accepted
//      */
//     private String[] ignoreClasses;
// 
//     /**
//      * <p>Getter for the field <code>groupId</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getGroupId()
//     {
//         return groupId;
//     }
// 
//     /**
//      * <p>Setter for the field <code>groupId</code>.</p>
//      *
//      * @param groupId a {@link java.lang.String} object.
//      */
//     public void setGroupId( String groupId )
//     {
//         this.groupId = groupId;
//     }
// 
//     /**
//      * <p>Getter for the field <code>artifactId</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getArtifactId()
//     {
//         return artifactId;
//     }
// 
//     /**
//      * <p>Setter for the field <code>artifactId</code>.</p>
//      *
//      * @param artifactId a {@link java.lang.String} object.
//      */
//     public void setArtifactId( String artifactId )
//     {
//         this.artifactId = artifactId;
//     }
// 
//     /**
//      * <p>Getter for the field <code>classifier</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getClassifier()
//     {
//         return classifier;
//     }
// 
//     /**
//      * <p>Setter for the field <code>classifier</code>.</p>
//      *
//      * @param classifier a {@link java.lang.String} object.
//      */
//     public void setClassifier( String classifier )
//     {
//         this.classifier = classifier;
//     }
// 
//     /**
//      * <p>Getter for the field <code>type</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getType()
//     {
//         return type;
//     }
// 
//     /**
//      * <p>Setter for the field <code>type</code>.</p>
//      *
//      * @param type a {@link java.lang.String} object.
//      */
//     public void setType( String type )
//     {
//         this.type = type;
//     }
// 
//     /**
//      * <p>Getter for the field <code>ignoreClasses</code>.</p>
//      *
//      * @return an array of {@link java.lang.String} objects.
//      */
//     public String[] getIgnoreClasses()
//     {
//         return ignoreClasses;
//     }
// 
//     /**
//      * <p>Setter for the field <code>ignoreClasses</code>.</p>
//      *
//      * @param ignoreClasses an array of {@link java.lang.String} objects.
//      */
//     public void setIgnoreClasses( String[] ignoreClasses )
//     {
//         this.ignoreClasses = ignoreClasses;
//     }
//     
//     /** {@inheritDoc} */
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder();
//         sb.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( type );
//         if ( classifier != null )
//         {
//             sb.append( ':' ).append( classifier );
//         }
//         return sb.toString();
//     }
// }
// 
// Path: src/main/java/org/apache/maven/plugins/enforcer/JarUtils.java
// public static boolean isJarFile( Artifact artifact )
// {
//     return artifact.getFile().isFile() && "jar".equals( artifact.getType() );
// }


import java.util.jar.JarFile;
import java.util.regex.Pattern;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.codehaus.mojo.enforcer.Dependency;
import org.codehaus.plexus.util.FileUtils;
import static org.apache.maven.plugins.enforcer.JarUtils.isJarFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.jar.JarEntry;
            if( scopes != null && !scopes.contains( o.getScope() ) )
            {
                if( getLog().isDebugEnabled() )
                {
                    getLog().debug( "Skipping " + o + " due to scope" );
                }
                continue;
            }
            File file = o.getFile();
            getLog().debug( "Searching for duplicate classes in " + file );
            if ( file == null || !file.exists() )
            {
                getLog().warn( "Could not find " + o + " at " + file );
            }
            else if ( file.isDirectory() )
            {
                try
                {
                    for ( String name : FileUtils.getFileNames( file, null, null, false ) )
                    {
                        getLog().debug( "  " + name );
                        checkAndAddName( o, name, classesSeen, duplicateClassNames, ignorableDependencies );
                    }
                }
                catch ( IOException e )
                {
                    throw new EnforcerRuleException(
                        "Unable to process dependency " + o + " due to " + e.getLocalizedMessage(), e );
                }
            }
// Path: src/main/java/org/codehaus/mojo/enforcer/Dependency.java
// public class Dependency
// {
// 
//     private String groupId;
//     
//     private String artifactId;
//     
//     private String classifier;
//     
//     private String type;
//     
//     /**
//      * List of classes to ignore. Wildcard at the end accepted
//      */
//     private String[] ignoreClasses;
// 
//     /**
//      * <p>Getter for the field <code>groupId</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getGroupId()
//     {
//         return groupId;
//     }
// 
//     /**
//      * <p>Setter for the field <code>groupId</code>.</p>
//      *
//      * @param groupId a {@link java.lang.String} object.
//      */
//     public void setGroupId( String groupId )
//     {
//         this.groupId = groupId;
//     }
// 
//     /**
//      * <p>Getter for the field <code>artifactId</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getArtifactId()
//     {
//         return artifactId;
//     }
// 
//     /**
//      * <p>Setter for the field <code>artifactId</code>.</p>
//      *
//      * @param artifactId a {@link java.lang.String} object.
//      */
//     public void setArtifactId( String artifactId )
//     {
//         this.artifactId = artifactId;
//     }
// 
//     /**
//      * <p>Getter for the field <code>classifier</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getClassifier()
//     {
//         return classifier;
//     }
// 
//     /**
//      * <p>Setter for the field <code>classifier</code>.</p>
//      *
//      * @param classifier a {@link java.lang.String} object.
//      */
//     public void setClassifier( String classifier )
//     {
//         this.classifier = classifier;
//     }
// 
//     /**
//      * <p>Getter for the field <code>type</code>.</p>
//      *
//      * @return a {@link java.lang.String} object.
//      */
//     public String getType()
//     {
//         return type;
//     }
// 
//     /**
//      * <p>Setter for the field <code>type</code>.</p>
//      *
//      * @param type a {@link java.lang.String} object.
//      */
//     public void setType( String type )
//     {
//         this.type = type;
//     }
// 
//     /**
//      * <p>Getter for the field <code>ignoreClasses</code>.</p>
//      *
//      * @return an array of {@link java.lang.String} objects.
//      */
//     public String[] getIgnoreClasses()
//     {
//         return ignoreClasses;
//     }
// 
//     /**
//      * <p>Setter for the field <code>ignoreClasses</code>.</p>
//      *
//      * @param ignoreClasses an array of {@link java.lang.String} objects.
//      */
//     public void setIgnoreClasses( String[] ignoreClasses )
//     {
//         this.ignoreClasses = ignoreClasses;
//     }
//     
//     /** {@inheritDoc} */
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder();
//         sb.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( type );
//         if ( classifier != null )
//         {
//             sb.append( ':' ).append( classifier );
//         }
//         return sb.toString();
//     }
// }
// 
// Path: src/main/java/org/apache/maven/plugins/enforcer/JarUtils.java
// public static boolean isJarFile( Artifact artifact )
// {
//     return artifact.getFile().isFile() && "jar".equals( artifact.getType() );
// }


// Path: src/main/java/org/apache/maven/plugins/enforcer/BanDuplicateClasses.java
import java.util.jar.JarFile;
import java.util.regex.Pattern;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.codehaus.mojo.enforcer.Dependency;
import org.codehaus.plexus.util.FileUtils;
import static org.apache.maven.plugins.enforcer.JarUtils.isJarFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.jar.JarEntry;

            if( scopes != null && !scopes.contains( o.getScope() ) )
            {
                if( getLog().isDebugEnabled() )
                {
                    getLog().debug( "Skipping " + o + " due to scope" );
                }
                continue;
            }
            File file = o.getFile();
            getLog().debug( "Searching for duplicate classes in " + file );
            if ( file == null || !file.exists() )
            {
                getLog().warn( "Could not find " + o + " at " + file );
            }
            else if ( file.isDirectory() )
            {
                try
                {
                    for ( String name : FileUtils.getFileNames( file, null, null, false ) )
                    {
                        getLog().debug( "  " + name );
                        checkAndAddName( o, name, classesSeen, duplicateClassNames, ignorableDependencies );
                    }
                }
                catch ( IOException e )
                {
                    throw new EnforcerRuleException(
                        "Unable to process dependency " + o + " due to " + e.getLocalizedMessage(), e );
                }
            }
            else if ( isJarFile( o ) )