DataSectionElementSpec.java |
/* * $Id: DataSectionElementSpec.java,v 1.18 2010/09/29 17:21:48 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.common.spec; import java.util.List; import java.util.Map; import org.xins.common.MandatoryArgumentChecker; /** * Specification of a data section element. * * @version $Revision: 1.18 $ $Date: 2010/09/29 17:21:48 $ * @author <a href="mailto:anthony.goubard@japplis.com">Anthony Goubard</a> * * @since XINS 1.3.0 */ public final class DataSectionElementSpec { /** * Name of the element, cannot be <code>null</code>. */ private final String _name; /** * Description of the element, cannot be <code>null</code>. */ private final String _description; /** * Flag indicating that the element can have PCDATA. */ private final boolean _isPCDataAllowed; /** * The sub elements of the element, cannot be <code>null</code>. */ private final Map _subElements; /** * The attributes of the element, cannot be <code>null</code>. */ private final Map _attributes; /** * The attribute combos of the element, cannot be <code>null</code>. */ private final List _attributeCombos; /** * Creates a new instance of <code>DataSectionElementSpec</code>. * * @param name * the name of the data section element, cannot be <code>null</code>. * * @param description * the description of the data section element, cannot be <code>null</code>. * * @param isPCDataAllowed * <code>true</code> if the element can contain text, <code>false</code> otherwise. * * @param subElements * the sub elements that can contain this element, cannot be <code>null</code>. * * @param attributes * the possible attributes for this element, cannot be <code>null</code>. * * @param attributeCombos * the attribute combos for this element, cannot be <code>null</code>. */ DataSectionElementSpec(String name, String description, boolean isPCDataAllowed, Map subElements, Map attributes, List attributeCombos) { _name = name; _description = description; _isPCDataAllowed = isPCDataAllowed; _attributes = attributes; _subElements = subElements; _attributeCombos = attributeCombos; } /** * Gets the name of the data element. * * @return * The name of the data element, never <code>null</code>. */ public String getName() { return _name; } /** * Gets the description of the data element. * * @return * The description of the data element, never <code>null</code>. */ public String getDescription() { return _description; } /** * Gets the specified sub element that are included in this element. * * @param elementName * the name of the element, cannot be <code>null</code>. * * @return * The specification of the sub element, never <code>null</code>. * * @throws IllegalArgumentException * if <code>elementName == null</code>. * * @throws EntityNotFoundException * if the element does not have any sub element with the specified name. */ public DataSectionElementSpec getSubElement(String elementName) throws IllegalArgumentException, EntityNotFoundException { MandatoryArgumentChecker.check("elementName", elementName); DataSectionElementSpec element = (DataSectionElementSpec) _subElements.get(elementName); if (element == null) { throw new EntityNotFoundException("Sub element \"" + elementName + "\" not found in the element \"" + _name +"\"."); } return element; } /** * Gets the specification of the sub elements that are included in this element. * The key is the name of the element, the value is the {@link DataSectionElementSpec} object. * * @return * the specification of the sub elements, never <code>null</code>. */ public Map getSubElements() { return _subElements; } /** * Gets the specification of the specified attribute of the element. * * @param attributeName * the name of the attribute, cannot be <code>null</code>. * * @return * The specification of the attribute, never <code>null</code>. * * @throws EntityNotFoundException * if the element does not have any attribute with the specified name. * * @throws IllegalArgumentException * if <code>attributeName == null</code>. */ public ParameterSpec getAttribute(String attributeName) throws EntityNotFoundException, IllegalArgumentException { MandatoryArgumentChecker.check("attributeName", attributeName); ParameterSpec attribute = (ParameterSpec) _attributes.get(attributeName); if (attribute == null) { throw new EntityNotFoundException("Attribute \"" + attributeName + "\" not found in the element \"" + _name +"\"."); } return attribute; } /** * Gets the attributes of the element. * The key is the name of the attribute, the value is the {@link ParameterSpec} object. * * @return * The specification of the attributes, never <code>null</code>. */ public Map getAttributes() { return _attributes; } /** * Returns whether the element can contain a PCDATA text. * * @return * <code>true</code> if the element can contain text, <code>false</code> otherwise. */ public boolean isPCDataAllowed() { return _isPCDataAllowed; } /** * Gets the attribute combos defined for the element. * A list of {@link AttributeComboSpec} object. * * @return * the list of the attribute combos define for the element, never <code>null</code>. * * @since XINS 1.4.0 */ public List getAttributeCombos() { return _attributeCombos; } }