17cd1cea16d928b7ea2dc7f013511c0136698b15
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / Paths.java
1 package org.jetbrains.jps.incremental;
2
3 import com.intellij.openapi.util.Key;
4 import com.intellij.openapi.util.io.FileUtil;
5
6 import java.io.File;
7 import java.net.URI;
8 import java.net.URISyntaxException;
9 import java.util.Locale;
10 import java.util.Set;
11
12 /**
13  * @author Eugene Zhuravlev
14  *         Date: 10/20/11
15  */
16 public class Paths {
17   private static final Paths ourInstance = new Paths();
18   public static final Key<Set<String>> CHUNK_REMOVED_SOURCES_KEY = Key.create("_chunk_removed_sources_");
19   private volatile File mySystemRoot = new File(System.getProperty("user.home", ".jps-server"));
20
21   private Paths() {
22   }
23
24   public static Paths getInstance() {
25     return ourInstance;
26   }
27
28   public static File getSystemRoot() {
29     return getInstance().mySystemRoot;
30   }
31
32   public void setSystemRoot(File systemRoot) {
33     mySystemRoot = systemRoot;
34   }
35
36   public static File getDataStorageRoot(String projectName) {
37     return new File(getInstance().mySystemRoot, projectName.toLowerCase(Locale.US));
38   }
39
40   public static URI toURI(String localPath) {
41     try {
42       String p = FileUtil.toSystemIndependentName(localPath);
43       if (!p.startsWith("/")) {
44         p = "/" + p;
45       }
46       if (p.startsWith("//")) {
47         p = "//" + p;
48       }
49       return new URI("file", null, p.replaceAll(" ", "%20"), null);
50     }
51     catch (URISyntaxException e) {
52       throw new Error(e);
53     }
54   }
55
56   public static File convertToFile(final URI uri) {
57     return new File(toURI(uri.getPath()));
58   }
59 }