/**
 * 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.hadoop.yarn.server.api.protocolrecords;


import org.apache.hadoop.yarn.util.Records;

/**
 * GetTimelineCollectorContextResponse sent in response of
 * GetTimelineCollectorContextRequest invoked by collector. The response
 * includes user, flow name, flow version and flow run ID. This is then
 * associated by collector with every incoming put-entity request.
 */
public abstract class GetTimelineCollectorContextResponse {

  public static GetTimelineCollectorContextResponse newInstance(
      String userId, String flowName, String flowVersion, long flowRunId) {
    GetTimelineCollectorContextResponse response =
        Records.newRecord(GetTimelineCollectorContextResponse.class);
    response.setUserId(userId);
    response.setFlowName(flowName);
    response.setFlowVersion(flowVersion);
    response.setFlowRunId(flowRunId);
    return response;
  }

  public abstract String getUserId();

  public abstract void setUserId(String userId);

  public abstract String getFlowName();

  public abstract void setFlowName(String flowName);

  public abstract String getFlowVersion();

  public abstract void setFlowVersion(String flowVersion);

  public abstract long getFlowRunId();

  public abstract void setFlowRunId(long flowRunId);
}
