/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 */
package org.apache.qpid.management.ui;

import static org.apache.qpid.management.ui.Constants.ADMIN_MBEAN_TYPE;
import static org.apache.qpid.management.ui.Constants.CONNECTION;
import static org.apache.qpid.management.ui.Constants.DEFAULT_VH;
import static org.apache.qpid.management.ui.Constants.EXCHANGE;
import static org.apache.qpid.management.ui.Constants.QUEUE;
import static org.apache.qpid.management.ui.Constants.VIRTUAL_HOST;

import java.util.HashMap;

/**
 * Class representing a managed bean on the managed server
 */
public abstract class ManagedBean extends ManagedObject
{
    private String _uniqueName = "";
    private String _domain = "";
    private String _type = "";
    private String _virtualHostName = null;
    private ManagedServer _server = null;
    private HashMap _properties = null;
    private int _version;

    public String getProperty(String key)
    {
        return (String) _properties.get(key);
    }

    public HashMap getProperties()
    {
        return _properties;
    }

    public void setProperties(HashMap properties)
    {
        this._properties = properties;
        setName(getProperty("name"));
        setType(getProperty("type"));
        setVersion(getProperty("version"));
        _virtualHostName = getProperty(VIRTUAL_HOST);
    }

    public void setVersion(String version)
    {
        try
        {
            _version = Integer.parseInt(version);
        }
        catch (NumberFormatException nfe)
        {
            _version = 1;
        }

    }

    public int getVersion()
    {
        return _version;
    }

    public String getDomain()
    {
        return _domain;
    }

    public void setDomain(String domain)
    {
        this._domain = domain;
    }

    public ManagedServer getServer()
    {
        return _server;
    }

    public void setServer(ManagedServer server)
    {
        this._server = server;
    }

    public String getType()
    {
        return _type;
    }

    public void setType(String type)
    {
        this._type = type;
    }

    public String getUniqueName()
    {
        return _uniqueName;
    }

    public void setUniqueName(String uniqueName)
    {
        this._uniqueName = uniqueName;
    }

    public String getVirtualHostName()
    {
        // To make it work with the broker with no virtual host implementation
        return _virtualHostName == null ? DEFAULT_VH : _virtualHostName;
    }

    /**
     * Returns mbean instance name. MBeans which have only one instance, the type attribute will be returned
     *
     * @return
     */
    public String getInstanceName()
    {
        if (getName() != null)
        {
            return getName();
        }
        else
        {
            return getType();
        }
    }

    public boolean isQueue()
    {
        return _type.endsWith(QUEUE);
    }

    public boolean isConnection()
    {
        return _type.endsWith(CONNECTION);
    }

    public boolean isExchange()
    {
        return _type.endsWith(EXCHANGE);
    }

    public boolean isTempQueue()
    {
        return (isQueue() && getName().startsWith("tmp_"));
    }

    public boolean isAdmin()
    {
        return _type.endsWith(ADMIN_MBEAN_TYPE);
    }
}
