[MDEP-568] Moves similar methods to parent class (#145)

* [MDEP-568] Move common methods to parent class.

* [MDEP-568] Fix spacing

* [MDEP-568] Fix spacing

* [MDEP-568] Fix formatting

Co-authored-by: Antonio <antonio.lucas@trt4.jus.br>
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/AbstractDependencyFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/AbstractDependencyFilter.java
index b5e4393..0535309 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/AbstractDependencyFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/AbstractDependencyFilter.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import org.apache.maven.model.Dependency;
+
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
@@ -26,6 +28,82 @@
 
 abstract class AbstractDependencyFilter implements DependencyFilter
 {
+
+    protected final String includeIds;
+    protected final String excludeIds;
+
+    AbstractDependencyFilter( String includeIds, String excludeIds )
+    {
+        this.includeIds = includeIds == null ? "" : includeIds;
+        this.excludeIds = excludeIds == null ? "" : excludeIds;
+    }
+
+
+    @Override
+    public Set<Dependency> filter( Set<Dependency> dependencies )
+    {
+        Set<Dependency> filtered = new HashSet<>( dependencies );
+
+        filtered = filterincludeIds( filtered );
+        filtered = filterexcludeIds( filtered );
+
+        return filtered;
+    }
+
+    private Set<Dependency> filterexcludeIds( Set<Dependency> dependencies )
+    {
+        if ( excludeIds.trim().isEmpty() )
+        {
+            return dependencies;
+        }
+
+        final Set<String> excludedIds = splitExcludeIds( excludeIds );
+
+        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
+        for ( Dependency dependency : dependencies )
+        {
+            if ( excludedIds.contains( getContainsProperty( dependency ) ) )
+            {
+                continue;
+            }
+
+            filtered.add( dependency );
+        }
+
+        return filtered;
+    }
+
+    private Set<Dependency> filterincludeIds( Set<Dependency> dependencies )
+    {
+        if ( includeIds.trim().isEmpty() )
+        {
+            return dependencies;
+        }
+
+        Set<String> includedIds = splitIncludeIds( includeIds );
+
+        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
+        for ( Dependency dependency : dependencies )
+        {
+            if ( includedIds.contains( getContainsProperty( dependency ) ) )
+            {
+                filtered.add( dependency );
+            }
+        }
+
+        return filtered;
+    }
+
+    protected Set<String> splitExcludeIds( String excludeIds )
+    {
+        return splitValues( excludeIds );
+    }
+
+    protected Set<String> splitIncludeIds( String includeIds )
+    {
+        return splitValues( includeIds );
+    }
+
     protected Set<String> splitValues( String csvValueList )
     {
         final String[] values = csvValueList.split( "," );
@@ -47,4 +125,6 @@
 
         return excludeScope;
     }
+
+    protected abstract String getContainsProperty( Dependency dependency );
 }
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/ArtifactIdFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/ArtifactIdFilter.java
index c06c7c6..59423d4 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/ArtifactIdFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/ArtifactIdFilter.java
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.apache.maven.model.Dependency;
 
 /**
@@ -29,70 +26,14 @@
  */
 public class ArtifactIdFilter extends AbstractDependencyFilter
 {
-    private final String includeArtifactIds;
-
-    private final String excludeArtifactIds;
-
     public ArtifactIdFilter( String includeArtifactIds, String excludeArtifactIds )
     {
-        this.includeArtifactIds = includeArtifactIds == null ? "" : includeArtifactIds;
-        this.excludeArtifactIds = excludeArtifactIds == null ? "" : excludeArtifactIds;
+        super( includeArtifactIds, excludeArtifactIds );
     }
 
     @Override
-    public Set<Dependency> filter( Set<Dependency> dependencies )
+    protected String getContainsProperty( Dependency dependency )
     {
-        Set<Dependency> filtered = new HashSet<>( dependencies );
-
-        filtered = filterIncludeArtifactIds( filtered );
-        filtered = filterExcludeArtifactIds( filtered );
-
-        return filtered;
+        return dependency.getArtifactId();
     }
-
-    private Set<Dependency> filterExcludeArtifactIds( Set<Dependency> dependencies )
-    {
-        if ( excludeArtifactIds.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        final Set<String> excludedArtifactIds = splitValues( excludeArtifactIds );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( excludedArtifactIds.contains( dependency.getArtifactId() ) )
-            {
-                continue;
-            }
-
-            filtered.add( dependency );
-        }
-
-        return filtered;
-    }
-
-    private Set<Dependency> filterIncludeArtifactIds( Set<Dependency> dependencies )
-    {
-        if ( includeArtifactIds.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        Set<String> includedArtifactIds = splitValues( includeArtifactIds );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( includedArtifactIds.contains( dependency.getArtifactId() ) )
-            {
-                filtered.add( dependency );
-            }
-        }
-
-        return filtered;
-    }
-
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/ClassifierFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/ClassifierFilter.java
index 7e1defa..4859be0 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/ClassifierFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/ClassifierFilter.java
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.apache.maven.model.Dependency;
 
 /**
@@ -29,70 +26,16 @@
  */
 public class ClassifierFilter extends AbstractDependencyFilter
 {
-    private final String includeClassifiers;
-
-    private final String excludeClassifiers;
 
     public ClassifierFilter( String includeClassifiers, String excludeClassifiers )
     {
-        this.includeClassifiers = includeClassifiers == null ? "" : includeClassifiers;
-        this.excludeClassifiers = excludeClassifiers == null ? "" : excludeClassifiers;
+        super( includeClassifiers, excludeClassifiers );
     }
 
     @Override
-    public Set<Dependency> filter( Set<Dependency> dependencies )
+    protected String getContainsProperty( Dependency dependency )
     {
-        Set<Dependency> filtered = new HashSet<>( dependencies );
-
-        filtered = filterIncludeClassifier( filtered );
-        filtered = filterExcludeClassifier( filtered );
-
-        return filtered;
+        return dependency.getClassifier();
     }
 
-    private Set<Dependency> filterExcludeClassifier( Set<Dependency> dependencies )
-    {
-        if ( excludeClassifiers.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        final Set<String> excludedClassifiers = splitValues( excludeClassifiers );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( excludedClassifiers.contains( dependency.getClassifier() ) )
-            {
-                continue;
-            }
-
-            filtered.add( dependency );
-        }
-
-        return filtered;
-    }
-
-    private Set<Dependency> filterIncludeClassifier( Set<Dependency> dependencies )
-    {
-        if ( includeClassifiers.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        Set<String> includedClassifiers = splitValues( includeClassifiers );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( includedClassifiers.contains( dependency.getClassifier() ) )
-            {
-                filtered.add( dependency );
-            }
-        }
-
-        return filtered;
-    }
-
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/GroupIdFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/GroupIdFilter.java
index 5ca5e5b..395fd97 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/GroupIdFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/GroupIdFilter.java
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.apache.maven.model.Dependency;
 
 /**
@@ -29,70 +26,14 @@
  */
 public class GroupIdFilter extends AbstractDependencyFilter
 {
-    private final String includeGroupIds;
-
-    private final String excludeGroupIds;
-
     public GroupIdFilter( String includeGroupIds, String excludeGroupIds )
     {
-        this.includeGroupIds = includeGroupIds == null ? "" : includeGroupIds;
-        this.excludeGroupIds = excludeGroupIds == null ? "" : excludeGroupIds;
+        super( includeGroupIds, excludeGroupIds );
     }
 
     @Override
-    public Set<Dependency> filter( Set<Dependency> dependencies )
+    protected String getContainsProperty( Dependency dependency )
     {
-        Set<Dependency> filtered = new HashSet<>( dependencies );
-
-        filtered = filterIncludeGroupIds( filtered );
-        filtered = filterExcludeGroupIds( filtered );
-
-        return filtered;
+        return dependency.getGroupId();
     }
-
-    private Set<Dependency> filterExcludeGroupIds( Set<Dependency> dependencies )
-    {
-        if ( excludeGroupIds.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        final Set<String> excludedGroupIds = splitValues( excludeGroupIds );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( excludedGroupIds.contains( dependency.getGroupId() ) )
-            {
-                continue;
-            }
-
-            filtered.add( dependency );
-        }
-
-        return filtered;
-    }
-
-    private Set<Dependency> filterIncludeGroupIds( Set<Dependency> dependencies )
-    {
-        if ( includeGroupIds.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        Set<String> includedGroupIds = splitValues( includeGroupIds );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( includedGroupIds.contains( dependency.getGroupId() ) )
-            {
-                filtered.add( dependency );
-            }
-        }
-
-        return filtered;
-    }
-
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/ScopeFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/ScopeFilter.java
index 8a47a1d..47f1f1a 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/ScopeFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/ScopeFilter.java
@@ -19,153 +19,104 @@
  * under the License.
  */
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Dependency;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.model.Dependency;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
 
 /**
  * Filters dependencies by scope.
  */
 public class ScopeFilter extends AbstractDependencyFilter
 {
-    private final String includeScope;
-
-    private final String excludeScope;
-
     public ScopeFilter( String includeScope, String excludeScope )
     {
-        this.includeScope = includeScope == null ? "" : includeScope;
-        this.excludeScope = excludeScope == null ? "" : excludeScope;
+        super( includeScope, excludeScope );
     }
 
     @Override
-    public Set<Dependency> filter( Set<Dependency> dependencies )
+    protected String getContainsProperty( Dependency dependency )
     {
-        Set<Dependency> filtered = new HashSet<>( dependencies );
-
-        filtered = filterIncludeScope( filtered );
-        filtered = filterExcludeScope( filtered );
-
-        return filtered;
+        return dependency.getScope();
     }
 
-    private Set<Dependency> filterExcludeScope( Set<Dependency> dependencies )
+    /*
+     * runtime exclude scope excludes runtime and compile dependencies,
+     * compile exclude scope excludes compile, provided, and system dependencies,
+     * test exclude scope excludes all dependencies, then not really a legitimate option: it will
+     * fail, you probably meant to configure includeScope = compile
+     * provided exclude scope just excludes provided dependencies,
+     * system exclude scope just excludes system dependencies.
+     * @param scope to be excluded
+     * @return Set with excluded scopes
+     */
+    @Override
+    protected Set<String> splitExcludeIds( String scope )
     {
-        if ( excludeScope.trim().isEmpty() )
+        switch ( scope )
         {
-            return dependencies;
-        }
-
-        final Set<String> excludedScopes = toResolvedScopes( excludeScope, true );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( excludedScopes.contains( dependency.getScope() ) )
-            {
-                continue;
-            }
-
-            filtered.add( dependency );
-        }
-
-        return filtered;
-    }
-
-    private Set<Dependency> filterIncludeScope( Set<Dependency> dependencies )
-    {
-        if ( includeScope.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        Set<String> includedScopes = toResolvedScopes( includeScope, false );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( includedScopes.contains( dependency.getScope() ) )
-            {
-                filtered.add( dependency );
-            }
-        }
-
-        return filtered;
-    }
-
-    private Set<String> toResolvedScopes( String scope, boolean isExcludeScope )
-    {
-        if ( isExcludeScope )
-        {
-            /*
-             * runtime exclude scope excludes runtime and compile dependencies,
-             * compile exclude scope excludes compile, provided, and system dependencies,
-             * test exclude scope excludes all dependencies, then not really a legitimate option: it will
-             * fail, you probably meant to configure includeScope = compile
-             * provided exclude scope just excludes provided dependencies,
-             * system exclude scope just excludes system dependencies.
-             */
-            switch ( scope )
-            {
-                case Artifact.SCOPE_RUNTIME:
-                    return new HashSet<>( asList(
-                            Artifact.SCOPE_RUNTIME,
-                            Artifact.SCOPE_COMPILE ) );
-                case Artifact.SCOPE_COMPILE:
-                    return new HashSet<>( asList(
-                            Artifact.SCOPE_COMPILE,
-                            Artifact.SCOPE_PROVIDED,
-                            Artifact.SCOPE_SYSTEM ) );
-                case Artifact.SCOPE_TEST:
-                    throw new IllegalArgumentException( "invalid exclude scope: test. Did you mean compile?" );
-                case Artifact.SCOPE_PROVIDED:
-                    return new HashSet<>( singletonList( Artifact.SCOPE_PROVIDED ) );
-                case Artifact.SCOPE_SYSTEM:
-                    return new HashSet<>( singletonList( Artifact.SCOPE_SYSTEM ) );
-                default:
-                    throw new IllegalArgumentException( "Invalid Scope: " + scope );
-            }
-        }
-        else
-        {
-            /*
-             * runtime include scope gives runtime and compile dependencies,
-             * compile include scope gives compile, provided, and system dependencies,
-             * test include scope gives all dependencies (equivalent to default),
-             * provided include scope just gives provided dependencies,
-             * system include scope just gives system dependencies.
-             */
-            switch ( scope )
-            {
-                case Artifact.SCOPE_RUNTIME:
-                    return new HashSet<>( asList(
-                            Artifact.SCOPE_RUNTIME,
-                            Artifact.SCOPE_COMPILE ) );
-                case Artifact.SCOPE_COMPILE:
-                    return new HashSet<>( asList(
-                            Artifact.SCOPE_COMPILE,
-                            Artifact.SCOPE_PROVIDED,
-                            Artifact.SCOPE_SYSTEM ) );
-                case Artifact.SCOPE_TEST:
-                    return new HashSet<>( asList(
-                            Artifact.SCOPE_COMPILE,
-                            Artifact.SCOPE_PROVIDED,
-                            Artifact.SCOPE_SYSTEM,
-                            Artifact.SCOPE_TEST,
-                            Artifact.SCOPE_RUNTIME ) );
-                case Artifact.SCOPE_PROVIDED:
-                    return new HashSet<>( singletonList( Artifact.SCOPE_PROVIDED ) );
-                case Artifact.SCOPE_SYSTEM:
-                    return new HashSet<>( singletonList( Artifact.SCOPE_SYSTEM ) );
-                default:
-                    throw new IllegalArgumentException( "Invalid Scope: " + scope );
-            }
+            case Artifact.SCOPE_RUNTIME:
+                return new HashSet<>( asList(
+                        Artifact.SCOPE_RUNTIME,
+                        Artifact.SCOPE_COMPILE ) );
+            case Artifact.SCOPE_COMPILE:
+                return new HashSet<>( asList(
+                        Artifact.SCOPE_COMPILE,
+                        Artifact.SCOPE_PROVIDED,
+                        Artifact.SCOPE_SYSTEM ) );
+            case Artifact.SCOPE_TEST:
+                throw new IllegalArgumentException( "invalid exclude scope: test. Did you mean compile?" );
+            case Artifact.SCOPE_PROVIDED:
+                return new HashSet<>( singletonList( Artifact.SCOPE_PROVIDED ) );
+            case Artifact.SCOPE_SYSTEM:
+                return new HashSet<>( singletonList( Artifact.SCOPE_SYSTEM ) );
+            default:
+                throw new IllegalArgumentException( "Invalid Scope: " + scope );
         }
     }
 
+    /**
+     * runtime include scope gives runtime and compile dependencies,
+     * compile include scope gives compile, provided, and system dependencies,
+     * test include scope gives all dependencies (equivalent to default),
+     * provided include scope just gives provided dependencies,
+     * system include scope just gives system dependencies.
+     *
+     * @param scope to be included
+     * @return set with included scopes
+     */
+    @Override
+    protected Set<String> splitIncludeIds( String scope )
+    {
+        switch ( scope )
+        {
+            case Artifact.SCOPE_RUNTIME:
+                return new HashSet<>( asList(
+                        Artifact.SCOPE_RUNTIME,
+                        Artifact.SCOPE_COMPILE ) );
+            case Artifact.SCOPE_COMPILE:
+                return new HashSet<>( asList(
+                        Artifact.SCOPE_COMPILE,
+                        Artifact.SCOPE_PROVIDED,
+                        Artifact.SCOPE_SYSTEM ) );
+            case Artifact.SCOPE_TEST:
+                return new HashSet<>( asList(
+                        Artifact.SCOPE_COMPILE,
+                        Artifact.SCOPE_PROVIDED,
+                        Artifact.SCOPE_SYSTEM,
+                        Artifact.SCOPE_TEST,
+                        Artifact.SCOPE_RUNTIME ) );
+            case Artifact.SCOPE_PROVIDED:
+                return new HashSet<>( singletonList( Artifact.SCOPE_PROVIDED ) );
+            case Artifact.SCOPE_SYSTEM:
+                return new HashSet<>( singletonList( Artifact.SCOPE_SYSTEM ) );
+            default:
+                throw new IllegalArgumentException( "Invalid Scope: " + scope );
+        }
+
+    }
 }
diff --git a/src/main/java/org/apache/maven/plugins/dependency/filters/TypeFilter.java b/src/main/java/org/apache/maven/plugins/dependency/filters/TypeFilter.java
index 72d38b9..72079e9 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/filters/TypeFilter.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/filters/TypeFilter.java
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.apache.maven.model.Dependency;
 
 /**
@@ -29,70 +26,14 @@
  */
 public class TypeFilter extends AbstractDependencyFilter
 {
-    private final String includeTypes;
-
-    private final String excludeTypes;
-
     public TypeFilter( String includeTypes, String excludeTypes )
     {
-        this.includeTypes = includeTypes == null ? "" : includeTypes;
-        this.excludeTypes = excludeTypes == null ? "" : excludeTypes;
+        super( includeTypes, excludeTypes );
     }
 
     @Override
-    public Set<Dependency> filter( Set<Dependency> dependencies )
+    protected String getContainsProperty( Dependency dependency )
     {
-        Set<Dependency> filtered = new HashSet<>( dependencies );
-
-        filtered = filterIncludeType( filtered );
-        filtered = filterExcludeType( filtered );
-
-        return filtered;
+        return dependency.getType();
     }
-
-    private Set<Dependency> filterExcludeType( Set<Dependency> dependencies )
-    {
-        if ( excludeTypes.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        final Set<String> excludedTypes = splitValues( excludeTypes );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( excludedTypes.contains( dependency.getType() ) )
-            {
-                continue;
-            }
-
-            filtered.add( dependency );
-        }
-
-        return filtered;
-    }
-
-    private Set<Dependency> filterIncludeType( Set<Dependency> dependencies )
-    {
-        if ( includeTypes.trim().isEmpty() )
-        {
-            return dependencies;
-        }
-
-        Set<String> includedTypes = splitValues( includeTypes );
-
-        Set<Dependency> filtered = new HashSet<>( dependencies.size() );
-        for ( Dependency dependency : dependencies )
-        {
-            if ( includedTypes.contains( dependency.getType() ) )
-            {
-                filtered.add( dependency );
-            }
-        }
-
-        return filtered;
-    }
-
-
 }