/*
 * Copyright 2014 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package org.jboss.windup.config.parser;

/**
 * Identifies an {@link ElementHandler} by its tag name and namespace.
 * 
 * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
 */
public class HandlerId
{
    final private String namespace;
    final private String tagName;

    /**
     * Represents a namespace and tag name.
     */
    public HandlerId(String namespace, String tagName)
    {
        this.tagName = tagName;
        this.namespace = namespace;
    }

    /**
     * Gets the tag name associated with this {@link ElementHandler}
     */
    public String getTagName()
    {
        return tagName;
    }

    /**
     * Gets the namespace uri associated with this {@link ElementHandler}
     */
    public String getNamespace()
    {
        return namespace;
    }

    @Override
    public int hashCode()
    {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((namespace == null) ? 0 : namespace.hashCode());
        result = prime * result + ((tagName == null) ? 0 : tagName.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj)
    {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        HandlerId other = (HandlerId) obj;
        if (namespace == null)
        {
            if (other.namespace != null)
                return false;
        }
        else if (!namespace.equals(other.namespace))
            return false;
        if (tagName == null)
        {
            if (other.tagName != null)
                return false;
        }
        else if (!tagName.equals(other.tagName))
            return false;
        return true;
    }

    @Override
    public String toString()
    {
        return "HandlerId [namespace=" + namespace + ", tagName=" + tagName + "]";
    }

}
