/** Creation of a new Problem with a supplied problem identifier, properties and cause. */
 public Problem(String identifier, Properties props, Problem[] cause) {
   if (identifier.equals("REQUIRED_INPUT_IS_MISSING")) {
     message = "A required input resource has not been established on the Task.";
     description =
         "The Processor that this Task is coordinating requires "
             + "the association of a tagged input resource.  This condition must be fulfilled "
             + "before the process can be started.\n"
             + "\ttag: "
             + props.getProperty("tag")
             + "\n"
             + "\trequired: "
             + props.getProperty("required");
   } else if (identifier.equals("REQUIRED_INPUT_TYPE_MISMATCH")) {
     message = "A required input resource has an invalid type";
     description =
         "The type of resource required by a input constraint is "
             + "different to the type of resource currently bound to a usage association "
             + "of the same name.\n"
             + "\ttag: "
             + props.getProperty("tag")
             + "\n"
             + "\tfound: "
             + props.getProperty("supplied")
             + "\n"
             + "\trequired: "
             + props.getProperty("required");
   } else {
     message = "Unqualified problem";
     description = "A problem has been raised with an unknown problem identifier.";
   }
   Date date = new Date();
   this.timestamp = TimeUtils.getCurrentTime();
   this.identifier = identifier;
   this.cause = cause;
 }
 public Problem(String identifier, String message, Throwable cause) {
   this.timestamp = TimeUtils.getCurrentTime();
   this.identifier = identifier;
   this.message = message;
   this.description = "";
   this.cause = new Problem[] {new Problem(cause)};
 }
 /**
  * Creation of a new Problem with a supplied problem identifier, message, description and cause.
  */
 public Problem(String identifier, String message, String description, Problem[] cause) {
   Date date = new Date();
   this.timestamp = TimeUtils.getCurrentTime();
   this.identifier = identifier;
   this.message = message;
   this.description = description;
   this.cause = cause;
 }
 public Problem(Throwable e) {
   this.timestamp = TimeUtils.getCurrentTime();
   this.identifier = e.getClass().getName();
   this.message = e.getMessage();
   this.description = "";
   if (e.getCause() != null) {
     this.cause = new Problem[] {new Problem(e.getCause())};
   } else {
     this.cause = new Problem[0];
   }
 }
  /** Creation of a new Problem with a supplied problem identifier, and cause. */
  public Problem(String identifier, Problem[] cause) {
    message = "";
    description = "";

    if (identifier.equals("NO_COORDINATOR")) {
      message = "A Processor must be associated with a coordinating Task";
      description =
          "A Processor is coordinated by a single Task that is "
              + "responsible for the inital establishment of process "
              + "preconditions (such as consumption and production usage "
              + "associations). Until a Task is associated as the coordinator, "
              + "this processor cannot be executed.";
    } else if (identifier.equals("PROCESSOR_COORDINATION_ERROR")) {
      message = "Internal error while attempting to locate the coordianting Task";
      description =
          "An unexpected exception occured while attempting to locate "
              + "Task respoonsible for coordination of this Processor.  See log for details";
    } else if (identifier.equals("INPUT_PRECONDITION_ASSESSMENT_ERROR")) {
      message = "Internal error while attempting to assess usage preconditions";
      description =
          "An unexpected exception occured while attempting to validate "
              + " preconditions associated with this process.  See log for details";
    } else if (identifier.equals("INPUT_PRECONDITION_VALIDATION_ERROR")) {
      message = "Internal error while attempting to validate a usage precondition";
      description =
          "An unexpected exception occured while attempting to validate "
              + " a input preconditions associated with this process.  See log for details";
    } else {
      identifier = "UNKNOWN";
      message = "Unqualified problem";
      description = "A problem has been raised with an unknown problem identifier.";
    }
    Date date = new Date();
    this.timestamp = TimeUtils.getCurrentTime();
    this.identifier = identifier;
    this.message = message;
    this.description = description;
    this.cause = cause;
  }