/**
 * Autogenerated by Thrift Compiler (0.9.1)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
package org.apache.airavata.datacat.models.Messaging;


public enum MessageType implements org.apache.thrift.TEnum {
    EXPERIMENT(0),
    TASK(1),
    WORKFLOWNODE(2),
    JOB(3),
    EXPERIMENT_OUTPUT(4),
    OUTPUT_PARSED(5);

    private final int value;

    private MessageType(int value) {
        this.value = value;
    }

    /**
     * Get the integer value of this enum value, as defined in the Thrift IDL.
     */
    public int getValue() {
        return value;
    }

    /**
     * Find a the enum type by its integer value, as defined in the Thrift IDL.
     * @return null if the value is not found.
     */
    public static MessageType findByValue(int value) {
        switch (value) {
            case 0:
                return EXPERIMENT;
            case 1:
                return TASK;
            case 2:
                return WORKFLOWNODE;
            case 3:
                return JOB;
            case 4:
                return EXPERIMENT_OUTPUT;
            case 5:
                return OUTPUT_PARSED;
            default:
                return null;
        }
    }
}
