errors#

The exceptions the engine throws. All of them are unchecked: they extend RuntimeException, and no method declares throws. Every engine failure is a PlenException, an abstract base with two subclasses:

  • InputException - the data or options passed to a call are invalid. The kind field is an InputErrorKind (PARSE or VALIDATION), and path names the input field the error refers to, such as tasks[3].constraint_date.
  • ProjectException - the call doesn't fit the current state of a Project. The code field is a ProjectError: NO_BASELINE, STALE_BASELINE or NEEDS_RESYNC.

MatchException is the exception of SkillLayer.slots and SkillLayer.validatePool. It isn't a PlenException, so catch (PlenException e) doesn't catch it. Its two nested subclasses, MatchException.Invalid and MatchException.Project, convert to the matching InputException or ProjectException with toPlenException().

A null argument that isn't documented as nullable throws NullPointerException. The JSON API's JsonProjectException is in the json folder.

Cycles, conflicts, a planner that didn't converge and operations that Project#apply rejected aren't exceptions. They come back as data in the result. Every type here is in the org.dhtmlx.plen package. For how to handle each failure and recover a project, see Error handling.

  • InputExceptionThrown when the data or options passed to a call are invalid, with the error kind and the path of the bad field
  • MatchExceptionThe exception SkillLayer.slots and validatePool throw for an invalid pool or requirement, or a project without a baseline
  • ProjectExceptionThrown when a call doesn't fit the current state of a Project, with a ProjectError code
  • PlenExceptionAbstract base class of every exception the engine throws