Add AbstractFilter for custom filters

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1689286 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/AbstractFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/AbstractFilter.java
new file mode 100644
index 0000000..15e7515
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/AbstractFilter.java
@@ -0,0 +1,40 @@
+package org.apache.maven.shared.artifact.filter.resolve;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *  http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+import java.util.List;

+

+/**

+ * Abstract filter for custom implementations

+ * 

+ * @author Robert Scholte

+ * @since 3.0

+ */

+public abstract class AbstractFilter implements TransformableFilter

+{

+

+    @Override

+    public final <T> T transform( FilterTransformer<T> transformer )

+    {

+        return transformer.transform( this );

+    }

+

+    public abstract boolean accept( Node node, List<Node> parents );

+}

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/FilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/FilterTransformer.java
index 683045e..8d65df9 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/FilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/FilterTransformer.java
@@ -77,4 +77,12 @@
      * @return the transformed filter, never {@code null}
      */
     T transform( PatternInclusionsFilter patternInclusionsFilter );
+
+    /**
+     * Transform a custom filter to T specific implementation 
+     * 
+     * @param abstractFilter the filter
+     * @return the transformed filter, never {@code null}
+     */
+    T transform( AbstractFilter abstractFilter );
 }
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/Node.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/Node.java
new file mode 100644
index 0000000..1ccec0f
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/Node.java
@@ -0,0 +1,26 @@
+package org.apache.maven.shared.artifact.filter.resolve;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *  http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+public interface Node

+{

+    org.apache.maven.model.Dependency getDependency();

+

+}

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
index b4c4385..743e31c 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
@@ -21,7 +21,9 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
+import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
 import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
 import org.apache.maven.shared.artifact.filter.resolve.FilterTransformer;
@@ -31,6 +33,7 @@
 import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
 import org.eclipse.aether.util.filter.AndDependencyFilter;
 import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
 import org.eclipse.aether.util.filter.OrDependencyFilter;
@@ -92,4 +95,17 @@
     {
         return new PatternInclusionsDependencyFilter( filter.getIncludes() );
     }
+    
+    @Override
+    public DependencyFilter transform( final AbstractFilter filter )
+    {
+        return new DependencyFilter()
+        {
+            @Override
+            public boolean accept( DependencyNode node, List<DependencyNode> parents )
+            {
+                return filter.accept( new EclipseAetherNode( node ), null );
+            }
+        }; 
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
new file mode 100644
index 0000000..d0e874b
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherNode.java
@@ -0,0 +1,57 @@
+package org.apache.maven.shared.artifact.filter.resolve.transform;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *  http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+import org.apache.maven.shared.artifact.filter.resolve.Node;

+import org.eclipse.aether.artifact.ArtifactProperties;

+import org.eclipse.aether.graph.Dependency;

+import org.eclipse.aether.graph.DependencyNode;

+

+public class EclipseAetherNode implements Node

+{

+

+    private final DependencyNode node;

+

+    public EclipseAetherNode( DependencyNode node )

+    {

+        this.node = node;

+    }

+

+    @Override

+    public org.apache.maven.model.Dependency getDependency()

+    {

+        if ( node.getDependency() == null )

+        {

+            return null;

+        }

+

+        Dependency nodeDependency = node.getDependency();

+

+        org.apache.maven.model.Dependency mavenDependency = new org.apache.maven.model.Dependency();

+        mavenDependency.setGroupId( nodeDependency.getArtifact().getGroupId() );

+        mavenDependency.setArtifactId( nodeDependency.getArtifact().getArtifactId() );

+        mavenDependency.setVersion( nodeDependency.getArtifact().getVersion() );

+        mavenDependency.setClassifier( nodeDependency.getArtifact().getClassifier() );

+        mavenDependency.setType( nodeDependency.getArtifact().getProperty( ArtifactProperties.TYPE, null ) );

+

+        return mavenDependency;

+    }

+     

+}

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
index 70b97b1..7696b75 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
@@ -21,7 +21,9 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
+import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
 import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
 import org.apache.maven.shared.artifact.filter.resolve.FilterTransformer;
@@ -31,6 +33,7 @@
 import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.graph.DependencyNode;
 import org.sonatype.aether.util.filter.AndDependencyFilter;
 import org.sonatype.aether.util.filter.ExclusionsDependencyFilter;
 import org.sonatype.aether.util.filter.OrDependencyFilter;
@@ -92,4 +95,17 @@
     {
         return new PatternInclusionsDependencyFilter( filter.getIncludes() );
     }
+    
+    @Override
+    public DependencyFilter transform( final AbstractFilter filter )
+    {
+        return new DependencyFilter()
+        {
+            @Override
+            public boolean accept( DependencyNode node, List<DependencyNode> parents )
+            {
+                return filter.accept( new SonatypeAetherNode( node ), null );
+            }
+        };
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
new file mode 100644
index 0000000..7931b7a
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherNode.java
@@ -0,0 +1,58 @@
+package org.apache.maven.shared.artifact.filter.resolve.transform;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *  http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+import org.apache.maven.shared.artifact.filter.resolve.Node;

+import org.sonatype.aether.graph.Dependency;

+import org.sonatype.aether.graph.DependencyNode;

+import org.sonatype.aether.util.artifact.ArtifactProperties;

+

+public class SonatypeAetherNode implements Node

+{

+

+    private final DependencyNode node;

+

+    public SonatypeAetherNode( DependencyNode node )

+    {

+        this.node = node;

+    }

+

+

+    @Override

+    public org.apache.maven.model.Dependency getDependency()

+    {

+        if ( node.getDependency() == null )

+        {

+            return null;

+        }

+        

+        Dependency nodeDependency = node.getDependency();

+

+        org.apache.maven.model.Dependency mavenDependency = new org.apache.maven.model.Dependency();

+        mavenDependency.setGroupId( nodeDependency.getArtifact().getGroupId() );

+        mavenDependency.setArtifactId( nodeDependency.getArtifact().getArtifactId() );

+        mavenDependency.setVersion( nodeDependency.getArtifact().getVersion() );

+        mavenDependency.setClassifier( nodeDependency.getArtifact().getClassifier() );

+        mavenDependency.setType( nodeDependency.getArtifact().getProperty( ArtifactProperties.TYPE, null ) );

+

+        return mavenDependency;

+    }

+     

+}