/**
 * 
 */
package org.corpus_tools.atomic.tagset;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

import org.corpus_tools.salt.SALT_TYPE;
import org.eclipse.emf.common.util.URI;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

/**
 * A set of valid {@link TagsetValue}s for a given corpus.
 * 
 * @author Stephan Druskat <[mail@sdruskat.net](mailto:mail@sdruskat.net)>
 * 
 */
@JsonDeserialize(using = TagsetDeserializer.class)
public interface Tagset extends Serializable {

	boolean addValue(TagsetValue value);
	
	boolean addValue(int index, TagsetValue value);
	
	boolean removeValue(TagsetValue value);
	
	void setValues(List<TagsetValue> values);
	
	/**
	 * // TODO Add description
	 * 
	 * @return the set of **valid** values for this tagset's corpus
	 */
	List<TagsetValue> getValues();
	
	Set<TagsetValue> getValuesForParameters(String layer, SALT_TYPE elementType, String namespace, String name);
	
	/**
	 * Saves the tagset at the given URI
	 * 
	 * @param uri The URI where the tagset should be saved
	 * @return `true` if the tagset has been successfully save at the given URI
	 */
	boolean save(URI uri);
	
	/**
	 * @return the name of the tagset
	 */
	String getName();
	
	/**
	 * Sets the name of the tagset
	 * 
	 * @param name The tagset's name
	 */
	void setName(String name);
	
	/**
	 * Sets the identifier id of the corpus for which this
	 * tagset provides valid annotation values.
	 * 
	 * @param corpusId The identifier id of corpus this tagset is for
	 */
	void setCorpusId(String corpusId);
	
	/**
	 * @return the identifier id of the corpus this tagset is for
	 */
	String getCorpusId();
	
}

@@ -751,18 +751,19 @@
 urn the 
+li
 s
-e
 t of **v
@@ -845,113 +845,1585 @@
 %0A%09%0A%09
-Set%3CTagsetValue%3E getValuesForParameters(String layer, SALT_TYPE elementType, String namespace, String nam
+/**%0A%09 * Gets the complete set of **valid** values for the given parameters,%0A%09 * i.e., all annotation values for which %0A%09 * %0A%09 * - the tagset layer name equals the given layer name (i.e., the name of %0A%09 * one of the layers the annotation's container is added to, and those%0A%09 * for which the tagset layer name is %60null%60, i.e., not restricted%0A%09 * - the tagset element type equals the given element type (i.e.,%0A%09 * the %7B@link SALT_TYPE%7D of the annotation's container, and those for%0A%09 * which the tagset element type is %60null%60, i.e., not restricted%0A%09 * - the tagset annotation namespace equals the namespace of the%0A%09 * annotation, and those for which the namespace is %60null%60, i.e., %0A%09 * not restricted%0A%09 * - for which the tagset annotation name equals the annotations's%0A%09 * name.  %0A%09 * %0A%09 * @param layer The name of one of the layers the annotation's container is added to%0A%09 * @param elementType The %7B@link SALT_TYPE%7D of the annotation's container%0A%09 * @param namespace The annotation's namespace%0A%09 * @param name The annotation's name%0A%09 * @return the complete set of **valid** values for the combination of given parameters %0A%09 */%0A%09Set%3CTagsetValue%3E getValuesForParameters(String layer, SALT_TYPE elementType, String namespace, String name);%0A%09%0A%09/**%0A%09 * Gets a complete set of **valid** annotation names for the given%0A%09 * parameters.%0A%09 * %0A%09 * @param layer%0A%09 * @param elementType%0A%09 * @param namespace%0A%09 * @return the complete set of **valid** annotation names for the given parameters%0A%09 */%0A%09Set%3CString%3E getAnnotationNamesForParameters(String layer, SALT_TYPE elementType, String namespac
 e);%0A

Add method to get valid names for given parameters