Lines 45-54
Link Here
|
45 |
import java.beans.PropertyChangeEvent; |
45 |
import java.beans.PropertyChangeEvent; |
46 |
import java.beans.PropertyChangeListener; |
46 |
import java.beans.PropertyChangeListener; |
47 |
import java.io.File; |
47 |
import java.io.File; |
48 |
import java.io.IOException; |
|
|
49 |
import java.util.Collections; |
50 |
import java.util.HashSet; |
48 |
import java.util.HashSet; |
51 |
import java.util.List; |
|
|
52 |
import java.util.Set; |
49 |
import java.util.Set; |
53 |
import javax.swing.event.ChangeEvent; |
50 |
import javax.swing.event.ChangeEvent; |
54 |
import javax.swing.event.ChangeListener; |
51 |
import javax.swing.event.ChangeListener; |
Lines 56-67
Link Here
|
56 |
import org.netbeans.modules.maven.api.NbMavenProject; |
53 |
import org.netbeans.modules.maven.api.NbMavenProject; |
57 |
import org.netbeans.modules.maven.queries.MavenFileOwnerQueryImpl; |
54 |
import org.netbeans.modules.maven.queries.MavenFileOwnerQueryImpl; |
58 |
import org.netbeans.api.project.Project; |
55 |
import org.netbeans.api.project.Project; |
59 |
import org.netbeans.api.project.ProjectManager; |
56 |
import org.netbeans.spi.project.DependencyProjectProvider; |
60 |
import org.netbeans.spi.project.ProjectServiceProvider; |
57 |
import org.netbeans.spi.project.ProjectServiceProvider; |
61 |
import org.netbeans.spi.project.SubprojectProvider; |
|
|
62 |
import org.openide.ErrorManager; |
63 |
import org.openide.filesystems.FileObject; |
64 |
import org.openide.filesystems.FileUtil; |
65 |
import org.openide.util.ChangeSupport; |
58 |
import org.openide.util.ChangeSupport; |
66 |
import org.openide.util.Utilities; |
59 |
import org.openide.util.Utilities; |
67 |
import org.openide.util.WeakListeners; |
60 |
import org.openide.util.WeakListeners; |
Lines 71-85
Link Here
|
71 |
* and can be build as one unit. Uses maven multiproject infrastructure. (maven.multiproject.includes) |
64 |
* and can be build as one unit. Uses maven multiproject infrastructure. (maven.multiproject.includes) |
72 |
* @author Milos Kleint |
65 |
* @author Milos Kleint |
73 |
*/ |
66 |
*/ |
74 |
@ProjectServiceProvider(service=SubprojectProvider.class, projectType="org-netbeans-modules-maven") |
67 |
@ProjectServiceProvider(service=DependencyProjectProvider.class, projectType="org-netbeans-modules-maven") |
75 |
public class SubprojectProviderImpl implements SubprojectProvider { |
68 |
public class DependencyProviderImpl implements DependencyProjectProvider { |
76 |
|
69 |
|
77 |
private final Project project; |
70 |
private final Project project; |
78 |
private final ChangeSupport cs = new ChangeSupport(this); |
71 |
private final ChangeSupport cs = new ChangeSupport(this); |
79 |
private final ChangeListener listener2; |
72 |
private final ChangeListener listener2; |
80 |
private final PropertyChangeListener propertyChange; |
73 |
private final PropertyChangeListener propertyChange; |
81 |
|
74 |
|
82 |
public SubprojectProviderImpl(Project proj) { |
75 |
public DependencyProviderImpl(Project proj) { |
83 |
project = proj; |
76 |
project = proj; |
84 |
propertyChange = new PropertyChangeListener() { |
77 |
propertyChange = new PropertyChangeListener() { |
85 |
@Override public void propertyChange(PropertyChangeEvent evt) { |
78 |
@Override public void propertyChange(PropertyChangeEvent evt) { |
Lines 99-121
Link Here
|
99 |
} |
92 |
} |
100 |
|
93 |
|
101 |
|
94 |
|
102 |
@Override public Set<? extends Project> getSubprojects() { |
95 |
@Override public Set<? extends Project> getDependencyProjects() { |
103 |
Set<Project> projects = new HashSet<Project>(); |
96 |
Set<Project> projects = new HashSet<Project>(); |
104 |
File basedir = FileUtil.toFile(project.getProjectDirectory()); |
|
|
105 |
try { |
106 |
addProjectModules(basedir, projects, project.getLookup().lookup(NbMavenProject.class).getMavenProject().getModules()); |
107 |
} catch (InterruptedException x) { |
108 |
// can be interrupted in the open project dialog.. |
109 |
return Collections.emptySet(); |
110 |
} |
111 |
addKnownOwners(projects); |
97 |
addKnownOwners(projects); |
112 |
projects.remove(project); |
98 |
projects.remove(project); |
113 |
return projects; |
99 |
return projects; |
114 |
} |
100 |
} |
115 |
|
101 |
|
116 |
private void addKnownOwners(Set<Project> resultset) { |
102 |
private void addKnownOwners(Set<Project> resultset) { |
117 |
List<Artifact> compileArtifacts = project.getLookup().lookup(NbMavenProject.class).getMavenProject().getCompileArtifacts(); |
103 |
Set<Artifact> artifacts = project.getLookup().lookup(NbMavenProject.class).getMavenProject().getDependencyArtifacts(); |
118 |
for (Artifact ar : compileArtifacts) { |
104 |
for (Artifact ar : artifacts) { |
119 |
File f = ar.getFile(); |
105 |
File f = ar.getFile(); |
120 |
if (f != null) { |
106 |
if (f != null) { |
121 |
Project p = MavenFileOwnerQueryImpl.getInstance().getOwner(Utilities.toURI(f)); |
107 |
Project p = MavenFileOwnerQueryImpl.getInstance().getOwner(Utilities.toURI(f)); |
Lines 126-193
Link Here
|
126 |
} |
112 |
} |
127 |
} |
113 |
} |
128 |
|
114 |
|
129 |
private boolean isProcessed(Set<Project> resultset, FileObject projectDir) { |
|
|
130 |
|
131 |
for (Project p : resultset) { |
132 |
if (p.getProjectDirectory().equals(projectDir)) { |
133 |
return true; |
134 |
} |
135 |
} |
136 |
|
137 |
return false; |
138 |
} |
139 |
|
140 |
private void addProjectModules(File basedir, Set<Project> resultset, List<String> modules) throws InterruptedException { |
141 |
if (modules == null) { |
142 |
return; |
143 |
} |
144 |
for (String path : modules) { |
145 |
if (Thread.interrupted()) { |
146 |
throw new InterruptedException(); |
147 |
} |
148 |
if (path.trim().length() == 0) { |
149 |
//#175331 |
150 |
continue; |
151 |
} |
152 |
File sub = new File(basedir, path); |
153 |
File projectFile = FileUtil.normalizeFile(sub); |
154 |
if (!projectFile.equals(basedir) //#175331 |
155 |
&& projectFile.exists()) { |
156 |
FileObject projectDir = FileUtil.toFileObject(projectFile); |
157 |
if (projectDir != null && projectDir.isFolder() && !isProcessed(resultset, projectDir)) { |
158 |
Project proj = processOneSubproject(projectDir); |
159 |
NbMavenProjectImpl mv = proj != null ? proj.getLookup().lookup(NbMavenProjectImpl.class) : null; |
160 |
if (mv != null) { |
161 |
// ignore the pom type projects when resolving subprojects.. |
162 |
// maybe make an user settable option?? |
163 |
if (!NbMavenProject.TYPE_POM.equalsIgnoreCase(mv.getProjectWatcher().getPackagingType())) { |
164 |
resultset.add(proj); |
165 |
} |
166 |
addProjectModules(FileUtil.toFile(mv.getProjectDirectory()), |
167 |
resultset, mv.getOriginalMavenProject().getModules()); |
168 |
} |
169 |
} else { |
170 |
// HUH? |
171 |
ErrorManager.getDefault().log("fileobject not found=" + sub); //NOI18N |
172 |
} |
173 |
} else { |
174 |
ErrorManager.getDefault().log("project file not found=" + sub); //NOI18N |
175 |
} |
176 |
} |
177 |
} |
178 |
|
179 |
private Project processOneSubproject(FileObject projectDir) { |
180 |
|
181 |
|
182 |
try { |
183 |
return ProjectManager.getDefault().findProject(projectDir); |
184 |
} catch (IOException exc) { |
185 |
ErrorManager.getDefault().notify(exc); |
186 |
} |
187 |
|
188 |
return null; |
189 |
} |
190 |
|
191 |
@Override public synchronized void addChangeListener(ChangeListener changeListener) { |
115 |
@Override public synchronized void addChangeListener(ChangeListener changeListener) { |
192 |
if (!cs.hasListeners()) { |
116 |
if (!cs.hasListeners()) { |
193 |
project.getLookup().lookup(NbMavenProject.class).addPropertyChangeListener(propertyChange); |
117 |
project.getLookup().lookup(NbMavenProject.class).addPropertyChangeListener(propertyChange); |