node-webkit -> NW.js
[idea/community.git] / xml / impl / src / com / intellij / ide / browsers / ConfigurableWebBrowser.java
1 package com.intellij.ide.browsers;
2
3 import com.intellij.icons.AllIcons;
4 import com.intellij.ide.IdeBundle;
5 import com.intellij.openapi.util.Comparing;
6 import com.intellij.openapi.util.text.StringUtil;
7 import com.intellij.util.PathUtil;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 import javax.swing.*;
12 import java.util.UUID;
13
14 final class ConfigurableWebBrowser extends WebBrowser {
15   private final UUID id;
16   @NotNull private BrowserFamily family;
17   @NotNull private String name;
18   private boolean active;
19   private String path;
20
21   private BrowserSpecificSettings specificSettings;
22
23   @SuppressWarnings("UnusedDeclaration")
24   public ConfigurableWebBrowser() {
25     this(UUID.randomUUID(), BrowserFamily.CHROME);
26   }
27
28   public ConfigurableWebBrowser(@NotNull UUID id, @NotNull BrowserFamily family) {
29     this(id, family, family.getName(), family.getExecutionPath(), true, family.createBrowserSpecificSettings());
30   }
31
32   public ConfigurableWebBrowser(@NotNull UUID id,
33                                 @NotNull BrowserFamily family,
34                                 @NotNull String name,
35                                 @Nullable String path,
36                                 boolean active,
37                                 @Nullable BrowserSpecificSettings specificSettings) {
38     this.id = id;
39     this.family = family;
40     this.name = name;
41
42     this.path = StringUtil.nullize(path);
43     this.active = active;
44     this.specificSettings = specificSettings;
45   }
46
47   public void setName(@NotNull String value) {
48     name = value;
49   }
50
51   public void setFamily(@NotNull BrowserFamily value) {
52     family = value;
53   }
54
55   @NotNull
56   @Override
57   public Icon getIcon() {
58     if (family == BrowserFamily.CHROME) {
59       if (WebBrowserManager.isYandexBrowser(this)) {
60         return AllIcons.Xml.Browsers.Yandex16;
61       }
62       else if (checkNameAndPath("Dartium") || checkNameAndPath("Chromium")) {
63         return AllIcons.Xml.Browsers.Chromium16;
64       }
65       else if (checkNameAndPath("Canary")) {
66         return AllIcons.Xml.Browsers.Canary16;
67       }
68       else if (checkNameAndPath("Opera")) {
69         return AllIcons.Xml.Browsers.Opera16;
70       }
71       else if (checkNameAndPath("node-webkit") || checkNameAndPath("nw") || checkNameAndPath("nwjs")) {
72         return AllIcons.Xml.Browsers.Nwjs16;
73       }
74     }
75     return family.getIcon();
76   }
77
78   private boolean checkNameAndPath(@NotNull String what) {
79     return WebBrowserManager.checkNameAndPath(what, this);
80   }
81
82   @Nullable
83   @Override
84   public String getPath() {
85     return path;
86   }
87
88   public void setPath(@Nullable String value) {
89     path = PathUtil.toSystemIndependentName(StringUtil.nullize(value));
90   }
91
92   @Override
93   @Nullable
94   public BrowserSpecificSettings getSpecificSettings() {
95     return specificSettings;
96   }
97
98   public void setSpecificSettings(@Nullable BrowserSpecificSettings value) {
99     specificSettings = value;
100   }
101
102   public boolean isActive() {
103     return active;
104   }
105
106   public void setActive(boolean value) {
107     active = value;
108   }
109
110   @Override
111   public boolean equals(Object o) {
112     if (this == o) {
113       return true;
114     }
115     if (!(o instanceof ConfigurableWebBrowser)) {
116       return false;
117     }
118
119     ConfigurableWebBrowser browser = (ConfigurableWebBrowser)o;
120     return getId().equals(browser.getId()) &&
121            family.equals(browser.family) &&
122            active == browser.active &&
123            Comparing.strEqual(name, browser.name) &&
124            Comparing.equal(path, browser.path) &&
125            Comparing.equal(specificSettings, browser.specificSettings);
126   }
127
128   @Override
129   public int hashCode() {
130     return getId().hashCode();
131   }
132
133   @Override
134   @NotNull
135   public String getName() {
136     return name;
137   }
138
139   @Override
140   @NotNull
141   public final UUID getId() {
142     return id;
143   }
144
145   @Override
146   @NotNull
147   public BrowserFamily getFamily() {
148     return family;
149   }
150
151   @Override
152   @NotNull
153   public String getBrowserNotFoundMessage() {
154     return IdeBundle.message("error.0.browser.path.not.specified", getName());
155   }
156
157   @Override
158   public String toString() {
159     return getName() + " (" + getPath() + ")";
160   }
161 }