1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.project;
20
21 import java.nio.file.Path;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.maven.api.ProjectScope;
26 import org.apache.maven.api.SourceRoot;
27 import org.apache.maven.impl.DefaultSourceRoot;
28 import org.apache.maven.model.Resource;
29
30
31
32
33
34 @SuppressWarnings("deprecation")
35 class ConnectedResource extends Resource {
36 private final SourceRoot originalSourceRoot;
37 private final ProjectScope scope;
38 private final MavenProject project;
39
40 ConnectedResource(SourceRoot sourceRoot, ProjectScope scope, MavenProject project) {
41 super(org.apache.maven.api.model.Resource.newBuilder()
42 .directory(sourceRoot.directory().toString())
43 .includes(sourceRoot.includes())
44 .excludes(sourceRoot.excludes())
45 .filtering(Boolean.toString(sourceRoot.stringFiltering()))
46 .targetPath(sourceRoot.targetPath().map(Path::toString).orElse(null))
47 .build());
48 this.originalSourceRoot = sourceRoot;
49 this.scope = scope;
50 this.project = project;
51 }
52
53 @Override
54 public void addInclude(String include) {
55
56 super.addInclude(include);
57
58
59 updateProjectSourceRoot();
60 }
61
62 @Override
63 public void removeInclude(String include) {
64
65 super.removeInclude(include);
66
67
68 updateProjectSourceRoot();
69 }
70
71 @Override
72 public void addExclude(String exclude) {
73
74 super.addExclude(exclude);
75
76
77 updateProjectSourceRoot();
78 }
79
80 @Override
81 public void removeExclude(String exclude) {
82
83 super.removeExclude(exclude);
84
85
86 updateProjectSourceRoot();
87 }
88
89 @Override
90 public void setIncludes(List<String> includes) {
91
92 super.setIncludes(includes);
93
94
95 updateProjectSourceRoot();
96 }
97
98 @Override
99 public void setExcludes(List<String> excludes) {
100
101 super.setExcludes(excludes);
102
103
104 updateProjectSourceRoot();
105 }
106
107 private void updateProjectSourceRoot() {
108
109 List<SourceRoot> sourcesList = new ArrayList<>(project.sources);
110
111
112 int index = -1;
113 for (int i = 0; i < sourcesList.size(); i++) {
114 SourceRoot source = sourcesList.get(i);
115 if (source.scope() == originalSourceRoot.scope()
116 && source.language() == originalSourceRoot.language()
117 && source.directory().equals(originalSourceRoot.directory())) {
118 index = i;
119 break;
120 }
121 }
122
123 if (index >= 0) {
124
125 SourceRoot newSourceRoot = new DefaultSourceRoot(project.getBaseDirectory(), scope, this.getDelegate());
126 sourcesList.set(index, newSourceRoot);
127
128
129 project.sources.clear();
130 project.sources.addAll(sourcesList);
131 }
132 }
133 }