All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.asteriskjava.config.Category Maven / Gradle / Ivy

There is a newer version: 3.41.0
Show newest version
package org.asteriskjava.config;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 */
public class Category extends ConfigElement
{
    private String name;
    private boolean template;
    private final List baseCategories = new ArrayList<>();
    private final List elements = new ArrayList<>();

    /**
     * The last object in the list will get assigned any trailing comments when EOF is hit.
     */
    //private String trailingComment;

    public Category(String name)
    {
        if (name == null)
        {
            throw new IllegalArgumentException("Name must not be null");
        }
        this.name = name;
    }

    public Category(String filename, int lineno, String name)
    {
        super(filename, lineno);
        this.name = name;
    }

    /**
     * Returns the name of this category.
     *
     * @return the name of this category.
     */
    public String getName()
    {
        return name;
    }

    /**
     * Checks if this category is a template.
     *
     * @return true if this category is a template, false otherwise.
     */
    public boolean isTemplate()
    {
        return template;
    }

    void markAsTemplate()
    {
        template = true;
    }

    /**
     * Returns a list of categories this category inherits from.
     *
     * @return a list of categories this category inherits from, never null.
     */
    public List getBaseCategories()
    {
        return baseCategories;
    }

    void addBaseCategory(Category baseCategory)
    {
        baseCategories.add(baseCategory);
    }

    public List getElements()
    {
        return elements;
    }

    public void addElement(ConfigElement element)
    {
        if (element instanceof Category)
        {
            throw new IllegalArgumentException("Nested categories are not allowed");
        }

        elements.add(element);
    }

    public String format()
    {
        StringBuilder sb = new StringBuilder();

        format(sb);
        for (ConfigElement e : elements)
        {
            sb.append("\n");
            e.format(sb);
        }
        return sb.toString();
    }

    @Override
    protected StringBuilder rawFormat(StringBuilder sb)
    {
        sb.append("[").append(name).append("]");
        if (isTemplate() || !getBaseCategories().isEmpty())
        {
            sb.append("(");
            if (isTemplate())
            {
                sb.append("!");
                if (!getBaseCategories().isEmpty())
                {
                    sb.append(",");
                }
            }
            Iterator inheritsFromIterator = getBaseCategories().iterator();
            while (inheritsFromIterator.hasNext())
            {
                sb.append(inheritsFromIterator.next().getName());
                if (inheritsFromIterator.hasNext())
                {
                    sb.append(",");
                }
            }
            sb.append(")");
        }

        return sb;
    }
    
    @Override
    public String toString()
    {
        return name;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy