update copyright
[fedora-idea.git] / plugins / maven / src / main / java / org / jetbrains / idea / maven / importing / MavenFoldersImporter.java
blob27b72e0e5c7c71c6594b288dc075a6175f0b794c
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.jetbrains.idea.maven.importing;
18 import com.intellij.openapi.application.ApplicationManager;
19 import com.intellij.openapi.module.Module;
20 import com.intellij.openapi.module.ModuleManager;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.roots.ModifiableRootModel;
23 import com.intellij.openapi.roots.ProjectRootManager;
24 import org.jetbrains.idea.maven.importing.MavenImporter;
25 import org.jetbrains.idea.maven.project.MavenImportingSettings;
26 import org.jetbrains.idea.maven.project.MavenProject;
27 import org.jetbrains.idea.maven.project.MavenProjectsManager;
28 import org.jetbrains.idea.maven.project.MavenResource;
30 import java.io.File;
31 import java.util.ArrayList;
32 import java.util.List;
34 public class MavenFoldersImporter {
35 private MavenProject myMavenProject;
36 private MavenImportingSettings myImportingSettings;
37 private MavenRootModelAdapter myModel;
39 public static void updateProjectFolders(final Project project, final boolean updateTargetFoldersOnly) {
40 final MavenProjectsManager manager = MavenProjectsManager.getInstance(project);
41 final MavenImportingSettings settings = manager.getImportingSettings();
43 ApplicationManager.getApplication().runWriteAction(new Runnable() {
44 public void run() {
45 List<ModifiableRootModel> rootModels = new ArrayList<ModifiableRootModel>();
46 for (Module each : ModuleManager.getInstance(project).getModules()) {
47 MavenProject mavenProject = manager.findProject(each);
48 if (mavenProject == null) continue;
50 MavenRootModelAdapter a = new MavenRootModelAdapter(mavenProject, each, new MavenDefaultModifiableModelsProvider(project));
51 new MavenFoldersImporter(mavenProject, settings, a).config(updateTargetFoldersOnly);
53 ModifiableRootModel model = a.getRootModel();
54 if (model.isChanged()) {
55 rootModels.add(model);
57 else {
58 model.dispose();
62 if (!rootModels.isEmpty()) {
63 ModifiableRootModel[] modelsArray = rootModels.toArray(new ModifiableRootModel[rootModels.size()]);
64 ProjectRootManager.getInstance(project).multiCommit(modelsArray);
67 });
70 public MavenFoldersImporter(MavenProject mavenProject, MavenImportingSettings settings, MavenRootModelAdapter model) {
71 myMavenProject = mavenProject;
72 myImportingSettings = settings;
73 myModel = model;
76 public void config() {
77 config(false);
80 private void config(boolean updateTargetFoldersOnly) {
81 if (!updateTargetFoldersOnly) {
82 configSourceFolders();
83 configOutputFolders();
85 configExcludedFolders();
88 private void configSourceFolders() {
89 List<String> sourceFolders = new ArrayList<String>();
90 List<String> testFolders = new ArrayList<String>();
92 sourceFolders.addAll(myMavenProject.getSources());
93 testFolders.addAll(myMavenProject.getTestSources());
95 for (MavenResource each : myMavenProject.getResources()) {
96 sourceFolders.add(each.getDirectory());
98 for (MavenResource each : myMavenProject.getTestResources()) {
99 testFolders.add(each.getDirectory());
102 for (MavenImporter each : MavenImporter.getSuitableImporters(myMavenProject)) {
103 each.collectSourceFolders(myMavenProject, sourceFolders);
104 each.collectTestFolders(myMavenProject, testFolders);
107 for (String each : sourceFolders) {
108 myModel.addSourceFolder(each, false);
110 for (String each : testFolders) {
111 myModel.addSourceFolder(each, true);
115 private void configOutputFolders() {
116 if (myImportingSettings.isUseMavenOutput()) {
117 myModel.useModuleOutput(myMavenProject.getOutputDirectory(),
118 myMavenProject.getTestOutputDirectory());
120 else {
121 myModel.addExcludedFolder(myMavenProject.getOutputDirectory());
122 myModel.addExcludedFolder(myMavenProject.getTestOutputDirectory());
126 private void configExcludedFolders() {
127 File targetDir = new File(myMavenProject.getBuildDirectory());
128 File generatedDir = new File(myMavenProject.getGeneratedSourcesDirectory());
130 myModel.unregisterAll(targetDir.getPath(), true, false);
132 for (File f : getChildren(targetDir)) {
133 if (!f.isDirectory()) continue;
135 if (f.equals(generatedDir)) {
136 addAllSubDirsAsSources(f);
138 else {
139 if (myModel.hasRegisteredSourceSubfolder(f)) continue;
140 if (myModel.isAlreadyExcluded(f)) continue;
141 myModel.addExcludedFolder(f.getPath());
145 List<String> facetExcludes = new ArrayList<String>();
146 for (MavenImporter each : MavenImporter.getSuitableImporters(myMavenProject)) {
147 each.collectExcludedFolders(myMavenProject, facetExcludes);
149 for (String eachFolder : facetExcludes) {
150 myModel.unregisterAll(eachFolder, true, true);
151 myModel.addExcludedFolder(eachFolder);
154 if (!myModel.hasRegisteredSourceSubfolder(targetDir)) {
155 myModel.addExcludedFolder(targetDir.getPath());
159 private void addAllSubDirsAsSources(File dir) {
160 for (File f : getChildren(dir)) {
161 if (!f.isDirectory()) continue;
162 if (myModel.hasRegisteredSourceSubfolder(f)) continue;
163 myModel.addSourceFolder(f.getPath(), false);
167 private File[] getChildren(File dir) {
168 File[] result = dir.listFiles();
169 return result == null ? new File[0] : result;