IDEA-252930 - allow batch update in the case when option 'Convert silently' or 'Do...
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / projectRoots / SdkModificator.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.projectRoots;
3
4 import com.intellij.openapi.roots.OrderRootType;
5 import com.intellij.openapi.vfs.VirtualFile;
6 import com.intellij.openapi.vfs.VirtualFileManager;
7 import com.intellij.util.ArrayUtilRt;
8 import com.intellij.util.containers.ContainerUtil;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
11
12 /**
13  * The way to modify the {@link Sdk} roots, home path etc.<br>
14  * First you call {@link Sdk#getSdkModificator()}<br>
15  * Then you modify things via SdkModificator setters, e.g. {@link #setHomePath(String)}<br>
16  * Last, you must call {@link #commitChanges()}
17  */
18 public interface SdkModificator {
19   @NotNull
20   String getName();
21
22   void setName(@NotNull String name);
23
24   String getHomePath();
25
26   void setHomePath(String path);
27
28   @Nullable
29   String getVersionString();
30
31   void setVersionString(String versionString);
32
33   SdkAdditionalData getSdkAdditionalData();
34
35   void setSdkAdditionalData(SdkAdditionalData data);
36
37   VirtualFile @NotNull [] getRoots(@NotNull OrderRootType rootType);
38
39   default String @NotNull [] getUrls(@NotNull OrderRootType rootType) {
40     return ContainerUtil.map(getRoots(rootType), file -> file.getUrl(), ArrayUtilRt.EMPTY_STRING_ARRAY);
41   }
42
43   void addRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType);
44
45   default void addRoot(@NotNull String url, @NotNull OrderRootType rootType) {
46     VirtualFile rootFile = VirtualFileManager.getInstance().findFileByUrl(url);
47     if (rootFile != null) {
48       addRoot(rootFile, rootType);
49     }
50   }
51
52   void removeRoot(@NotNull VirtualFile root, @NotNull OrderRootType rootType);
53
54   default void removeRoot(@NotNull String url, @NotNull OrderRootType rootType) {
55     for (VirtualFile file : getRoots(rootType)) {
56       if (file.getUrl().equals(url)) {
57         removeRoot(file, rootType);
58         break;
59       }
60     }
61   }
62
63   void removeRoots(@NotNull OrderRootType rootType);
64
65   void removeAllRoots();
66
67   void commitChanges();
68
69   boolean isWritable();
70 }