package com.atlassian.labs.speakeasy.model;
import com.atlassian.labs.speakeasy.external.PluginType;
import com.atlassian.plugin.Plugin;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashMap;
import static org.apache.commons.lang.Validate.notNull;
/**
*
*/
@XmlRootElement(name = "plugin")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Extension implements Comparable
{
private String key;
private String name;
private String author;
private String authorEmail;
private String authorDisplayName;
private String version;
private String description;
private String extension;
private int numUsers = 0;
private int numFavorites = 0;
private HashMap<String,String> params;
private boolean fork;
private boolean available;
public Extension(Plugin plugin)
{
notNull(plugin);
this.key = plugin.getKey();
this.name = plugin.getName();
this.description = plugin.getPluginInformation().getDescription();
this.version = plugin.getPluginInformation().getVersion();
this.params = new HashMap<String,String>(plugin.getPluginInformation().getParameters());
}
public Extension()
{
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version = version;
}
public HashMap<String, String> getParams()
{
return params;
}
public void setParams(HashMap<String, String> params)
{
this.params = params;
}
public String getAuthorDisplayName()
{
return authorDisplayName;
}
public void setAuthorDisplayName(String authorDisplayName)
{
this.authorDisplayName = authorDisplayName;
}
public String getAuthor()
{
return author;
}
public void setAuthor(String author)
{
this.author = author;
}
public String getAuthorEmail()
{
return authorEmail;
}
public void setAuthorEmail(String authorEmail)
{
this.authorEmail = authorEmail;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
public int getNumUsers() {
return numUsers;
}
public void setNumUsers(int numUsers) {
this.numUsers = numUsers;
}
public int getNumFavorites()
{
return numFavorites;
}
public void setNumFavorites(int numFavorites)
{
this.numFavorites = numFavorites;
}
public void setForkedPluginKey(String ntohing)
{
}
public String getForkedPluginKey()
{
return getForkedPluginKey(key);
}
public static String getForkedPluginKey(String key)
{
if (key != null && key.contains("-fork-"))
{
return key.substring(0, key.indexOf("-fork-"));
}
return null;
}
public boolean isFork()
{
return fork;
}
public void setFork(boolean fork)
{
this.fork = fork;
}
public boolean isAvailable()
{
return available;
}
public void setAvailable(boolean available)
{
this.available = available;
}
public String getExtension()
{
return extension;
}
public void setExtension(String extension)
{
this.extension = extension;
}
public PluginType getPluginType()
{
return PluginType.valueOf(getExtension().toUpperCase());
}
public int compareTo(Object o)
{
int nameDiff = getName().compareTo(((UserExtension)o).getName());
if (nameDiff != 0)
{
return nameDiff;
}
else
{
return getKey().compareTo(((UserExtension)o).getKey());
}
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (o == null || getClass() != o.getClass())
{
return false;
}
Extension that = (Extension) o;
if (key != null ? !key.equals(that.key) : that.key != null)
{
return false;
}
return true;
}
@Override
public int hashCode()
{
return key != null ? key.hashCode() : 0;
}
}