Program: 98589
Project: 98589
Buggy source:
/** 
 * @see org.hbird.exchange.groundstation.ITrackingDevice#track(org.hbird.exchange.groundstation.Track)
 */
@Override public List<CommandBase> track(Track command){
  LOG.debug("String_Node_Str");
  List<String> missing=command.checkArguments();
  if (!missing.isEmpty()) {
    LOG.error("String_Node_Str",command.getClass().getSimpleName(),missing);
    return NO_COMMANDS;
  }
  LocationContactEvent contact=command.getLocationContactEvent();
  Satellite satellite=command.getSatellite();
  if (!validateArgument(contact,StandardArguments.START)) {
    return NO_COMMANDS;
  }
  if (!validateArgument(satellite,StandardArguments.SATELLITE)) {
    return NO_COMMANDS;
  }
  String groundStationId=configuration.getGroundstationId();
  GroundStation groundStation=null;
  try {
    groundStation=catalogue.getGroundStationByName(groundStationId);
  }
 catch (  Exception e) {
    LOG.error("String_Node_Str",groundStationId,e);
    return NO_COMMANDS;
  }
  if (groundStation == null) {
    LOG.error("String_Node_Str",groundStationId);
    return NO_COMMANDS;
  }
  long now=System.currentTimeMillis();
  if (!validateByTime(contact.getStartTime(),now,configuration.isSkipOutDatedCommands())) {
    return NO_COMMANDS;
  }
  if (!isTrackingPossible(contact,groundStation,satellite)) {
    return NO_COMMANDS;
  }
  LOG.info("String_Node_Str",satellite,groundStation);
  List<PointingData> pointingData=null;
  try {
    pointingData=orbitPrediction.requestPointingDataFor(contact,groundStation,satellite,configuration.getCommandInterval());
  }
 catch (  Exception e) {
    LOG.error("String_Node_Str",new Object[]{groundStation.getGroundStationId(),satellite.getSatelliteId(),Dates.toIso8601DateFormat(contact.getStartTime()),e});
    return NO_COMMANDS;
  }
  LOG.debug("String_Node_Str");
  pointingData=optimize(pointingData,configuration,optimizer);
  LOG.debug("String_Node_Str");
  List<CommandBase> commands=new LinkedList<CommandBase>();
  commands.addAll(createPreContactCommands(groundStation,satellite,pointingData,configuration,command));
  commands.addAll(createContactCommands(groundStation,satellite,pointingData,configuration,command));
  commands.addAll(createPostContactCommands(groundStation,satellite,pointingData,configuration,command));
  int size=commands.size();
  String firstCommand=new DateTime(commands.get(0).getExecutionTime()).toString(ISODateTimeFormat.dateTime());
  String lastCommand=new DateTime(commands.get(size - 1).getExecutionTime()).toString(ISODateTimeFormat.dateTime());
  LOG.info("String_Node_Str",new Object[]{size,satellite,groundStation,firstCommand,lastCommand});
  return commands;
}

Fixed version (ground truth):
/** 
 * @see org.hbird.exchange.groundstation.ITrackingDevice#track(org.hbird.exchange.groundstation.Track)
 */
@Override public List<CommandBase> track(Track command){
  LOG.debug("String_Node_Str");
  List<String> missing=command.checkArguments();
  if (!missing.isEmpty()) {
    LOG.error("String_Node_Str",command.getClass().getSimpleName(),missing);
    return NO_COMMANDS;
  }
  LocationContactEvent contact=command.getLocationContactEvent();
  Satellite satellite=command.getSatellite();
  if (!validateArgument(contact,StandardArguments.START)) {
    return NO_COMMANDS;
  }
  if (!validateArgument(satellite,StandardArguments.SATELLITE)) {
    return NO_COMMANDS;
  }
  String groundStationId=configuration.getGroundstationId();
  GroundStation groundStation=null;
  try {
    groundStation=catalogue.getGroundStationByName(groundStationId);
  }
 catch (  Exception e) {
    LOG.error("String_Node_Str",groundStationId,e);
    return NO_COMMANDS;
  }
  if (groundStation == null) {
    LOG.error("String_Node_Str",groundStationId);
    return NO_COMMANDS;
  }
  long now=System.currentTimeMillis();
  if (!validateByTime(contact.getStartTime(),now,configuration.isSkipOutDatedCommands())) {
    return NO_COMMANDS;
  }
  if (!isTrackingPossible(contact,groundStation,satellite)) {
    return NO_COMMANDS;
  }
  LOG.info("String_Node_Str",satellite,groundStation);
  List<PointingData> pointingData=null;
  try {
    pointingData=calculator.calculateContactData(contact,groundStation,configuration.getCommandInterval());
  }
 catch (  Exception e) {
    LOG.error("String_Node_Str",new Object[]{groundStation.getGroundStationId(),satellite.getSatelliteId(),Dates.toIso8601DateFormat(contact.getStartTime()),e});
    return NO_COMMANDS;
  }
  LOG.debug("String_Node_Str");
  pointingData=optimize(pointingData,configuration,optimizer);
  LOG.debug("String_Node_Str");
  List<CommandBase> commands=new LinkedList<CommandBase>();
  commands.addAll(createPreContactCommands(groundStation,satellite,pointingData,configuration,command));
  commands.addAll(createContactCommands(groundStation,satellite,pointingData,configuration,command));
  commands.addAll(createPostContactCommands(groundStation,satellite,pointingData,configuration,command));
  int size=commands.size();
  String firstCommand=new DateTime(commands.get(0).getExecutionTime()).toString(ISODateTimeFormat.dateTime());
  String lastCommand=new DateTime(commands.get(size - 1).getExecutionTime()).toString(ISODateTimeFormat.dateTime());
  LOG.info("String_Node_Str",new Object[]{size,satellite,groundStation,firstCommand,lastCommand});
  return commands;
}