/**
 * 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 com.alibaba.jstorm.batch.impl;

import java.io.Serializable;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.alibaba.jstorm.batch.BatchId;
import com.alibaba.jstorm.batch.util.BatchStatus;

public class BatchSpoutMsgId implements Serializable {

    /**  */
    private static final long serialVersionUID = 2899009971479957517L;

    private final BatchId batchId;
    private BatchStatus batchStatus;

    protected BatchSpoutMsgId(BatchId batchId, BatchStatus batchStatus) {
        this.batchId = batchId;
        this.batchStatus = batchStatus;
    }

    public static BatchSpoutMsgId mkInstance() {
        BatchId batchId = BatchId.mkInstance();
        BatchStatus batchStatus = BatchStatus.COMPUTING;

        return new BatchSpoutMsgId(batchId, batchStatus);
    }

    public BatchStatus getBatchStatus() {
        return batchStatus;
    }

    public void setBatchStatus(BatchStatus batchStatus) {
        this.batchStatus = batchStatus;
    }

    public BatchId getBatchId() {
        return batchId;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }
}
