Qodana: add property for suppressed plugin ids list.
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / mvc / MvcProjectStructureDetector.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.jetbrains.plugins.groovy.mvc;
17
18 import com.intellij.ide.util.importProject.ProjectDescriptor;
19 import com.intellij.ide.util.projectWizard.ModuleWizardStep;
20 import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
21 import com.intellij.ide.util.projectWizard.importSources.DetectedProjectRoot;
22 import com.intellij.ide.util.projectWizard.importSources.ProjectFromSourcesBuilder;
23 import com.intellij.ide.util.projectWizard.importSources.ProjectStructureDetector;
24 import com.intellij.openapi.util.text.StringUtil;
25 import org.jetbrains.annotations.Nls;
26 import org.jetbrains.annotations.NotNull;
27
28 import javax.swing.*;
29 import java.io.File;
30 import java.util.Arrays;
31 import java.util.List;
32
33 public abstract class MvcProjectStructureDetector extends ProjectStructureDetector {
34   private final MvcFramework myFramework;
35   private final String myDirectoryName;
36
37   public MvcProjectStructureDetector(MvcFramework framework) {
38     myFramework = framework;
39     myDirectoryName = StringUtil.toLowerCase(myFramework.getFrameworkName()) + "-app";
40   }
41
42   @NotNull
43   @Override
44   public DirectoryProcessingResult detectRoots(@NotNull File dir, File @NotNull [] children, @NotNull File base,
45                                                @NotNull List<DetectedProjectRoot> result) {
46     for (File child : children) {
47       if (child.getName().equals("build.gradle")) return DirectoryProcessingResult.PROCESS_CHILDREN;
48     }
49     for (File child : children) {
50       if (child.getName().equals(myDirectoryName) && child.isDirectory()) {
51         result.add(new GroovyMvcProjectRoot(dir));
52         return DirectoryProcessingResult.SKIP_CHILDREN;
53       }
54     }
55     return DirectoryProcessingResult.PROCESS_CHILDREN;
56   }
57
58   @Override
59   public List<ModuleWizardStep> createWizardSteps(ProjectFromSourcesBuilder builder,
60                                                   ProjectDescriptor projectDescriptor,
61                                                   Icon stepIcon) {
62     final ModuleWizardStep groovySdkStep = new GroovySdkForProjectFromSourcesStep(this, builder, projectDescriptor, myFramework);
63     final ModuleWizardStep javaSdkStep = ProjectWizardStepFactory.getInstance().createProjectJdkStep(builder.getContext());
64     return Arrays.asList(javaSdkStep, groovySdkStep);
65   }
66
67   private class GroovyMvcProjectRoot extends DetectedProjectRoot {
68     GroovyMvcProjectRoot(File dir) {
69       super(dir);
70     }
71
72     @NotNull
73     @Override
74     public @Nls(capitalization = Nls.Capitalization.Sentence) String getRootTypeName() {
75       return myFramework.getDisplayName();
76     }
77
78     @Override
79     public boolean canContainRoot(@NotNull DetectedProjectRoot root) {
80       return false;
81     }
82   }
83 }