3a7245b7085157ea219ab5bce9890950b65bdfcf
[idea/community.git] / platform / platform-impl / src / com / intellij / ide / plugins / PluginNode.java
1 // Copyright 2000-2020 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.ide.plugins;
3
4 import com.intellij.openapi.extensions.PluginId;
5 import org.jetbrains.annotations.NotNull;
6 import org.jetbrains.annotations.Nullable;
7
8 import java.nio.file.Path;
9 import java.util.ArrayList;
10 import java.util.Collections;
11 import java.util.Date;
12 import java.util.List;
13
14 public final class PluginNode implements IdeaPluginDescriptor {
15   public enum Status {
16     UNKNOWN, INSTALLED, DOWNLOADED, DELETED
17   }
18
19   private PluginId id;
20   private String name;
21   private String productCode;
22   private Date releaseDate;
23   private int releaseVersion;
24   private boolean licenseOptional;
25   private String version;
26   private String vendor;
27   private String description;
28   private String sinceBuild;
29   private String untilBuild;
30   private String changeNotes;
31   private String downloads;
32   private String category;
33   private String size;
34   private String vendorEmail;
35   private String vendorUrl;
36   private String url;
37   private long date = Long.MAX_VALUE;
38   private List<PluginId> myDependencies;
39   private PluginId[] myOptionalDependencies;
40   private Status myStatus = Status.UNKNOWN;
41   private boolean myLoaded;
42   private String myDownloadUrl;
43   private String myRepositoryName;
44   private String myInstalledVersion;
45   private boolean myEnabled = true;
46   private String myRating;
47   private boolean myIncomplete;
48   private List<String> myTags;
49   private String externalUpdateId;
50   private String externalPluginId;
51
52   public PluginNode() { }
53
54   public PluginNode(@NotNull PluginId id) {
55     this.id = id;
56   }
57
58   public PluginNode(@NotNull PluginId id, String name, String size) {
59     this.id = id;
60     this.name = name;
61     this.size = size;
62   }
63
64   public void setCategory(@NotNull String category) {
65     this.category = category;
66   }
67
68   @Override
69   public String getName() {
70     return name;
71   }
72
73   public void setName(@NotNull String name) {
74     if (id == null) {
75       id = PluginId.getId(name);
76     }
77     this.name = name;
78   }
79
80   public void setId(@NotNull String id) {
81     this.id = PluginId.getId(id);
82   }
83
84   @Nullable
85   @Override
86   public String getProductCode() {
87     return productCode;
88   }
89
90   public void setProductCode(String productCode) {
91     this.productCode = productCode;
92   }
93
94   @Nullable
95   @Override
96   public Date getReleaseDate() {
97     return releaseDate;
98   }
99
100   public void setReleaseDate(Date date) {
101     releaseDate = date;
102   }
103
104   @Override
105   public int getReleaseVersion() {
106     return releaseVersion;
107   }
108
109   public void setReleaseVersion(int releaseVersion) {
110     this.releaseVersion = releaseVersion;
111   }
112
113   @Override
114   public boolean isLicenseOptional() {
115     return licenseOptional;
116   }
117
118   @Override
119   public @NotNull List<PluginId> getIncompatibleModuleIds() {
120     return Collections.emptyList();
121   }
122
123   public void setLicenseOptional(boolean optional) {
124     this.licenseOptional = optional;
125   }
126
127   /**
128    * Plugin update unique ID from Marketplace database.
129    * Needed for getting Plugin meta information.
130    */
131   @Nullable
132   public String getExternalUpdateId() {
133     return externalUpdateId;
134   }
135
136   public void setExternalUpdateId(String externalUpdateId) {
137     this.externalUpdateId = externalUpdateId;
138   }
139
140   /**
141    * Plugin unique ID from Marketplace storage.
142    * Needed for getting Plugin meta information.
143    */
144   @Nullable
145   public String getExternalPluginId() {
146     return externalPluginId;
147   }
148
149   public void setExternalPluginId(String externalPluginId) {
150     this.externalPluginId = externalPluginId;
151   }
152
153   @Override
154   public String getCategory() {
155     return category;
156   }
157
158   /**
159    * Be careful when comparing Plugins versions. Use
160    * PluginManagerColumnInfo.compareVersion() for version comparing.
161    *
162    * @return Return plugin version
163    */
164   @Override
165   public String getVersion() {
166     return version;
167   }
168
169   public void setVersion(String version) {
170     this.version = version;
171   }
172
173   @Override
174   public String getVendor() {
175     return vendor;
176   }
177
178   public void setVendor(@NotNull String vendor) {
179     this.vendor = vendor;
180   }
181
182   @Override
183   public String getDescription() {
184     return description;
185   }
186
187   public void setDescription(String description) {
188     this.description = description;
189   }
190
191   @Override
192   public String getChangeNotes() {
193     return changeNotes;
194   }
195
196   public void setChangeNotes(@NotNull String changeNotes) {
197     this.changeNotes = changeNotes;
198   }
199
200   @Override
201   public String getSinceBuild() {
202     return sinceBuild;
203   }
204
205   public void setSinceBuild(String sinceBuild) {
206     this.sinceBuild = sinceBuild;
207   }
208
209   public Status getStatus() {
210     return myStatus;
211   }
212
213   public void setStatus(Status status) {
214     myStatus = status;
215   }
216
217   public boolean isLoaded() {
218     return myLoaded;
219   }
220
221   public void setLoaded(boolean loaded) {
222     myLoaded = loaded;
223   }
224
225   @Override
226   public String getDownloads() {
227     return downloads;
228   }
229
230   public void setDownloads(String downloads) {
231     this.downloads = downloads;
232   }
233
234   public String getSize() {
235     return size;
236   }
237
238   public void setSize(String size) {
239     this.size = size;
240   }
241
242   @Override
243   public String getVendorEmail() {
244     return vendorEmail;
245   }
246
247   public void setVendorEmail(String vendorEmail) {
248     this.vendorEmail = vendorEmail;
249   }
250
251   @Override
252   public String getVendorUrl() {
253     return vendorUrl;
254   }
255
256   public void setVendorUrl(String vendorUrl) {
257     this.vendorUrl = vendorUrl;
258   }
259
260   @Override
261   public String getUrl() {
262     return url;
263   }
264
265   public void setUrl(String url) {
266     this.url = url;
267   }
268
269   public void setDate(String date) {
270     this.date = Long.valueOf(date);
271   }
272
273   public long getDate() {
274     return date;
275   }
276
277   public List<PluginId> getDepends() {
278     return myDependencies;
279   }
280
281   public void setDepends(@NotNull List<? extends PluginId> depends, PluginId @Nullable [] optionalDependencies) {
282     myDependencies = new ArrayList<>(depends);
283     myOptionalDependencies = optionalDependencies;
284   }
285
286   public void addDepends(@NotNull String id) {
287     (myDependencies != null ? myDependencies : (myDependencies = new ArrayList<>())).add(PluginId.getId(id));
288   }
289
290   public List<String> getTags() {
291     return myTags;
292   }
293
294   public void setTags(@NotNull List<String> tags) {
295     myTags = new ArrayList<>(tags);
296   }
297
298   public void addTags(@NotNull String tag) {
299     (myTags != null ? myTags : (myTags = new ArrayList<>())).add(tag);
300   }
301
302   /**
303    * Methods below implement PluginDescriptor and IdeaPluginDescriptor interface
304    */
305   @Override
306   public PluginId getPluginId() {
307     return id;
308   }
309
310   @Override
311   @Nullable
312   public ClassLoader getPluginClassLoader() {
313     return null;
314   }
315
316   @Override
317   public Path getPluginPath() {
318     return null;
319   }
320
321   @Override
322   public PluginId @NotNull [] getOptionalDependentPluginIds() {
323     return myOptionalDependencies != null ? myOptionalDependencies : PluginId.EMPTY_ARRAY;
324   }
325
326   @Override
327   @Nullable
328   public String getResourceBundleBaseName() {
329     return null;
330   }
331
332   @Override
333   public String getUntilBuild() {
334     return untilBuild;
335   }
336
337   public void setUntilBuild(final String untilBuild) {
338     this.untilBuild = untilBuild;
339   }
340
341   @Override
342   public boolean isEnabled() {
343     return myEnabled;
344   }
345
346   @Override
347   public void setEnabled(boolean enabled) {
348     myEnabled = enabled;
349   }
350
351   public String getDownloadUrl() {
352     return myDownloadUrl;
353   }
354
355   public void setDownloadUrl(String host) {
356     myDownloadUrl = host;
357   }
358
359   public String getRepositoryName() {
360     return myRepositoryName;
361   }
362
363   public void setRepositoryName(String repositoryName) {
364     myRepositoryName = repositoryName;
365   }
366
367   public String getInstalledVersion() {
368     return myInstalledVersion;
369   }
370
371   public void setInstalledVersion(String installedVersion) {
372     myInstalledVersion = installedVersion;
373   }
374
375   public String getRating() {
376     return myRating;
377   }
378
379   public void setRating(String rating) {
380     myRating = rating;
381   }
382
383   public boolean isIncomplete() {
384     return myIncomplete;
385   }
386
387   public void setIncomplete(boolean incomplete) {
388     myIncomplete = incomplete;
389   }
390
391   @Override
392   public boolean equals(Object o) {
393     return this == o || o instanceof PluginNode && id == ((PluginNode)o).id;
394   }
395
396   @Override
397   public int hashCode() {
398     return id.hashCode();
399   }
400
401   @Override
402   public String toString() {
403     return getName();
404   }
405 }