private void resolveContext(TaskContext taskContext, CommonTaskContext commonTaskContext) {

    // This is a hack to ultimately resolve the BuildDefinition.  Unfortunately this is not well
    // encapsulated and the lack of
    //      information provided to the deploy task makes it difficult to navigate back to.
    if (taskContext != null) {
      // taskContext is null for deploy tasks
      setBuildContext(taskContext.getBuildContext().getParentBuildContext());
      setBuildDefinition(getBuildContext().getBuildDefinition());
    } else {

      // this is a deploy task
      final DeploymentTaskContext deploymentTaskContext =
          Narrow.to(commonTaskContext, DeploymentTaskContext.class);
      long environmentId = deploymentTaskContext.getDeploymentContext().getEnvironmentId();

      DeploymentProject deploymentProject =
          getDeploymentProjectService().getDeploymentProjectForEnvironment(environmentId);
      Plan plan = getPlanManager().getPlanByKey(deploymentProject.getPlanKey());
      setBuildDefinition(plan.getBuildDefinition());
    }
  }