/*
Copyright (c) 2015 Red Hat, Inc.
Licensed 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.ovirt.engine.sdk4.types;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;

/**
 * Represents a step, which is part of `job` execution.
 * Step is used to describe and track a specific execution unit which is part of a wider sequence.
 * Some steps support reporting their progress.
 */
public interface Step extends Identified {
    Date endTime();
    
    boolean endTimePresent();
    
    boolean external();
    
    boolean externalPresent();
    
    ExternalSystemType externalType();
    
    boolean externalTypePresent();
    
    BigInteger number();
    Byte numberAsByte();
    Short numberAsShort();
    Integer numberAsInteger();
    Long numberAsLong();
    
    boolean numberPresent();
    
    BigInteger progress();
    Byte progressAsByte();
    Short progressAsShort();
    Integer progressAsInteger();
    Long progressAsLong();
    
    boolean progressPresent();
    
    Date startTime();
    
    boolean startTimePresent();
    
    StepStatus status();
    
    boolean statusPresent();
    
    StepEnum type();
    
    boolean typePresent();
    
    Host executionHost();
    
    boolean executionHostPresent();
    
    Job job();
    
    boolean jobPresent();
    
    Step parentStep();
    
    boolean parentStepPresent();
    
    List<Statistic> statistics();
    
    boolean statisticsPresent();
    
}
