taskjuggler 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -0
- data/benchmarks/depends.tjp +2 -1
- data/benchmarks/htmltaskreport.tjp +2 -1
- data/doc/classes/AppConfig.html +124 -120
- data/doc/classes/Arguments.html +10 -6
- data/doc/classes/Object.html +229 -0
- data/doc/classes/String.html +35 -31
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +34 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
- data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
- data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
- data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
- data/doc/classes/TaskJuggler/Booking.html +22 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
- data/doc/classes/TaskJuggler/CSVFile.html +28 -24
- data/doc/classes/TaskJuggler/Charge.html +22 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
- data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
- data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
- data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
- data/doc/classes/TaskJuggler/GanttChart.html +236 -207
- data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
- data/doc/classes/TaskJuggler/GanttLine.html +28 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
- data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +126 -120
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/JobInfo.html +284 -0
- data/doc/classes/TaskJuggler/Journal.html +197 -0
- data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
- data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
- data/doc/classes/TaskJuggler/Limits.html +68 -62
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
- data/doc/classes/TaskJuggler/Log.html +72 -68
- data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
- data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
- data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
- data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
- data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
- data/doc/classes/TaskJuggler/Macro.html +10 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +40 -36
- data/doc/classes/TaskJuggler/Message.html +16 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
- data/doc/classes/TaskJuggler/Navigator.html +249 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
- data/doc/classes/TaskJuggler/Project.html +1064 -678
- data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
- data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
- data/doc/classes/TaskJuggler/PropertyList.html +114 -113
- data/doc/classes/TaskJuggler/PropertySet.html +355 -312
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
- data/doc/classes/TaskJuggler/Query.html +90 -85
- data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
- data/doc/classes/TaskJuggler/RTPReport.html +301 -0
- data/doc/classes/TaskJuggler/RealFormat.html +114 -57
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
- data/doc/classes/TaskJuggler/Report.html +82 -291
- data/doc/classes/TaskJuggler/ReportBase.html +448 -0
- data/doc/classes/TaskJuggler/ReportContext.html +243 -0
- data/doc/classes/TaskJuggler/ReportTable.html +158 -129
- data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
- data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
- data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
- data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
- data/doc/classes/TaskJuggler/RichText.html +52 -48
- data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
- data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
- data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
- data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
- data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
- data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
- data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
- data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
- data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
- data/doc/classes/TaskJuggler/TableReport.html +1036 -0
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
- data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
- data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
- data/doc/classes/TaskJuggler/TextParser.html +203 -140
- data/doc/classes/TaskJuggler/TextReport.html +364 -0
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
- data/doc/classes/TaskJuggler/TextScanner.html +334 -240
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +547 -497
- data/doc/classes/TaskJuggler/TjpExample.html +29 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
- data/doc/classes/TaskJuggler/UserManual.html +54 -54
- data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
- data/doc/classes/TaskJuggler/XMLElement.html +70 -58
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/classes/TaskJuggler.html +266 -183
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +1 -1
- data/doc/files/lib/Account_rb.html +1 -1
- data/doc/files/lib/Allocation_rb.html +1 -1
- data/doc/files/lib/AppConfig_rb.html +1 -1
- data/doc/files/lib/AttributeBase_rb.html +11 -1
- data/doc/files/lib/AttributeDefinition_rb.html +1 -1
- data/doc/files/lib/Attributes_rb.html +1 -1
- data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
- data/doc/files/lib/Booking_rb.html +1 -1
- data/doc/files/lib/ChargeSet_rb.html +1 -1
- data/doc/files/lib/Charge_rb.html +1 -1
- data/doc/files/lib/HTMLDocument_rb.html +1 -1
- data/doc/files/lib/Interval_rb.html +1 -1
- data/doc/files/lib/Journal_rb.html +106 -0
- data/doc/files/lib/KeywordArray_rb.html +106 -0
- data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/files/lib/Limits_rb.html +1 -1
- data/doc/files/lib/Log_rb.html +1 -1
- data/doc/files/lib/LogicalExpression_rb.html +1 -3
- data/doc/files/lib/LogicalFunction_rb.html +1 -1
- data/doc/files/lib/LogicalOperation_rb.html +1 -1
- data/doc/files/lib/MacroParser_rb.html +1 -1
- data/doc/files/lib/MacroTable_rb.html +1 -1
- data/doc/files/lib/MessageHandler_rb.html +1 -1
- data/doc/files/lib/Message_rb.html +1 -1
- data/doc/files/lib/ProjectFileParser_rb.html +5 -1
- data/doc/files/lib/Project_rb.html +5 -1
- data/doc/files/lib/PropertyList_rb.html +1 -1
- data/doc/files/lib/PropertySet_rb.html +1 -1
- data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/files/lib/Query_rb.html +1 -1
- data/doc/files/lib/RTPNavigator_rb.html +120 -0
- data/doc/files/lib/RTPReport_rb.html +118 -0
- data/doc/files/lib/RealFormat_rb.html +1 -1
- data/doc/files/lib/ResourceScenario_rb.html +1 -1
- data/doc/files/lib/Resource_rb.html +1 -1
- data/doc/files/lib/RichTextDocument_rb.html +1 -1
- data/doc/files/lib/RichTextElement_rb.html +1 -1
- data/doc/files/lib/RichTextParser_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
- data/doc/files/lib/RichTextScanner_rb.html +1 -1
- data/doc/files/lib/RichTextSnip_rb.html +1 -1
- data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/files/lib/RichText_rb.html +1 -1
- data/doc/files/lib/ScenarioData_rb.html +1 -1
- data/doc/files/lib/Scenario_rb.html +1 -1
- data/doc/files/lib/Scoreboard_rb.html +1 -1
- data/doc/files/lib/ShiftAssignments_rb.html +1 -1
- data/doc/files/lib/ShiftScenario_rb.html +1 -1
- data/doc/files/lib/Shift_rb.html +1 -1
- data/doc/files/lib/SourceFileInfo_rb.html +1 -1
- data/doc/files/lib/SyntaxReference_rb.html +1 -1
- data/doc/files/lib/TOCEntry_rb.html +1 -1
- data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/files/lib/TableOfContents_rb.html +1 -1
- data/doc/files/lib/TaskDependency_rb.html +1 -1
- data/doc/files/lib/TaskJuggler_rb.html +1 -1
- data/doc/files/lib/TaskScenario_rb.html +1 -1
- data/doc/files/lib/Task_rb.html +1 -1
- data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/files/lib/TextParser/Rule_rb.html +1 -1
- data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/files/lib/TextParser_rb.html +1 -1
- data/doc/files/lib/TextScanner_rb.html +1 -1
- data/doc/files/lib/Tj3Config_rb.html +1 -1
- data/doc/files/lib/TjException_rb.html +1 -1
- data/doc/files/lib/TjTime_rb.html +1 -1
- data/doc/files/lib/TjpExample_rb.html +1 -1
- data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/files/lib/UTF8String_rb.html +1 -1
- data/doc/files/lib/UserManual_rb.html +1 -1
- data/doc/files/lib/WorkingHours_rb.html +1 -1
- data/doc/files/lib/XMLDocument_rb.html +1 -1
- data/doc/files/lib/XMLElement_rb.html +1 -1
- data/doc/files/lib/deep_copy_rb.html +106 -0
- data/doc/files/lib/ms_test_rb.html +90 -0
- data/doc/files/lib/reports/CSVFile_rb.html +1 -1
- data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/files/lib/reports/GanttChart_rb.html +1 -1
- data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/files/lib/reports/GanttLine_rb.html +1 -1
- data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
- data/doc/files/lib/reports/ReportBase_rb.html +106 -0
- data/doc/files/lib/reports/ReportContext_rb.html +106 -0
- data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/files/lib/reports/ReportTable_rb.html +1 -1
- data/doc/files/lib/reports/Report_rb.html +8 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
- data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
- data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
- data/doc/files/lib/reports/TextReport_rb.html +116 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
- data/doc/files/lib/taskjuggler3_rb.html +61 -56
- data/doc/files/lib/tj3man_rb.html +1 -1
- data/doc/fr_class_index.html +41 -3
- data/doc/fr_file_index.html +21 -5
- data/doc/fr_method_index.html +1069 -959
- data/examples/ContactList.html +1467 -0
- data/examples/Deliveries.html +485 -0
- data/examples/Development.html +2525 -0
- data/examples/Overview.html +747 -0
- data/examples/Resource Graph.html +616 -0
- data/examples/tutorial.tjp +63 -67
- data/lib/AttributeBase.rb +27 -31
- data/lib/AttributeDefinition.rb +12 -7
- data/lib/Attributes.rb +134 -34
- data/lib/Interval.rb +2 -0
- data/lib/Journal.rb +44 -0
- data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
- data/lib/KeywordDocumentation.rb +84 -47
- data/lib/Limits.rb +7 -5
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalOperation.rb +33 -0
- data/lib/Project.rb +313 -99
- data/lib/ProjectFileParser.rb +88 -11
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +13 -4
- data/lib/PropertyTreeNode.rb +34 -15
- data/lib/Query.rb +2 -1
- data/lib/RTPNavigator.rb +53 -0
- data/lib/RTPReport.rb +62 -0
- data/lib/RealFormat.rb +28 -10
- data/lib/RichTextElement.rb +18 -12
- data/lib/RichTextParser.rb +1 -0
- data/lib/RichTextProtocolExample.rb +8 -11
- data/lib/RichTextProtocolHandler.rb +11 -1
- data/lib/RichTextScanner.rb +308 -164
- data/lib/RichTextSyntaxRules.rb +24 -0
- data/lib/TableColumnDefinition.rb +5 -1
- data/lib/TaskJuggler.rb +3 -2
- data/lib/TaskScenario.rb +123 -31
- data/lib/TextParser.rb +14 -3
- data/lib/TextScanner.rb +210 -34
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +15 -0
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +674 -473
- data/lib/WorkingHours.rb +1 -1
- data/lib/XMLElement.rb +11 -3
- data/lib/deep_copy.rb +72 -0
- data/lib/ms_test.rb +27 -0
- data/lib/reports/ColumnTable.rb +7 -5
- data/lib/reports/GanttChart.rb +60 -34
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttRouter.rb +7 -5
- data/lib/reports/Navigator.rb +72 -0
- data/lib/reports/Report.rb +58 -73
- data/lib/reports/ReportBase.rb +241 -0
- data/lib/reports/ReportContext.rb +41 -0
- data/lib/reports/ReportTable.rb +7 -2
- data/lib/reports/ReportTableCell.rb +3 -3
- data/lib/reports/ResourceListRE.rb +19 -26
- data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
- data/lib/reports/TaskListRE.rb +16 -24
- data/lib/reports/TextReport.rb +87 -0
- data/lib/reports/TjpExportRE.rb +55 -50
- data/lib/taskjuggler3.rb +6 -1
- data/manual/Getting_Started +57 -6
- data/manual/How_To_Contribute +2 -4
- data/manual/Intro +2 -2
- data/manual/Reporting_Bugs +9 -2
- data/manual/Rich_Text_Attributes +41 -0
- data/manual/Tutorial +219 -173
- data/tasks/test.rake +3 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
- data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
- data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
- data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
- data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
- data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
- data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
- data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
- data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
- data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
- data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
- data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
- data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
- data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
- data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
- data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
- data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
- data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
- data/test/all.rb +1 -16
- data/test/test_CSV-Reports.rb +8 -5
- data/test/test_Query.rb +2 -2
- data/test/test_RichText.rb +95 -0
- data/test/test_Scheduler.rb +8 -4
- data/test/test_Syntax.rb +8 -4
- data/test/test_deep_copy.rb +83 -0
- metadata +549 -487
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
- data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
- data/lib/reports/ReportElement.rb +0 -427
- data/test/TestSuite/Syntax/Correct/csvtest +0 -16
- data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
data/lib/Project.rb
CHANGED
|
@@ -27,6 +27,8 @@ require 'ShiftAssignments'
|
|
|
27
27
|
require 'WorkingHours'
|
|
28
28
|
require 'ProjectFileParser'
|
|
29
29
|
require 'BatchProcessor'
|
|
30
|
+
require 'Journal'
|
|
31
|
+
require 'KeywordArray'
|
|
30
32
|
|
|
31
33
|
class TaskJuggler
|
|
32
34
|
|
|
@@ -45,6 +47,7 @@ class TaskJuggler
|
|
|
45
47
|
|
|
46
48
|
attr_reader :accounts, :shifts, :tasks, :resources, :scenarios,
|
|
47
49
|
:reports, :messageHandler
|
|
50
|
+
attr_accessor :reportContext, :outputDir
|
|
48
51
|
|
|
49
52
|
# Create a project with the specified +id+, +name+ and +version+.
|
|
50
53
|
# +messageHandler+ is a MessageHandler reference that is used to handle
|
|
@@ -53,31 +56,33 @@ class TaskJuggler
|
|
|
53
56
|
def initialize(id, name, version, messageHandler)
|
|
54
57
|
@messageHandler = messageHandler
|
|
55
58
|
@attributes = {
|
|
56
|
-
'projectid' => id,
|
|
59
|
+
'projectid' => id || "prj",
|
|
57
60
|
'projectids' => [ id ],
|
|
58
61
|
'name' => name,
|
|
59
|
-
'version' => version,
|
|
62
|
+
'version' => version || "1.0",
|
|
60
63
|
'costAccount' => nil,
|
|
61
64
|
'copyright' => nil,
|
|
62
65
|
'currency' => "EUR",
|
|
63
|
-
'
|
|
66
|
+
'currencyFormat' => RealFormat.new([ '-', '', '', ',', 2 ]),
|
|
64
67
|
'dailyworkinghours' => 8.0,
|
|
65
68
|
'end' => nil,
|
|
66
69
|
'flags' => [],
|
|
70
|
+
'journal' => Journal.new,
|
|
67
71
|
'limits' => nil,
|
|
68
|
-
'
|
|
72
|
+
'loadUnit' => :shortauto,
|
|
73
|
+
'navigators' => {},
|
|
69
74
|
'now' => TjTime.now.align(3600),
|
|
70
|
-
'
|
|
75
|
+
'numberFormat' => RealFormat.new([ '-', '', '', '.', 1]),
|
|
71
76
|
'priority' => 500,
|
|
72
77
|
'rate' => 0.0,
|
|
73
78
|
'revenueAccount' => nil,
|
|
74
|
-
'scheduleGranularity' =>
|
|
75
|
-
'
|
|
79
|
+
'scheduleGranularity' => Project.maxScheduleGranularity,
|
|
80
|
+
'shortTimeFormat' => "%H:%M",
|
|
76
81
|
'start' => nil,
|
|
77
|
-
'
|
|
82
|
+
'timeFormat' => "%Y-%m-%d",
|
|
78
83
|
'timezone' => nil,
|
|
79
84
|
'vacations' => [],
|
|
80
|
-
'
|
|
85
|
+
'weekStartsMonday' => true,
|
|
81
86
|
'workinghours' => WorkingHours.new,
|
|
82
87
|
'yearlyworkingdays' => 260.714
|
|
83
88
|
}
|
|
@@ -92,109 +97,270 @@ class TaskJuggler
|
|
|
92
97
|
# definitions to register the attributes with the properties.
|
|
93
98
|
@scenarios = PropertySet.new(self, true)
|
|
94
99
|
attrs = [
|
|
95
|
-
# ID Name Type
|
|
96
|
-
|
|
97
|
-
[ '
|
|
98
|
-
|
|
99
|
-
[ '
|
|
100
|
+
# ID Name Type
|
|
101
|
+
# Inh. Inh.Prj Scen. Default
|
|
102
|
+
[ 'enabled', 'Enabled', BooleanAttribute,
|
|
103
|
+
true, false, false, true ],
|
|
104
|
+
[ 'minslackrate', 'Min. Slack Rate', FloatAttribute,
|
|
105
|
+
true, false, false, 1.0 ],
|
|
106
|
+
[ 'projection', 'Projection Mode', BooleanAttribute,
|
|
107
|
+
true, false, false, false ],
|
|
108
|
+
[ 'strict', 'Strict Bookings', BooleanAttribute,
|
|
109
|
+
true, false, false, false ]
|
|
100
110
|
]
|
|
101
111
|
attrs.each { |a| @scenarios.addAttributeType(AttributeDefinition.new(*a)) }
|
|
102
112
|
|
|
103
113
|
@shifts = PropertySet.new(self, true)
|
|
104
114
|
attrs = [
|
|
105
|
-
# ID Name Type
|
|
106
|
-
|
|
107
|
-
[ '
|
|
108
|
-
|
|
109
|
-
[ '
|
|
110
|
-
|
|
111
|
-
[ '
|
|
112
|
-
|
|
113
|
-
|
|
115
|
+
# ID Name Type
|
|
116
|
+
# Inh. Inh.Prj Scen. Default
|
|
117
|
+
[ 'index', 'Index', FixnumAttribute,
|
|
118
|
+
false, false, false, -1 ],
|
|
119
|
+
[ 'replace', 'Replace', BooleanAttribute,
|
|
120
|
+
true, false, true, false ],
|
|
121
|
+
[ 'timezone', 'Time Zone', StringAttribute,
|
|
122
|
+
true, true, true, nil ],
|
|
123
|
+
[ 'tree', 'Tree Index', StringAttribute,
|
|
124
|
+
false, false, false, "" ],
|
|
125
|
+
[ 'vacations', 'Vacations', IntervalListAttribute,
|
|
126
|
+
true, true, true, [] ],
|
|
127
|
+
[ 'wbs', 'WBS', StringAttribute,
|
|
128
|
+
false, false, false, "" ],
|
|
129
|
+
[ 'workinghours', 'Working Hours', WorkingHoursAttribute,
|
|
130
|
+
true, true, true, nil ]
|
|
114
131
|
]
|
|
115
132
|
attrs.each { |a| @shifts.addAttributeType(AttributeDefinition.new(*a)) }
|
|
116
133
|
|
|
117
134
|
@accounts = PropertySet.new(self, true)
|
|
118
135
|
attrs = [
|
|
119
|
-
# ID Name Type
|
|
120
|
-
|
|
121
|
-
[ '
|
|
122
|
-
|
|
136
|
+
# ID Name Type
|
|
137
|
+
# Inh. Inh.Prj Scen. Default
|
|
138
|
+
[ 'index', 'Index', FixnumAttribute,
|
|
139
|
+
false, false, false, -1 ],
|
|
140
|
+
[ 'tree', 'Tree Index', StringAttribute,
|
|
141
|
+
false, false, false, "" ],
|
|
142
|
+
[ 'wbs', 'WBS', StringAttribute,
|
|
143
|
+
false, false, false, "" ]
|
|
123
144
|
]
|
|
124
145
|
attrs.each { |a| @accounts.addAttributeType(AttributeDefinition.new(*a)) }
|
|
125
146
|
|
|
126
147
|
@resources = PropertySet.new(self, true)
|
|
127
148
|
attrs = [
|
|
128
|
-
# ID Name Type
|
|
129
|
-
|
|
130
|
-
[ '
|
|
131
|
-
|
|
132
|
-
[ '
|
|
133
|
-
|
|
134
|
-
[ '
|
|
135
|
-
|
|
136
|
-
[ '
|
|
137
|
-
|
|
138
|
-
[ '
|
|
139
|
-
|
|
140
|
-
[ '
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
[ '
|
|
145
|
-
|
|
146
|
-
[ '
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
# ID Name Type
|
|
150
|
+
# Inh. Inh.Prj Scen. Default
|
|
151
|
+
[ 'alloctdeffort', 'Alloctd. Effort', FloatAttribute,
|
|
152
|
+
false, false, true, 0.0 ],
|
|
153
|
+
[ 'criticalness', 'Criticalness', FloatAttribute,
|
|
154
|
+
false, false, true, 0.0 ],
|
|
155
|
+
[ 'duties', 'Duties', TaskListAttribute,
|
|
156
|
+
false, false, true, [] ],
|
|
157
|
+
[ 'efficiency','Efficiency', FloatAttribute,
|
|
158
|
+
true, false, true, 1.0 ],
|
|
159
|
+
[ 'effort', 'Total Effort', FixnumAttribute,
|
|
160
|
+
false, false, true, 0 ],
|
|
161
|
+
[ 'email', 'Email', StringAttribute,
|
|
162
|
+
true, false, false, nil ],
|
|
163
|
+
[ 'flags', 'Flags', FlagListAttribute,
|
|
164
|
+
true, false, true, [] ],
|
|
165
|
+
[ 'fte', 'FTE', FloatAttribute,
|
|
166
|
+
false, false, true, 1.0 ],
|
|
167
|
+
[ 'headcount', 'Headcount', FixnumAttribute,
|
|
168
|
+
false, false, true, 1 ],
|
|
169
|
+
[ 'index', 'Index', FixnumAttribute,
|
|
170
|
+
false, false, false, -1 ],
|
|
171
|
+
[ 'limits', 'Limits', LimitsAttribute,
|
|
172
|
+
true, true, true, nil ],
|
|
173
|
+
[ 'rate', 'Rate', FloatAttribute,
|
|
174
|
+
true, true, true, 0.0 ],
|
|
175
|
+
[ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
|
|
176
|
+
true, false, true, nil ],
|
|
177
|
+
[ 'timezone', 'Time Zone', StringAttribute,
|
|
178
|
+
true, false, true, nil ],
|
|
179
|
+
[ 'tree', 'Tree Index', StringAttribute,
|
|
180
|
+
false, false, false, "" ],
|
|
181
|
+
[ 'vacations', 'Vacations', IntervalListAttribute,
|
|
182
|
+
true, true, true, [] ],
|
|
183
|
+
[ 'wbs', 'WBS', StringAttribute,
|
|
184
|
+
false, false, false, "" ],
|
|
185
|
+
[ 'workinghours', 'Working Hours', WorkingHoursAttribute,
|
|
186
|
+
true, true, true, nil ]
|
|
149
187
|
]
|
|
150
188
|
attrs.each { |a| @resources.addAttributeType(AttributeDefinition.new(*a)) }
|
|
151
189
|
|
|
152
190
|
@tasks = PropertySet.new(self, false)
|
|
153
191
|
attrs = [
|
|
154
|
-
# ID Name Type
|
|
155
|
-
|
|
156
|
-
[ '
|
|
157
|
-
|
|
158
|
-
[ '
|
|
159
|
-
|
|
160
|
-
[ '
|
|
161
|
-
|
|
162
|
-
[ '
|
|
163
|
-
|
|
164
|
-
[ '
|
|
165
|
-
|
|
166
|
-
[ '
|
|
167
|
-
|
|
168
|
-
[ '
|
|
169
|
-
|
|
170
|
-
[ '
|
|
171
|
-
|
|
172
|
-
[ '
|
|
173
|
-
|
|
174
|
-
[ '
|
|
175
|
-
|
|
176
|
-
[ '
|
|
177
|
-
|
|
178
|
-
[ '
|
|
179
|
-
|
|
180
|
-
[ '
|
|
181
|
-
|
|
182
|
-
[ '
|
|
183
|
-
|
|
184
|
-
[ '
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
[ '
|
|
189
|
-
|
|
190
|
-
[ '
|
|
191
|
-
|
|
192
|
+
# ID Name Type
|
|
193
|
+
# Inh. Inh.Prj Scen. Default
|
|
194
|
+
[ 'allocate', 'Allocations', AllocationAttribute,
|
|
195
|
+
true, false, true, [] ],
|
|
196
|
+
[ 'assignedresources', 'Assigned Resources', ResourceListAttribute,
|
|
197
|
+
false, false, true, [] ],
|
|
198
|
+
[ 'booking', 'Bookings', BookingListAttribute,
|
|
199
|
+
false, false, true, [] ],
|
|
200
|
+
[ 'charge', 'Charges', ChargeListAttribute,
|
|
201
|
+
false, false, true, [] ],
|
|
202
|
+
[ 'chargeset', 'Charge Sets', ChargeSetListAttribute,
|
|
203
|
+
true, false, true, [] ],
|
|
204
|
+
[ 'complete', 'Completion', FloatAttribute,
|
|
205
|
+
false, false, true, nil ],
|
|
206
|
+
[ 'criticalness', 'Criticalness', FloatAttribute,
|
|
207
|
+
false, false, true, 0.0 ],
|
|
208
|
+
[ 'depends', 'Preceding tasks', DependencyListAttribute,
|
|
209
|
+
true, false, true, [] ],
|
|
210
|
+
[ 'duration', 'Duration', DurationAttribute,
|
|
211
|
+
false, false, true, 0 ],
|
|
212
|
+
[ 'effort', 'Effort', DurationAttribute,
|
|
213
|
+
false, false, true, 0 ],
|
|
214
|
+
[ 'end', 'End', DateAttribute,
|
|
215
|
+
true, false, true, nil ],
|
|
216
|
+
[ 'endpreds', 'End Preds.', TaskListAttribute,
|
|
217
|
+
false, false, true, [] ],
|
|
218
|
+
[ 'endsuccs', 'End Succs.', TaskListAttribute,
|
|
219
|
+
false, false, true, [] ],
|
|
220
|
+
[ 'flags', 'Flags', FlagListAttribute,
|
|
221
|
+
true, false, true, [] ],
|
|
222
|
+
[ 'forward', 'Scheduling', BooleanAttribute,
|
|
223
|
+
true, false, true, true ],
|
|
224
|
+
[ 'index', 'Index', FixnumAttribute,
|
|
225
|
+
false, false, false, -1 ],
|
|
226
|
+
[ 'length', 'Length', DurationAttribute,
|
|
227
|
+
false, false, true, 0 ],
|
|
228
|
+
[ 'limits', 'Limits', LimitsAttribute,
|
|
229
|
+
false, false, true, nil ],
|
|
230
|
+
[ 'maxend', 'Max. End', DateAttribute,
|
|
231
|
+
true, false, true, nil ],
|
|
232
|
+
[ 'maxstart', 'Max. Start', DateAttribute,
|
|
233
|
+
false, false, true, nil ],
|
|
234
|
+
[ 'milestone', 'Milestone', BooleanAttribute,
|
|
235
|
+
false, false, true, false ],
|
|
236
|
+
[ 'minend', 'Min. End', DateAttribute,
|
|
237
|
+
false, false, true, nil ],
|
|
238
|
+
[ 'minstart', 'Min. Start', DateAttribute,
|
|
239
|
+
true, false, true, nil ],
|
|
240
|
+
[ 'note', 'Note', RichTextAttribute,
|
|
241
|
+
false, false, false, nil ],
|
|
242
|
+
[ 'pathcriticalness', 'Path Criticalness', FloatAttribute,
|
|
243
|
+
false, false, true, 0.0 ],
|
|
244
|
+
[ 'precedes', 'Following tasks', DependencyListAttribute,
|
|
245
|
+
true, false, true, [] ],
|
|
246
|
+
[ 'priority', 'Priority', FixnumAttribute,
|
|
247
|
+
true, true, true, 500 ],
|
|
248
|
+
[ 'projectid', 'Project ID', SymbolAttribute,
|
|
249
|
+
true, true, true, nil ],
|
|
250
|
+
[ 'responsible', 'Responsible', ResourceListAttribute,
|
|
251
|
+
true, false, true, [] ],
|
|
252
|
+
[ 'scheduled', 'Scheduled', BooleanAttribute,
|
|
253
|
+
true, false, true, false ],
|
|
254
|
+
[ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
|
|
255
|
+
true, false, true, nil ],
|
|
256
|
+
[ 'start', 'Start', DateAttribute,
|
|
257
|
+
true, false, true, nil ],
|
|
258
|
+
[ 'startpreds', 'Start Preds.', TaskListAttribute,
|
|
259
|
+
false, false, true, [] ],
|
|
260
|
+
[ 'startsuccs', 'Start Succs.', TaskListAttribute,
|
|
261
|
+
false, false, true, [] ],
|
|
262
|
+
[ 'tree', 'Tree Index', StringAttribute,
|
|
263
|
+
false, false, false, "" ],
|
|
264
|
+
[ 'wbs', 'WBS', StringAttribute,
|
|
265
|
+
false, false, false, "" ]
|
|
192
266
|
]
|
|
193
267
|
attrs.each { |a| @tasks.addAttributeType(AttributeDefinition.new(*a)) }
|
|
194
268
|
|
|
269
|
+
@reports = PropertySet.new(self, false)
|
|
270
|
+
attrs = [
|
|
271
|
+
# ID Name Type
|
|
272
|
+
# Inh. Inh.Prj Scen. Default
|
|
273
|
+
[ 'caption', 'Caption', RichTextAttribute,
|
|
274
|
+
false, false, false, nil ],
|
|
275
|
+
[ 'center', 'Center', RichTextAttribute,
|
|
276
|
+
true, false, false, nil ],
|
|
277
|
+
[ 'columns', 'Columns', ColumnListAttribute,
|
|
278
|
+
true, false, false, [] ],
|
|
279
|
+
[ 'costAccount', 'Cost Account', AccountAttribute,
|
|
280
|
+
true, true, false, nil ],
|
|
281
|
+
[ 'currencyFormat', 'Currency Format', RealFormatAttribute,
|
|
282
|
+
true, true, false, nil ],
|
|
283
|
+
[ 'definitions', 'Definitions', DefinitionListAttribute,
|
|
284
|
+
true, false, false, KeywordArray.new([ '*' ]) ],
|
|
285
|
+
[ 'end', 'End', DateAttribute,
|
|
286
|
+
true, true, false, nil ],
|
|
287
|
+
[ 'epilog', 'Epilog', RichTextAttribute,
|
|
288
|
+
false, false, false, nil ],
|
|
289
|
+
[ 'footer', 'Footer', RichTextAttribute,
|
|
290
|
+
true, false, false, nil ],
|
|
291
|
+
[ 'formats', 'Formats', FormatListAttribute,
|
|
292
|
+
true, false, false, [] ],
|
|
293
|
+
[ 'ganttBars', 'Gantt Bars', BooleanAttribute,
|
|
294
|
+
true, false, false, true ],
|
|
295
|
+
[ 'header', 'Header', RichTextAttribute,
|
|
296
|
+
true, false, false, nil ],
|
|
297
|
+
[ 'headline', 'Headline', StringAttribute,
|
|
298
|
+
false, false, false, '' ],
|
|
299
|
+
[ 'hideResource', 'Hide Resource', LogicalExpressionAttribute,
|
|
300
|
+
true, false, false, nil ],
|
|
301
|
+
[ 'hideTask', 'Hide Task', LogicalExpressionAttribute,
|
|
302
|
+
true, false, false, nil ],
|
|
303
|
+
[ 'index', 'Index', FixnumAttribute,
|
|
304
|
+
false, false, false, -1 ],
|
|
305
|
+
[ 'left', 'Left', RichTextAttribute,
|
|
306
|
+
true, false, false, nil ],
|
|
307
|
+
[ 'loadUnit', 'Load Unit', StringAttribute,
|
|
308
|
+
true, true, false, nil ],
|
|
309
|
+
[ 'now', 'Now', DateAttribute,
|
|
310
|
+
true, true, false, nil ],
|
|
311
|
+
[ 'numberFormat', 'Number Format', RealFormatAttribute,
|
|
312
|
+
true, true, false, nil ],
|
|
313
|
+
[ 'prolog', 'Prolog', RichTextAttribute,
|
|
314
|
+
false, false, false, nil],
|
|
315
|
+
[ 'resourceAttributes', 'Resource Attributes', FormatListAttribute,
|
|
316
|
+
true, false, false, KeywordArray.new([ '*' ]) ],
|
|
317
|
+
[ 'resourceRoot', 'resource Root', PropertyAttribute,
|
|
318
|
+
true, false, false, nil ],
|
|
319
|
+
[ 'revenueAccount', 'Revenue Account', AccountAttribute,
|
|
320
|
+
true, true, false, nil ],
|
|
321
|
+
[ 'right', 'Right', RichTextAttribute,
|
|
322
|
+
true, false, false, nil ],
|
|
323
|
+
[ 'rollupResource', 'Rollup Resource', LogicalExpressionAttribute,
|
|
324
|
+
true, false, false, nil ],
|
|
325
|
+
[ 'rollupTask', 'Rollup Task', LogicalExpressionAttribute,
|
|
326
|
+
true, false, false, nil ],
|
|
327
|
+
[ 'scenarios', 'Scenarios', ScenarioListAttribute,
|
|
328
|
+
true, false, false, [ 0 ] ],
|
|
329
|
+
[ 'shortTimeFormat', 'Short Time Format', StringAttribute,
|
|
330
|
+
true, true, false, nil ],
|
|
331
|
+
[ 'sortResources', 'Sort Resources', SortListAttribute,
|
|
332
|
+
true, false, false, [[ 'seqno', true, -1 ]] ],
|
|
333
|
+
[ 'sortTasks', 'Sort Tasks', SortListAttribute,
|
|
334
|
+
true, false, false, [[ 'seqno', true, -1 ]] ],
|
|
335
|
+
[ 'start', 'Start', DateAttribute,
|
|
336
|
+
true, true, false, nil ],
|
|
337
|
+
[ 'taskAttributes', 'Task Attributes', FormatListAttribute,
|
|
338
|
+
true, false, false, KeywordArray.new([ '*' ]) ],
|
|
339
|
+
[ 'taskRoot', 'Task Root', PropertyAttribute,
|
|
340
|
+
true, false, false, nil ],
|
|
341
|
+
[ 'timeFormat', 'Time Format', StringAttribute,
|
|
342
|
+
true, true, false, nil ],
|
|
343
|
+
[ 'timezone', 'Time Zone', StringAttribute,
|
|
344
|
+
true, true, false, nil ],
|
|
345
|
+
[ 'tree', 'Tree Index', StringAttribute,
|
|
346
|
+
false, false, false, "" ],
|
|
347
|
+
[ 'wbs', 'WBS', StringAttribute,
|
|
348
|
+
false, false, false, "" ],
|
|
349
|
+
[ 'weekStartsMonday', 'Week Starts Monday', BooleanAttribute,
|
|
350
|
+
true, true, false, false ]
|
|
351
|
+
]
|
|
352
|
+
attrs.each { |a| @reports.addAttributeType(AttributeDefinition.new(*a)) }
|
|
353
|
+
|
|
195
354
|
Scenario.new(self, 'plan', 'Plan Scenario', nil)
|
|
196
355
|
|
|
197
|
-
@
|
|
356
|
+
@reportContext = nil
|
|
357
|
+
@outputDir = ''
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
# Overload the deep_clone function so that references to the project don't
|
|
361
|
+
# lead to deep copying of the whole project.
|
|
362
|
+
def deep_clone
|
|
363
|
+
self
|
|
198
364
|
end
|
|
199
365
|
|
|
200
366
|
# Pass a message (error or warning) to the message handler. _message_ is a
|
|
@@ -252,19 +418,13 @@ class TaskJuggler
|
|
|
252
418
|
# Return the Scenario with the given _id_ or _index_.
|
|
253
419
|
def scenario(arg)
|
|
254
420
|
if arg.is_a?(Fixnum)
|
|
255
|
-
if $DEBUG && (arg < 0 || arg >= @scenarios.items)
|
|
256
|
-
raise "Scenario index out of range: #{arg}"
|
|
257
|
-
end
|
|
258
421
|
@scenarios.each do |sc|
|
|
259
422
|
return sc if sc.sequenceNo - 1 == arg
|
|
260
423
|
end
|
|
261
|
-
raise "No scenario with index #{arg}"
|
|
262
424
|
else
|
|
263
|
-
|
|
264
|
-
raise "No scenario with id '#{arg}'"
|
|
265
|
-
end
|
|
266
|
-
@scenarios[arg]
|
|
425
|
+
return @scenarios[arg]
|
|
267
426
|
end
|
|
427
|
+
nil
|
|
268
428
|
end
|
|
269
429
|
|
|
270
430
|
# call-seq:
|
|
@@ -302,6 +462,20 @@ class TaskJuggler
|
|
|
302
462
|
@resources[id]
|
|
303
463
|
end
|
|
304
464
|
|
|
465
|
+
# Return the Report with the ID +id+ or return nil if it does not exist.
|
|
466
|
+
def report(id)
|
|
467
|
+
@reports[id]
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
# Return the Report with the name +name+ or return nil if it does not
|
|
471
|
+
# exist.
|
|
472
|
+
def reportByName(name)
|
|
473
|
+
@reports.each do |report|
|
|
474
|
+
return report if report.name == name
|
|
475
|
+
end
|
|
476
|
+
nil
|
|
477
|
+
end
|
|
478
|
+
|
|
305
479
|
# This function must be called after the Project data structures have been
|
|
306
480
|
# filled with data. It schedules all scenario and stores the result in the
|
|
307
481
|
# data structures again.
|
|
@@ -352,15 +526,21 @@ class TaskJuggler
|
|
|
352
526
|
# This function may only be called after Project#schedule has been called.
|
|
353
527
|
def generateReports(maxCpuCores)
|
|
354
528
|
begin
|
|
529
|
+
@reports.index
|
|
355
530
|
if maxCpuCores == 1
|
|
356
|
-
@reports.
|
|
531
|
+
@reports.each do |report|
|
|
532
|
+
next if report.get('formats').empty?
|
|
357
533
|
Log.startProgressMeter("Report #{report.name}")
|
|
534
|
+
@reportContext = ReportContext.new(self, report)
|
|
358
535
|
report.generate
|
|
359
536
|
Log.stopProgressMeter
|
|
360
537
|
end
|
|
361
538
|
else
|
|
362
539
|
bp = BatchProcessor.new(maxCpuCores)
|
|
363
|
-
@reports.each_value
|
|
540
|
+
@reports.each_value do |report|
|
|
541
|
+
next if report.get('formats').empty?
|
|
542
|
+
bp.queue(report) { report.generate }
|
|
543
|
+
end
|
|
364
544
|
bp.wait do |report|
|
|
365
545
|
$stdout.print(report.stdout)
|
|
366
546
|
$stderr.print(report.stderr)
|
|
@@ -403,7 +583,7 @@ class TaskJuggler
|
|
|
403
583
|
end
|
|
404
584
|
|
|
405
585
|
def addReport(report) # :nodoc:
|
|
406
|
-
@reports
|
|
586
|
+
@reports.addProperty(report)
|
|
407
587
|
end
|
|
408
588
|
|
|
409
589
|
# call-seq:
|
|
@@ -482,6 +662,41 @@ class TaskJuggler
|
|
|
482
662
|
((date - @attributes['start']) / @attributes['scheduleGranularity']).to_i
|
|
483
663
|
end
|
|
484
664
|
|
|
665
|
+
# TaskJuggler keeps all times in UTC. All time values must be multiples of
|
|
666
|
+
# the used scheduling granularity. If the local time zone is not
|
|
667
|
+
# hour-aligned to UTC, the maximum allowed schedule granularity is
|
|
668
|
+
# reduced.
|
|
669
|
+
def Project.maxScheduleGranularity
|
|
670
|
+
refTime = Time.gm(2000, 1, 1, 0, 0, 0)
|
|
671
|
+
case (min = refTime.getlocal.min)
|
|
672
|
+
when 0
|
|
673
|
+
# We are hour-aligned to UTC; scheduleGranularity is 1 hour
|
|
674
|
+
60 * 60
|
|
675
|
+
when 30
|
|
676
|
+
# We are half-hour off from UTC; scheduleGranularity is 30 minutes
|
|
677
|
+
30 * 60
|
|
678
|
+
when 15, 45
|
|
679
|
+
# We are 15 or 45 minutes off from UTC; scheduleGranularity is 15
|
|
680
|
+
# minutes
|
|
681
|
+
15 * 60
|
|
682
|
+
else
|
|
683
|
+
raise "Unknown Time zone alignment #{min}"
|
|
684
|
+
end
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
# Return the name of the attribute _id_. Since we don't know whether we
|
|
688
|
+
# are looking for a task, resource, etc. attribute, we prefer tasks over
|
|
689
|
+
# resources here.
|
|
690
|
+
def attributeName(id)
|
|
691
|
+
# We have to see if the attribute id is a task or resource attribute and
|
|
692
|
+
# return it's name.
|
|
693
|
+
(name = @tasks.attributeName(id)).nil? &&
|
|
694
|
+
(name = @resources.attributeName(id)).nil?
|
|
695
|
+
name
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
|
|
485
700
|
# Print the attribute values. It's used for debugging only.
|
|
486
701
|
def to_s
|
|
487
702
|
@attributes.each do |attribute, value|
|
|
@@ -516,7 +731,6 @@ class TaskJuggler
|
|
|
516
731
|
end
|
|
517
732
|
|
|
518
733
|
tasks.each { |task| task.prepareScheduling(scIdx) }
|
|
519
|
-
|
|
520
734
|
tasks.each { |task| task.Xref(scIdx) }
|
|
521
735
|
tasks.each { |task| task.propagateInitialValues(scIdx) }
|
|
522
736
|
tasks.each { |task| task.preScheduleCheck(scIdx) }
|