package com.atlassian.labs.speakeasy.model;
import com.atlassian.labs.speakeasy.manager.convention.JsonVendor;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.atlassian.labs.speakeasy.util.ExtensionValidate.isValidExtensionKey;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import static com.google.common.collect.Sets.newHashSet;
/**
*
*/
@XmlRootElement
public class JsonManifest
{
public static final String ATLASSIAN_EXTENSION_PATH = "atlassian-extension.json";
@XmlAttribute
private String key;
@XmlAttribute
private String name;
@XmlAttribute
private String description;
@XmlAttribute
private String version;
@XmlElement
private JsonVendor vendor;
@XmlElement
private Map<Integer, String> icons = newHashMap();
@XmlElement
private String screenshot;
@XmlElement
private Set<String> permissions = newHashSet();
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 getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version = version;
}
public JsonVendor getVendor()
{
return vendor;
}
public void setVendor(JsonVendor vendor)
{
this.vendor = vendor;
}
public Map<Integer, String> getIcons()
{
return icons;
}
public void setIcons(Map<Integer, String> icons)
{
this.icons = icons;
}
public String getScreenshot()
{
return screenshot;
}
public void setScreenshot(String screenshot)
{
this.screenshot = screenshot;
}
public Set<String> getPermissions()
{
return permissions;
}
public void setPermissions(Set<String> permissions)
{
this.permissions = permissions;
}
public List<String> isValid(Settings settings)
{
List<String> errors = newArrayList();
ensure(isValidExtensionKey(key), "Extension key ", errors);
ensure(name != null && name.length() < 30, "Name must be between 0 and 30 characters", errors);
ensure(version != null && version.length() < 20, "Version must be between 0 and 20 characters", errors);
ensure(permissions != null, "Missing permissions", errors);
for (String perm : permissions)
{
ensure(settings.allowsPermission(perm), "Permission '" + perm + "' not allowed on this instance", errors);
}
return errors;
}
private void ensure(boolean test, String errorMessage, List<String> errors)
{
if (!test)
{
errors.add(errorMessage);
}
}
}