[Mercurial] Save global settings in vcs.xml instead of hg4idea.xml
[idea/community.git] / plugins / hg4idea / src / org / zmlx / hg4idea / HgGlobalSettings.java
1 // Copyright 2008-2010 Victor Iacoban
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software distributed under
10 // the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 // either express or implied. See the License for the specific language governing permissions and
12 // limitations under the License.
13 package org.zmlx.hg4idea;
14
15 import com.intellij.openapi.components.PersistentStateComponent;
16 import com.intellij.openapi.components.State;
17 import com.intellij.openapi.components.Storage;
18 import com.intellij.util.containers.HashMap;
19 import org.apache.commons.lang.StringUtils;
20 import org.jetbrains.annotations.NotNull;
21 import org.jetbrains.annotations.Nullable;
22
23 import java.util.LinkedList;
24 import java.util.List;
25 import java.util.Map;
26
27 @State(
28   name = "HgGlobalSettings",
29   storages = @Storage(id = "HgGlobalSettings", file = "$APP_CONFIG$/vcs.xml")
30 )
31 public class HgGlobalSettings implements PersistentStateComponent<HgGlobalSettings> {
32
33   private static final String HG = HgVcs.HG_EXECUTABLE_FILE_NAME;
34   private static final int FIVE_MINUTES = 300;
35
36   private String hgExecutable = HG;
37
38   // visited URL -> list of logins for this URL. Passwords are remembered in the PasswordSafe.
39   private Map<String, List<String>> myRememberedUrls = new HashMap<String, List<String>>();
40
41   /**
42    * Returns the rememebered urls which were accessed while working in the plugin.
43    * @return key is a String representation of a URL, value is the list (probably empty) of logins remembered for this URL.
44    */
45   @NotNull
46   public Map<String, List<String>> getRememberedUrls() {
47     return myRememberedUrls;
48   }
49
50   /**
51    * Adds the information about visited URL.
52    * @param stringUrl String representation of the URL. If null or blank String is passed, nothing is saved.
53    * @param username  Login used to access the URL. If null is passed, a blank String is used.
54    */
55   public void addRememberedUrl(@Nullable String stringUrl, @Nullable String username) {
56     if (StringUtils.isBlank(stringUrl)) {
57       return;
58     }
59     if (username == null) {
60       username = "";
61     }
62     List<String> list = myRememberedUrls.get(stringUrl);
63     if (list == null) {
64       list = new LinkedList<String>();
65       myRememberedUrls.put(stringUrl, list);
66     }
67     list.add(username);
68   }
69
70   public static String getDefaultExecutable() {
71     return HG;
72   }
73
74   public String getHgExecutable() {
75     return hgExecutable;
76   }
77
78   public void setHgExecutable(String hgExecutable) {
79     this.hgExecutable = hgExecutable;
80   }
81
82   public boolean isAutodetectHg() {
83     return HG.equals(hgExecutable);
84   }
85
86   public void enableAutodetectHg() {
87     hgExecutable = HG;
88   }
89
90   public static int getIncomingCheckIntervalSeconds() {
91     return FIVE_MINUTES;
92   }
93
94   public HgGlobalSettings getState() {
95     return this;
96   }
97
98   public void loadState(HgGlobalSettings state) {
99     hgExecutable = state.hgExecutable;
100   }
101
102 }