/* * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ide.plugins; import com.intellij.openapi.components.ComponentConfig; import com.intellij.openapi.extensions.PluginId; import consulo.ide.plugins.PluginJsonNode; import consulo.ide.plugins.SimpleExtension; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * @author stathik */ public class PluginNode implements IdeaPluginDescriptor { public static final int STATUS_UNKNOWN = 0; public static final int STATUS_INSTALLED = 1; public static final int STATUS_MISSING = 2; public static final int STATUS_CURRENT = 3; public static final int STATUS_NEWEST = 4; public static final int STATUS_DOWNLOADED = 5; public static final int STATUS_DELETED = 6; private PluginId id; private String name; private String version; private String platformVersion; private String vendor; private String description; private String changeNotes; private String downloads; private String category; private String size; private String vendorEmail; private String vendorUrl; private String url; private long date = Long.MAX_VALUE; private List<PluginId> myDependencies = Collections.emptyList(); private List<PluginId> myOptionalDependencies = Collections.emptyList(); private int status = STATUS_UNKNOWN; private boolean loaded = false; private String myInstalledVersion; private boolean myEnabled = true; private String myRating; private List<SimpleExtension> mySimpleExtensions = Collections.emptyList(); public PluginNode() { } public PluginNode(PluginId id) { this.id = id; } public PluginNode(PluginJsonNode jsonPlugin) { setId(jsonPlugin.id); setName(jsonPlugin.name); setDescription(jsonPlugin.description); setDate(jsonPlugin.date); setVendor(jsonPlugin.vendor); setVersion(jsonPlugin.version); setPlatformVersion(jsonPlugin.platformVersion); setDownloads(String.valueOf(jsonPlugin.downloads)); setCategory(jsonPlugin.category); if(jsonPlugin.dependencies != null) { addDependency(Arrays.stream(jsonPlugin.dependencies).map(PluginId::getId).toArray(PluginId[]::new)); } if(jsonPlugin.optionalDependencies != null) { addOptionalDependency(Arrays.stream(jsonPlugin.optionalDependencies).map(PluginId::getId).toArray(PluginId[]::new)); } PluginJsonNode.Extension[] extensions = jsonPlugin.extensions; if(extensions != null) { mySimpleExtensions = new ArrayList<>(); for (PluginJsonNode.Extension extension : extensions) { mySimpleExtensions.add(new SimpleExtension(extension.key, extension.values)); } } } @NotNull public List<SimpleExtension> getSimpleExtensions() { return mySimpleExtensions; } public void setCategory(String category) { this.category = category; } @Override public String getName() { return name; } public void setName(String name) { if (id == null) { id = PluginId.getId(name); } this.name = name; } public void setId(String id) { this.id = PluginId.getId(id); } @Override public String getCategory() { return category; } /** * Be carefull when comparing Plugins versions. Use * PluginManagerColumnInfo.compareVersion() for version comparing. * * @return Return plugin version */ @Override public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } @Override public String getPlatformVersion() { return platformVersion; } public void setPlatformVersion(String platformVersion) { this.platformVersion = platformVersion; } @Override public String getVendor() { return vendor; } public void setVendor(String vendor) { this.vendor = vendor; } @Override public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String getChangeNotes() { return changeNotes; } public void setChangeNotes(String changeNotes) { this.changeNotes = changeNotes; } /** * In complex environment use PluginManagerColumnInfo.getRealNodeState () method instead. * * @return Status of plugin */ public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } @Override public String toString() { return getName(); } public boolean isLoaded() { return loaded; } public void setLoaded(boolean loaded) { this.loaded = loaded; } @Override public String getDownloads() { return downloads; } public void setDownloads(String downloads) { this.downloads = downloads; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } @Override public String getVendorEmail() { return vendorEmail; } public void setVendorEmail(String vendorEmail) { this.vendorEmail = vendorEmail; } @Override public String getVendorUrl() { return vendorUrl; } public void setVendorUrl(String vendorUrl) { this.vendorUrl = vendorUrl; } @Override public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public void setDate(Long date) { this.date = date == null ? 0 : date; } public long getDate() { return date; } @Override public int hashCode() { return name.hashCode(); } @Override public boolean equals(Object object) { return object instanceof PluginNode && id.equals(((PluginNode)object).getPluginId()); } public void addDependency(PluginId... depends) { if(myDependencies.isEmpty()) { myDependencies = new ArrayList<PluginId>(); } Collections.addAll(myDependencies, depends); } public void addOptionalDependency(PluginId... depends) { if (myOptionalDependencies.isEmpty()) { myOptionalDependencies = new ArrayList<PluginId>(); } Collections.addAll(myOptionalDependencies, depends); } /** * Methods below implement PluginDescriptor and IdeaPluginDescriptor interface */ @Override public PluginId getPluginId() { return id; } @Override @Nullable public ClassLoader getPluginClassLoader() { return null; } @Override @Nullable public File getPath() { return null; } @Override @NotNull public PluginId[] getDependentPluginIds() { return myDependencies.isEmpty() ? PluginId.EMPTY_ARRAY : myDependencies.toArray(new PluginId[myDependencies.size()]); } @Override @NotNull public PluginId[] getOptionalDependentPluginIds() { return myOptionalDependencies.isEmpty() ? PluginId.EMPTY_ARRAY : myOptionalDependencies.toArray(new PluginId[myOptionalDependencies.size()]); } @Override @Nullable public String getResourceBundleBaseName() { return null; } @Override @Nullable public List<Element> getActionsDescriptionElements() { return null; } @NotNull @Override public ComponentConfig[] getAppComponents() { return ComponentConfig.EMPTY_ARRAY; } @NotNull @Override public ComponentConfig[] getProjectComponents() { return ComponentConfig.EMPTY_ARRAY; } @NotNull @Override public ComponentConfig[] getModuleComponents() { return ComponentConfig.EMPTY_ARRAY; } @NotNull @Override public HelpSetPath[] getHelpSets() { return HelpSetPath.EMPTY; } @Override public boolean isEnabled() { return myEnabled; } @Override public void setEnabled(boolean enabled) { myEnabled = enabled; } @Nullable public String getStatusText() { switch (status) { case STATUS_UNKNOWN: return "Available"; case STATUS_INSTALLED: return "Installed"; case STATUS_NEWEST: return "Ready to update"; default: return null; } } public void setInstalledVersion(String installedVersion) { myInstalledVersion = installedVersion; } public String getInstalledVersion() { return myInstalledVersion; } public void setRating(String rating) { myRating = rating; } public String getRating() { return myRating; } }