1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.nuxeo.build.maven.filter;
18
19 import java.lang.reflect.Constructor;
20 import java.lang.reflect.InvocationTargetException;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.List;
24
25 import org.apache.tools.ant.Project;
26 import org.eclipse.aether.util.artifact.JavaScopes;
27
28 import org.nuxeo.build.ant.AntClient;
29 import org.nuxeo.build.maven.ArtifactDescriptor;
30
31
32
33
34 public abstract class CompositeFilter extends AbstractFilter {
35
36 protected List<Filter> filters = new ArrayList<>();
37
38 public CompositeFilter() {
39 }
40
41 public CompositeFilter(List<Filter> filters) {
42 this.filters.addAll(filters);
43 }
44
45 public void addFilter(Filter filter) {
46 filters.add(filter);
47 }
48
49 public void removeFilter(Filter filter) {
50 filters.remove(filter);
51 }
52
53 public void addFilters(List<Filter> filtersToAdd) {
54 filters.addAll(filtersToAdd);
55 }
56
57 public void addFilters(Filter... filtersToAdd) {
58 filters.addAll(Arrays.asList(filtersToAdd));
59 }
60
61 public void removeFilters(@SuppressWarnings("hiding") List<Filter> filters) {
62 this.filters.removeAll(filters);
63 }
64
65 public List<Filter> getFilters() {
66 return filters;
67 }
68
69 public boolean isEmpty() {
70 return filters.isEmpty();
71 }
72
73 public void addFiltersFromPattern(String pattern) {
74 if (pattern != null) {
75 addFiltersFromDescriptor(new ArtifactDescriptor(pattern));
76 }
77 }
78
79 public void addFiltersFromDescriptor(ArtifactDescriptor ad) {
80 if (ad.getGroupId() != null && !ad.getGroupId().equals("*")) {
81 addFilter(GroupIdFilter.class, ad.getGroupId());
82 }
83 if (ad.getArtifactId() != null && !ad.getArtifactId().equals("*")) {
84 addFilter(ArtifactIdFilter.class, ad.getArtifactId());
85 }
86 if (ad.getVersion() != null && !ad.getVersion().equals("*")) {
87 addFilter(VersionFilter.class, ad.getVersion());
88 }
89 if (ad.getType() != null && !ad.getType().equals("*")) {
90 addFilter(TypeFilter.class, ad.getType());
91 }
92 if (ad.getClassifier() != null && !ad.getClassifier().equals("*")) {
93 addFilter(ClassifierFilter.class, ad.getClassifier());
94 }
95
96
97 boolean scopeTest = JavaScopes.TEST.equals(ad.getScope()) || "*".equals(ad.getScope());
98 boolean scopeProvided = JavaScopes.PROVIDED.equals(ad.getScope()) || "*".equals(ad.getScope());
99 if (!scopeTest) {
100 addFilter(new NotFilter(new ScopeFilter(JavaScopes.TEST)));
101 }
102 if (!scopeProvided) {
103 addFilter(new NotFilter(new ScopeFilter(JavaScopes.PROVIDED)));
104 }
105 if (ad.getScope() != null && !ad.getScope().equals("*")) {
106 addFilter(ScopeFilter.class, ad.getScope());
107 }
108 }
109
110 public static Filter compact(CompositeFilter filter) {
111 Filter result = filter;
112 CompositeFilter cf = filter;
113 if (cf != null && cf.filters.size() == 1) {
114 result = cf.filters.get(0);
115 if (result instanceof CompositeFilter) {
116 result = compact((CompositeFilter) result);
117 }
118 }
119 return result;
120 }
121
122
123
124
125
126
127
128 public void addFilter(Class<? extends Filter> filterClass, String pattern) {
129 if (pattern == null) {
130 return;
131 }
132 Constructor<? extends Filter> filterConstructor = null;
133 try {
134 filterConstructor = filterClass.getConstructor(String.class);
135 if (pattern.startsWith("!")) {
136 addFilter(new NotFilter(filterConstructor.newInstance(pattern.substring(1))));
137 } else {
138 addFilter(filterConstructor.newInstance(pattern));
139 }
140 } catch (SecurityException e) {
141 AntClient.getInstance().log("Couldn't get constructor for " + filterClass, e, Project.MSG_ERR);
142 } catch (NoSuchMethodException e) {
143 AntClient.getInstance().log("Couldn't get constructor for " + filterClass, e, Project.MSG_ERR);
144 } catch (IllegalArgumentException e) {
145 AntClient.getInstance().log("Couldn't call constructor for " + filterClass, e, Project.MSG_ERR);
146 } catch (InstantiationException e) {
147 AntClient.getInstance().log("Couldn't call constructor for " + filterClass, e, Project.MSG_ERR);
148 } catch (IllegalAccessException e) {
149 AntClient.getInstance().log("Couldn't call constructor for " + filterClass, e, Project.MSG_ERR);
150 } catch (InvocationTargetException e) {
151 AntClient.getInstance().log("Couldn't call constructor for " + filterClass, e, Project.MSG_ERR);
152 }
153
154 }
155 }