Fork me on GitHub

MPXJ Changes

Get the RSS feed of the last changes: rss feed

Release 12.9.4 – unreleased

No changes in this release.

Release 12.9.3 – 2024-04-24

Type Changes By
Update Improve handling of non-standard timestamp formats in XER files. joniles

Release 12.9.2 – 2024-04-19

Type Changes By
Update Ensure calendars in Asta schedules have the correct name. joniles
Update Improve assignment of calendars to summary tasks when reading Asta schedules. joniles
Update Preserve calendar hierarchy when reading Asta schedules. joniles

Release 12.9.1 – 2024-04-17

Type Changes By
Update Fix an issue where `UniversalProjectReader` would raise an exception when handling an unknown file type. joniles
Update Ensure that resource type is included as part of the resource assignment data when writing PMXML files. joniles

Release 12.9.0 – 2024-04-11

Type Changes By
Update Updated `UniversalProjectReader` to add `getProjectReaderProxy` methods to allow access to the instance of the reader class which will be used to read a schedule, prior to the schedule being read. This will allow the reader to be configured, or schedule to be ignored without reading its content. joniles
Update Deprecated the `ProjectReader.setProperties` method. This method was originally implemented to allow settings to be passed to reader classes when using `UniversalProjectReader`. You can now use `UniversalProjectReader.getProjectReaderProxy` to achieve this. joniles
Update Add `from` method to all `Builder` classes to allow initialisation from existing objects. joniles
Update The `CostAccount.Builder` class now provides two `notes` methods to allow formatted or unformatted notes to be added to cost accounts. joniles
Update The `CostAccount` method `getDescription()` has been marked as deprecated. Use the `getNotes()` or `getNotesObject()` method instead. joniles
Update The `CustomFieldValueItem` methods `getParent` and `setParent` have been marked as deprecated. Use the `getParentUniqueID` and `setParentUniqueID` methods instead. joniles
Update JSON output from MPXJ now includes more detail for custom field definitions read from MPP files. joniles
Update When reading a PMXML file, populate the Early/Late Start/Finish date attributes from the Remaining Early/Late Start/Finish date attributes. joniles
Update Fix an issue reading WBS ID for P3 and SureTrak schedules. joniles

Release 12.8.1 – 2024-03-11

Type Changes By
Update Improve reading resource assignments from certain FastTrack FTS files. joniles

Release 12.8.0 – 2024-03-04

Type Changes By
Update Add experimental support for reading Deltek Open Plan BK3 files. joniles
Update Implemented the `Relation.Builder` class. joniles
Update Marked the `Relation(Task,Task,RelationType,Duration)` constructor as deprecated, use the `Relation.Builder` class instead. joniles
Update Marked the `RelationContainer.addPredecessor(Task,Task,RelationType,Duration)` method as deprecated, use the `RelationContainer.addPredecessor(Relation.Builder)` method instead. joniles
Update Marked the `Task.addPredecessor(Task,RelationType,Duration)` method as deprecated, use the `Task.addPredecessor(Relation.Builder)` method instead. joniles
Update Add a notes attribute to the `Relation` class and ensure that it is read from and written to P6 schedules. joniles
Update Read the Relationship Lag Calendar setting from Phoenix 5 files. (Contributed by Rohit Sinha) joniles
Update Don't write a material label to an MSPDI file for a resource which isn't a material. joniles
Update Update representation of Work Variance when writing MSPDI files to more closely match output from Microsoft Project. joniles
Update Updated to ensure that when schedules are read from XER files or P6 databases, labor and nonlabor work amounts are combined for the Actual, Remaining and Planned work attributes. This is now consistent with the existing behavior when reading PMXML files. joniles
Update Added support for new Task attributes Actual Work Labor, Actual Work Nonlabor, Remaining Work Labor, Remaining Work Nonlabor, Planned Work Labor, Planned Work Nonlabor, when reading and writing P6 schedules. joniles
Update Update default `readAll` method on reader classes to ensure that if the reader is unable to read any schedule data, an empty list is returned rather than a list containing `null`. joniles
Update Ensure that Task Start and Finish dates are both the same when reading milestones from PMXML files, and that the correct date is used depending on whether we have a Start Milestone or a Finish Milestone. joniles

Release 12.7.0 – 2024-02-07

Type Changes By
Update Added support for reading and writing the project property Baseline Calendar Name to and from MPP and MSPDI files. joniles
Update Ensure Start Variance and Finish Variance are read from and written to MSPDI files in the correct format. joniles
Update Improve accuracy of large Work Variance values read from MSPDI files. joniles
Update Add support for the Calendar GUID attribute, which is read from MPP and MSPDI files, and written to MSPDI files. joniles
Update Ensure Activity Codes are available when reading Phoenix PPX files even if they are also being used to construct the task hierarchy. joniles
Update Ensure Activity Codes Values are populated when reading Phoenix PPX files. (Contributed by Rohit Sinha) joniles
Update When writing an MSPDI file, derive the TimephasedData Unit attribute from the duration of the timephased data item. joniles
Update Fixed an issue with the `ProjectCalendar.getPreviousWorkFinish` method when called with a time which was already at the end of a period of work. joniles
Update Ensure that the `proj_node_flag` is set for the root WBS node when writing XER files. joniles

Release 12.6.0 – 2024-01-22

Type Changes By
Update Updated PMXML schema to version 23.12. joniles
Update Ensure that baselines in PMXML files written by Oracle Primavera Cloud are read. joniles
Update Fix an issue reading certain XER files and P6 databases where activities lost the relationship with their parent WBS entry. joniles
Update Added `ResourceAssignment.getEffectiveCalendar` method. joniles
Update Deprecated `ResourceAssignment.getCalendar` method, use `getEffectiveCalendar` method instead. joniles
Update Improved reading timephased baseline work from MPP files. joniles
Update Added new versions of the `TimephasedUtility.segmentBaselineWork` and `segmentBaselineCost` methods which take a `ProjectCalendar` instance as the first argument rather than a `ProjectFile` instance. joniles
Update Deprecated the `TimephasedUtility.segmentBaselineWork` and `segmentBaselineCost` methods which take a `ProjectFile` instance as the first argument. joniles
Update Added a new version of the `ProjectCalendar.getDate()` method which just takes a date and a duration as its arguments. This method handles both positive and negative durations. joniles
Update Marked the original version of the `ProjectCalendar.getDate()` method as deprecated. Use the new version instead. joniles
Update Improve recognition of task splits when reading MPP and MSPDI files. joniles

Release 12.5.0 – 2023-12-18

Type Changes By
Update Add support for the following Resource Assignment attributes: Remaining Early Start, Remaining Early Finish, Remaining Late Start, and Remaining Late Finish. joniles
Update Ensure that the Resource Assignment attributes Remaining Early Start and Remaining Early Finish are read from and written to PMXML files. joniles
Update Ensure that the Resource Assignment attributes Remaining Early Start, Remaining Early Finish, Remaining Late Start, and Remaining Late Finish are read from and written to XER files. joniles
Update Improve accuracy of reading and writing the `ProjectProperties` Relationship Lag Calendar attribute for PMXML files. joniles
Update All P6 scheduling and leveling options which were previously made available via the `ProjectProperties` custom properties map are now deprecated. These properties now have individual getter and setter methods available on the `ProjectProperties` class. Note: this may be a breaking change if you were creating schedules from scratch, populating the custom properties map, then writing PMXML or XER files. In this case you will need to update your code, for all other use cases your code will continue to work unchanged until the next major version of MPXJ. joniles
Update Added support for reading and writing the `ProjectProperties` attributes Baseline Type Name, Baseline Type Unique ID, and Last Baseline Update Date for baseline projects in PMXML files. joniles
Update When reading projects from PMXML files, if the creation date attribute is not present in the file fall back to populating the `ProjectProperties` creation date attribute with the PMXML date added attribute. joniles
Update When writing PMXML files, ensure the date added attribute for projects is populated with the creation date. joniles
Update Add the `CustomFieldContainer.remove` method to allow field configurations to be removed. joniles
Update Updated the `UserDefinedFieldContainer.remove` method to ensure that any associated field configuration is removed from the `CustomFieldContainer`. joniles
Update Ensure that Microsoft Project's "unknown" resource (with Unique ID zero) is not exported to XER files. joniles
Update Ensure that resource assignments which are not associated with an Activity or a Resource are not written to XER files. joniles
Update Durations are written to PMXML files in hours. We now round to 2 decimal places to allow minutes to be represented, and avoid unnecessary precision. joniles
Update Currency amounts written to PMXML files are now rounded to 8 decimal places to more closely match the behavior of P6, and avoid unnecessary precision. joniles
Update Decimal amounts other than currency and duration are written to PMXML files with 15 decimal places to more closely match the behavior of P6. joniles
Update Fix an issue reading ConceptDraw calendars. joniles
Update Fixed a misspelled field name in the JSON output (Contributed by Daniel Taylor). joniles
Update Improved handling of the Resource Assignment Planned and Remaining Units and Units per Time attributes read from and written to P6 schedules. joniles
Update Added support for the following project properties: Activity ID Prefix, Activity ID Suffix, Activity ID Increment and Activity ID Based On Selected Activity, and ensure these are read from and written to P6 schedules. joniles

Release 12.4.0 – 2023-11-23

Type Changes By
Update Added support for the WBS Code Separator attribute to `ProjectProperties`. joniles
Update Avoid creating duplicate `ActivityCodeValue` instances when reading Asta PP files. joniles
Update Added a new version of the `ProjectFile.expandSubprojects` method which takes a `boolean` argument indicating if external tasks should be removed. Passing `true` to this method will recreate predecessor and successor relationships using the original tasks rather than the placeholder external tasks, and will remove the external tasks. joniles
Update Marked the `ProjectFile.expandSubprojects()` method as deprecated, use the new version which takes a `boolean` argument instead. joniles
Update Ensure the `ProjectProperties` name attribute is set correctly when reading XER files and P6 databases. joniles
Update The `ProjectEntityContainer` method `renumberUniqueIDs` has been marked as deprecated. joniles
Update The `ProjectEntityContainer` method `getNextUniqueID` has been marked as deprecated. Use `ProjectFile.getUniqueIdObjectSequence(class).getNext()` instead. joniles
Update The `ProjectEntityContainer` method `updateUniqueIdCounter` has been marked as deprecated as it is no longer required. joniles
Update The `ProjectFile` method `updateUniqueIdCounters` has been marked as deprecated as it is no longer required. joniles
Update The `ObjectSequence` method `reset` has been marked as deprecated as it is no longer required. joniles
Update When creating a `Location` instance using the `Builder` class, a Unique ID will be generated if one is not supplied. joniles
Update The no-arg `Location.Builder` constructor has been marked a deprecated. Use the constructor which requires a `ProjectFile` instance instead. joniles
Update Implemented the `ExpenseItem.Builder` class. joniles
Update Marked the `ExpenseItem(task)` constructor as deprecated, use the `ExpenseItem.Builder` class instead. joniles
Update Marked all `ExpenseItem` setter methods a deprecated. The `ExpenseItem` class will be immutable in the next major release. joniles
Update Marked no-arg `UnitOfMeasure.Builder()` constructor as deprecated, use the `UnitOfMeasure.Builder(ProjectFile)` constructor instead. joniles
Update Implemented the `Step.Builder` class. joniles
Update Marked the `Step(task)` constructor as deprecated, use the `Step.Builder` class instead. joniles
Update Marked all `Step` setter methods a deprecated. The `Step` class will be immutable in the next major release. joniles
Update Marked the `NotesTopic` constructor as deprecated, use the `NotesTopic.Builder(ProjectFile)` constructor instead. joniles
Update Implemented the `ExpenseCategory.Builder` class. joniles
Update Marked the `ExpenseCategory` constructor as deprecated, use the `ExpenseCategory.Builder` class instead. joniles
Update Implemented the `CostAccount.Builder` class. joniles
Update Marked the `CostAccount` constructor as deprecated, use the `CostAccount.Builder` class instead. joniles
Update Implemented the `ActivityCodeValue.Builder` class. joniles
Update Marked the `ActivityCodeValue` constructor as deprecated, use the `ActivityCodeValue.Builder` class instead. joniles
Update Marked the `ActivityCodeValue.setParent` method as deprecated, use the `ActivityCodeValue.Builder` class instead. joniles
Update Marked the `ActivityCode.addValue` method as deprecated, use the `ActivityCodeValue.Builder` class instead to create an `ActivityCodeValue` instance and add it directly to the list held by the parent `ActivityCode`. joniles
Update Implemented the `ActivityCode.Builder` class. joniles
Update Marked the `ActivityCode` constructor as deprecated, use the `ActivityCode.Builder` class instead. joniles
Update Only predecessor `Relation` instances are now stored in `RelationContainer`, successors are generated dynamically. You will only notice a difference if you are iterating over the `RelationContainer` collection directly, in which case you will only see predecessors. joniles

Release 12.3.0 – 2023-11-07

Type Changes By
Update Retrieve role availability data when reading a schedule from a P6 database. joniles
Update Populate the project's Name and Title attributes when exporting an MSPDI file. joniles
Update Ensure the Project ID attribute is populated when writing an XER file. joniles
Update Don't include null tasks (blank tasks) when writing an XER file. joniles
Update Strip control characters from entity names written to MSPDI files and XER files. joniles
Update Ensure resource material labels written to MSPDI files meet Microsoft Project's naming requirements. joniles
Update Ensure the activity code value Name attribute is populated when read from an Asta PP file. joniles
Update Don't allow multiple values for an activity code when writing XER and PMXML files. joniles
Update The MSPDI and MPX writers now dynamically renumber Unique ID values which are too large for Microsoft Project. The original schedule is no longer modified to achieve this. joniles

Release 12.2.0 – 2023-10-12

Type Changes By
Update Add the `UnitOfMeasure` class to represent the unit of measure for a material resource. The unit of measure corresponds to the current "material label" attribute of a resource. The `Resource.getMaterialLabel()` method will now retrieve the label from the `UnitOfMeasure` instance associated with the resource. The `Resource.setMaterialLabel()` method is now deprecated, the `Resource.setUnitOfMeasure()` or `Resource.setUnitOfMeasureUniqueID()` methods should be used instead. joniles
Update Unit of measure for material resources are now read from and written to Primavera schedules. joniles
Update Improve task duration and percent completion calculation for Asta PP files. joniles
Update Improve date parsing when reading XER files written by older versions of P6. joniles
Update Added the `setIgnoreErrors` method to the Primavera database reader class, and MSPDI, Schedule Grid, and SDEF file reader classes. The current default behavior of ignoring data type parse errors is unchanged. Calling `setIgnoreErrors(false)` on one of these reader classes will ensure that an exception is raised when a data type parse error is encountered. joniles
Update Added the `ProjectFile.getIgnoredErrors()` method. The default behavior for MPXJ reader classes is to ignore data type parse errors. If any errors have been ignored when reading a schedule, details of these errors can be retrieved by calling the `ProjectFile.getIgnoredErrors()` method. joniles
Update Handle duplicate relation unique IDs when reading schedules. joniles
Update Include resource availability table in JSON output. joniles
Update Add the Resource field Default Units, and ensure this field is read and written for P6 Schedules. joniles
Update Updated the Resource attribute Max Units to ensure that this is calculated from the resource's availability table. Note that the `Resource.getMaxUnits()` method will return the resource's Max Units attribute for the current date. To retrieve the Max Units for a different date, use the `AvailabilityTable.getEntryByDate()` method. joniles
Update Marked the `Resource.setMaxUnits()` method as deprecated. The Max Units attribute is derived from the resource's availability table. Changes to Max Units should now be made by modifying the availability table. joniles
Update Updated the Resource attribute Available From to ensure that this is calculated from the resource's availability table. Note that the `Resource.getAvailableFrom()` method will return the resource's Available From attribute for the current date. To retrieve the Available From attribute for a different date, use the `AvailabilityTable.availableFrom()` method. joniles
Update Marked the `Resource.setAvailableFrom()` method as deprecated. The Available From attribute is derived from the resource's availability table. Changes to the Available From attribute should now be made by modifying the availability table. joniles
Update Updated the Resource attribute Available To to ensure that this is calculated from the resource's availability table. Note that the `Resource.getAvailableTo()` method will return the resource's Available To attribute for the current date. To retrieve the Available To attribute for a different date, use the `AvailabilityTable.availableTo()` method. joniles
Update Marked the `Resource.setAvailableTo()` method as deprecated. The Available To attribute is derived from the resource's availability table. Changes to the Available To attribute should now be made by modifying the availability table. joniles

Release 12.1.3 – 2023-09-25

Type Changes By
Update Added the Project Properties attribute Relationship Lag Calendar and implemented read and write support for this for P6 schedules. (Contributed by Rohit Sinha). joniles
Update Improve compatibility of PMXML files with P6 EPPM by moving the Schedule Options tag. joniles
Update Ensure Baseline Projects in PMXML files include Schedule Options and Location Object ID. joniles

Release 12.1.2 – 2023-09-21

Type Changes By
Update Updates to improve compatibility with versions of Java after Java 8. joniles
Update Ensure timestamps with fractional sections are read correctly from Phoenix PPX files (Based on a contribution by Rohit Sinha). joniles
Update Improve handling of double quotes when reading and writing XER files. joniles
Update To allow XER files written by MPXJ to be imported correctly by P6, ensure that they have a single top level WBS entry (Based on a contribution by Alex Matatov) joniles
Update Ensure that `ProjectProperties.getCustomProperties()` returns an empty Map rather than returning `null` if no custom properties have been configured. joniles
Update Ensure project calendars and project activity codes are nested within the project tag of PMXML files. joniles

Release 12.1.1 – 2023-08-23

Type Changes By
Update Fix an issue preventing native SQLite library from loading when using the .Net version of MPXJ on macOS. joniles

Release 12.1.0 – 2023-08-22

Type Changes By
Update Write schedule options to PMXML and XER files. joniles
Update Fix an arithmetic error in RateHelper when converting a rate from minutes to hours. joniles
Update Introduced new methods to RateHelper accepting a `TimeUnitDefaultsContainer` argument rather than a `ProjectFile` for greater flexibility. Marked methods taking a `ProjectFile` argument as deprecated. joniles
Update Ensure Early Finish and Late Finish are populated for Asta milestones and tasks. joniles
Update Don't attempt to calculate total slack if start slack or finish slack are missing. joniles
Update Ensure completed tasks are not marked as critical. joniles
Update Improve handling of non-standard Boolean values in MPX files. joniles
Update Improve Total Slack calculation for P6 projects. joniles
Update Handle finish milestones with `null` actual start date for actual duration calculation when reading PMXML files (Contributed by Andrew Marks). joniles

Release 12.0.2 – 2023-07-25

Type Changes By
Update Ensure that the Fixed Cost attribute is rolled up from activities to WBS entries when reading P6 schedules. joniles

Release 12.0.1 – 2023-07-21

Type Changes By
Update Improve resource hierarchy handling. joniles
Update Improve handling of external tasks read from MSPDI files. joniles
Update Improve handling of resource assignments read from Asta PP files containing multiple baselines. joniles
Update Improve filtering to ignore hammock tasks in Asta PP files and ensure that non-hammock items are not incorrectly ignored. joniles
Update Improve handling of bars without additional linked data read from Asta PP files. joniles
Update Ensure that invalid duplicate Unique ID values encountered when reading schedule data are renumbered to maintain uniqueness. joniles
Update Improve reading certain FastTrack FTS files. joniles
Update Roll up the expense item at completion values read from P6 schedules to the task Fixed Cost attribute. joniles

Release 12.0.0 – 2023-06-29

Type Changes By
Update NOTE: this is a major version release, breaking changes have been made to the MPXJ API as documented below. joniles
Update Timestamps, dates, and times are now represented by `java.time.LocalDateTime`, `java.time.LocalDate` and `java.time.LocalTime` respectively, rather than `java.util.Date` as they were originally. joniles
Update For .Net users, new `ToDateTime` and `ToNullableDateTime` extension methods have been provided to convert `java.time.LocalDateTime`, `java.time.LocalDate`, `java.time.LocalTime` to `DateTime` instances. joniles
Update For .Net users, new `ToJavaLocalDateTime`, `ToJavaLocalDate` and `ToJavaLocalTime` extension methods have been provided to convert `DateTime` instances to `java.time.LocalDateTime`, `java.time.LocalDate`, and `java.time.LocalTime`. joniles
Update The class `net.sf.mpxj.Day` has been replaced by `java.time.DayOfWeek`. joniles
Update All code previously marked as deprecated has been removed. joniles
Update Added support for reading and writing the Activity attribute "Expected Finish" for P6 schedules. joniles

Release 11.5.4 – 2023-06-27

Type Changes By
Update Improve accuracy of dates read from Synchro, Suretrak and Turboproject files. joniles
Update By default ignore errors in individual records read from XER files. This matches P6's behavior when importing XER files. Use the `PrimaveraXERFileReader.setIgnoreErrors` method to change the behavior. joniles

Release 11.5.3 – 2023-06-19

Type Changes By
Update When writing an XER file, provide the necessary default values to allow non-P6 schedules to be successfully imported into P6. joniles
Update Ensure multi-day exceptions are written to XER files correctly. joniles
Update Ensure GanttProject exception dates are read correctly. joniles
Update More closely match the Planner predecessor lag calculation. joniles
Update Ensure that `java.sql.Date` values are correctly formatted when writing XER files. joniles
Update When reading from a P6 database, check to ensure the location table is present before attemting to read locations. joniles

Release 11.5.2 – 2023-06-08

Type Changes By
Update Improve accuracy of calendar data read from certain Powerproject schedules. joniles
Update Improve handling of unusual XER files with calendar time ranges expressed in 12-hour format. joniles
Update Correctly parse midnight represented as 24:00:00 from MSPDI files written by certain non-Microsoft Project applications. joniles
Update For MSPDI files produced by applications other than Microsoft Project which have an incorrectly nested calendar hierarchy, avoid pruning derived calendars which are referenced elsewhere in the hierarchy. joniles

Release 11.5.1 – 2023-05-24

Type Changes By
Update Improve read performance when working with large schedules. joniles
Update Improve read and write performance of code handling resource calendars. joniles
Update Updated to use sqlite-jdbc 3.42.0.0 joniles

Release 11.5.0 – 2023-05-19

Type Changes By
Update Added the ability to read Subproject data embedded in MSPDI files. joniles
Update Added the ability to read timephased baseline work and cost from MSPDI files. joniles
Update Added the ability to write timephased baseline work and cost to MSPDI files. joniles
Update Improve accuracy of timephased baseline work read from MPP files. joniles
Update Ensure that non-recurring calendar exceptions take precedence over recurring calendar exceptions. joniles
Update Avoid creating duplicate calendar exceptions when reading Asta PP files. joniles
Update Added the Bar Name attribute to Task, which is accessed using the `getBarName` and `setBarName` methods. This is populated with the name of the bar to which a task belongs when reading an Asta Powerproject schedule. joniles
Update When reading schedules from XER files and P6 databases, ensure durations without a value are returned as `null` rather than as a zero duration. joniles

Release 11.4.0 – 2023-05-08

Type Changes By
Update Added the "Resource Pool File" attribute to ProjectProperties, which represents the full path of the resource pool used by an MPP file. This attribute is accessible via the `getResourcePoolFile` and `setResourcePoolFile` methods. joniles
Update Added the `getResourcePoolObject` method to allow the resource pool file to be located and read joniles
Update Added support for reading the task attribute Subproject GUID from MPP files. This attribute can be accessed via the `getSubprojectGUID` and `setSubprojectGUID` methods. joniles
Update Added support for the task attribute "External Project". When this attribute is true it indicates that the task represents a subproject. The attribute is accessed via the `getExternalProject` and `setExternalProject` methods. joniles
Update When reading an MSPDI file with external task predecessors, MPXJ now attempts to recreate the placeholder external tasks which would be present if the equivalent MPP file was read. joniles
Update External task predecessors are now represented when writing an MSPDI file. joniles
Update Added the Task method `getSubprojectObject` which allows the caller to retrieve a ProjectFile instance representing the external project linked to a task. joniles
Update Added the Task method `expandSubproject`. For task which represent an external project, this method automatically loads the external project and attaches the tasks it contains as children of the current task. This is analogous to the behavior in Microsoft Project where a subproject is expanded to reveal the tasks it contains. joniles
Update Added the ProjectFile method `expandSubprojects` which identifies any tasks in the project which represent an external project and expands them, linking the tasks from the external project as children of the task in the parent project. Note that the method works recursively so multiple levels of external tasks will be expanded. joniles
Update Updated to ensure that the `internal_name` attribute of a `UserdefinedField` is generated if not present. joniles
Update Updated to avoid an exception when reading notebook topics from PMXML files. joniles
Update Marked the Task method `setSubprojectName` as deprecated. Use the `setSubProjectFile` method instead. joniles
Update Marked the Task method `getSubprojectName` as deprecated. Use `getSubprojectFile` instead. joniles
Update Marked the Task method `setExternalTaskProject` as deprecated. Use the `setSubprojectFile` method instead. joniles
Update Marked the Task method `getExternalTaskProject` as deprecated. Use the `getSubprojectFile` method instead. joniles
Update Marked the ProjectFile method `getSubProjects` as deprecated. Use the subproject attributes on individual tasks instead. joniles
Update Marked the Task methods `getSubProject` and `setSubProject` as deprecated. Use the subproject attributes instead. joniles

Release 11.3.2 – 2023-04-29

Type Changes By
Update Improve default values provided for P6 calendars with missing data. joniles
Update Implement both "planned dates" and "current dates" strategies for populating P6 baselines. joniles
Update Ensure the Project GUID is read from MPP files. joniles

Release 11.3.1 – 2023-04-21

Type Changes By
Update Improve accuracy of resource assignment Actual Start and Actual Finish dates when reading MPP files. joniles
Update Avoid generating timephased data for zero duration tasks. joniles
Update Improve preservation of custom timephased data start and end times. joniles

Release 11.3.0 – 2023-04-12

Type Changes By
Update Implemented `PrimaveraXERFileWriter` to allow MPXJ to write XER files. joniles
Update Updated the `ActivityCode` class to ensure that both the scope Project ID and EPS ID can be represented when reading a P6 schedule. (Potentially breaking change if you were using this class). joniles
Update Ensure secondary constraint date and type are written to PMXML files. joniles
Update Ensure leveling priority is written to PMXML files. joniles
Update Ensure WBS UDF values are written to PMXML files. joniles
Update Ensure integer UDF values are read correctly from XER files and P6 databases. joniles
Update Add methods to allow the project's default calendar unique ID to be set and retrieved. joniles
Update Add method to allow a calendar's parent calendar unique ID to be retrieved. joniles
Update Add method to allow a task's parent task unique ID to be retrieved. joniles
Update Add methods to allow a resource assignment's role unique ID to be set and retrieved. joniles
Update Add methods to allow a resource assignment's cost account unique ID to be set and retrieved. joniles
Update Add method to allow a cost account's parent unique ID to be retrieved. joniles
Update Add method to allow an expense item's cost account unique ID to be retrieved. joniles
Update Add method to allow an expense item's category unique ID to be retrieved. joniles
Update Added `WorkContour.isDefault()` method to allow "built in" resource curves/work contours to be distinguished from user defined curves. joniles
Update Updated to retrieve the project's start date from Phoenix PPX files (Contributed by Rohit Sinha). joniles
Update Provide access to notebook topics from P6 schedules via the `ProjectFile.getNotesTopics()` method. joniles
Update Capture unique ID of Activity and WBS notes from P6 schedules. joniles
Update Improve the calculation used to determine At Completion Duration of activities when reading XER files and P6 databases. joniles
Update Improve representation of certain duration values written to MSPDI files. joniles
Update Improve accuracy of certain work calculations where the specified time period does not start with a working day. joniles
Update Fix an issue which caused negative timephased work values to be generated when reading certain MPP files. joniles
Update Fix an issue reading XER files where the `critical_drtn_hr_cnt` field is expressed a decimal rather than an integer. joniles
Update Fix an issue populating the WBS attribute for activities read from certain XER files. joniles

Release 11.2.0 – 2023-03-13

Type Changes By
Update The project property Critical Slack Limit is now represented as a `Duration` rather than as an `Integer`. (Potentially breaking change if you were using this property directly). joniles
Update `TaskType` is now a simple enum with all Microsoft Project specific functionality moved into `TaskTypeHelper`. (Potentially breaking change if you were using the `TaskType` methods `getInstance` or `getValue` in your code) joniles
Update When reading the task type from P6 schedule the mapping to the MPXJ `TaskType` enum has been updated to more closely match P6. The main changes are that the P6 type "Fixed Units" now maps to `TaskType.FIXED_WORK` and the "Fixed Duration & Units" type now maps to a new enumeration value `TaskType.FIXED_DURATION_AND_UNITS`. joniles
Update Added support for reading project calendar exceptions from Phoenix schedules (based on a contribution by Rohit Sinha). joniles
Update The Resource attribute Active now defaults to true if the schedule being read doesn't support or contain a value for this attribute. joniles
Update Add support for reading and writing the Resource's Active flag for P6 schedules. joniles
Update Add support for reading and writing the Resource's Default Units/Time value for P6 schedules. joniles
Update Add support for reading and writing the Project's Critical Slack Limit value for P6 schedules. joniles
Update Fixed an issue reading certain types of Enterprise Custom Fields containing date values. joniles
Update Ensure activity code value parent can be set to null. joniles
Update Improved existing .Net extension methods and added support for more types. joniles
Update Added NuGet package icon joniles
Update Simplified NuGet packaging joniles

Release 11.1.0 – 2023-02-15

Type Changes By
Update Write activity code definitions and activity code assignments to PMXML files. joniles
Update Added support for "secure" and "max length" attributes to the `ActivityCode` class. joniles
Update Added `getChildCodes` method to `ActivityCode` and `ActivityCodeValue` to make it easier to traverse activity code values hierarchically. joniles
Update Added `setDescription` method to `Step` class to make it simpler to add a plan text description. joniles

Release 11.0.0 – 2023-02-08

Type Changes By
Update User defined fields read from P6, Asta and GanttProject schedules are now represented by instances of `UserDefinedField`. They will no longer be mapped to custom field instances. joniles
Update Enterprise Custom Fields read from MPP and MSPDI files are now represented by instances of `UserDefinedField`. joniles
Update When writing MSPDI files, UserDefinedField instances which were originally read from enterprise custom fields will be written to the MSPDI file as enterprise custom fields. joniles
Update When writing MSPDI files, UserDefinedField instances which were from applications other than Microsoft Project will automatically be mapped to available custom fields. joniles
Update When writing MPX files, UserDefinedField instances will automatically be mapped to available custom fields. joniles
Update The `UserDefinedField` type implements the `FieldType` interface and so can be used with the `FieldContainer` `get` and `set` methods to work with the contents of the user defined fields. joniles
Update The `ProjectFile.getUserDefinedFields()` method has been added to provide access to all user defined fields defined in the project. joniles
Update The `CustomFieldContainer` returned by `ProjectFile.getCustomFields()` will contain entries for all `UserDefinedField` instances. joniles
Update The various `getFieldTypeByAlias` and `getFieldByAlias` methods will retrieve user defined fields by name. joniles
Update Added the convenience method `ProjectFile.getPopulatedFields()` to retrieve details of all populated fields across the project. This avoids the caller having to individually retrieve the populated fields from the tasks container, resource container and so on. joniles
Update Updated the `getPopulatedFields` methods to return a `Set` of `FieldType` rather than a `Set` of `TaskField`, `ResourceField` etc. joniles
Update The various `getPopulatedFields` methods will include instances of `UserDefinedField` in the returned collection if relevant. joniles
Update All `ENTERPRISE_CUSTOM_FIELDn` values have been removed from the `TaskField`, `ResourceField`, `AssignmentField` and `ProjectField` enumerations. joniles
Update The `getEnterpriseCustomField` and `setEnterpriseCustomField` methods have been removed from `ProjectProperties`, Task`, `Resource` and `ResourceAssignment`. joniles
Update Project UDFs are now read from P6 schedules. joniles
Update Project UDFs are now written to PMXML files. joniles
Update All code previously marked as deprecated has been removed. joniles

Release 10.16.2 – 2023-01-29

Type Changes By
Update Updated to improve reading resource attributes from certain MPP14 files. joniles

Release 10.16.1 – 2023-01-26

Type Changes By
Update Updated to make resource curve definitions (work contours) available in the `WorkContourContainer`. This container is accessed using the `ProjectFile.getWorkContours()` method. joniles

Release 10.16.0 – 2023-01-24

Type Changes By
Update Improve accuracy when normalising timephased data. joniles
Add Add support for reading activity steps from XER files, PMXML files and Primavera databases. joniles
Add Add support for writing activity steps to PMXML files. joniles
Update Updated PMXML schema to version 22.12. joniles
Update Updated methods in the `GanttBarCommonStyle` and `GanttBarStyle` classes to use a `FieldType` instance rather than a `TaskField` instance to allow more flexibility. (Note: this may be a breaking change if you are currently using these classes.) joniles
Update Optionally include some Microsoft Project layout data in JSON output. joniles

Release 10.15.0 – 2023-01-11

Type Changes By
Update Avoid writing invalid characters to PMXML, MSPDI and Planner XML files. joniles
Update Improve handling of slack values for schedules which only contain a value for total slack. joniles
Update Add support for reading constraint type and constraint date from Phoenix schedules (based on a contribution by Rohit Sinha). joniles
Update Improve timephased data calculation when assignment has zero units. joniles
Update Improve handling of very large duration values when reading and writing MSPDI files. joniles
Update Ensure the Task attributes Active, Constraint Type, Task Mode, and Type always have a value. joniles
Update Ensure the Resource attributes Type, Calculate Costs from Units, and Role always have a value. joniles
Update Ensure the Resource Assignment attributes Calculate Costs from Units, Rate Index, and Rate Source always have a value. joniles
Update Add version number constant to the Java source, accessible as `MPXJ.VERSION`. joniles
Update Ensure that UDF values are read for WBS entries in PMXML files. joniles
Update Avoid writing duplicate resource assignments to MPX files. joniles

Release 10.14.1 – 2022-11-25

Type Changes By
Update Fix CVE-2022-41954: Temporary File Information Disclosure Vulnerability (Contributed by Jonathan Leitschuh) joniles

Release 10.14.0 – 2022-11-21

Type Changes By
Update Handle missing default calendar when reading a PMXML file. joniles
Update When reading an MPP file using a file name or `File` instance, ensure a more memory-efficient approach is used. joniles
Update Improve reading certain FastTrack FTS files. joniles
Update Improve generation of timephased data where working time ends at midnight. joniles
Update Improve generation of timephased data for tasks with a calendar assigned. joniles

Release 10.13.0 – 2022-11-16

Type Changes By
Update Add support for reading a resource assignment's cost account from P6 schedules. joniles
Update Add support for writing a resource assignment's cost account to PMXML files. joniles
Update Read resource assignment custom field definitions present in MPP14 files. joniles
Update Improve identification of deleted resources when reading MPP9 files. joniles
Update Ensure tasks with task calendars in MPP files are handled correctly when generating timephased data. joniles
Update Improve generation of timephased data for material resource assignments. joniles
Update Improve accuracy of timephased data when reading certain MPP files. joniles

Release 10.12.0 – 2022-11-01

Type Changes By
Update Added the Resource Assignment attribute Calculate Costs From Units, and added read and write support for Primavera schedules. joniles
Update Added the Resource attribute Calculate Costs From Units, and added read and write support for Primavera schedules. joniles
Update Added the Resource and Role attribute Sequence Number, and added read and write support for Primavera schedules. joniles
Update Added the WBS attribute Sequence Number, and added read and write support for Primavera schedules. joniles
Update Ensure activity type is read from Phoenix schedules. (Contributed by Christopher John) joniles
Update Deprecate the `CostAccount` method `getSequence` and replace with `getSequenceNumber` to improve naming consistency. joniles
Update Deprecate the `ExpenseCategory` method `getSequence` and replace with `getSequenceNumber` to improve naming consistency. joniles
Update Avoid possible ArrayIndexOutOfBoundsException when reading GUID values from MPP files (Contributed by Rohit Sinha). joniles

Release 10.11.0 – 2022-09-27

Type Changes By
Update Deprecated the `Resource` methods `getParentID` and `setParentID`. Replaced with `getParentResourceUniqueID` and `setParentResourceUniqueID` for clarity and consistency. joniles
Update Added the `Resource` methods `setParent` and `getParent`. joniles
Update Added the `ChildResourceContainer` interface and `ResourceContainer.updateStructure` method to ensure that resources can be accessed hierarchically when reading a schedule. joniles
Update Added the `ResourceAssignment` methods `getFieldByAlias` and `setFieldByAlias` to simplify working with custom fields, and mkae the API consistent with existing methods on `Task` and `Resource`. joniles
Update Added the `TaskContainer` methods `getCustomFields` and `getFieldTypeByAlias` to simplify access to task custom fields. joniles
Update Added the `ResourceContainer` methods `getCustomFields` and `getFieldTypeByAlias` to simplify access to resource custom fields. joniles
Update Added the `ResourceAssignmentContainer` methods `getCustomFields` and `getFieldTypeByAlias` to simplify access to resource assignment custom fields. joniles
Update Added the `getCustomFieldsByFieldTypeClass` method to `CustomFieldContainer` to allow retrieval of custom field details by parent class. joniles
Update Deprecated the `CustomFieldContainer` method `getFieldByAlias` to be replaced by `getFieldTypeByAlias` to provide a more consistent method name. joniles
Update Don't attempt to write unknown extended attributes to MSPDI files. joniles
Update Don't populate graphical indicator data if the graphical indicator is not enabled. joniles
Update Don't set custom field aliases to empty strings. joniles
Update Added the `CustomFieldContainer` method `add`. joniles
Update Deprecated the `CustomFieldContainer` method `getCustomField`, which is replaced by the `get` method (which returns `null` if the field type is not configured) and the `getOrCreate` method (which will return an existing configuration or create a new one if the requested field does not yet have a configuration). joniles

Release 10.10.0 – 2022-09-13

Type Changes By
Update Add an option to import Phoenix schedules as a flat set of tasks with separate activity codes, rather than creating a hierarchy of tasks from the activity codes. Note the default is to disable this behavior so existing functionality is unchanged. (Contributed by Christopher John) joniles
Update Add a `setProperties` method to reader classes to allow configuration to be supplied via a `Properties` instance rather than having to call setter methods. Properties passed to the `UniversalProjectReader` version of this method will be forwarded to the reader class `UniversalProjectReader` chooses to reader the supplied file. Properties for multiple reader classes can be included in the `Properties` instance, each reader class will ignore irrelevant properties. joniles
Update Added the `get` method to `Task`, `Resource`, `ResourceAssignment` and `ProjectProperties` as a replacement for the `getCurrentValue` method. The new `get` method is paired with the existing `set` method to provide read and write access to attributes of these classes. This change is intended to improve the interfaces to these classes by making them more consistent, and thus easier to understand. joniles
Update Deprecated the `getCurrentValue` method on the `Task`, `Resource`, `ResourceAssignment` and `ProjectProperties` classes. Use the new `get` method instead. joniles
Update Add getter and setter methods for the Resource attributes Cost Center, Budget Cost, Budget Work, Baseline Budget Cost, Baseline Budget Work, Baseline Budget Cost 1-10, and Baseline Budget Work 1-10. joniles
Update Add getter and setter methods for the Task attributes Response Pending, Scheduled Start, Scheduled Finish, Scheduled Duration, Budget Cost, Budget Work, Baseline Budget Cost, Baseline Budget Work, Baseline Budget Cost 1-10, and Baseline Budget Work 1-10. joniles
Update Added support for the Resource Cost Centre attribute for MSPDI files. joniles
Update Move MPP file-specific functionality for determining baseline values from the Task class into the MPP reader class. joniles
Update Improve handling of the TaskMode attribute. joniles
Update Don't set a Task's Critical attribute unless we have valid slack values. joniles
Update Ensure `ResourceAssignment` calculated fields are returned correctly when using the `getCurrentValue` method. joniles
Update Ensure `ProjectProperties` calculated fields are returned correctly when using the `getCurrentValue` method. joniles
Update Updated to use jsoup 1.15.3 joniles

Release 10.9.1 – 2022-08-31

Type Changes By
Update Ensure monthly and yearly recurrences are calculated correctly when the supplied start date is the same as the first recurrence date (Contributed by Rohit Sinha). joniles
Update Add support for reading task calendars from Phoenix files (Contributed by Rohit Sinha). joniles
Update Improve reliability of ProjectCleanUtility when using the replacement strategy. joniles

Release 10.9.0 – 2022-08-23

Type Changes By
Update Added the `ResourceAssignment.getEffectiveRate` method to allow the cost rate effective on a given date for a resource assignment to be calculated. For P6 schedules this will take account of the cost rate configuration included as part of the resource assignment. joniles
Update For P6 schedules, the `ResourceAssignment.getCostRateTable` method now takes in account any cost rate configuration details from the resource assignment when determining which table to return. joniles
Update A resource's Standard Rate, Overtime Rate and Cost per Use are now all derived from the resource's cost rate table, and not stored as attributes of the resource itself. joniles
Update The resource methods `setStandardRate`, `setOvertimeRate`, and `setCostPerUse` have been deprecated. These attributes can now only be set or updated by modifying the resource's cost rate table. joniles
Update When writing MPX files, only include attributes which have a non-empty, non-default value in at least one task or resource. joniles
Update When writing MPX files, ensure attributes which have calculated values are used. joniles
Update Add support for reading a resource assignment's rate type from P6 schedules. The rate type is accessed via the `ResourceAssignment.getRateIndex` method. The value returned by this method can be used to select the required rate using the `CostRateTableEntry,getRate` method. joniles
Update Add support for writing a resource assignment's rate type to PMXML files. joniles
Update Add support for reading a resource assignment's role from P6 schedules. The role is accessed via the `ResourceAssignment.getRole` and `ResourceAssignment.setRole` methods. joniles
Update Add support for writing a resource assignment's role to PMXML files. joniles
Update Add support for reading a resource assignment's override rate (Price / Unit) from P6 schedules. The rate is accessed via the `ResourceAssignment.getOverrideRate` and `ResourceAssignment.setOverrideRate` methods. joniles
Update Add support for writing a resource assignment's override rate (Price / Unit) to PMXML files. joniles
Update Add support for reading a resource assignment's rate source from P6 schedules. The rate source is accessed via the `ResourceAssignment.getRateSource` and `ResourceAssignment.setRateSource` methods. joniles
Update Add support for writing a resource assignment's rate source to PMXML files. joniles

Release 10.8.0 – 2022-08-17

Type Changes By
Update When reading P6 schedules, all five cost rates for a resource are now available via the `CostRateTableEntry.getRate` method. joniles
Update All five rates from each cost rate table entry can now be written to PMXML files. joniles
Update When reading files written by Microsoft Project, resource rate values now use the same units as seen by the end user rather than defaulting to hours as was the case previously. (For example, if the user sees $8/day in the source application, you will receive a Rate instance of $8/day rather than $1/hr). joniles
Update The values for a resource's standard rate, overtime rate, and cost per use attributes are now derived from the cost rate table. The values stored on the resource itself are only used if a cost rate table for the resource is not present. joniles
Update The Resource methods `getStandardRateUnits` and `getOvertimeRateUnits` are deprecated. Use the `getStandardRate` and `getOvertimeRate` methods to retrieve a `Rate` instance which will include the units for these rates. joniles
Update The Resource methods `setStandardRateUnits` and `setOvertimeRateUnits` are deprecated. Supply `Rate` instances to the `setStandardRate` and `setOvertimeRate` methods with the required units instead. joniles
Update The CostRateTableEntry methods `getStandardRateUnits` and `getOvertimeRateUnits` are deprecated. Use the `getStandardRate` and `getOvertimeRate` methods to retrieve a `Rate` instance which will include the units for these rates. joniles
Update Ensure rates are formatted "per hour" when writing MSPDI and PMXML files. joniles
Update Include cost rate tables in JSON output. joniles

Release 10.7.0 – 2022-08-09

Type Changes By
Update Use Jackcess to read Asta MDB and Microsoft Project MPD files. This allows these file to be read on platforms other than Windows. joniles
Update Improve support for reading correctly typed values for enterprise custom fields from MPP files. joniles
Update Improve array index validation when reading GUID values from MPP files. joniles

Release 10.6.2 – 2022-06-29

Type Changes By
Update Ensure `ProjectCleanUtility` can load dictionary words from distribution jar. joniles
Update Improve handling of calendars without days read from PMXML files. joniles

Release 10.6.1 – 2022-06-14

Type Changes By
Update Updated to use POI 5.2.2 joniles
Update Updated to use sqlite-jdbc 3.36.0.3 joniles
Update Updated to use jsoup 1.15.1 joniles

Release 10.6.0 – 2022-06-08

Type Changes By
Update Added support for reading and writing the unique ID of P6 user defined fields via new `getUniqueID` and `setUniqueID` methods on `CustomField (based on a suggestion by Wes Lund). joniles
Update Added support for reading and writing scope, scope ID, and sequence number attributes for activity codes (based on a suggestion by Wes Lund). joniles
Update Added support for reading and writing sequence number and color attributes for activity code values (based on a suggestion by Wes Lund). joniles
Update Added `isWorking` method to `ProjectCalendarException` to make it clearer how to determine if the exception changes the dates it is applied to into working or non-working days. joniles
Update Improve reading task start from certain Planner files. joniles
Update Improve reading predecessor lag values from Planner files. joniles
Update Ensure calendar hierarchy is written correctly to Planner files. joniles
Update Don't write null tasks to Planner files as Planner will not read files which contain them. joniles
Update When writing Planner file, ignore constraint types which Planner can't represent. joniles
Update Don't write emply predecessor lists to Planner files. joniles
Update Improve handling of lag duration when writing Planner files. joniles
Update Improve ProjectCalendar start date calculation when we have long runs of non-working days. joniles
Update Performance enhancement for timephased data normalisation. joniles

Release 10.5.0 – 2022-05-24

Type Changes By
Update The `ProjectCalendarWeek` methods `addCalendarHours()`, `attachHoursToDay`, `removeHoursFromDay` have been removed. Use `addCalendarHours(day)`, `removeCalendarHours(day)` instead. (Note: this will be a breaking change if you were using the original methods to create or modify a schedule) joniles
Update The `ProjectCalendar` methods `attachHoursToDay` and `removeHoursFromDay` have been removed. Use the `addCalendarHours` and `removeCalendarHours` methods instead. (Note: this will be a breaking change if you were using the original methods to create or modify a schedule) joniles
Update The class hierarchy for `ProjectCalendarHours` and `ProjectCalendarException` has been simplified, but there should be no impact for uses of these classes. joniles
Update The `ProjectCalendarHours` class now implements the `List` interface. Methods in this class not part ofthe `List` interface have been deprecated in favour of the equivalent `List` methods. joniles
Update Updated `MPXWriter` to ensure: calendar names are quoted if necessary, all calendars have names, all calendar names are unique. joniles
Update Updated `MPXReader` to recognise `wk` as a valid time unit. joniles
Update Updated `MPXWriter`, `PrimaveraPMFileWriter`, `SDEFWriter` and `PlannerWriter` to ensure any working weeks defined by a calendar are represented by exceptons. joniles
Update Updated `MSPDIWriter` to ensure any working weeks defined by a calendar are represented in the "legacy" exception definition used by Microsoft Project prior to 2007. joniles
Update Updated `SDEFWriter` to ensure: only relevant calendars are written, and derived calendars are flattened. joniles
Update When reading Planner schedules MPXJ will no longer create an "artificial" resource calendar for each resource. Resources will be linked directly to the calendar used in the original schedule. joniles
Update Add support for reading the P6 calendar type and personal calendar flag from P6 schedules. joniles
Update Add support for writing the calendar type and personal calendar flag to PMXML files. joniles
Update Updated the calendar class hierarchy: `ProjectCalendar` and `ProjectCalendarWeek` both now inherit from a new class `ProjectCalendarDays`. Note that `ProjectCalendar` is no longer a subclass of `ProjectCalendarWeek`. joniles
Update The `getHours` and `isWorkingDay` methods have been moved up to `ProjectCalendar` from the `ProjectCalendarWeek` class. joniles
Update The `ProjectCalendar` method `copy` has been deprecated, without replacement. joniles
Update Added a `getWork` method to `ProjectCalendar` which calculates the amount of work given a `Day` instance. joniles
Update Added `removeWorkWeek` and `removeCalendarException` methods to `ProjectCalendar`. joniles
Update Recurring exceptions are now added to a `ProjectCalendar` using the `addCalendarException` method which takes a `recurringData` instance its argument. joniles
Update The `ProjectCalendarException` method `setRecurringData` has been removed, recurring exceptions should be added using the `addCalendarExcepton` method described above. (Note: this will be a breaking change if you were creating recurring exceptions) joniles

Release 10.4.0 – 2022-05-05

Type Changes By
Update Remove `getParent`, `setParent`, and `isDerived` from `ProjectCalendarWeek`. (Note: this will be a breaking change if you were working with `ProjectCalendarWeek` directly). joniles
Update The `ProjectProperties` methods `getDefaultCalendarName()` and `setDefaultCalendarName()` have been deprecated. Use `getDefaultCalendar()` and `setDefaultCalendar()` instead. joniles
Update Ensure that percent complete values can be read from MSPDI files even if the values are decimals. joniles
Update Improve handling of the default calendar when reading certain MSPDI files. joniles
Update Improve reading certain Phoenix PPX files. joniles
Update Improve reading certain FastTrack FTS files. joniles
Update Improve formatting of time project properties when written to JSON. joniles
Update Improve reading MPP files generated by Microsoft Project 16.0.15128.20158 and later versions. joniles

Release 10.3.0 – 2022-04-29

Type Changes By
Update General improvements to make calendar data read from different file formats more consistent. joniles
Update When reading P6 and Powerproject schedules MPXJ will no longer create an "artificial" resource calendar for each resource. Resources will be linked directly to the calendars they use in the original schedule. joniles
Update Update `MPXWriter` and `MSPDIWriter` to ensure that, when written, calendars are correctly structured in the form required by Microsoft Project. joniles
Update `JsonWriter` now includes calendar data as part of its output. joniles
Update The `ProjectCalendar` methods `setMinutesPerDay`, `setMinutesPerWeek`, `setMinutesPerMonth` and `setMinutesPerYear` have been deprecated, use `setCalendarMinutesPerDay`, `setCalendarMinutesPerWeek`, `setCalendarMinutesPerMonth` and `setCalendarMinutesPerYear` instead. joniles
Update The ProjectCalendar method `setResource` has been deprecated and will not be replaced. Use the Resource method `setCalendar` or `setCalendarUniqueID` to link a calendar with a resource. joniles
Update The ProjectCalendar method `getResource` has been deprecated. Use the `getResources` method instead to retrieve all resources linked with a calendar. joniles
Update The `Resource` methods `addResourceCalendar`, `setResourceCalendar`, `getResourceCalendar`, `setResourceCalendarUniqueID` and `getResourceCalendarUniqueID` have been deprecated and replaced by `addCalendar`, `setCalendar`, `getCalendar`, `setCalendarUniqueID` and `getCalendarUniqueID` respectively. joniles

Release 10.2.0 – 2022-03-06

Type Changes By
Update Improvements to writing currency, rate and units amounts to MSPDI files. joniles
Update When reading MPP and MSPDI files, calendar exceptions representing a single range of days, but defined as a recurring exception are converted to a range of days, removing the unnecessary recurring definition. joniles
Update Added `StructuredTextParser` to replace original code handling calendar data, project properties and curve data read from XER files and Primavera databases. Can also be used to extract data from Primavera Layout Files (PLF). joniles
Update Improve recognition of contoured resource assignments read from MPP files. joniles
Update Improve retrieval of resource assignment confirmed, response pending, linked fields, and team status pending flags from certain MPP files. joniles

Release 10.1.0 – 2022-01-29

Type Changes By
Update Improve PMXML file compatibility with P6. joniles
Update Strip any trailing invalid characters from text read from FTS files. joniles
Update Ensure all tasks read from Powerproject and Project Commander have unique IDs. joniles
Update Correct expansion of exceptions from a weekly recurring calendar exception. joniles
Update Ensure that expanded calendar exceptions are written to file formats which do not support recurring exceptions. joniles
Update Ensure that start and finish dates are set when reading milestones from GanttProject files. joniles

Release 10.0.5 – 2022-01-11

Type Changes By
Update Ensure `Task.getActivityCodes()` returns an empty list rather than `null` when no activity code values have been assigned. joniles
Update Default to using ASCII when reading and writing SDEF files, as per the SDEF specification. joniles
Update Provide methods to set and get the charset used when reading and writing SDEF files. joniles

Release 10.0.4 – 2022-01-07

Type Changes By
Add Added support for reading Code Library values (as Activity Codes) from Powerproject files. joniles
Update Updated `ProjectCleanUtility` to provide a "replace" strategy alongside the original "redact" strategy. joniles

Release 10.0.3 – 2021-12-22

Type Changes By
Update Fix issue with null tasks from certain MPP files introduced in 10.0.2. joniles

Release 10.0.2 – 2021-12-16

Type Changes By
Update Improve identification of null tasks for certain MPP files. joniles

Release 10.0.1 – 2021-12-10

Type Changes By
Update Avoid false positives when detecting password protected MPP files. joniles

Release 10.0.0 – 2021-12-01

Type Changes By
Add Added support for .NET Core 3.1 joniles
Update Nuget packages now explicitly target .NET Framework 4.5 (`net45`) and .NET Core 3.1 (`netcoreapp3.1`) joniles

Release 9.8.3 – 2021-11-30

Type Changes By
Update Improve reliability when reading certain Phoenix files. joniles
Update Ensure multiple trailing nul characters are stripped from text when reading schedules from a Primavera database. joniles

Release 9.8.2 – 2021-11-01

Type Changes By
Update Improve accuracy of identifying null tasks in certain MPP files. joniles
Update Improve accuracy of identifying valid tasks in certain MPP files. joniles
Update Ensure hierarchical outline code values are read correctly from MSPDI files. joniles
Update Improve support for files produced by recent versions of FastTrack. joniles

Release 9.8.1 – 2021-10-13

Type Changes By
Add Added support for Phoenix 5 schedules. joniles
Update Improve handling of null tasks read from MPP files. joniles

Release 9.8.0 – 2021-09-30

Type Changes By
Add Introduced the BaselineStrategy interface and implementing classes. (Note: this includes a breaking change if you were using the ProjectFile.setBaseline method and supplying a lambda. You will now need to implement a BaselineStrategy and set this in ProjectConfig before setting a baseline). joniles
Update Improved accuracy of baseline attributes for Primavera schedules. joniles

Release 9.7.0 – 2021-09-28

Type Changes By
Add Add Sprint ID and Board Status ID attributes to task. joniles
Add Introduce the TimeUnitDefaultsContainer to allow constants for time unit conversions to be obtained from both project properties and calendars. joniles
Update Duration attributes are no longer returned as Duration instances by the ruby gem, they are now returned as floating point numbers. By default, durations are expressed in seconds. A new optional argument to MPXJ::Reader.read allows you to change the units used to express durations. (Note: this is a breaking change for users of the ruby gem) joniles
Update Update JsonWriter to use a relevant calendar when converting durations. joniles
Update Ensure default calendar is set correctly when reading XER and PMXML files, and P6 databases. joniles
Update Use default hours per day/week/month/year when reading P6 XER files or databases if these values are not present. joniles
Update Ensure that the minutes per day/week/month/year attributes are copied when a calendar is copied. joniles
Update When reading P6 schedules, roll up calendar for WBS entries when child activities all share the same calendar. joniles
Update Generate missing minutes per day/week/month/year for calendars read from P6 schedules. joniles
Update Inherit minutes per day/week/month/year from base calendars (Note: minor method signature changes on ProjectProperties and ProjectCalendar). joniles
Update Allow explicit values to be set for project minutes per week and minutes per year. joniles
Update Fall back on defaults for project minutes per day/week/month/year attributes. joniles

Release 9.6.0 – 2021-09-13

Type Changes By
Add Add Planned Start and Scheduled Finish to project properties. joniles
Add Add attribute_types method to Ruby classes. joniles
Update Updated to use POI 5.0.0. joniles
Update Corrected source of Must Finish By project property when reading XER files or P6 databases. joniles
Update When reading PMXML files, ensure that the activity calendar is set before calculating slack. joniles
Update Remove unused field TaskField.PARENT_TASK. joniles
Update Ensure task Unique ID and task Parent Unique ID attributes are treated as mandatory when written to JSON. joniles
Update Fix an issue with Ruby gem where a task's parent was not being retrieved correctly in some circumstances. joniles

Release 9.5.2 – 2021-08-22

Type Changes By
Add Add Must Finish By date to project properties. joniles
Add Add support for the task attributes Longest Path, External Early Start and External Early Finish, and ensure they can be read from P6 schedules. joniles
Update Rename ProjectFile.getStartDate() and ProjectFile.getFinishDate() methods for clarity. Original method names are marked as deprecated joniles
Update Ensure that all activities in a PMXML file have a CalendarID attribute to ensure compatibility with older versions of P6. joniles
Update Ensure that the user's selected progress period is used to set the project's status date attribute when reading Asta PP files. joniles
Update Ensure that a task's Complete Through attribute is not advanced to the start of the next working day (the behaviour of Microsoft Project prior to 2007 was to report Complete Through as the start of the next working day. This change ensures MPXJ matches versions of Microsoft Project from 2007 onwards. Previous behaviour can be restored using the ProjectConfig.setCompleteThroughIsNextWorkStart() method). joniles
Update Deprecate task getSplitCompleteDuration() and setSplitCompleteDuration() in favour of getCompleteThrough() and setCompleteThrough(). joniles
Update Improved the implementation of the TaskContainer.synchronizeTaskIDToHierarchy method. joniles
Update Update jsoup to 1.14.2. joniles

Release 9.5.1 – 2021-07-01

Type Changes By
Update When applying a baseline using ProjectFile.setBaseline, gracefully handle duplicate task key values. joniles
Update Handle missing values populating cost rate table from an MPP file. joniles

Release 9.5.0 – 2021-06-30

Type Changes By
Update Added support for reading baseline data from embedded baselines in PP files. joniles
Update Correct resource assignment percent complete values read from PP files. joniles
Update JsonWriter no longer writes attribute type information by default. (The original behaviour can be restored by calling setWriteAttributeTypes(true) on your JsonWriter instance). joniles
Update The MPXJ Ruby Gem now generates explicit methods to access attributes rather than relying on "method_missing" to intercept and act on attribute access. joniles
Update Don't write Assignment Task GUID, Assignment Resource GUID or Resource Calendar GUID to JSON. joniles
Update Don't write a value for Assignment Work Contour to JSON if the contour is the default value (i.e. flat). joniles
Update Don't write a value for Assignment Resource Request Type to JSON if the type is the default value (i.e. none). joniles
Update Don't write a value for Task Earned Value Method to JSON if the method matches the project default. joniles
Update Don't write a value for Task Type to JSON if the type matches the project default. joniles
Update Stop writing a default value (-1) for Parent Task ID to JSON if the task does not have a parent. joniles
Update Stop writing a default value (-1) for Task Calendar ID to JSON if the task does not have a calendar. joniles
Update When reading resource assignments from an MPP file, don't record Project's internal representation of a null resource ID (-65535), record the resource ID explicitly as null. joniles
Update For MPX and Planner files, don't write resource assignments for the "null" resource. joniles
Update Handle missing status date when reading P6 schedules from XER files or database. joniles
Update When reading MPP files, treat UUIDs which are all zeros as null. joniles
Update Deprecate the 10 Resource Outline Code get and set methods and replace with get and set methods which take an index argument. joniles
Update Provide a helper method (PrimaveraHelper.baselineKey) to encapsulate key generation for setting Primavera baselines. joniles

Release 9.4.0 – 2021-06-11

Type Changes By
Update Read custom value lists for resource custom fields from MPP files (based on a suggestion by Markus Höger). joniles
Update Added support for reading custom fields from Asta Powerproject files. joniles
Update Ensure short data type values are written to JSON files as numeric values. joniles
Update Ensure delay data type values are written to JSON files as duration values. joniles
Update Don't write zero rates to JSON files. joniles
Update Introduced a separator into rate values when written to a JSON file to make it clear that the value is a rate not a duration (for example: 5.00h is now 5.00/h). joniles
Update When writing an enum value of a JSON file, ensure we write the original enum name rather than the value return by toString. This provides more meaningful output (Potentially breaking change if you use the Ruby gem or consume the JSON output directly. Affected attributes are project properties: currency symbol position, time format, date format, bar text date format, schedule from, mpx file version; resource attribute: type). joniles
Update Ensure invalid cost rate table data is handled gracefully when reading from MSPDI files. joniles
Update Handle missing data when reading MSPDI files (based on a contribution by Lord Helmchen). joniles
Update Improve population of summary task names when reading from Powerproject PP files. joniles
Update Correctly read hierarchical resource outline codes from MPP files (based on a suggestion by Markus Höger). joniles

Release 9.3.1 – 2021-05-18

Type Changes By
Update Preserve multiple assignments between an activity and a resource when reading P6 schedules. joniles
Update Renamed WorkContour.isFlat to isContourFlat and WorkContour.isContoured to isContourManual. joniles
Update Include an entry for 0% in the WorkContour curve definition. joniles
Update Fix an issue where non-working days were not being treated correctly in date calculations if they happen to still have time ranges attached. joniles

Release 9.3.0 – 2021-05-06

Type Changes By
Add Add support for reading roles from P6 databases, XER and PMXML files, and for writing roles to PMXML files. Roles are represented as resources. The new resource Boolean attribute "Role" is used to distinguish between Resource instances which represent resources and those which represent roles. joniles
Add Add support for reading resource curves from P6 databases, XER and PMXML files, and for writing resource curves to PMXML files. The WorkContour enum is now a class, and instance of this class are used to represent resource curves. The curves are available via the work contour attribute of resource assignments. joniles
Update Corrected the data type of the task physical percent complete attribute. joniles
Update Improve handling of non-standard relationship type representations encountered in XER files and P6 databases. joniles

Release 9.2.6 – 2021-04-26

Type Changes By
Update Handle invalid baseline numbers when reading MSPDI files. joniles
Update Improve custom field handling when reading GanttProject files. joniles

Release 9.2.5 – 2021-04-20

Type Changes By
Update Add launcher batch file and shell script. joniles
Update Improve handling of calculated task attributes when writing a project to a different format. joniles
Update Ensure that dates are rolled up to summary tasks when reading FastTrack files. joniles
Update Improve support for Synchro 6.3 SP files. joniles

Release 9.2.4 – 2021-04-09

Type Changes By
Update Fix an issue reading resource rate information GanttProject files. joniles

Release 9.2.3 – 2021-04-08

Type Changes By
Update Fix an issue reading Planned Duration from P6 databases and XER files. joniles
Update Ensure Duration and Actual Duration are populated for WBS entries when reading P6 schedules. joniles

Release 9.2.2 – 2021-04-07

Type Changes By
Update Fix issue with WBS ordering when writing PMXML files. joniles

Release 9.2.1 – 2021-04-04

Type Changes By
Update Improve Task critical flag calculation when reading PMXML files. joniles
Update Improve support for Synchro 6.3 SP files. joniles

Release 9.2.0 – 2021-03-30

Type Changes By
Update Improve accuracy when reading subprojects from MPP files. joniles
Update Add Remaining Late Start and Remaining Late Finish attributes to Task. joniles
Update Add Critical Activity Type attribute to Project Properties joniles
Update Read Remaining Early Start, Remaining Late Start, Remaining Early Finish and Remaining Late finish from and write to PMXML files. joniles
Update Read Remaining Late Start and Remaining Late finish from P6 database and XER files. joniles
Update Ensure that WBS entries without child activities are not marked as critical. joniles
Update Don't attempt to set the critical flag when reading XER and PMXML files where the schedule is using "longest path" to determine critical activities. (MPXJ currently doesn't have enough information to be able to determine the correct value for the critical flag in this situation). joniles
Update Ensure cost, duration, date and work attributes are rolled up to WBS entries for P6 schedules read from PMXML files, XER files and P6 databases. joniles
Update Populate baseline cost, duration, finish, start and work when reading from XER files, PMXML files and P6 databases where the "Project Baseline" has been set to "Current Project". joniles

Release 9.1.0 – 2021-03-11

Type Changes By
Add Add methods to the ProjectFile class to attach a ProjectFile instance as a baseline. The baselines attached to the ProjectFile will be used to populate the relevant baseline attributes in the current schedule. joniles
Add Added experimental support for writing baseline projects to PMXML files. joniles
Add Added the Project GUID attribute. joniles
Update When reading PMXML files, the list of projects returned by the readAll method will include any baseline projects present in the file. joniles
Update When reading PMXML files which include the current baseline project, use this to populate the relevant baseline attributes in the main schedule. joniles
Update The Project Unique ID property is now an integer rather than a string. joniles
Update When reading Primavera schedules, populate the project properties Project ID and Baseline Project Unique ID. joniles
Update Handle Primavera resource rates which don't have a start or finish date. joniles
Update Handle MSPDI files with resource availability tables which don't have a start or finish date. joniles
Update Ensure that the Activity ID field is populated consistently for WBS entries in PMXML files compared to the same schedule read from an XER file or P6 database. joniles
Update Ensure duration of manually scheduled tasks in MPP files is represented correctly. joniles

Release 9.0.0 – 2020-02-18

Type Changes By
Update NOTE: this release introduces breaking changes! joniles
Update All fields which are non-user defined, but were previously being returned by MPXJ as custom fields are now represented as explicit field types. Custom fields now only contain values for user-defined custom fields. joniles
Update All code previously marked as deprecated has been removed. joniles
Update When reading an XER file or a P6 database, some custom project property names have been updated. LagCalendar is now CalendarForSchedulingRelationshipLag, RetainedLogic is now WhenSchedulingProgressedActivitiesUseRetainedLogic, ProgressOverride is now WhenSchedulingProgressedActivitiesUseProgressOverride, IgnoreOtherProjectRelationships is now WhenSchedulingProgressedActivitiesUseProgressOverride, and StartToStartLagCalculationType is now ComputeStartToStartLagFromEarlyStart. joniles
Update Updated PMXML schema to version 20.12. joniles
Update Fix an issue where GUID values were not being read correctly from XER files and P6 databases. joniles
Update Percent complete type is now available as a task attribute for P6 schedules from any source. joniles
Update Ensure that percent complete values are stored in the appropriate attributes when reading P6 schedules. (NOTE: Previously the "reported" percent complete value was stored as the tasks "percent complete" attribute. Now this holds the schedule percent complete value, and the percent work complete and physical percent complete attributes are also populated. To determine which value should be reported for a task, see the "percent complete type" extended field attribute.) joniles
Update Correctly handle default calendar when reading and writing PMXML files. joniles
Update Update the sort order of WBS entries and activities in PMXML files to match the order exported by P6. joniles
Update Match the way P6 exports the WBS code attribute for PMXML files. joniles
Update Update the representation of Boolean values when writing PMXML files to match the form exported by P6. joniles
Update Set the task type attribute when reading PMXML files. joniles
Update Improve duration and actual duration calculations when reading XER files and P6 databases. joniles
Update Fix an issue where resource assignment costs were not being read correctly from PMXML files. joniles
Update Read and write the suspend date and resume date attributes for PMXML files. joniles
Update General improvements to the SDEF writer. joniles
Update Updated to rtfparserkit 1.16.0. joniles

Release 8.5.1 – 2021-01-07

Type Changes By
Update Don't write unused enterprise custom field definitions to MSPDI files. This ensures that MS Project will open these files correctly. joniles

Release 8.5.0 – 2021-01-06

Type Changes By
Update Notes in their original format (HTML from P6, RTF from MS Project) can now be retrieved via the getNotesObject method on Task, Resource, and ResourceAssignment. Plain text notes can still be retrieved via the getNotes method. If you were previously using the "preserve note formatting" flag to retrieve the original formated version of a note, you will now need to use the getNotesObject method. joniles
Update Write WBS and Activity notes to PMXML files. joniles
Update PMXML compatibility improvements to ensure files can be successfully imported into P6. joniles

Release 8.4.0 – 2020-12-29

Type Changes By
Update Previously when reading PMXML files, XER files, and P6 databases, a set of baseline attributes on tasks and assignments (including Start, Finish, Duration, Cost and Work) were being populated with planned values rather than baseline values. These baseline attributes are no longer being set. The values they previously contained are now available as custom fields. joniles
Update Read activity notepad entries for XER, PMXML files and P6 databases. joniles
Update Read schedule and leveling options from PMXML files and P6 databases. joniles
Update Improve support for reading activity cost and work from PMXML files. joniles

Release 8.3.5 – 2020-12-15

Type Changes By
Update Fix CVE-2020-35460: zip slip vulnerability (with thanks to Sangeetha Rajesh S, ZOHO Corporation) joniles

Release 8.3.4 – 2020-12-10

Type Changes By
Update Updated PMXML schema to version 19.12. joniles
Update Ensure that we always set the activity planned start and planned finish dates when writing a PMXML file. joniles
Update Updated the getPopulatedFields methods to ignore fields with default values. joniles
Update Made the Resource ID attribute available as a resource's TEXT1 custom field, with the alias "Resource ID" when reading PMXML and XER files, or from a P6 database. (Note that presently for XER files and P6 databases, the Resource ID value is also read into the initials attribute. This behaviour is deprecated and will be removed in the next major MPXJ release). joniles
Update Populate the Resource ID with the value read from a P6 schedule when writing a PMXML file. joniles
Update Ensure that the hours per day, week, month and year attributes are read from and written to PMXML files. joniles
Update Fix an issue causing the hours per day calendar attribute to be read inaccurately from XER files and P6 databases. joniles
Update Read assignment actual overtime cost and work attributes from PMXML files. joniles
Update Update calculation of assignment work, cost and units attributes for PMXML files. joniles

Release 8.3.3 – 2020-11-24

Type Changes By
Add Added cost rate table support when reading from and writing to PMXML files. joniles
Add Added a getPopulatedFields method to the TaskContainer, ResourceContainer and ResourceAssignmentContainer classes. This will retrieve the set of fields which are populated with a non-null value across the whole project for Tasks, Resources, and ResourceAssignments respectively. joniles
Add Add START_ON, FINISH_ON constraint types. § MANDATORY_START, MANDATORY_FINISH constraint types. MANDATORY_START/FINISH are now represented as MUST_START/FINISH_ON. This change allows users to distinguish between START/FINISH_ON and the MANDATORY_* constraints when reading P6 schedules. joniles
Update Improve handling of cost rate tables and availability tables when writing to an MSPDI file. joniles
Update Handle P6 databases and XER files with user defined fields of type FT_FLOAT. joniles
Update Align invalid XER record behaviour with P6. joniles
Update Handle Planner files which don't contain an allocations tag. joniles
Update Gracefully handle MPP files with missing view or table data. joniles

Release 8.3.2 – 2020-10-22

Type Changes By
Add Added support for "new tasks are manual" project property (Contributed by Rohit Sinha) joniles
Update Improved support for reading and writing outline codes and extended attributes for MSPDI files (Based on a contribution by Dave McKay) joniles
Update Improved handling of enterprise custom fields when reading MPP files joniles
Update Update Primavera database and XER readers to avoid potential type conversion errors when the caller provides their own field mappings. joniles
Update Improve handling of some MPP12 MPP file variants. joniles
Update Avoid error when reading timephased data from certain MPP files. joniles
Update Gracefully handle MPP files with missing view data. joniles
Update Update junit to 4.13.1. joniles

Release 8.3.1 – 2020-10-14

Type Changes By
Update Minor updates to PlannerReader. joniles

Release 8.3.0 – 2020-10-13

Type Changes By
Add Add the "userDefined" attribute to the CustomField class to allow caller to determine if the field has been created by a user or MPXJ. joniles
Add Add support for reading expense items, expense categories and cost accounts from XER files, PMXML files and Primavera databases. joniles
Add Add support for writing expense items, expense categories and cost accounts to PMXML files. joniles
Update Updated the XER file reader to ignore invalid records rather than reporting an error, matching the behaviour of P6 joniles
Update Updated the XER file reader to ensure that activity suspend and resume dates are read correctly. joniles
Update Updated the XER file reader to ensure that if the reader returns the project selected by the caller when the caller supplies a value for project ID. joniles
Update Updated PMXML reader to avoid user defined field collisions. joniles
Update Updated PMXML reader to add setProjectID and listProjects methods. joniles
Update Update the .net extension method ToIEnumerable to work with java.lang.Iterable rather than java.util.Collection joniles

Release 8.2.0 – 2020-09-09

Type Changes By
Add All readers, including the UniversalProjectReader, now support a readAll method. If a file or database contains more than one project the readAll method can be used to retrieve them all in one operation. If the file format doesn't support multiple schedules, readAll will just return a single schedule. joniles
Add Add PrimaveraDatabaseFileReader to encapsulate access to SQLite Primavera databases. joniles
Update Ensure that the summary flag is true for WBS items in Primavera schedules, even if they have no child activities. joniles
Update Ensure that the critical flag is rolled up appropriately to WBS items when reading Primavera schedules. joniles
Update Set export flag property when reading projects from a PMXML file. joniles
Update Corrected data type of resource assignment Work Contour field. joniles
Update Corrected data type of resource fields: BCWS, BCWP, ACWP, SV, CV, and Work Contour. joniles
Update Corrected data type of task fields: CV, ACWP, VAC, CPI, EAC, SPI, TCPI, and Work Contour. joniles

Release 8.1.4 – 2020-08-31

Type Changes By
Update Fix CVE-2020-25020: XXE vulnerability (with thanks to Sangeetha Rajesh S, ZOHO Corporation) joniles
Update Import milestone constraints from Asta schedules (Contributed by Dave McKay) joniles
Update Handle elapsed durations in Asta schedules (Based on a contribution by Dave McKay) joniles
Update Correctly determine the constraint type for tasks with ALAP placement with or without predecessors when reading from Asta schedules (Contributed by Dave McKay) joniles
Update Gracefully handle a missing table name when reading an XER file. joniles
Update Gracefully handle an unexpected calendar data when reading an XER file. joniles
Update Correctly handle XER files with multibyte character encoding. joniles
Update Import all schedule and leveling options from XER files. joniles
Update Ensure project calendars are read from PMXML files. joniles
Add Added readAll methods to PrimaveraPMFileReader to allow all projects contained in a PMXML file to be read in a single pass. joniles

Release 8.1.3 – 2020-06-25

Type Changes By
Update Improve reliability when reading custom field values from certain MPP12 files. joniles
Update Improve accuracy of activity percent complete when reading from certain XER files or P6 databases. joniles
Update Improve accuracy of WBS percent complete when reading from certain XER files or P6 databases. joniles
Update Improve accuracy of task durations when reading Asta schedules. joniles
Update Fix an issue handling the end date of calendar exceptions when reading Asta schedules. joniles
Update Fix an issue with correctly identifying the calendar applied to summary tasks when reading Asta schedules. joniles
Update Populate percent complete, duration, actual start, actual finish, early start, late start, early finish and late finish attributes for summary tasks when reading Asta schedules. joniles
Update The percent complete value reported for tasks when reading Asta schedules is now Duration Percent Complete. The Overall Percent Complete value originally being returned is available in a custom field. joniles

Release 8.1.2 – 2020-06-18

Type Changes By
Update Improve detection of unusual MSPDI file variants. joniles
Update Updated to read task notes from FastTrack FTS files. joniles

Release 8.1.1 – 2020-06-17

Type Changes By
Update Improve support for Synchro 6.2 SP files. joniles

Release 8.1.0 – 2020-06-11

Type Changes By
Add Experimental support for reading Project Commander schedules. joniles
Update Update to use JAXB 2.3.2. joniles
Update Avoid failures caused by unreadable OLE compound documents when the UniversalProjectReader is trying to determine the file type. joniles
Update Strip trailing ASCII NUL characters from text fields when reading from a Primavera database. joniles
Update Improve accuracy of task order when reading Phoenix files. joniles
Update Improve accuracy of task data when reading some MPP file variants. joniles
Update Improve reliability when reading certain SureTrak files. joniles

Release 8.0.8 – 2020-04-20

Type Changes By
Update Improve handling of numeric character references invalid for XML 1.0 in PMXML files. joniles
Update Improve handling of resource calendars read from Planner files. joniles
Update Improve handling of resource calendars read from MPX files. joniles
Update Ignore the milestone flag when reading MPX files if the task has a non-zero duration. joniles
Update Ensure JSON files can be written when Unique ID predecessor/successor attributes have been read from an MPX file. joniles

Release 8.0.7 – 2020-04-17

Type Changes By
Update Updated to rtfparserkit 1.15.0. joniles
Update Improve handling of PMXML files with empty calendar exception time ranges. joniles

Release 8.0.6 – 2020-03-05

Type Changes By
Update Updated to use POI 4.1.2. joniles
Update Improve handling of some XER file variants. joniles

Release 8.0.5 – 2020-02-07

Type Changes By
Update Allow users to determine WBS attribute content with "wbs is full path" flag for Primavera readers. joniles
Update Ensure summary task start and finish dates are populated when reading PMXML files. joniles
Update Use baseline start and finish dates as planned start and finish dates when writing PMXML files. joniles
Update Late start and late finish dates are now written to PMXML files. joniles

Release 8.0.4 – 2020-02-06

Type Changes By
Update Update sqlite-jdbc dependency to 3.30.1 joniles
Update Improve handling of characters invalid for XML 1.0 in PMXML files generated by P6. joniles

Release 8.0.3 – 2020-01-27

Type Changes By
Update Improve handling of zero value durations, costs and units from certain MPP files. joniles
Update Improve percent complete calculation for certain XER file and P6 Database schedules. joniles
Update Improve percent complete calculation for certain P3 schedules. joniles
Update Improve handling of incorrectly encoded characters in PMXML files generated by P6. joniles
Update Ensure that negative durations can be written to and read from MSPDI files in the format understood by MS Project. joniles

Release 8.0.2 – 2020-01-16

Type Changes By
Update Improve handling of zero duration tasks read from Phoenix files. joniles

Release 8.0.1 – 2020-01-05

Type Changes By
Update Add missing nuget dependency joniles

Release 8.0.0 – 2020-01-02

Type Changes By
Update MPXJ now requires Java 8 or later. joniles
Update Removed deprecated methods. joniles
Update Updated to use POI 4.1.1. joniles
Update Updated to use IKVM 8.1.5717.0. joniles

Release 7.9.8 – 2019-12-27

Type Changes By
Add Added support for reading and writing outline code/custom field lookup tables for MSPDI files. joniles
Add Added sample code to demonstrate creation of timephased work. joniles
Update Populate project status date attribute when reading Asta schedules. joniles
Update Populate parent attribute when reading activity code values from Primavera schedules. joniles
Update Improve configurability of PrimaveraDatabaseReader and PrimaveraXERFileReader. joniles
Update Made JAXB JARs an explicit dependency to avoid issues with recent Java versions which do not include them. joniles

Release 7.9.7 – 2019-11-25

Type Changes By
Update Round percent complete values read from Asta files to two decimal places to avoid values like 99.9999999%. joniles

Release 7.9.6 – 2019-11-22

Type Changes By
Update Improve support for FastTrack files. joniles

Release 7.9.5 – 2019-11-19

Type Changes By
Add Added flag to manage compliance with password protection. (Contributed by ztravis) joniles
Update Improve support for Synchro 6.1 SP files. joniles
Update Fix an issue where the task hierarchy was not correctly represented when reading a PMXML file. joniles

Release 7.9.4 – 2019-11-08

Type Changes By
Add Add support for reading Sage 100 Contractor schedule grid files. joniles
Update Ensure attribute names are valid when exporting JSON. joniles
Update Improve handling of custom field lookup values (Based on a contribution by Nick Darlington). joniles
Update Fix an issue when copying a calendar which has exceptions defined. joniles

Release 7.9.3 – 2019-09-10

Type Changes By
Add Add support for reading task early finish and late finish attributes from Asta PP files. joniles
Update Ensure XER files containing secondary constraints can be read correctly. joniles
Update Preserve calendar IDs when reading from XER files and P6 database (Based on a contribution by forenpm). joniles
Update Ensure base calendars are read correctly for P6 schedules. joniles
Update Ensure MPP files with unexpected auto filter definition data are handled gracefully. joniles
Update Preserve leveling delay format when reading tasks from MSPDI files. joniles
Update Ensure unexpected structure of timephased data is handled gracefully when reading MPP files. joniles

Release 7.9.2 – 2019-08-19

Type Changes By
Add Add support for reading and writing secondary constraints from P6 schedules (Based on a contribution by Sruthi-Ganesh) joniles
Update Improve support for Synchro SP files containing blank tasks. joniles
Update Make constraint type mapping consistent when reading and writing PMXML files. joniles
Update Improve handling of leveling delay units and actual duration units (Based in a contribution by Daniel Schmidt). joniles
Update Improve handling of certain types of malformed MPP files. joniles
Update Improve handling of certain types of malformed SDEF files. joniles
Update Map P6 Equipment resource type to cost rather than work (Contributed by forenpm) joniles
Update Improve handling of certain MPP files containing large numbers of blank tasks. joniles
Update Improve handling of certain MPX files containing trailing delimiters. joniles

Release 7.9.1 – 2019-07-01

Type Changes By
Update Set task start, finish and percent complete when reading SDEF files. joniles

Release 7.9.0 – 2019-07-01

Type Changes By
Add Add support for reading SDEF files. joniles

Release 7.8.4 – 2019-06-27

Type Changes By
Add Add support for reading data links (linked fields) configuration from MPP files. joniles
Update Updated to avoid an infinite loop when processing certain corrupt files (Contributed by ninthwaveltd). joniles
Update Update MSPDI generation to ensure MS Project correctly recognises complete tasks without resource assignments. joniles
Update Ensure that activity codes are read for P6 schedules. joniles
Update Improve support for reading custom field values derived from custom field lookup tables in MPP files. joniles
Update Improve support for MPP files written with the June 2019 update of Microsoft Project. joniles

Release 7.8.3 – 2019-05-24

Type Changes By
Update Improve handling of task baseline start, start, baseline finish, finish and slack fields read from FTS files. joniles

Release 7.8.2 – 2019-05-19

Type Changes By
Update Improve handling of MPP files with missing Props. joniles
Update Improve handling of custom field lookup tables for MPP12 files. joniles
Update Correctly write activity duration type to a PMXML file (Contributed by Sebastian Stock) joniles
Update Improve handling of Activity Type and Activity ID when writing PMXML files (Based on a contribution by Sebastian Stock) joniles
Update Update PMXML file reader for greater consistency with XER and P6 database readers (Activity ID, Activity Type, Status, and Primary Resource ID) joniles
Update Improve handling of certain FTS files. joniles
Update Improve handling of task notes from MPP8 files. joniles
Update More accurately read predecessors and successors from Asta PP files (Based on a contribution by Dave McKay) joniles
Update When a schedule is read from P6, P3, or SureTrak, Task.getSummary will return true only if a task is part of the WBS joniles
Update Improve support for reading the Synchro Scheduler 2018 SP files. joniles
Add Added Task.hasChildTasks() method. joniles
Fix Splits data coming in as null for all tasks. Fixes 330. joniles

Release 7.8.1 – 2019-02-13

Type Changes By
Add Improve support for reading the Synchro Scheduler 2018 SP files. joniles
Add Add support for reading Gantt Designer GNT files. joniles
Update Improve handling of non-standard MSPDI files. joniles
Update Improve handling of non-standard GanttProject files. joniles
Update Update MSPDI generation to ensure MS Project correctly recognises complete milestones without resource assignments. joniles
Update Improve support for reading user defined fields from PMXML files. joniles
Update Ignore hammock tasks when reading PP files. joniles

Release 7.8.0 – 2019-01-18

Type Changes By
Add Added support for reading and writing GUIDs for Tasks, Resources, and Assignments in MSPDI files. joniles
Update Updated Java build to use Maven joniles
Update Updated to provide a general performance improvement (Based on a contribution by Tiago de Mello) joniles
Update Updated to fix an issue when the Microsoft JDBC driver is used to access a P6 database in SQL Server 2005 joniles
Fix Asta lag sign incorrect (Based on a contribution by Dave McKay). Fixes 332. joniles
Fix Asta constraints lost (Contributed by Dave McKay). Fixes 333. joniles
Fix MSDPI into Asta doesn't import Calendar exceptions (Contributed by Dave McKay). Fixes 335. joniles

Release 7.7.1 – 2018-10-23

Type Changes By
Add Read additional schedule options from XER files. (Contributed by forenpm) joniles
Update Improve handling of some types of MPP file with missing resource assignment data. joniles
Update Ensure that resource assignment flag fields are read correctly for all MPP file types (Based on a contribution by Vadim Gerya). joniles
Update Ensure that timephased actual work is handled correctly for material resources (Contributed by Vadim Gerya). joniles
Update Improve accuracy when reading resource type from MPP files. joniles
Update Improve compatibility of generated MSPDI files with Asta Powerproject (Contributed by Dave McKay). joniles

Release 7.7.0 – 2018-10-12

Type Changes By
Add Add support for reading the Synchro Scheduler SP files. joniles
Add Add support for reading the activity code (ID) from Asta files. joniles
Add When reading a Phoenix file, set the project's status date to the data date from the storepoint. joniles
Update Handle MSPDI files with timephased assignments that don't specify a start and end date. joniles

Release 7.6.3 – 2018-10-04

Type Changes By
Add Add support for reading Remaining Early Start and Remaining Early Finish task attributes from P6. (Contributed by forenpm) joniles
Add Add support for reading Retained Logic and Progressive Override project attributes from P6. (Contributed by forenpm) joniles
Update Fix incorrect sign when calculating start and finish slack (Contributed by Brian Leach). joniles
Update Correctly read predecessors and successors from Phoenix files. joniles

Release 7.6.2 – 2018-08-30

Type Changes By
Add Add support for nvarchar columns when reading from a P6 database. joniles
Update Updated to correctly read percent lag durations from MSPDI files (based on a contribution by Lord Helmchen). joniles
Update Updated the data type for the ValueGUID tag in an MSPDI file (based on a contribution by Lord Helmchen). joniles

Release 7.6.1 – 2018-08-29

Type Changes By
Update Improve handling of MPP files where MPXJ is unable to read the filter definitions. joniles
Update Improve handling of SureTrak projects without a WBS. joniles
Update Improve handling of SureTrak and P3 WBS extraction. joniles
Update Handle unsupported ProjectLibre POD files more gracefully. joniles
Update Improve detection of non MS Project compound OLE documents. joniles
Update Gracefully handle XER files which contain no projects. joniles

Release 7.6.0 – 2018-07-13

Type Changes By
Add Added support for reading ConceptDraw PROJECT CDPX, CPDZ and CPDTZ files. joniles
Add Add support for reading the export_flag attribute from XER files. (Contributed by forenpm) joniles
Update Use correct licence details in Maven pom.xml (contributed by Mark Atwood). joniles
Update Improve UniversalProjectReader's handling of XER files containing multiple projects. joniles

Release 7.5.0 – 2018-06-19

Type Changes By
Add Added support for reading activity codes from P6 databases, XER files, and PMXML files. joniles
Add Added support for reading user defined values from a P6 database. joniles
Add Added support for PRX files which contain a SureTrak database. joniles
Add Added support for reading the resource "enterprise" attribute from MPP12 and MPP14 files. joniles
Update Improve performance when reading user defined values from XER files. joniles
Update Improved support for older Primavera PMXML files. joniles
Update Updated to rtfparserkit 1.11.0 for improved RTF parsing. joniles

Release 7.4.4 – 2018-06-06

Type Changes By
Update Improve handling of calendar exceptions in MPX files. joniles
Update Improve handling of MPP files with large numbers of null tasks. joniles
Update Improve robustness when reading timephased data. joniles
Update Correctly sort Primavera schedules containing WBS entries with no child activities. joniles

Release 7.4.3 – 2018-05-25

Type Changes By
Add Add support for reading the resource "generic" attribute from MPP files. joniles
Add Add a Unique ID attribute to the Relation class and populate for schedule types which support this concept. joniles
Update Store the Primavera Project ID as Unique ID in the project properties. joniles
Update Update MerlinReader to ensure support for Merlin Project Pro 5. joniles

Release 7.4.2 – 2018-04-30

Type Changes By
Update Gracefully handle malformed duration values in MSPDI files. joniles
Update Gracefully handle unexpected calendar exception data structure in certain MPP files. joniles
Update Improve handling of certain unusual MPP12 files. joniles
Update More work to gracefully handle POI issue 61677, allowing affected MPP files to be read successfully. joniles

Release 7.4.1 – 2018-04-16

Type Changes By
Add Add methods to list projects available in P3 and SureTrak database directories. joniles
Update Avoid NPE when a work pattern can't be located in an Asta Powerproject PP file. joniles
Update Avoid array bounds exception when reading certain PRX files. joniles
Update Read outline code value lists from MPP9 files. joniles
Update Handle SureTrak projects without a WBS. joniles

Release 7.4.0 – 2018-03-23

Type Changes By
Add Added support for reading Primavera SureTrak databases from directories, zip files, and STX files. joniles
Add Added support for PP files generated by Asta Powerproject from version 13.0.0.1 joniles

Release 7.3.0 – 2018-03-12

Type Changes By
Add Added support for reading Primavera P3 databases from directories, zip files, and PRX files. joniles
Update Improve robustness when reading MPP files containing apparently invalid custom field data. joniles
Update Improve UniversalProjectReader byte order mark handling. joniles
Fix Fields with lookup unreadable when a field has custom name. Fixes 324. joniles

Release 7.2.1 – 2018-01-26

Type Changes By
Update More work to gracefully handle POI issue 61677, allowing affected MPP files to be read successfully. joniles
Update Avoid divide by zero when calculating percent complete from certain Primavera PMXML files. joniles
Update UniversalProjectReader updated to recognise MPX files with non-default separator characters. joniles
Update Update FastTrack reader to handle invalid percentage values on resource assignments. joniles
Update Update FastTrack reader to handle variations in UUID format. joniles
Update Read the full project name from XER files and the Primavera database and store it in the project title attribute. joniles

Release 7.2.0 – 2018-01-18

Type Changes By
Add Added support for reading TurboProject PEP files. joniles
Update Handle numeric values with leading spaces in XER files. joniles
Update Fix array bounds error when reading constraints from certain MPP files. joniles

Release 7.1.0 – 2018-01-03

Type Changes By
Add Added support for reading GanttProject GAN files. joniles
Fix Ensure that calendar exception dates are read correctly from XER files and P6 databases regardless of the user's timezone. joniles
Update Read working day calendar exceptions from XER files and P6 database. joniles
Update Mark some ProjectFile methods as deprecated. joniles

Release 7.0.3 – 2017-12-21

Type Changes By
Update Use the Windows-1252 character set as the default when reading XER files. joniles
Update Gracefully handle POI issue 61677 to allow MPP affected MPP files to be read successfully. joniles
Update Handle recurring calendar exceptions read from MSPDI files without an occurrence count. joniles
Update Improve robustness of FastTrack schedule reader. joniles
Update Avoid reading empty calendar exceptions from MPX files. joniles

Release 7.0.2 – 2017-11-20

Type Changes By
Update Further improvements to task pruning for Asta PP files. joniles

Release 7.0.1 – 2017-11-20

Type Changes By
Update Improve robustness when reading MPP files when using certain 64-bit Java runtimes. joniles
Update Populate the project's comments property when reading an MSPDI file. joniles
Fix Ensure that tasks are not discarded when reading PP files from older Asta versions. joniles
Fix Wrong date ranges for split tasks. Fixes 319. joniles
Fix getDefaultTaskType() not returning correct default task type. Fixes 222. joniles

Release 7.0.0 – 2017-11-08

Type Changes By
Add Added support for reading recurring exceptions from MPP and MSPDI files. joniles
Update Updated RecurringTask class interface (Note: this is a breaking API change) joniles
Update MSPDI writer now uses save version 14 by default (Note: this may affect applications which consume MSPDI files you generate) joniles
Update Correctly handle MSPDI files with Byte Order Marks. joniles
Update Handle MSPDI files with varying namespaces. joniles
Update Improve robustness Merlin file reader. joniles
Update Improve extraction of task start and finish dates from PMXML files only containing partial data. joniles
Update Prevent POI from closing the input stream when using UniversalProjectReader joniles
Fix Cannot read mpp file using getProjectReader. Fixes 321. joniles

Release 6.2.1 – 2017-10-11

Type Changes By
Update Gracefully handle corrupt MPP files. joniles
Update Improve reading and writing slack values for MSPDI files. joniles
Update Improve activity hierarchy extraction from Phoenix files. joniles
Fix MSPDI Slack values not correctly set while loading. Fixes 243. joniles

Release 6.2.0 – 2017-10-06

Type Changes By
Add Added support for reading Work Weeks from MPP files. joniles
Add Add support for calendar exception names for MPP and MSPDI files. joniles
Update Updated to use POI 3.17. joniles
Update Improve accuracy of calendar exception dates read from XER files and P6 database. joniles
Update Only write non-default user-defined field values to a PMXML file. joniles
Update Use Primavera P6 17.7 XML schema. joniles
Update Gracefully handle corrupt document summary information in MPP files. joniles
Update Don't duplicate exceptions when reading from an MSPDI file. joniles
Fix MPP DataType: Non-unique enumeration value. Fixes 231. joniles
Fix Calendar Work Week missing from MPP data extraction. Fixes 258. joniles
Fix TimephasedWork Negative TotalAmount. Fixes 318. joniles
Fix Date conversion fails in PrimaveraReader. Fixes 320. joniles

Release 6.1.2 – 2017-09-12

Type Changes By
Update Gracefully handle incomplete records in XER files. joniles

Release 6.1.1 – 2017-08-30

Type Changes By
Fix Ensure all classes in the gem are required joniles

Release 6.1.0 – 2017-07-28

Type Changes By
Add Provide Task.getEffectiveCalendar() method joniles
Add Populate missing finish dates in MSPDI files joniles

Release 6.0.0 – 2017-07-22

Type Changes By
Update Gracefully handle invalid calendar data in XER files. joniles
Update Handle XER files containing blank lines. joniles
Add Add support for reading resource rates and availability tables from P6 (Contributed by Brandon Herzog). brandonherzog
Update Include overtime in work and cost fields when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Read default project calendar from P6 (Contributed by Brandon Herzog). brandonherzog
Update Read resource rate and assignment units from P6 (Contributed by Brandon Herzog). brandonherzog
Update Set ignore resource calendar flag for tasks from P6 (Contributed by Brandon Herzog). brandonherzog
Update Change P6 costs to be calculated from resource assignment to support XER files without the cost table (Contributed by Brandon Herzog). brandonherzog
Update Map anticipated end date to deadline for P6 (Contributed by Brandon Herzog). brandonherzog
Update Update task work to include actual and remaining work when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Calculate summary task work fields by summing up children when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Set task project name when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Fix Fix "00:00" calendar finish times to parse as end of day when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Add default working hours if a calendar does not specify any hours when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Read fiscal year start month from P6 (Contributed by Brandon Herzog). brandonherzog
Fix Fix bug in rollup of child task dates containing null values that could set incorrect end date when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Fix Fix date offset in parse of P6 calendar exceptions (Contributed by Brandon Herzog). brandonherzog
Fix Fix count of P6 UDFs that map to same data type (Contributed by Brandon Herzog). brandonherzog
Add Add support for reading Resource and Assignment UDFs from P6 (Contributed by Brandon Herzog). brandonherzog
Update Update P6 UDFs to fill into multiple field types to expand storage capacity, for example into TEXT and ENTERPRISE_TEXT (Contributed by Brandon Herzog). brandonherzog
Update Use only the WBS as activity code for WBS tasks instead of also appending name for P6 tasks (Contributed by Brandon Herzog). brandonherzog
Add Add the ability to link task Relations that cross project boundaries in XER files (Contributed by Brandon Herzog). brandonherzog
Add Add function to clear all exceptions from ProjectCalendar instances (Contributed by Brandon Herzog). brandonherzog
Update Reading the lag calendar scheduling option as the "LagCalendar" custom project property when reading from P6 (Contributed by Brandon Herzog). brandonherzog
Update Updated UDF parsing to handle values as booleans if the user chooses to map them to Flag fields (Contributed by Brandon Herzog). brandonherzog

Release 5.14.0 – 2017-07-13

Type Changes By
Update Improve handling of activity codes read from Phoenix files joniles
Add Calculate percent complete for tasks read from Phoenix files joniles
Update Populate task duration with Original Duration attribute when reading from XER files or P6 databases. joniles
Update Ensure that task finish dates are read correctly from Phoenix files. joniles
Update Improve UniversalProjectReader's handling of non-MPP OLE compound documents. joniles
Update Improve task hierarchy and ordering when reading some MPP files. joniles

Release 5.13.0 – 2017-06-27

Type Changes By
Update Further improve handling of WBS, bar, and task structure from Asta files. joniles

Release 5.12.0 – 2017-06-26

Type Changes By
Update Improve handling of WBS, bar, and task structure from Asta files. joniles

Release 5.11.0 – 2017-06-20

Type Changes By
Update Improve handling of malformed durations in MSPDI files. joniles
Update Improve performance when reading MPP files with certain kinds of timephased data. joniles
Update Raise a specific "password protected" exception type from the Ruby gem. joniles
Update Fix an issue with the storage of the "earned value method" task attribute. joniles

Release 5.10.0 – 2017-05-23

Type Changes By
Update Improve handling of deleted tasks in MPP files. joniles
Update Improve handling of invalid predecessor tasks in MPX files. joniles
Update Improve handling of invalid saved view state in MPP files. joniles
Fix Empty baseline dates populated with garbage date instead of null. Fixes 313. joniles

Release 5.9.0 – 2017-04-27

Type Changes By
Add Add support for reading ProjectLibre POD files (from ProjectLibre version 1.5.5 onwards). joniles
Update Correct getter method name for "file application" project property. joniles

Release 5.8.0 – 2017-04-21

Type Changes By
Update Updated to use POI 3.16 (note new dependency on Apache Commons Collections required by POI). joniles
Update Improve support for estimated durations in Merlin files. joniles
Update Read task notes from Asta files. joniles
Update Improve support for reading resource rates from Phoenix files. joniles
Add Add "file application" and "file type" to project properties to determine source of schedule data. joniles

Release 5.7.1 – 2017-03-22

Type Changes By
Update Improve support for Phoenix Project Manager XML files. joniles

Release 5.7.0 – 2017-03-20

Type Changes By
Add Add support for FastTrack Schedule files. joniles
Update Ensure that timephased data calculations correctly handle entry to and exit from DST. joniles
Fix Microsoft Project 2016: Issue with assignment 'Work Contour' attribute. Fixes 306. joniles

Release 5.6.5 – 2017-03-07

Type Changes By
Update Improve handling of invalid calendar data in MSPDI files joniles
Update Improve handling of XER files containing multi-line records joniles
Update Improve handling of malformed MPX files joniles
Fix Add support for elapsed percent to MSPDI writer. Fixes 308. joniles
Fix MPX percent lag incorrect. Fixes 310. joniles

Release 5.6.4 – 2017-02-16

Type Changes By
Update UniversalProjectReader now recognises and handles byte order marks joniles
Fix TimeUnit.ELAPSED_PERCENT read incorrectly from MPP files. Fixes 307. joniles

Release 5.6.3 – 2017-02-08

Type Changes By
Update Added a parameter to the Ruby gem to allow the maximum JVM memory size to be set. joniles
Update Updated to rtfparserkit 1.10.0 for improved RTF parsing. joniles

Release 5.6.2 – 2017-02-06

Type Changes By
Fix Failed to Parse error with Primavera 15.2 or 16.1 XML files. Fixes 305. joniles

Release 5.6.1 – 2017-02-03

Type Changes By
Fix Correct resource assignment handling for Phoenix Project Manager schedules. joniles

Release 5.6.0 – 2017-01-29

Type Changes By
Add Add support for Phoenix Project Manager schedules. joniles

Release 5.5.9 – 2017-01-27

Type Changes By
Update Improve robustness of date parsing for MPX files. joniles

Release 5.5.8 – 2017-01-23

Type Changes By
Fix Fix NPE when reading graphical indicators with unknown field type. joniles

Release 5.5.7 – 2017-01-13

Type Changes By
Fix Fix percent complete NaN value for some Primavera schedules. joniles

Release 5.5.6 – 2017-01-06

Type Changes By
Fix Fix incorrectly set critical flag for primavera schedules. joniles

Release 5.5.5 – 2017-01-06

Type Changes By
Update Updated to rtfparserkit 1.9.0 for improved RTF parsing joniles
Update Improve calendar exception parsing for Primavera XER and database readers. joniles
Update Ensure the task summary flag is set correctly for Primavera schedules. joniles
Update Rollup baseline, early and late start and finish dates to WBS for Primavera schedules. joniles
Update Rollup baseline duration, remaining duration and percent complete to WBS for Primavera schedules. joniles
Add Use the project's critical slack limit value when setting the critical flag on a task. joniles
Add Experimental support for reading Merlin Project schedules. joniles

Release 5.5.4 – 2016-12-01

Type Changes By
Update Default to UTF-8 encoding when generating JSON files joniles

Release 5.5.3 – 2016-11-29

Type Changes By
Update Correctly read text from MPP files when default charset is not UTF-8. joniles
Update Improve accuracy when reading MPP9 files. joniles

Release 5.5.2 – 2016-11-02

Type Changes By
Update Add Primavera Parent Resource ID as a specific resource attribute (Based on a contribution by Dave McKay). joniles
Update PMXML writer generates currency record (Based on a contribution by Dave McKay). joniles
Update PMXML writer defaults Activity PercentCompleteType to Duration (Based on a contribution by Dave McKay). joniles
Update PMXML writer records currency and parent attributes for Resource (Based on a contribution by Dave McKay). joniles
Update PMXML writer resource assignments include RateSource and ActualOvertimeUnits attributes(Based on a contribution by Dave McKay). joniles
Update MSPDI reader: gracefully handle invalid calendar exceptions.. joniles
Update PMXML writer: gracefully handle missing data. joniles
Update Planner writer: gracefully handle missing data. joniles

Release 5.5.1 – 2016-10-14

Type Changes By
Add Update universal project reader to support zip files. joniles
Update Update ruby to align error handling with universal project reader. joniles

Release 5.5.0 – 2016-10-13

Type Changes By
Add Universal project reader. joniles
Update Avoid NPE when reading PMXML files. joniles
Fix Missing extended attributes. Fixes 297. joniles
Fix CrossProject field omission causes issues when importing to P6. Fixes 300. joniles

Release 5.4.0 – 2016-10-06

Type Changes By
Update Updated to use POI 3.15. joniles

Release 5.3.3 – 2016-08-31

Type Changes By
Update Avoid NPE when field type is unknown. joniles
Update Improve Ruby error reporting. joniles
Update Improve support for non-standard time formats in MPX files joniles
Update Improve support for MPP14 files with very large numbers of blank tasks joniles

Release 5.3.2 – 2016-08-31

Type Changes By
Update When reading an XER file, treat FT_STATICTPYE user defined fields as text. joniles

Release 5.3.1 – 2016-07-01

Type Changes By
Add Add data date attribute to PMXML output. joniles
Update Update PMXML writer to avoid NPE. joniles
Update Update PMXML writer to allow task field used for Activity ID to be chosen. joniles
Update Updated to avoid NPE when reading an XER file where project not under EPS. joniles
Update Generate Task IDs if missing from MSPDI file joniles

Release 5.3.0 – 2016-06-10

Type Changes By
Add Add support for PP files generated by Asta Powerproject from version 13.0.0.3 onwards joniles
Update Minor improvements to SDEF support. joniles
Update Updated to rtfparserkit 1.8.0 joniles
Update Improve finish time handling in PMXML files (contributed by lobmeleon) joniles

Release 5.2.2 – 2016-03-11

Type Changes By
Add Add support for resource assignment Stop and Resume attributes for MPP and MSPDI files joniles
Fix PrimaveraPMFileWriter.write fails with java.lang.IllegalArgumentException. Fixes 291. joniles
Fix Microsoft Project 2016 : Need to set 'Stop' and 'Resume' properties for net.sf.mpxj.ResourceAssignment. Fixes 292. joniles

Release 5.2.1 – 2016-02-11

Type Changes By
Add Add support for PP files generated by Asta Powerproject up to version 13.0.0.3 joniles

Release 5.2.0 – 2016-02-08

Type Changes By
Add Add support for PP files generated by Asta Powerproject 11, Powerproject 12, Easyplan 2, Easyplan 3, Easyplan 4, Easyplan 5 and Easyplan 6 joniles
Fix Unsupported encoding command ansicpg949. Fixes 285. joniles
Fix AvailabilityTable getEntryByDate does not work properly. Fixes 288. joniles

Release 5.1.18 – 2016-01-25

Type Changes By
Fix Unsupported encoding command ansicpg1254. Fixes 285. joniles
Fix NullPointerException in CriteriaReader.getConstantValue. Fixes 286. joniles
Update Allow a character encoding to be specified when reading an XER file. Fixes 287. joniles
Add Write Primavera Primary Resource Unique ID to Task field Number1 joniles

Release 5.1.17 – 2015-12-30

Type Changes By
Update Improve support for reading MPP files generated by Project 2016 joniles
Fix Handle missing time component of a time stamp field when reading an MPX file. joniles

Release 5.1.16 – 2015-12-18

Type Changes By
Update Improve support for reading MPX files generated by SureTrak joniles

Release 5.1.15 – 2015-12-16

Type Changes By
Fix Fix WBS and Activity ordering for tasks from Primavera. joniles

Release 5.1.14 – 2015-12-09

Type Changes By
Fix Strip unescaped control characters from JSON output. joniles

Release 5.1.13 – 2015-11-26

Type Changes By
Update For schedules imported from Primavera ensure tasks representing activities are ordered by Activity ID within the WBS to match Primavera. joniles

Release 5.1.12 – 2015-11-16

Type Changes By
Fix Avoid NPE when writing MSPDI files with timephased data (contributed by Bruno Gasnier) joniles
Update Improve resource assignment constructor (based on a contribution by Bruno Gasnier) joniles
Update Improve MPX French translations (contributed by Bruno Gasnier) joniles
Add Add calendar specific minutes per day, week, month, and year (based on a contribution by Bruno Gasnier) joniles
Add Add support for reading and writing GUID attribute for PMXML, XER files and Primavera database. joniles

Release 5.1.11 – 2015-11-12

Type Changes By
Fix Avoid NPE when reading MPP14 custom properties. joniles
Fix Ensure calculated task attributes are present in JSON output. joniles
Fix Handle MSPDI files written by German versions of Microsoft Project (based on a contribution by Lord Helmchen) joniles
Fix synchronizeTaskIDToHierarchy clears list of tasks. Fixes 277. joniles
Fix PrimaveraPMFileWriter throws Exception at write(..). Fixes 273. joniles
Fix Parent task is always null when reading a Primavera XER file. Fixes 281. joniles
Update Ensure that Task.getSuccesors() and Task.getPredecessors() return an empty list rather than null. joniles

Release 5.1.10 – 2015-09-09

Type Changes By
Update Improve FixedMeta2 block size heuristic to improve reliability when reading MPP14 files. joniles

Release 5.1.9 – 2015-08-29

Type Changes By
Add Ensure Resource BookingType is read correctly from MPP files joniles
Add Added basic custom field attributes to JSON output joniles
Add Added Ruby methods to work with custom field aliases joniles
Fix Fix to infinite loop condition when writing calendar (contributed by lobmeleon) joniles
Fix MPXJ getNotes() API returns garbled value for multibyte characters. Fixes 274. joniles
Fix Unsupported encoding error when reading resource notes. Fixes 268. joniles
Fix Incorrect resource types are read (contributed by Colin Rodriguez). Fixes 256. joniles
Update Symmetry between Primavera PM reader/writer (contributed by lobmeleon) joniles
Update Added UDF support to PMXML file reader and writer(contributed by lobmeleon) joniles
Update Updated to rtfparserkit 1.4.0 joniles

Release 5.1.8 – 2015-07-13

Type Changes By
Update Another attempt at getting tzinfo-data dependency working joniles

Release 5.1.7 – 2015-07-13

Type Changes By
Update Updated ruby gem to make tzinfo-data dependency conditional on platform joniles

Release 5.1.6 – 2015-07-13

Type Changes By
Update Updated ruby gem to allow timezone to be provided joniles

Release 5.1.5 – 2015-06-05

Type Changes By
Update Updated to use IKVM 8.0.5449.1 joniles

Release 5.1.4 – 2015-06-03

Type Changes By
Update Updated to generate Activity ID for Primavera WBS. joniles
Fix Updated to correct Primavera duration percent complete calculation. joniles

Release 5.1.3 – 2015-05-18

Type Changes By
Fix Updated to ensure Ruby reads Boolean attributes correctly. joniles

Release 5.1.2 – 2015-05-18

Type Changes By
Fix Updated to ensure Ruby recognises short type as an integer. joniles

Release 5.1.1 – 2015-05-18

Type Changes By
Update Updated to use ruby-duration gem to avoid conflict with ActiveSupport::Duration. joniles

Release 5.1.0 – 2015-05-17

Type Changes By
Fix Updated to ensure that PrimaveraDatabaseReader.setSchema accepts null or empty string joniles
Fix Ensure conversion to/from .Net DateTime takes account of timezone and daylight savings (based on a contribution by Timour Koupeev) joniles
Update Updated to use POI 3.12. joniles
Update Removed ProjectFile.getTaskFieldAliases, replaced by ProjectFile.getCustomField().getFieldByAlias joniles
Update Removed ProjectFile.getResourceFieldAliases, replaced by ProjectFile.getCustomField().getFieldByAlias joniles

Release 5.0.0 – 2015-05-06

Type Changes By
Add Added project properties to the JSON output joniles
Add Added support for project properties to the Ruby wrapper joniles
Add Added support for reading data from a standalone Primavera P6 SQLite database joniles
Fix XXE security vulnerability. Fixes 267. joniles
Fix Task Number fields not saved to file if the value would floor to zero. Fixes 266. joniles
Fix Not all project calendars are read in for Project 2013 files (based on a contribution by Colin Rodriguez). Fixes 255. joniles
Update Renamed TaskContainer class to ChildTaskContainer joniles
Update Renamed ProjectHeader class to ProjectProperties joniles
Update Introduced ProjectConfig class joniles
Update Introduced TaskContainer class joniles
Update Introduced ResourceContainer class joniles
Update Introduced ResourceAssignmentContainer class joniles
Update Introduced ProjectCalendarContainer class joniles
Update Renamed ProjectFile.getProjectHeader to getProjectProperties joniles
Update Renamed ProjectFile.getCalendar to getDefaultCalendar joniles
Update Renamed ProjectFile.setCalendar to setDefaultCalendar joniles
Update Renamed MppReader.getReadHeaderOnly to getReadPropertiesOnly joniles
Update Renamed MppReader.setReadHeaderOnly to setReadPropertiesOnly joniles
Update Renamed ProjectFile.getCalendarUniqueID to ProjectConfig.getNextCalendarUniqueID joniles
Update Renamed ProjectFile.getResourceUniqueID to ProjectConfig.getNextResourceUniqueID joniles
Update Renamed ProjectFile.getTaskUniqueID to ProjectConfig.getNextTaskUniqueID joniles
Update Renamed ProjectFile.getAssignmentUniqueID to ProjectConfig.getNextAssignmentUniqueID joniles
Update Renamed ProjectFile.getResourceID to ProjectConfig.getNextResourceID joniles
Update Renamed ProjectFile.getTaskID to ProjectConfig.getNextTaskID joniles
Update Renamed ProjectHeader.getApplicationName to getShortApplicationName joniles
Update Renamed ProjectHeader.setApplicationName to setShortApplicationName joniles
Update Renamed ProjectHeader.setCalendarName to setDefaultCalendarName joniles
Update Renamed ProjectHeader.getCalendarName to getDefaultCalendarName joniles
Update Moved ProjectFile.getProjectFilePath to ProjectHeader.getProjectFilePath joniles
Update Moved ProjectFile.setProjectFilePath to ProjectHeader.setProjectFilePath joniles
Update Moved ProjectFile.getApplicationName to ProjectHeader.getFullApplicationName joniles
Update Moved ProjectFile.setApplicationName to ProjectHeader.setFullApplicationName joniles
Update Moved FileCreationRecord.setDelimiter to ProjectHeader.setMpxDelimiter joniles
Update Moved FileCreationRecord.getDelimiter to ProjectHeader.getMpxDelimiter joniles
Update Moved FileCreationRecord.setProgramName to ProjectHeader.setMpxProgramName joniles
Update Moved FileCreationRecord.getProgramName to ProjectHeader.getMpxProgramName joniles
Update Moved FileCreationRecord.setFileVersion to ProjectHeader.setMpxFileVersion joniles
Update Moved FileCreationRecord.getFileVersion to ProjectHeader.getMpxFileVersion joniles
Update Moved FileCreationRecord.setCodePage to ProjectHeader.setMpxCodePage joniles
Update Moved FileCreationRecord.getCodePage to ProjectHeader.getMpxCodePage joniles
Update Moved ProjectFile.getMppFileType to ProjectHeader.getMppFileType joniles
Update Moved ProjectFile.setMppFileType to ProjectHeader.setMppFileType joniles
Update Moved ProjectFile.getApplicationVersion to ProjectHeader.getApplicationVersion joniles
Update Moved ProjectFile.setApplicationVersion to ProjectHeader.setApplicationVersion joniles
Update Moved ProjectFile.setAutoFilter to ProjectHeader.setAutoFilter joniles
Update Moved ProjectFile.getAutoFilter to ProjectHeader.getAutoFilter joniles
Update Removed ProjectFile.getAliasTaskField, replaced by ProjectFile.getTaskFieldAliases().getField() joniles
Update Removed ProjectFile.getAliasResourceField, replaced by ProjectFile.getResourceFieldAliases().getField() joniles
Update Removed ProjectFile.getTaskFieldAlias, replaced by ProjectFile.getTaskFieldAliases().getAlias() joniles
Update Removed ProjectFile.setTaskFieldAlias, replaced by ProjectFile.getTaskFieldAliases().setAlias() joniles
Update Removed ProjectFile.getResourceFieldAlias, replaced by ProjectFile.getResourceFieldAliases().getAlias() joniles
Update Removed ProjectFile.setResourceFieldAlias, replaced by ProjectFile.getResourceFieldAliases().setAlias() joniles
Update Removed ProjectFile.getTaskFieldAliasMap, replaced by ProjectFile.getTaskFieldAliases joniles
Update Removed ProjectFile.getResourceFieldAliasMap, replaced by ProjectFile.getResourceFieldAliases joniles
Update Removed ProjectFile.addTable, replaced by ProjectFile.getTables().add() joniles
Update Removed ProjectFile.getTaskTableByName, replaced by ProjectFile.getTables().getTaskTableByName() joniles
Update Removed ProjectFile.getResourceTableByName, replaced by ProjectFile.getTables().getResourceTableByName() joniles
Update Removed ProjectFile.addFilter, replaced by ProjectFile.getFilters().addFilter() joniles
Update Removed ProjectFile.removeFilter, replaced by ProjectFile.getFilters().rmoveFilter() joniles
Update Removed ProjectFile.getAllResourceFilters, replaced by ProjectFile.getFilters().getResourceFilters() joniles
Update Removed ProjectFile.getAllTaskFilters, replaced by ProjectFile.getFilters().getTaskFilters() joniles
Update Removed ProjectFile.getFilterByName, replaced by ProjectFile.getFilters().getFilterByName() joniles
Update Removed ProjectFile.getFilterByID, replaced by ProjectFile.getFilters().getFilterByID() joniles
Update Removed ProjectFile.getAllGroups, replaced by ProjectFile.getGroups() joniles
Update Removed ProjectFile.getGroupByName, replaced by ProjectFile.getGroups().getByName() joniles
Update Removed ProjectFile.addGroups, replaced by ProjectFile.getGroups().add() joniles
Update Removed ProjectFile.addView, replaced by ProjectFile.getViews().add() joniles
Update Removed ProjectFile.setViewState, replaced by ProjectFile.getViews().setViewState() joniles
Update Removed ProjectFile.getViewState, replaced by ProjectFile.getViews().getViewState() joniles
Update Removed ProjectFile.getResourceSubProject, replaced by ProjectFile.getSubProjects().getResourceSubProject() joniles
Update Removed ProjectFile.setResourceSubProject, replaced by ProjectFile.getSubProjects().setResourceSubProject() joniles
Update Removed ProjectFile.addSubProject, replaced by ProjectFile.getSubProjects().add() joniles
Update Removed ProjectFile.getAllSubProjects, replaced by ProjectFile.getSubProjects joniles
Update Removed ProjectFile.fireTaskReadEvent, replaced by ProjectFile.getEventManager().fireTaskReadEvent() joniles
Update Removed ProjectFile.fireTaskWrittenEvent, replaced by ProjectFile.getEventManager().fireTaskWrittenEvent() joniles
Update Removed ProjectFile.fireResourceReadEvent, replaced by ProjectFile.getEventManager().fireResourceReadEvent() joniles
Update Removed ProjectFile.fireResourceWrittenEvent, replaced by ProjectFile.getEventManager().fireResourceWrittenEvent() joniles
Update Removed ProjectFile.fireCalendarReadEvent, replaced by ProjectFile.getEventManager().fireCalendarReadEvent() joniles
Update Removed ProjectFile.fireAssignmentReadEvent, replaced by ProjectFile.getEventManager().fireAssignmentReadEvent() joniles
Update Removed ProjectFile.fireAssignmentWrittenEvent, replaced by ProjectFile.getEventManager().fireAssignmentWrittenEvent() joniles
Update Removed ProjectFile.fireRelationReadEvent, replaced by ProjectFile.getEventManager().fireRelationReadEvent() joniles
Update Removed ProjectFile.fireRelationWrittenEvent, replaced by ProjectFile.getEventManager().fireRelationWrittenEvent() joniles
Update Removed ProjectFile.fireCalendarWrittenEvent, replaced by ProjectFile.getEventManager().fireCalendarWrittenEvent() joniles
Update Removed ProjectFile.addProjectListener, replaced by ProjectFile.getEventManager().addProjectListener() joniles
Update Removed ProjectFile.addProjectListeners, replaced by ProjectFile.getEventManager().addProjectListeners() joniles
Update Removed ProjectFile.removeProjectListener, replaced by ProjectFile.getEventManager().removeProjectListener() joniles
Update Removed ProjectFile.addGraphicalIndicator joniles
Update Removed ProjectFile.getGraphicalIndicator, replaced by ProjectFile.getCustomFields().getCustomField().getGraphicalIndicator() joniles

Release 4.7.6 – 2015-03-18

Type Changes By
Add Added a Ruby wrapper for MPXJ joniles
Add Added the ability to export project data as JSON, to make it easier to work with in languages other than Java joniles
Add Added support for the Assignment attribute Resource Request Type joniles
Update Primavera database and XER readers updated to match WBS visible in Primavera for each task. Previous behaviour of generating a unique WBS for each task can be restored using a flag set on the readers. joniles
Fix Avoid NPE when calculating Task Completed Through joniles
Fix Read Task Earned Value Method correctly from MPP files joniles
Fix Fix issue where some floating point attributes were returning NaN joniles

Release 4.7.5 – 2015-02-27

Type Changes By
Fix Handle invalid Primavera calendar data gracefully joniles

Release 4.7.4 – 2015-02-25

Type Changes By
Fix Failed to read project containing CodePage 1250 text. Fixes 257. joniles
Fix MS Project 2010: tasks with null baseline dates. Fixes 259. joniles
Fix Incorrect task end date read from Primavera XER and database joniles
Fix Incorrect percent complete read from Primavera XER, database, and PMXML files joniles
Fix Failed to read fields held at the end of a fixed data block joniles
Add Added support for Task Baseline Estimated Duration, Baseline Estimated Start, Baseline Estimated Finish, Baseline Fixed Cost, and Baseline Fixed Cost Accrual joniles
Add Added the ability to customise the fields read from a Primavera database or XER file. joniles
Add Added Task Activity Type and Task Status as additional fields read from Primavera database and XER and files joniles
Update Changed Task physical percent complete methods for consistency to use Number rather than Integer joniles

Release 4.7.3 – 2014-12-23

Type Changes By
Update Updated to use POI 3.11. joniles
Update Updated to use rtfparserkit 1.1.0 for Java 6 compatibility. joniles

Release 4.7.2 – 2014-12-15

Type Changes By
Fix Updated to fix Maven dependency issue. joniles

Release 4.7.1 – 2014-12-08

Type Changes By
Add Added a flag to MPPReader to indicate that only the project header should be read. joniles

Release 4.7.0 – 2014-12-04

Type Changes By
Add Implemented new RTF parser for stripping RTF to improve performance and accuracy joniles
Add Removed non-API code from the top level package joniles
Add Improved support for reading built-in and custom project properties from MPP files. joniles
Fix Improved resilience of MPP file reading to unknown data structures joniles
Fix Fixed issue which could cause an infinite loop when ordering tasks in a file containing multiple consecutive blank tasks joniles
Fix Fixed issue where free text versions of task start, finish, and duration fields were not being read correctly from MPP14 files joniles

Release 4.6.2 – 2014-11-11

Type Changes By
Fix Fixed issue with custom duration field units not read correctly from MSPDI files joniles
Fix Problems with the lag calculated in the relation. Fixes 223. joniles
Fix Outline code not read correctly from MPP file written by Project 2013 joniles
Fix Defensive changes to avoid exceptions when reading MPP files. Fixes 239. joniles
Fix Deleted tasks being read from mpp file. Fixes 250. joniles
Add Added DotNetInputStream and DotNetOutputStream classes for ease of use under .Net. joniles
Update Updated to automatically generate and package MpxjUtilities.dll joniles

Release 4.6.1 – 2014-10-17

Type Changes By
Fix Fixed NuGet metadata joniles

Release 4.6.0 – 2014-10-17

Type Changes By
Add Added support for NuGet. joniles
Fix Fixed an issue where the ID and Unique ID resource attributes were being read incorrectly from MPP14 files. joniles
Fix Fixed an issue where the project's default duration format was not being used joniles
Fix Reading .MPP file using MPXJ 4.2 reads extra unintentional ResourceAssignment with the task which is not seen in Task Sheet in Microsoft Project. Fixes 248. joniles
Fix All resources have "Material" property. Fixes 235. joniles
Update Updated Primavera PM XML file reader to capture the Project ID to align with data read from XER file/database (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to ensure task percent complete supports Physical Percent, Duration Percent and Units Percent (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to ensure task baseline values match values read from XER file/database (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to ensure task actual duration to matches value read from XER file/database (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to read the task duration (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to read task LateStart, LateFinish, EarlyStart, EarlyFinish attributes correctly (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to read task Start and End correctly (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to identify milestones (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to set the task Critical attribute (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera PM XML file reader to include costs (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Updated Primavera XER/Database readers to read task Start and End correctly (contributed by Nathaniel Marrin). Fixes 247. joniles
Update Migrated tests to JUnit 4 joniles

Release 4.5.0 – 2014-03-01

Type Changes By
Add Added the ability to call the .Net version of MPXJ from COM. joniles
Add Added support Primavera decimal database columns. joniles
Add Added support for user defined task fields (contributed by Mario Fuentes). joniles
Add Added POM for current Maven versions (contributed by Nick Burch) joniles
Fix Unable to load mpp from project-2013. Fixes 213. joniles
Fix Primavera currency files without currency information. Fixes 226. joniles
Fix PrimaveraReader cannot handle files with more than 30 user defined fields. Fixes 227. joniles
Fix setMilestone() issue. Fixes 224. joniles
Fix MPXJ 4.4 and 2013 files - invalid load of task data. Fixes 210. joniles
Fix Updated to fix an issue with Asta Powerproject PP file tokenization joniles
Fix Updated to fix an issue where valid WBS values containing .0 are corrupted joniles
Update Updated to allow Primavera hours per day to be a decimal value joniles
Update Updated to support Primavera PM XML files generated by Primavera versions up to P6v8.3 (contributed by Mario Fuentes) joniles
Update Updated to set the StatusDate attribute in the project header from a Primavera database, XER file or PM XML file. joniles
Update Updated to use (a patched version of) POI 3.10. joniles

Release 4.4.0 – 2013-03-14

Type Changes By
Add Added support for writing Primavera PM XML files. joniles
Add Added support for reading Asta Powerproject PP and MDB files. joniles
Add Added support for writing SDEF files (Contributed by William Iverson). joniles
Add Added support for reading Enterprise Custom Fields 1-50 for Task, Resources, and Resource Assignments. joniles
Add Added MpxjExtensionMethods assembly to simplify working with Java types in .Net (Contributed by Kyle Patmore) joniles
Update Provided two new .Net DLL versions in addition to the original version. These allow properties to be accessed in a ".Net style", and for languages apart from VB, provide .Net style method names. joniles
Update Updated to remove the distinction between base calendar and resource calendars in the ProjectFile class. joniles
Fix Updated to improve support for custom outline codes (Contributed by Gary McKenney) joniles
Fix getTimephasedOvertimeWork can return TimephasedWork with NaN. Fixes 189. joniles
Fix Support for timephased cost for cost type resources. Fixes 190. joniles
Fix Rolled Up tasks don't use default duration units. Fixes 195. joniles
Fix Extract Primavera Task ID. Fixes 199. joniles
Fix Updated to fix an issue where the resource assignment delay attribute was not being read from or written to MSPDI files correctly joniles
Fix Updated to fix an issue where derived calendars were not being read correctly from MPP files joniles
Update Updated to use IKVM 7.2. joniles

Release 4.3.0 – 2012-02-08

Type Changes By
Add Added support for reading Primavera PM XML files. joniles
Add Added support for reading timephased cost, and timephased baseline cost and baseline work from MPP files. joniles
Add Added support for Work Weeks in MSPDI files (SourceForge feature request 23). joniles
Update Updated to use IKVM 7.0. joniles
Fix Updated to fix SourceForge bug 3290224: Incorrect order of tasks when writing an MSPDI file (contributed by Jonathan Besanceney). joniles
Fix ResourceAssignment.getTaskUniqueID() returns null. Fixes 161. joniles
Fix Wrong project name in MPX file. Fixes 169. joniles
Fix Wrong title in XML file when importing from XER file. Fixes 170. joniles
Fix Wrong record number for resource calendar in MPX file. Fixes 168. joniles
Fix In the XML file the element field SaveVersion is missing. Fixes 171. joniles
Fix Loop when import task with 0% on units of works in resources. Fixes 167. joniles
Fix French locale NA incorrect. Fixes 163. joniles
Fix Invalid dependency between child and parent. Fixes 175. joniles
Fix Missing tasks from MS Project 2010 mpp file. Fixes 174. joniles
Fix Wrong WBS code and WBS when converting a Primavera XER file. Fixes 179. joniles
Fix Error reading XER file with German localisation for numbers. Fixes 177. joniles
Fix TimephasedResourceAssignments with negative TotalWork. Fixes 166. joniles
Fix Wrong currency symbol in the exported file. Fixes 181. joniles
Fix TimephasedResourceAssignment end date not correct. Fixes 104. joniles
Fix Calendar hours are incorrect. Fixes 116. joniles
Fix NullReferenceException with getTimephasedBaselineWork. Fixes 188. joniles
Fix Outline number is null when opening Project 2003 MPP file. Fixes 191. joniles
Fix Unable to parse note (unknown locale). Fixes 192. joniles
Fix MPP9Reader marks all tasks after a null task as null. Fixes 193. joniles
Fix Updated to fix an issue where the Task critical attribute was incorrectly calculated for some manually scheduled tasks. joniles
Fix Updated to fix an issue where the Task summary attribute was not set correctly when using certain methods to add or remove child tasks. joniles
Fix Updated to fix an issue where subprojects were not read correctly (Contributed by Gary McKenney). joniles

Release 4.2.0 – 2011-06-23

Type Changes By
Add Added support for resource assignment fields Baseline Cost 1-n, Baseline Work 1-n, Baseline Start 1-n, Baseline Finish 1-n, Start 1-n, Finish 1-n, Date 1-n, Duration 1-n, Cost 1-n, Text 1-n, Number 1-n, Flag 1-n, for MPP, MPD, and MSPDI files. joniles
Add Added support for task suspend date, task resume date, and task code read from Primavera, and represented in MS Project custom fields Date1, Date2, and Text1 respectively. joniles
Add Added support for retrieving the table associated with any view. joniles
Fix Error converting Mpp to planner. Fixes 158. joniles
Fix MSPDI Linklag for TimeUnit.Percent. Fixes 157. joniles
Fix Error reading calendars for 2010 files. Fixes 156. joniles
Fix Duplication of calendar id. Fixes 159. joniles
Fix Wrong task start. Fixes 153. joniles
Fix Wrong start and finish dates for 2010 files. Fixes 156. joniles

Release 4.1.0 – 2011-05-30

Type Changes By
Add Updated ProjectFile class to change default value for "auto" flags to simplify programmatic creation of project files. joniles
Add Added support for Manual, Start Text, Finish Text, and Duration Text attributes in MSPDI files. joniles
Add Added support cost resource type for MPP12, MPP14 and MSPDI files. joniles
Add Added Task.removePredecessor method (contributed by Leslie Damon). joniles
Add Added "read presentation data" flag to MPPReader - allows clients to save time and memory when MPP presentation data not required. joniles
Add Added support for reading Primavera calendars (contributed by Bruno Gasnier). joniles
Add Added support for resource assignment leveling delay for MPP, MPD, and MSPDI files. joniles
Add Added support for "unassigned" resource assignments. joniles
Add Added support for task manual duration attribute for manually scheduled tasks in MPP14 and MSPDI files. joniles
Add Added support for resource NT account attribute for MPP9, MPP12, and MPP14 files. joniles
Add Added support for physical % complete for MPP9, MPP12, and MPP14 files. joniles
Fix MPXJ API returns the incorrect start date of a manual task. Fixes 120. joniles
Fix Task id incorrect after importing from MPP14 file. Fixes 123. joniles
Fix MPXJ 4.0 fails to work with Project 2010 format. Fixes 124. joniles
Fix Index was outside the bounds of the array. Fixes 128. joniles
Fix header.getHonorConstraints() is not working in case of MPP. Fixes 131. joniles
Fix Empty notes appear for all tasks when saving in XML format. Fixes 139. joniles
Fix All Extended Attributes always added when using MSPDIWriter. Fixes 122. joniles
Fix Baseline/Actual Work in 2010 MPP missing. Fixes 144. joniles
Fix ResourceAssignment getCalendar not using IgnoreResourceCalendar flag. Fixes 114. joniles
Fix ExternalTaskProject value missing. Fixes 146. joniles
Fix Deleted Primavera tasks handling problem. Fixes 137. joniles
Fix Latest CVS version gives wrong values for inactive field. Fixes 143. joniles
Fix Task ID order when creating a project file is not correct. Fixes 125. joniles
Fix Invalid tasks that should not be there. Fixes 106. joniles
Fix Updated to fix task calendars read incorrectly from MPP14 files. joniles
Fix Updated to fix incorrect month duration assumption (contributed by Frank Illenberger). joniles
Fix Updated to fix incorrect number format in MSPDI file in non-English locales (contributed by Frank Illenberger). joniles
Fix Updated to fix incorrect resource assignment actual work attribute for MPP14 files. joniles
Fix Updated to fix incorrect task leveling delay attribute for MPP9, MPP12, and MPP14 files. joniles
Fix Updated to fix leveling delay and link lag when writing an MSPDI file (contributed by Frank Illenberger). joniles
Fix Updated to fix incorrect assignment actual start date when writing an MSPDI file. joniles
Update Updated to improve support for material resources in MSPDI files. joniles
Update Updated to reduce overall size of MSPDI files by not writing default values. joniles
Update Updated to use IKVM 0.46.0.1. joniles
Update Updated to use POI 3.7. joniles
Update Updated to make task, resource, and assignment fields read from MPP files data-driven, rather than hard coded. joniles

Release 4.0.0 – 2010-05-25

Type Changes By
Add Added support for reading Microsoft Project 2010 MPP files. joniles
Add Added support for reading Primavera P6 XER files. joniles
Add Added support for reading Primavera P6 databases. joniles
Update Updated to target Java 1.6. joniles
Add Added Russian locale (Contributed by Roman Bilous). joniles
Fix Relation.getDuration() is always giving result in 'HOUR' fmt. joniles

Release 3.2.0 – 2010-01-20

Type Changes By
Add Added support for Resource cost rate tables (Based on code by Andrei Missine). joniles
Add Added support for Resource availability (Based on code by Andrei Missine). joniles
Add Added support for successors (Based on an idea by John D. Lewis). joniles
Add Added support for task and resource GUIDs. joniles
Add Added a flag to allow raw timephased data to be retrieved from MPP files. joniles
Fix Updated to fix logical operator read issue in MPP auto filters (Contributed by Andrei Missine). joniles
Fix MPXJ Issue: Related to Project Calendar. Fixes 94. joniles
Fix POI License in legal folder of download wrong. Fixes 90. joniles
Fix Updated to fix Steelray bug 15468: Null Pointer Exception reading task constraints. joniles
Fix Planner writer causes Null Pointer exception. Fixes 102. joniles
Fix getRecurring() task is not working. Fixes 100. joniles
Fix getStandardRateFormat() is returning 'null'. Fixes 98. joniles
Fix getWeekStartDay() is not working. Fixes 97. joniles
Fix getDaysPerMonth() is not working. Fixes 96. joniles
Fix Resource.getNotes() not working for MPP12 file. Fixes 101. joniles
Fix MPP: getEditableActualCosts() is not behaving correctly. Fixes 105. joniles
Update Updated to use POI 3.6. joniles
Update Updated to use IKVM 0.42.0.3. joniles
Update Updated to make MPX duration parsing more lenient (Contributed by Jari Niskala). joniles
Update Updated to make MPP Var2Data extraction more robust (Contributed by Jari Niskala). joniles
Update Updated to implement MSPDI context caching to improve performance (Contributed by Jari Niskala). joniles
Update Updated to improve MPP file task structure validation. (Contributed by Jari Niskala). joniles
Update Updated to improve MPX file parsing. (Contributed by Jari Niskala). joniles
Update Updated to automatically populate missing WBS attributes. (Contributed by Jari Niskala). joniles
Update Updated to refactor the Relation class (note minor method name changes). joniles
Update Updated to add default calendar to Planner output. joniles

Release 3.1.0 – 2009-05-20

Type Changes By
Fix Plan file fails to load. Fixes 73. joniles
Fix Resource Assignment Normaliser rounding problem. Fixes 72. joniles
Fix Column alignment values are incorrect. Fixes 78. joniles
Fix NullPointerException in parseExtendedAttribute() (Contributed by Paul Pogonyshev). Fixes 76. joniles
Fix .0 at the end of WBS code and outline number (Contributed by Paul Pogonyshev). Fixes 74. joniles
Fix Too strict net.sf.mpxj.mpd.ResultSetRow. Fixes 79. joniles
Fix Generated planner file can't be opened. Fixes 80. joniles
Fix Support for loading global.mpt. Fixes 82. joniles
Fix Lowercase table name won't work with db on linux machines. Fixes 81. joniles
Fix Standard Calendar localization import problem. Fixes 71. joniles
Fix Strange duration conversion from database. Fixes 83. joniles
Fix FilterCriteria not being read in properly (Contributed by James Styles). Fixes 86. joniles
Fix Updated to fix Steelray bug 12335: Infinite loop when reading an MPP9 file. joniles
Fix Updated to fix Steelray bug 8469: Subproject flag not set correctly. joniles
Fix Updated to fix potential NPEs (Suggested by Steve Jonik). joniles
Update Updated EncryptedDocumentInputStream to wrap rather than extend the POI DocumentInputStream to allow use with POI 3.5. (Contributed by Josh Micich) joniles
Update Updated to provide strong names for .Net DLLs. joniles

Release 3.0.0 – 2009-01-25

Type Changes By
Update Updated to the Project 2007 MSPDI schema. joniles
Update Updated to POI 3.2. joniles
Update Updated to use the SAX parser with JAXB rather than DOM to reduce memory consumption. joniles
Update Updated MPX output to prevent Project 2007 complaining. joniles
Fix Task getNumber*() methods return inaccurate large values. Fixes 68. joniles
Fix Duplicate task in file.getChildTasks() when opening MPX. Fixes 56. joniles
Fix Relation.getTask returns null. Fixes 57. joniles
Fix Task.getSplits() not consistent. Fixes 58. joniles
Fix WBS Field not imported Mpp12. Fixes 60. joniles
Fix There are some conflict in TaskField. Fixes 63. joniles
Fix MSPDIReader is not setting calendarName in projectHeader. Fixes 66. joniles
Fix Write resource calendar with exceptions only. Fixes 67. joniles
Fix File loses predecessors. Fixes 69. joniles
Fix Resources not bring read. Fixes 70. joniles
Fix Updated to fix incorrect duration calculations where minutes per week were not being used (Contributed by Jonas Tampier). joniles
Fix Updated split task implementation to represent splits as DateRange instances rather than as hours. joniles
Add Added .Net DLLs using IKVM. joniles
Add Added support for reading timephased resource assignment data from MPP files. joniles
Add Added support CurrencyCode, CreationDate, LastSaved and HyperlinkBase project header fields. joniles
Add Added support for reading recurring task data from MPP files. joniles
Add Added methods to MPXReader and MPXWriter to allow the caller to determine the supported locales. joniles
Add Added Spanish locale (Contributed by Agustin Barto). joniles
Add Added support for durations with percentage time lag (Contributed by Jonas Tampier). joniles
Add Added support MSPDI file split tasks. joniles

Release 2.1.0 – 2008-03-23

Type Changes By
Update Updated to POI 3.0.2 joniles
Fix Updated to address an out of memory exception raised when processing certain MPP12 files. joniles
Fix Updated to fix a problem caused by duplicate ID values in MPP12 files. joniles
Fix Updated to fix a problem with the subproject unique ID calculation (Contributed by Jari Niskala). joniles
Fix Import from Project 2007 ignores some tasks. Fixes 48. joniles
Fix Crash on priority not set in MSPDI-file. Fixes 52. joniles
Fix Resource start/finish dates with MSP 2007. Fixes 51. joniles
Fix MS Project 2007: Calendar exceptions dates are wrong. Fixes 51. joniles
Add Added support for Enterprise task and resource fields. joniles
Add Added support for Baseline task and resource fields. joniles
Add Added support for extracting non-English (i.e. character set encoded) text from note fields. joniles
Add Added support for Chinese MPX files (contributed by Felix Tian). joniles
Add Added support for reading project start and end dates from all MPP file types (Bug #1827633). joniles
Add Added support for password protected MPP9 files (Contributed by Jari Niskala) joniles
Add Added support for calendar exceptions for MPP12 files (Contributed by Jari Niskala) joniles
Add Added support for value lists and descriptions for custom fields (Contributed by Jari Niskala) joniles
Add Added support for timescale formats (Contributed by Jari Niskala) joniles
Add Added support for the project file path attribute (Contributed by Jari Niskala) joniles
Add Added support for the ignore resource calendar attribute (Contributed by Jari Niskala) joniles
Add Added support for the resource actual overtime work attribute (Contributed by Jari Niskala) joniles
Add Added support for the resource material label attribute (Contributed by Jari Niskala) joniles
Add Added support for the resource NT account attribute (Contributed by Jari Niskala) joniles
Add Improved support for hyperlinks (Contributed by Jari Niskala) joniles
Add Improved support for custom fields in MPP12 files (Contributed by Jari Niskala) joniles

Release 2.0.0 – 2007-10-07

Type Changes By
Update Migrated to Java 5 joniles
Update Introduced generics joniles
Update Introduced enums joniles
Update Updated to POI 3.0.1 joniles
Update Updated to JAXB 2.1.4 joniles
Update Changed company details from Tapster Rock to Packwood Software joniles

Release 1.0.0 – 2007-08-30

Type Changes By
Add Added support for reading MPD files via JDBC joniles
Add Added support for reading Planner files joniles
Add Added support for over allocated flag to all MPP file formats. joniles
Add Added support for calculating duration variance from MPP files. joniles
Add Added support for calculating start and finish variance from MPP files. joniles
Add Added support for attribute change listeners for Task and Resource classes. joniles
Add Added support for start slack, finish slack, free slack and total slack read from MPP files. joniles
Add Added support for external tasks. joniles
Add Added unique ID generation for calendars read from MPX files. joniles
Add Added support for the status date property of the project. joniles
Fix Fixed a timezone related bug when handling dates for calendar exceptions (Contributed by Todd Brannam). joniles
Fix Fixed incorrect calculation of lag times for some MPP files. joniles
Fix Fixed missing predecessor tasks in certain rare MPP9 files. joniles
Fix Fixed incorrect MPX file AM/PM text setting in certain locales. joniles
Fix Fixed an ArrayIndexOutOfBoundsException. joniles
Fix Fixed a ClassCastException. joniles
Fix Fixed a zero length string error. joniles
Fix Fixed a duration rounding error when reading MSPDI files. joniles
Fix Fixed incorrect "as late as possible" constraint handling. joniles
Fix Incorrect late start date read from an MPP9 file. joniles
Fix Incorrect total slack calculation. joniles
Fix Added a default for the task constraint type attribute to prevent a possible NPE when writing an MSPDI file. joniles
Fix Added a default resource calendar name where the resource name is empty. joniles
Update Updated the Column.getTitle method to take account of user defined column aliases. joniles
Update Updated to add another condition to the test for deleted tasks in MPP8 files. joniles
Update Updated to significantly improve the performance of writing MSPDI files. joniles

Release 0.9.2 – 2006-03-07

Type Changes By
Add Added support for split views. joniles
Add Added support for graphical indicators. joniles
Add Added a workaround for a bug in MS Project which is seen when calendar exceptions are exported to an MSPDI file. If the exception contained seconds and milliseconds, MS Project marked every day as being affected by the exception, not the day or range of days specified. joniles
Update Updated to make date/time/number formats generic, and thus available to end users. For example, this allows users to format currencies in line with the settings in the project file. joniles
Update Standardised on minutes per day and minutes per week, rather than hours per day and hours per week. joniles
Update Provided additional time ranges for calendar exceptions. joniles
Update Refactored Task and Resource to use TaskField and ResourceField to identify fields. joniles
Update Updated to automatically generate WBS for tasks read from MPP files when no WBS information is present in the file. joniles
Fix Fixed a bug when reading MPP files where task finish dates appeared before the start date where a "start no later than" constraint was in use. joniles
Fix Fixed a bug which resulted in invalid MPX files being generated when a project either had no tasks, or it had no resources. joniles
Fix Fixed a long-standing bug where the calendar records were being written into MPX files after they were referred to in the project summary record. joniles
Fix Fixed a bug where WBS and Outline Levels were not being auto generated correctly when an MPP file contained a project summary task. joniles
Fix Fixed a bug where split tasks were not being reported correctly. joniles

Release 0.9.1 – 2006-01-26

Type Changes By
Update Major API rewrite. joniles
Add Added a flag called "expanded" to the Task class to represent whether a task in an MPP9 file is shown as expanded or collapsed by MS Project. joniles
Fix Fixed a bug in the relation code in MpxjQuery (contributed by Shlomo Swidler). joniles
Update Modified MPXDateFormat, MPXTimeFormat and MPXCurrencyFormat to derive them from DateFormat and NumberFormat. joniles
Add Added support for MPT files. joniles
Fix Fixed a bug which could case an NPE when reading certain MPP9 files. joniles
Add Added support for the "marked" attribute for MPP9 files. joniles
Add Added support for reading split task data from MPP9 files. joniles
Add Added support for reading calculate multiple critical paths flag. joniles
Fix Fixed a bug which could case an array out of bounds exception in the Priority (contributed by Frank Illenberger). joniles
Fix Fixed bug #1346735 "Priorities of the tasks are exported incorrectly". joniles
Add Added code to allow tasks, resources, resource assignments and calendars to be removed from the data structure. joniles
Add Implemented Italian MPX file format translation (contributed by Elio Zoggia). joniles
Update Cleaned up calendar usage. joniles
Add Added support for retrieval of custom document summary fields from the project header (contributed by Wade Golden). joniles
Update Updated to use checkstyle 4.0 and fixed warnings. joniles
Update Rationalised duration conversions into a set of methods in the MPXDuration class. joniles
Add Replaced various file format conversion utilities with the general purpose MpxjConvert utility. joniles
Fix Fixed an issue where tasks with a percent complete value, but no resource assignments, would not write correctly to an MSPDI file. joniles
Add Added an accessor method for resource calendars. joniles
Fix Unique ID generation was not correct for tasks, resources and calendars if these entities were added to an existing project file. joniles
Fix Fixed a compatibility issue with POI3 joniles
Add Added an event listener to the project file to allow notifications of resources and tasks being read and written to and from a file. joniles
Fix Fixed a compiler warning when build with JDK5. joniles
Fix Fixed a bug where a project start date was not being set correctly in the project header. joniles
Add Added support for reading the project header "calendar name", "schedule from" and "revision" values from MPP files. joniles
Fix Fixed split task support. joniles
Update Enhanced TableFontStyle implementation. joniles

Release 0.0.25 – 2005-08-11

Type Changes By
Add Added support for reading all properties from an MPP9 file which define the visual appearance of the Gantt Chart view shown in Microsoft Project (development funding courtesy of Steelray). joniles
Update Tidied up constructors. Added no-argument constructors to the MPPFile and MSPDIFile classes. joniles
Update Fixed incorrect value in WorkGroup enumerated type. joniles
Update Implemented the resource assignment work contour property (contributed by Wade Golden). joniles
Update Implemented correct handling for MPX files using different character set encodings (suggested by Frank Illenberger). joniles
Fix Fixed task duration calculation when importing an MPP file with a "non-standard" hours-per-day setting (contributed by Wade Golden). joniles
Update Updated to ensure that the MPX task fixed attribute, and the MPP/MSPDI task type attribute are correctly handled. joniles
Update Updated to implement the remaining project header attributes supported by the MSPDI file format. joniles
Update Updated to add support for reading the MPX 3.0 files generated by Primavera (courtesy of CapitalSoft). joniles
Fix Fixed incorrect assumptions about conversion of durations to hours when writing MPX files (contributed by Frank Illenberger). joniles
Update Updated to calculate remaining work for resource assignments on import, to allow MSPDI export of this data to work correctly (contributed by Frank Illenberger). joniles
Fix Updated to add another condition to the test for deleted tasks in MPP8 files. joniles
Fix Updated to fix a problem with reading assignment data from MPP9 files. joniles
Update Rationalised the location of the JUnit tests and the sample files. joniles
Fix Fixed a problem where the project start and end dates reported in the project header were incorrect. joniles
Fix Fixed an array out of bounds exception when reading an MPP9 file. joniles
Update Updated to allow MPXCalendarHours to accept an arbitrary number of time periods. joniles
Add Introduced the Day class to replace the use of arbitrary integers to represent days of the week. joniles
Add Added the ability to query the task assignments for a resource using the Resource.getTaskAssignments() method. joniles
Fix Fixed a problem with number formats in MSPDI files. joniles
Update Updated the MPP View class to extract the view type. joniles
Update Updated to ensure that duration values read from an MSPDI file are converted into the appropriate duration units, rather than being left as hours as the durations are represented in the MSPDI file. joniles
Add Implemented French MPX file format translation (contributed by Benoit Baranne). joniles
Fix Fixed a bug reading assignment work contour attribute. joniles
Update Updated to make failure more graceful when a Microsoft Project 4.0 MPP file is encountered. joniles
Fix Fixed a bug where deleted constraints in an MPP9 file were not being ignored. joniles
Update Updated to make replace the int relation type in the Relation class with instances of the RelationType class. joniles
Update Updated to derive RelationList from AbstractList. joniles
Add Added sample code to MpxjQuery to illustrate retrieval of information from Relation instances. joniles
Update Updated MpqjQuery to parse MSPDI files as well as MPP and MPX files. joniles
Add Added support for early start, early finish, late start, late finish to MPP files. joniles
Update Updated MPP9 file support to handle start as late as possible constraints. joniles
Add Added support for subproject file information in MPP9 files. joniles
Fix Fixed a bug where occasionally a task in MPP9 files were not being read. joniles
Fix Fixed a NegativeArrayIndexException thrown when reading certain MPP8 files. joniles
Update Reduced the memory used by MPXJ by anything up to 60%, particularly when reading large MPP files. joniles
Fix Fixed a bug when reading MPX files where the field delimiter was not comma, and task relation lists contained more than one entry. joniles
Fix Updated to fix unreliable retrieval of project start and end dates from certain MPP files. joniles
Fix Fixed schedule from value in MSPDI files (contributed by Frank Illenberger). joniles
Fix Fixed a bug when reading durations in elapsed days from an MPP file. joniles
Update Tasks can now have arbitrary priority values. These values are mapped to/from the fixed MPP8/MPX priority values where necessary. joniles

Release 0.0.24 – 2005-01-10

Type Changes By
Fix Fixed a bug (again!) where deleted resource assignments in MPP9 files were still seen by MPXJ. joniles
Update Updated to use class instances instead of primitives to represent some enumerated types. joniles
Update Updated to implement support for reading and writing all the basic Resource attributes found in MSPDI files. joniles
Update Updated to implement support for reading and writing all the basic Task attributes found in MSPDI files. joniles
Update Updated to implement support for reading and writing all the basic Project Header attributes from MPP8 and MPP9 files. joniles
Add Made MSPDI file parsing more robust to allow it by default to cope with non-schema-compliant XML in the same manner as MS Project. Implemented a new compatibility flag to allow this behaviour to be disabled in favour of strict parsing. joniles
Update Merged DateTimeSettings, CurrencySettings, and DefaultSettings into the ProjectHeader class. This change makes the project header data easier to use as it is in a single place. It also makes the entities used to describe a project consistent with the contents of the MPP and MSPDI file formats. joniles

Release 0.0.23 – 2004-11-17

Type Changes By
Fix Fixed a bug where MPXJ was still using the default locale of the user's machine to create localised MPX files when a normal international MPX file was expected. joniles
Fix Fixed a bug where the incorrect record delimiter was being used in by the MPX RelationList class. joniles
Fix Fixed a bug where the method Task.getText21 was not retrieving the correct text value. joniles
Fix Fixed a bug where the task unique ID values were being truncated unnecessarily. joniles
Fix Fixed a bug where calendar exceptions were not testing the range of dates between the start and end date correctly. joniles
Fix Fixed a bug where the priority of a task was being escalated when converting between an MPP9 file and an MSPDI file. joniles
Fix Fixed a bug where a deadline was incorrectly being added to a task when importing data from an MPP9 file. joniles
Fix Fixed a bug where deleted resource assignments in MPP9 files were still seen by MPXJ. joniles
Fix Fixed a bug where MPXFile attributes were not being correctly copied by the copy constructor. joniles
Fix Fixed a rounding error in MPXCalendar.getDaysInRange (contributed by Wade Golden) joniles
Update Updated to make MPXJ more robust in the face of unexpected offsets in MPP8 file format. joniles
Update Updated support for password-protected files to allow write-reserved files to be read. joniles
Update Updated to use the latest version of JAXB, as shipped in Sun's Java Web Services Developer Pack (JWSDP) version 1.4. joniles
Update Updated the distribution to include the redistributable files from the JWSDP JAXB implementation. Users will no longer need to download JWSDP separately in order to make use of MPXJ's MSPDI functionality. joniles
Update Updated to prevent empty notes records being added to tasks and resources when reading an MSPDI file. joniles
Update Updated to improve accuracy when converting an MPP file to an MSPDI file. joniles
Add Added support for blank task rows in MPP8 files. joniles
Add Added support for blank resource rows in MPP8 files. joniles
Add Added support for Portuguese MPX files. joniles
Add Added support reading and writing extended attributes (apart from outline codes) for MSPDI files. joniles
Add Added support for the Resource Type attribute. joniles

Release 0.0.22 – 2004-07-27

Type Changes By
Fix Fixed a bug where task data was not being read correctly from very large MPP9 files. joniles
Fix Fixed a bug where certain MPP8 files were not read correctly when no constraint data is present. joniles
Fix Fixed a bug where certain MPP9 files were not read correctly. joniles
Fix Fixed a bug where MPP9 files containing invalid resource data were not read correctly. joniles
Fix Fixed a bug where MPXJ was using the default locale of the user's machine to create localised MPX files when a normal international MPX file was expected. joniles
Fix Fixed a bug where MPXJ not correctly handling embedded line breaks when reading and writing MPX files. joniles
Update Removed arbitrary restrictions on the number of various entities, originally taken from the MPX specification. joniles
Update Updated MPX documentation for Task.getFixed and Task.setFixed. joniles
Update Updated MPP9 file code to improve handling invalid offset values. joniles
Update Updated to remove leading and trailing spaces from MPX task field names before processing. joniles
Update Updated to detect password protected files and raise a suitable exception. joniles
Add Implemented an enhancement to improve file loading speed by an order of magnitude for files with a large number of tasks or resources (based on a contribution by Brian Leach). joniles
Add Implemented support for Maven. joniles
Add Updated MpxCreate utility to allow it to create both MPX and MSPDI files. joniles
Add Added new JUnit test for confidential customer data. joniles
Add Added support for the resource assignment remaining work attribute for MPP8, MPP9 and MSPDI files. joniles

Release 0.0.21 – 2004-05-06

Type Changes By
Fix Fixed a bug where the task start date attribute was not always correct for MPP8 files. joniles
Fix Fixed a bug causing valid tasks to be incorrectly identified as being deleted in MPP8 files. joniles
Fix Fixed a bug causing an exception when reading certain MPP9 files. joniles
Update Updated to allow localised MPX files to be written and read. joniles
Add Implemented support for German MPX files. joniles
Add Implemented generic mechanism for dealing with task field aliases. joniles
Add Implemented task field alias read/write for MSPDI files. joniles
Add Implemented task field alias read for MPP9 files. joniles
Add Implemented resource field alias read/write for MSPDI files. joniles
Add Implemented resource field alias read for MPP9 files. joniles

Release 0.0.20 – 2004-03-15

Type Changes By
Fix Fixed a bug where alternative decimal delimiters and thousands separators were not being handled correctly when reading and writing MPX files. joniles
Fix Fixed a bug causing a null pointer exception when writing an MSPDI file. joniles
Fix Fixed a bug in MSPDI files where default values were being written incorrectly for some task attributes. joniles
Fix Fixed a bug with MSPDI file date handling in non GMT time zones. joniles
Fix Fixed a bug in processing calendar data where data block is not a multiple of 12 bytes joniles
Fix Fixed a bug processing tables where column data is null joniles
Fix Fixed checkstyle code warnings. joniles
Fix Fixed Eclipse code warnings. joniles
Update Updated to include version 2.5 of the POI library. joniles
Add Added support for task calendars. joniles

Release 0.0.19 – 2003-12-02

Type Changes By
Fix Fixed a bug reading table data from certain MPP8 files joniles
Update Updated MSPDI support to use the latest version of JAXB (from JWSDP-1.3) joniles
Update Re-implemented base and resource calendars as a single MPXCalendar class joniles
Update Updated support for base calendars and resource calendars for all file formats joniles
Update Improved MPXException to print details of any nested exception when a stack trace is printed. joniles
Remove Removed unnecessary use of ByteArray.java joniles
Add Added support for the following task fields: ActualOvertimeCost, ActualOvertimeWork, FixedCostAccrual, Hyperlink, HyperlinkAddress, HyperlinkSubAddress, LevelAssignments, LevelingCanSplit, LevelingDelay, PreleveledStart, PreleveledFinish, RemainingOvertimeCost, RemainingOvertimeWork. joniles

Release 0.0.18 – 2003-11-13

Type Changes By
Fix Fixed a bug with writing MS Project compatible MSPDI XML files in non-GMT timezones. joniles
Fix Fixed a bug with writing MSPDI XML files in non-GMT timezones. joniles
Fix Fixed a bug causing an exception when zero length calendar names were present joniles
Fix Fixed a bug causing MPP8 flags to be read incorrectly. Note that flag 20 is still not read correctly. joniles
Fix Fixed a bug with the "Microsoft Project Compatible Output" flag for MSPDI files. joniles
Fix Fixed a bug reading task text 10. joniles
Add Added new MPXFile.setIgnoreTextModel() method to allow MPXJ to ignore faulty text version of task or resource model records in MPX files. joniles
Update Improved invalid MPX data error handling and reporting. joniles
Add Added BaseCalendar.getDate method to allow end dates to be calculated based on a start date and a duration of working time. joniles
Update Made MPXDateFormat implement java.io.Serializable to allow MPXDate to serialize correctly. joniles
Update Updated the ant build file to allow MPXJ to be built without the components that depend on JAXB joniles
Update Rationalised setDefaultStartTime and setDefaultEndTime methods joniles
Add Added MppXml utility joniles
Add Added support for querying view information held in MPP files. joniles
Add Added support for querying table information held in MPP files. (NB This allows the user to retrieve column information, including user defined column names) joniles
Add Added support for outlinecode1-10 fields in MPP9 files. joniles
Add Added support for resource "available from" and "available to" fields. joniles
Update Verified that MPXJ will read MPP files written by Microsoft Project 2003 (they are still MPP9 files). joniles

Release 0.0.17 – 2003-08-05

Type Changes By
Fix Fixed a bug where a decimal point was being appended to the currency format even if no decimal digits were required. joniles
Fix Fixed a bug where special characters appearing in the currency symbol were not being quoted. joniles
Fix Fixed a bug that caused resource assignments to be incorrectly read from some MPP8 files. joniles
Add Added a new write method to MPXFile allowing the user control over the character encoding used when writing an MPX file. joniles

Release 0.0.16 – 2003-07-04

Type Changes By
Fix Fixed bug causing some extended boolean attributes to be read incorrectly. joniles
Fix Fixed bug causing MPP8 file task data to be read incorrectly under certain circumstances. joniles
Update Updated calendar duration code to account for calendar exceptions. joniles

Release 0.0.15 – 2003-06-17

Type Changes By
Fix Fixed a bug causing resource assignments to be duplicated in an MPX file created programmatically. joniles
Fix Fixed a bug causing an incorrect duration value to be read from an MPP9 file. joniles
Fix Fixed a bug causing invalid MPX files to be written in locales which don't use a period as the decimal separator. joniles
Fix Fixed a bug causing embedded quote and comma characters in task and resource notes to be handled incorrectly. joniles
Add Added simple JUnit test to demonstrate iteration through relationships. joniles
Add Added an example of programmatically creating a partially complete task to the MPXCreate.java example. joniles
Add Added default values to the MPX project header. joniles
Add Added support for reading the RemainingDuration field from an MPP9 file. joniles
Update Updated predecessor and successor method documentation. joniles
Update Updated Task.get/set ResourceInitials and Task.get/set ResourceNames method documentation. joniles
Update Updated to extract the following fields from resource assignment data in MPP files which were previously not imported: ActualCost, ActualWork, Cost, Finish, Start, Units, Work. joniles

Release 0.0.14 – 2003-05-28

Type Changes By
Update Updated to extract the following fields from resource data in an MPP9 file which were previously not imported: Flag1-Flag20. joniles
Add Added the method MPPFile.getFileType to allow the type of MPP file (MPP8: 98, MPP9: 2000,2002) to be determined. joniles
Update Updated API to make classes final and constructors package access only where appropriate. joniles
Update Updated to use of 6 byte long int fields for cost and work values for MPP8. joniles
Fix Fixed error in reading task fixed cost for MPP8. joniles
Update Updated to extract the following fields from task data in an MPP8 file which were previously not imported: Contact, Cost1-Cost10, Date1-Date10, Duration1-Duration10, EffortDriven, Finish1-Finish10, Flag1-Flag20, HideBar, Milestone, Number1-Number20, Rollup, Start1-Start10, Text1-Text30, Type, WBS. joniles
Update Updated to extract the following fields from resource data in an MPP8 file which were previously not imported: Code, Cost1-Cost10, Date1-Date10, Duration1-Duration10, EmailAddress, Finish1-Finish10, Number1-Number20, Start1-Start10, Text1-Text30 joniles
Add Added support for task and resource note fields in MPP8 files. joniles
Add Added support for the OvertimeCost task attribute for all file formats. joniles
Update Updated to extract calendar data from MPP8 files. joniles
Update Updated resource notes to fix end of line handling problem. joniles
Add Added functionality to read default settings and currency settings data from MPP files. joniles

Release 0.0.13 – 2003-05-22

Type Changes By
Add Implemented support for the Microsoft Project 98 file format. joniles
Fix Fixed a bug that prevented task and resource note text from being read. joniles
Update Updated to remove a Java 1.4 dependency introduced in 0.0.12. Will now work with Java 1.3. joniles
Update Updated to correct handling of carriage returns embedded in note fields. joniles

Release 0.0.12 – 2003-05-08

Type Changes By
Fix Fixed incorrect handling of timezones and daylight saving time. joniles
Fix Fixed incorrect task structure generated from outline levels. joniles
Update Updated to extract the notes fields from tasks and resources read from an MPP file. joniles
Add Added the option to remove or preserve the RTF formatting from the note fields from an MPP file. joniles
Update Updated to extract the following fields from task data in an MPP file which were previously not imported: Text11-Text30, Number6-Number20, Duration4-Duration10, Date1-Date10, Cost4-Cost10, Start6-Start10, Finish6-Finish10 joniles
Update Updated to extract the following fields from resource data in an MPP file which were previously not imported: Text6-Text30, Start1-Start10, Finish1-Finish10, Number1-Number20, Duration1-Duration10, Date1-Date10, Cost1-Cost10 joniles

Release 0.0.11 – 2003-04-15

Type Changes By
Fix Fixed error in format string used in one of the example files. joniles
Fix Fixed error where double byte characters were being read incorrectly. joniles
Fix Fixed error where deleted constraints were being resurrected when read from an MPP file. joniles
Update Updated to extract the following fields from task data in an MPP file which were previously not imported: Flag11-Flag20, Rollup, HideBar, EffortDriven. joniles

Release 0.0.10 – 2003-04-08

Type Changes By
Fix Corrected Actual Start and Actual End fields from MPP file. joniles
Fix Fixed bug where time values were being broken by daylight saving time in the user's default locale. joniles
Update Updated to extract the following fields from task data in an MPP file which were previously not imported: Actual Work, Baseline Work, Cost Variance, Deadline, Remaining Work, Work. joniles
Update Updated to extract the following fields from resource data in an MPP file which were previously not imported: Actual Cost, Actual Overtime Cost, Actual Work, Baseline Work, Cost, Cost Variance, Max Units, Overtime Cost, Overtime Rate, Overtime Work, Peak, Regular work, Remaining Cost, Remaining Overtime Cost, Remaining Work, Standard Rate, Work, Work Variance joniles

Release 0.0.9 – 2003-04-03

Type Changes By
Fix Fixed bug when handling certain types of modified MPP file where resources have been updated. joniles
Add Added sample MPP files for bugs to the JUnit tests. joniles
Add Added support for summary flag import from MPP files. joniles
Add Added automatic summary flag update when creating an MPX file programmatically. joniles
Add Added new constructor to the MSPDIFile class to allow MSPDI files to be created from scratch. joniles

Release 0.0.8 – 2003-03-27

Type Changes By
Add Added support for estimated durations. joniles
Fix Fixed bug in handling certain types of modified MPP file where tasks have been updated. joniles
Add Added the facility to auto generate outline numbers. joniles