@java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
      return true;
    }
    if (!(obj instanceof com.google.cloud.vmmigration.v1.CutoverStep)) {
      return super.equals(obj);
    }
    com.google.cloud.vmmigration.v1.CutoverStep other =
        (com.google.cloud.vmmigration.v1.CutoverStep) obj;

    if (hasStartTime() != other.hasStartTime()) return false;
    if (hasStartTime()) {
      if (!getStartTime().equals(other.getStartTime())) return false;
    }
    if (hasEndTime() != other.hasEndTime()) return false;
    if (hasEndTime()) {
      if (!getEndTime().equals(other.getEndTime())) return false;
    }
    if (!getStepCase().equals(other.getStepCase())) return false;
    switch (stepCase_) {
      case 3:
        if (!getPreviousReplicationCycle().equals(other.getPreviousReplicationCycle()))
          return false;
        break;
      case 4:
        if (!getShuttingDownSourceVm().equals(other.getShuttingDownSourceVm())) return false;
        break;
      case 5:
        if (!getFinalSync().equals(other.getFinalSync())) return false;
        break;
      case 6:
        if (!getPreparingVmDisks().equals(other.getPreparingVmDisks())) return false;
        break;
      case 7:
        if (!getInstantiatingMigratedVm().equals(other.getInstantiatingMigratedVm())) return false;
        break;
      case 0:
      default:
    }
    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
    return true;
  }
<pre>
The time the step has ended.
</pre>

<code>.google.protobuf.Timestamp end_time = 2;</code>
java-vmmigration/proto-google-cloud-vmmigration-v1/src/main/java/com/google/cloud/vmmigration/v1/CutoverStep.java