[Canonical page](<https://docs.dhtmlx.com/planning-engine/java/api/data/overview/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# data

The input model. [`ProjectData`](<https://docs.dhtmlx.com/planning-engine/java/api/data/project-data.md>) is the full snapshot that [`Project#solve`](<https://docs.dhtmlx.com/planning-engine/java/api/project-solve.md>), [`Project#analyze`](<https://docs.dhtmlx.com/planning-engine/java/api/project-analyze.md>) and [`Engine.schedule`](<https://docs.dhtmlx.com/planning-engine/java/api/engine-schedule.md>) take. The other classes in this folder are its parts: config, calendars, tasks, links, resources and assignments. They're mutable classes with public fields and a fluent `withX(value)` setter per field, so you build them by chaining setters: `new TaskData(Id.num(1)).withStartDate(start).withDuration(2.0)`. A `null` field means the value is absent.

This folder also holds the shared types those records use: [`Id`](<https://docs.dhtmlx.com/planning-engine/java/api/data/id.md>), [`Moment`](<https://docs.dhtmlx.com/planning-engine/java/api/data/moment.md>), [`Pause`](<https://docs.dhtmlx.com/planning-engine/java/api/data/pause.md>) and the enums [`TimeUnit`](<https://docs.dhtmlx.com/planning-engine/java/api/data/time-unit.md>), [`CalendarMode`](<https://docs.dhtmlx.com/planning-engine/java/api/data/calendar-mode.md>) and [`Basis`](<https://docs.dhtmlx.com/planning-engine/java/api/data/basis.md>). Every record has a shallow `copy()`, and most records and option classes in the package implement [`DeepCloneable<T>`](<https://docs.dhtmlx.com/planning-engine/java/api/data/deep-cloneable.md>), so `deepClone()` gives you a copy that shares no list or nested record with the original. Every type here is in the `org.dhtmlx.plen` package.

:::category-index
:::
