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

com.jamonapi.MonKeyBase Maven / Gradle / Ivy

There is a newer version: 2.82
Show newest version
package com.jamonapi;

import java.util.*;

/** Class that can be used as a composite key for MonitorFactor.add(compositeKey, 100) method calls
 * Note the passed in LinkedHashMap is used as a key to another Map that looks up the associated monitor.
 * Sun java docs says this regarding keys in Maps:  "Note: great care must be exercised if mutable objects
 * are used as map keys. The behavior of a map is not specified if the value of an
 * object is changed in a manner that affects equals comparisons while the object is a key in the map."
 * So once a value is placed in the LinkedHashMap is passed to the MonKeyBase
 * constructor it should not be changed.
 *
 */
public class MonKeyBase implements MonKey {

    private static final long serialVersionUID = 279L;

    /**
     * A key implmentation for label, and units type monitors.
     */
    private Map keyMap;
    private String rangeKeyStr;
    private Object details;
    private String instanceName=DEFAULT_INSTANCE_NAME;

    /** Calls the other constructor.  The keyMap will be used to create the range name */
    public MonKeyBase(LinkedHashMap keyMap) {
        this(null, keyMap);
    }

    /** The LinkHashMap will contain key value pairs.  For example: fn=steve, ln=souza, age=44. LinkHashMap is used
     * as the insertion order needs to be retained for displaying header, and data.  The rangeKeyString is used
     * to look up an associated range should one exist */
    public MonKeyBase(String rangeKeyStr, LinkedHashMap keyMap) {
        this.rangeKeyStr=rangeKeyStr;
        this.keyMap = (keyMap == null) ? new LinkedHashMap() : keyMap;
    }

    /**
     * Returns any object that has a named key. In this keys case 'label' and
     * 'units' makes sense, but any values are acceptible.
     */
    public Object getValue(String key) {
        if (LABEL_HEADER.equalsIgnoreCase(key))
            return getLabel();
        else if ("details".equalsIgnoreCase(key))
            return getDetails();
        else if ("instanceName".equalsIgnoreCase(key))
            return getInstanceName();
        else
            return keyMap.get(key);
    }

    public String getLabel() {
        return toString();
    }

    /**
     * This method is called automatically by a HashMap when this class is used
     * as a HashMap key. A Coordinate is considered equal if its x and y
     * variables have the same value.
     */

    @Override
    public boolean equals(Object compareKey) {

        if (this==compareKey)
            return true;
        else if (compareKey instanceof MonKeyBase) {
            MonKeyBase key=(MonKeyBase) compareKey;
            return keyMap.equals(key.getMonKeyMap());
        } else
            return false;

    }

    /** Used when key is put into a Map to look up the monitor */
    @Override
    public int hashCode() {
        return keyMap.hashCode();
    }

    /** Return the map underlying this Object */
    public Map getMonKeyMap() {
        return keyMap;
    }

    @Override
    public void setInstanceName(String instanceName) {
        this.instanceName = instanceName;
    }

    @Override
    public String getInstanceName() {
        return instanceName;
    }

    /** Puts the word 'Label' into the list.  Used in the basic JAMon report */
    public List getBasicHeader(List header) {
        header.add(INSTANCE_HEADER);
        header.add(LABEL_HEADER);
        return header;
    }

    /** Returns each key in the map as a header element in the list */
    public List getDisplayHeader(List header) {
        return getHeader(header);
    }

    /** Returns each key in the map as a header element in the list */
    public List getHeader(List header) {
        header.add(INSTANCE_HEADER);
        Iterator iter=keyMap.keySet().iterator();
        while(iter.hasNext()) {
            header.add(iter.next());
        }

        return header;
    }


    /** Returns the values assoicated with the key as a comma delimited entry in the list.
     * For example if the map contains firstname, lastname, age then something like
     * steve, souza, 44 would be returned
     */
    public List getBasicRowData(List rowData) {
        rowData.add(getInstanceName());
        Collection row=keyMap.values();
        int currentElement=1;
        int lastElement=row.size();
        Iterator iter=row.iterator();
        StringBuffer buff=new StringBuffer();

        // loop through elements creating a comma delimeted list of the values
        while(iter.hasNext()) {
            buff.append(iter.next());
            if (currentElement!=lastElement)
                buff.append(", ");

            currentElement++;
        }

        if (buff.length()>0)
            rowData.add(buff.toString());

        return rowData;
    }

    /** Add each value from the map at an element to the list.
     */
    public List getRowData(List rowData) {
        rowData.add(getInstanceName());
        Collection row=keyMap.values();
        Iterator iter=row.iterator();
        // loop through elements creating a comma delimeted list of the values
        while(iter.hasNext()) {
            rowData.add(iter.next());
        }

        return rowData;
    }

    /** Add each value from the map at an element to the list.
     */
    public List getRowDisplayData(List rowData) {
        return getRowData(rowData);
    }

    /** Returns a string representation of this object:  JAMon Key, firstname=steve, lastname=souza, age=44*/
    @Override
    public String toString() {
        Iterator iter=keyMap.entrySet().iterator();
        StringBuffer buff=new StringBuffer("JAMon Key");
        while(iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            buff.append(", ").append(entry.getKey()).append("=").append(entry.getValue());

        }

        return buff.toString();
    }

    /** Returns either the passed in range key, or it builds the key from the maps keys concatenated */
    public String getRangeKey() {
        if (rangeKeyStr==null) {
            StringBuffer buff=new StringBuffer();
            Iterator iter=keyMap.keySet().iterator();
            while(iter.hasNext())
                buff.append(iter.next()).append(" ");

            rangeKeyStr=buff.toString();
        }

        return rangeKeyStr;
    }


    public Object getDetails() {
        if (details==null) {
            List list=new ArrayList();
            Iterator iter=keyMap.entrySet().iterator();
            //StringBuffer buff=new StringBuffer();
            while(iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                Object value=entry.getValue();
                if (value instanceof MonKeyItem)
                    value=((MonKeyItem)value).getDetails();

                list.add(value);
            }

            return list;
        } else
            return details;
    }

    public void setDetails(Object details) {
        this.details=details;

    }

    public int getSize() {
        return toString().length();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy