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