do not convert spaces for local paths
[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     return toURI(localPath, true);
42   }
43
44   private static URI toURI(String localPath, boolean convertSpaces) {
45     try {
46       String p = FileUtil.toSystemIndependentName(localPath);
47       if (!p.startsWith("/")) {
48         p = "/" + p;
49       }
50       if (p.startsWith("//")) {
51         p = "//" + p;
52       }
53       return new URI("file", null, convertSpaces? p.replaceAll(" ", "%20") : p, null);
54     }
55     catch (URISyntaxException e) {
56       throw new Error(e);
57     }
58   }
59
60   public static File convertToFile(final URI uri) {
61     return new File(toURI(uri.getPath(), false));
62   }
63 }