javadoc: links added
[idea/community.git] / java / java-impl / src / com / intellij / openapi / roots / ProjectModelModificationService.java
1 /*
2  * Copyright 2000-2015 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 com.intellij.openapi.roots;
17
18 import com.intellij.openapi.components.ServiceManager;
19 import com.intellij.openapi.module.Module;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.openapi.roots.libraries.Library;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.concurrency.Promise;
24
25 import java.util.Collection;
26 import java.util.Collections;
27
28 /**
29  * Provides methods to perform high-level modifications of project configuration accordingly with dependency management system used in the
30  * project. E.g. if the project is imported from Maven the methods will modify pom.xml files and invoke reimporting to update IDEA's
31  * project model. Since importing the changes to IDEA's project model may take a while the method work asynchronously and returns
32  * {@link Promise} objects which may be used to be notified when the project configuration is finally updated.
33  *
34  * @see ProjectModelModifier
35  *
36  * @author nik
37  */
38 public abstract class ProjectModelModificationService {
39   public static ProjectModelModificationService getInstance(@NotNull Project project) {
40     return ServiceManager.getService(project, ProjectModelModificationService.class);
41   }
42
43   public Promise<Void> addDependency(@NotNull Module from, @NotNull Module to) {
44     return addDependency(from, to, DependencyScope.COMPILE);
45   }
46
47   public abstract Promise<Void> addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope);
48
49   public Promise<Void> addDependency(@NotNull Module from, @NotNull ExternalLibraryDescriptor libraryDescriptor) {
50     return addDependency(from, libraryDescriptor, DependencyScope.COMPILE);
51   }
52
53   public Promise<Void> addDependency(@NotNull Module from, @NotNull ExternalLibraryDescriptor descriptor, @NotNull DependencyScope scope) {
54     return addDependency(Collections.singletonList(from), descriptor, scope);
55   }
56
57   public abstract Promise<Void> addDependency(@NotNull Collection<Module> from, @NotNull ExternalLibraryDescriptor libraryDescriptor,
58                                               @NotNull DependencyScope scope);
59
60   public abstract Promise<Void> addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope);
61 }