Merge remote-tracking branch 'origin/master' into prendota/plugin-manager-new-protocol
[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.io.File;
9 import java.nio.file.Path;
10 import java.util.ArrayList;
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   public void setLicenseOptional(boolean optional) {
119     this.licenseOptional = optional;
120   }
121
122   /**
123    * Plugin update unique ID from Marketplace database.
124    * Needed for getting Plugin meta information.
125    */
126   @Nullable
127   public String getExternalUpdateId() {
128     return externalUpdateId;
129   }
130
131   public void setExternalUpdateId(String externalUpdateId) {
132     this.externalUpdateId = externalUpdateId;
133   }
134
135   /**
136    * Plugin unique ID from Marketplace storage.
137    * Needed for getting Plugin meta information.
138    */
139   @Nullable
140   public String getExternalPluginId() {
141     return externalPluginId;
142   }
143
144   public void setExternalPluginId(String externalPluginId) {
145     this.externalPluginId = externalPluginId;
146   }
147
148   @Override
149   public String getCategory() {
150     return category;
151   }
152
153   /**
154    * Be careful when comparing Plugins versions. Use
155    * PluginManagerColumnInfo.compareVersion() for version comparing.
156    *
157    * @return Return plugin version
158    */
159   @Override
160   public String getVersion() {
161     return version;
162   }
163
164   public void setVersion(String version) {
165     this.version = version;
166   }
167
168   @Override
169   public String getVendor() {
170     return vendor;
171   }
172
173   public void setVendor(@NotNull String vendor) {
174     this.vendor = vendor;
175   }
176
177   @Override
178   public String getDescription() {
179     return description;
180   }
181
182   public void setDescription(String description) {
183     this.description = description;
184   }
185
186   @Override
187   public String getChangeNotes() {
188     return changeNotes;
189   }
190
191   public void setChangeNotes(@NotNull String changeNotes) {
192     this.changeNotes = changeNotes;
193   }
194
195   @Override
196   public String getSinceBuild() {
197     return sinceBuild;
198   }
199
200   public void setSinceBuild(String sinceBuild) {
201     this.sinceBuild = sinceBuild;
202   }
203
204   public Status getStatus() {
205     return myStatus;
206   }
207
208   public void setStatus(Status status) {
209     myStatus = status;
210   }
211
212   public boolean isLoaded() {
213     return myLoaded;
214   }
215
216   public void setLoaded(boolean loaded) {
217     myLoaded = loaded;
218   }
219
220   @Override
221   public String getDownloads() {
222     return downloads;
223   }
224
225   public void setDownloads(String downloads) {
226     this.downloads = downloads;
227   }
228
229   public String getSize() {
230     return size;
231   }
232
233   public void setSize(String size) {
234     this.size = size;
235   }
236
237   @Override
238   public String getVendorEmail() {
239     return vendorEmail;
240   }
241
242   public void setVendorEmail(String vendorEmail) {
243     this.vendorEmail = vendorEmail;
244   }
245
246   @Override
247   public String getVendorUrl() {
248     return vendorUrl;
249   }
250
251   public void setVendorUrl(String vendorUrl) {
252     this.vendorUrl = vendorUrl;
253   }
254
255   @Override
256   public String getUrl() {
257     return url;
258   }
259
260   public void setUrl(String url) {
261     this.url = url;
262   }
263
264   public void setDate(String date) {
265     this.date = Long.valueOf(date).longValue();
266   }
267
268   public long getDate() {
269     return date;
270   }
271
272   public List<PluginId> getDepends() {
273     return myDependencies;
274   }
275
276   public void setDepends(@NotNull List<? extends PluginId> depends, PluginId @Nullable [] optionalDependencies) {
277     myDependencies = new ArrayList<>(depends);
278     myOptionalDependencies = optionalDependencies;
279   }
280
281   public void addDepends(@NotNull String id) {
282     (myDependencies != null ? myDependencies : (myDependencies = new ArrayList<>())).add(PluginId.getId(id));
283   }
284
285   public List<String> getTags() {
286     return myTags;
287   }
288
289   public void setTags(@NotNull List<String> tags) {
290     myTags = new ArrayList<>(tags);
291   }
292
293   public void addTags(@NotNull String tag) {
294     (myTags != null ? myTags : (myTags = new ArrayList<>())).add(tag);
295   }
296
297   /**
298    * Methods below implement PluginDescriptor and IdeaPluginDescriptor interface
299    */
300   @Override
301   public PluginId getPluginId() {
302     return id;
303   }
304
305   @Override
306   @Nullable
307   public ClassLoader getPluginClassLoader() {
308     return null;
309   }
310
311   @Override
312   @Nullable
313   public File getPath() {
314     return null;
315   }
316
317   @Override
318   public Path getPluginPath() {
319     return null;
320   }
321
322   @Override
323   public PluginId @NotNull [] getOptionalDependentPluginIds() {
324     return myOptionalDependencies != null ? myOptionalDependencies : PluginId.EMPTY_ARRAY;
325   }
326
327   @Override
328   @Nullable
329   public String getResourceBundleBaseName() {
330     return null;
331   }
332
333   @Override
334   public String getUntilBuild() {
335     return untilBuild;
336   }
337
338   public void setUntilBuild(final String untilBuild) {
339     this.untilBuild = untilBuild;
340   }
341
342   @Override
343   public boolean isEnabled() {
344     return myEnabled;
345   }
346
347   @Override
348   public void setEnabled(boolean enabled) {
349     myEnabled = enabled;
350   }
351
352   public String getDownloadUrl() {
353     return myDownloadUrl;
354   }
355
356   public void setDownloadUrl(String host) {
357     myDownloadUrl = host;
358   }
359
360   public String getRepositoryName() {
361     return myRepositoryName;
362   }
363
364   public void setRepositoryName(String repositoryName) {
365     myRepositoryName = repositoryName;
366   }
367
368   public String getInstalledVersion() {
369     return myInstalledVersion;
370   }
371
372   public void setInstalledVersion(String installedVersion) {
373     myInstalledVersion = installedVersion;
374   }
375
376   public String getRating() {
377     return myRating;
378   }
379
380   public void setRating(String rating) {
381     myRating = rating;
382   }
383
384   public boolean isIncomplete() {
385     return myIncomplete;
386   }
387
388   public void setIncomplete(boolean incomplete) {
389     myIncomplete = incomplete;
390   }
391
392   @Override
393   public boolean equals(Object o) {
394     return this == o || o instanceof PluginNode && id == ((PluginNode)o).id;
395   }
396
397   @Override
398   public int hashCode() {
399     return id.hashCode();
400   }
401
402   @Override
403   public String toString() {
404     return getName();
405   }
406 }