package com.atlassian.labs.speakeasy.commonjs.util;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.google.common.collect.Lists.newArrayList;
/**
*
*/
public class JsDoc
{
@XmlAttribute
private final String description;
@XmlElement
private final Map<String,Collection<String>> attributes;
private static final Pattern PARAM_PATTERN = Pattern.compile("([^ ]+)\\s+(.*)");
private final List<JsDocParam> params;
public JsDoc(String description)
{
this(description, Collections.<String,Collection<String>>emptyMap());
}
public JsDoc(String description, Map<String, Collection<String>> attributes)
{
this.description = description != null ? description : "";
this.attributes = attributes;
List<JsDocParam> params = newArrayList();
if (attributes.containsKey("param"))
{
for (String line : attributes.get("param"))
{
Matcher m = PARAM_PATTERN.matcher(line);
if (m.matches())
{
params.add(new JsDocParam(m.group(1), m.group(2)));
}
}
}
this.params = Collections.unmodifiableList(params);
}
public String getDescription()
{
return description;
}
public String getAttribute(String key)
{
final Collection<String> values = attributes.get(key);
if (values != null && !values.isEmpty())
{
return values.iterator().next();
}
return null;
}
public Collection<String> getAttributeValues(String key)
{
return attributes.get(key);
}
public List<JsDocParam> getParams()
{
return params;
}
}