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