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/reports/TaskListRE.rb
CHANGED
|
@@ -10,56 +10,48 @@
|
|
|
10
10
|
# published by the Free Software Foundation.
|
|
11
11
|
#
|
|
12
12
|
|
|
13
|
-
require 'reports/
|
|
13
|
+
require 'reports/TableReport'
|
|
14
14
|
require 'reports/ReportTable'
|
|
15
15
|
require 'TableColumnDefinition'
|
|
16
16
|
require 'LogicalExpression'
|
|
17
17
|
|
|
18
18
|
class TaskJuggler
|
|
19
19
|
|
|
20
|
-
# This specialization of
|
|
20
|
+
# This specialization of TableReport implements a task listing. It
|
|
21
21
|
# generates a list of tasks that can optionally have the allocated resources
|
|
22
22
|
# nested underneath each task line.
|
|
23
|
-
class TaskListRE <
|
|
23
|
+
class TaskListRE < TableReport
|
|
24
24
|
|
|
25
25
|
# Create a new object and set some default values.
|
|
26
26
|
def initialize(report)
|
|
27
27
|
super
|
|
28
|
-
# Set the default columns for this report.
|
|
29
|
-
%w( wbs name start end effort chart ).each do |col|
|
|
30
|
-
@columns << TableColumnDefinition.new(col, defaultColumnTitle(col))
|
|
31
|
-
end
|
|
32
|
-
# Show all tasks, sorted by tree, start-up, seqno-up.
|
|
33
|
-
@hideTask = LogicalExpression.new(LogicalOperation.new(0))
|
|
34
|
-
@sortTasks = [ [ 'tree', true, -1 ],
|
|
35
|
-
[ 'start', true, 0 ],
|
|
36
|
-
[ 'seqno', true, -1 ] ]
|
|
37
|
-
# Show no resources, but set sorting to id-up.
|
|
38
|
-
@hideResource = LogicalExpression.new(LogicalOperation.new(1))
|
|
39
|
-
@sortResources = [ [ 'id', true, -1 ] ]
|
|
40
|
-
|
|
41
28
|
@table = ReportTable.new
|
|
42
29
|
end
|
|
43
30
|
|
|
44
31
|
# Generate the table in the intermediate format.
|
|
45
32
|
def generateIntermediateFormat
|
|
33
|
+
setReportPeriod
|
|
34
|
+
|
|
46
35
|
# Prepare the task list.
|
|
47
36
|
taskList = PropertyList.new(@project.tasks)
|
|
48
|
-
taskList.setSorting(@sortTasks)
|
|
49
|
-
taskList = filterTaskList(taskList, nil, @hideTask,
|
|
37
|
+
taskList.setSorting(@report.get('sortTasks'))
|
|
38
|
+
taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
|
|
39
|
+
@report.get('rollupTask'))
|
|
50
40
|
taskList.sort!
|
|
51
41
|
|
|
52
|
-
adjustReportPeriod(taskList, @scenarios) unless @userDefinedPeriod
|
|
53
|
-
|
|
54
42
|
# Prepare the resource list.
|
|
55
43
|
resourceList = PropertyList.new(@project.resources)
|
|
56
|
-
resourceList.setSorting(@sortResources)
|
|
57
|
-
resourceList = filterResourceList(resourceList, nil,
|
|
58
|
-
|
|
44
|
+
resourceList.setSorting(@report.get('sortResources'))
|
|
45
|
+
resourceList = filterResourceList(resourceList, nil,
|
|
46
|
+
@report.get('hideResource'),
|
|
47
|
+
@report.get('rollupResource'))
|
|
59
48
|
resourceList.sort!
|
|
60
49
|
|
|
50
|
+
adjustReportPeriod(taskList, @report.get('scenarios'),
|
|
51
|
+
@report.get('columns'))
|
|
52
|
+
|
|
61
53
|
# Generate the table header.
|
|
62
|
-
@columns.each do |columnDescr|
|
|
54
|
+
@report.get('columns').each do |columnDescr|
|
|
63
55
|
generateHeaderCell(columnDescr)
|
|
64
56
|
end
|
|
65
57
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
#
|
|
4
|
+
# = ReportBase.rb -- The TaskJuggler III Project Management Software
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
7
|
+
#
|
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of version 2 of the GNU General Public License as
|
|
10
|
+
# published by the Free Software Foundation.
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
require 'reports/ReportBase'
|
|
14
|
+
|
|
15
|
+
class TaskJuggler
|
|
16
|
+
|
|
17
|
+
# This is the most basic type of report. It only contains 5 RichText elements.
|
|
18
|
+
# It's got a header and footer and a central text with margin elements left
|
|
19
|
+
# and right.
|
|
20
|
+
class TextReport < ReportBase
|
|
21
|
+
|
|
22
|
+
attr_accessor :header, :left, :center, :right, :footer
|
|
23
|
+
|
|
24
|
+
def initialize(report)
|
|
25
|
+
super
|
|
26
|
+
|
|
27
|
+
@lWidth = @cWidth = @rWidth = 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generateIntermediateFormat
|
|
31
|
+
if a('center')
|
|
32
|
+
if a('left') && a('right')
|
|
33
|
+
@lWidth = @rWidth = 20
|
|
34
|
+
@cWidth = 60
|
|
35
|
+
elsif a('left') && !a('right')
|
|
36
|
+
@lWidth = 25
|
|
37
|
+
@cWidth = 75
|
|
38
|
+
elsif !a('left') && a('right')
|
|
39
|
+
@cWidth = 75
|
|
40
|
+
@rWidth = 25
|
|
41
|
+
else
|
|
42
|
+
@cWidth = 100
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
if a('left') && a('right')
|
|
46
|
+
@lWidth = @rWidth = 50
|
|
47
|
+
elsif a('left') && !a('right')
|
|
48
|
+
@lWidth = 100
|
|
49
|
+
elsif !a('left') && a('right')
|
|
50
|
+
@rWidth = 100
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def to_html
|
|
56
|
+
html = []
|
|
57
|
+
|
|
58
|
+
html << rt_to_html('header')
|
|
59
|
+
if @lWidth > 0 || @cWidth > 0 || @rWidth > 0
|
|
60
|
+
html << (table = XMLElement.new('table', 'align' => 'center',
|
|
61
|
+
'cellspacing' => '1',
|
|
62
|
+
'cellpadding' => '2', 'width' => '100%',
|
|
63
|
+
'class' => 'textPageSkel'))
|
|
64
|
+
table << (tr = XMLElement.new('tr'))
|
|
65
|
+
|
|
66
|
+
%w( left center right).each do |i|
|
|
67
|
+
width = instance_variable_get('@' + i[0].chr + 'Width')
|
|
68
|
+
if width > 0
|
|
69
|
+
tr << (td = XMLElement.new('td', 'width' => "#{width}%"))
|
|
70
|
+
td << rt_to_html(i)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
html << rt_to_html('footer')
|
|
76
|
+
|
|
77
|
+
html
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def to_csv
|
|
81
|
+
nil
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
data/lib/reports/TjpExportRE.rb
CHANGED
|
@@ -10,40 +10,35 @@
|
|
|
10
10
|
# published by the Free Software Foundation.
|
|
11
11
|
#
|
|
12
12
|
|
|
13
|
-
require 'reports/
|
|
13
|
+
require 'reports/ReportBase'
|
|
14
14
|
|
|
15
15
|
class TaskJuggler
|
|
16
16
|
|
|
17
|
-
# This specialization of
|
|
17
|
+
# This specialization of ReportBase implements an export of the
|
|
18
18
|
# project data in the TJP syntax format.
|
|
19
|
-
class TjpExportRE <
|
|
19
|
+
class TjpExportRE < ReportBase
|
|
20
20
|
|
|
21
|
-
attr_writer :resourceAttrs, :taskAttrs
|
|
22
21
|
attr_reader :mainFile
|
|
23
22
|
|
|
24
23
|
# Create a new object and set some default values.
|
|
25
|
-
def initialize(report
|
|
24
|
+
def initialize(report)
|
|
26
25
|
super(report)
|
|
27
26
|
|
|
28
27
|
# Indicates whether this is a full .tjp file or just an .tji include file.
|
|
29
|
-
@mainFile =
|
|
28
|
+
@mainFile = a('name')[-4, 4] != '.tji'
|
|
30
29
|
|
|
31
30
|
@supportedTaskAttrs = %w( booking complete depends flags maxend
|
|
32
31
|
maxstart minend minstart note priority
|
|
33
32
|
responsible )
|
|
34
33
|
@supportedResourceAttrs = %w( vacation workinghours )
|
|
35
|
-
@
|
|
36
|
-
@resourceAttrs = %w( all )
|
|
37
|
-
@scenarios = [ 0 ]
|
|
34
|
+
@report.set('scenarios', [ 0 ])
|
|
38
35
|
|
|
39
36
|
# Show all tasks, sorted by seqno-up.
|
|
40
|
-
@hideTask
|
|
41
|
-
|
|
42
|
-
@sortTasks = [ [ 'seqno', true, -1 ] ]
|
|
37
|
+
@report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
38
|
+
@report.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
43
39
|
# Show all resources, sorted by seqno-up.
|
|
44
|
-
@hideResource
|
|
45
|
-
|
|
46
|
-
@sortResources = [ [ 'seqno', true, -1 ] ]
|
|
40
|
+
@report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
|
|
41
|
+
@report.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
47
42
|
end
|
|
48
43
|
|
|
49
44
|
# There is nothing to do here.
|
|
@@ -54,29 +49,30 @@ class TaskJuggler
|
|
|
54
49
|
def to_tjp
|
|
55
50
|
# Prepare the resource list.
|
|
56
51
|
@resourceList = PropertyList.new(@project.resources)
|
|
57
|
-
@resourceList.setSorting(
|
|
58
|
-
@resourceList = filterResourceList(@resourceList, nil,
|
|
59
|
-
|
|
52
|
+
@resourceList.setSorting(a('sortResources'))
|
|
53
|
+
@resourceList = filterResourceList(@resourceList, nil, a('hideResource'),
|
|
54
|
+
a('rollupResource'))
|
|
60
55
|
@resourceList.sort!
|
|
61
56
|
|
|
62
57
|
# Prepare the task list.
|
|
63
58
|
@taskList = PropertyList.new(@project.tasks)
|
|
64
|
-
@taskList.setSorting(
|
|
65
|
-
@taskList = filterTaskList(@taskList, nil,
|
|
59
|
+
@taskList.setSorting(a('sortTasks'))
|
|
60
|
+
@taskList = filterTaskList(@taskList, nil, a('hideTask'), a('rollupTask'))
|
|
66
61
|
@taskList.sort!
|
|
67
62
|
|
|
68
63
|
getBookings
|
|
69
64
|
|
|
70
65
|
@file = ''
|
|
71
66
|
|
|
72
|
-
if @mainFile
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
generateProjectProperty if @mainFile
|
|
68
|
+
|
|
69
|
+
generateFlagDeclaration if a('definitions').include?('flags')
|
|
70
|
+
generateProjectIDs if a('definitions').include?('projectids')
|
|
71
|
+
generateResourceList if a('definitions').include?('resources')
|
|
72
|
+
generateTaskList if a('definitions').include?('tasks')
|
|
73
|
+
|
|
74
|
+
generateTaskAttributes unless a('taskAttributes').empty?
|
|
75
|
+
generateResourceAttributes unless a('resourceAttributes').empty?
|
|
80
76
|
|
|
81
77
|
@file
|
|
82
78
|
end
|
|
@@ -88,8 +84,9 @@ class TaskJuggler
|
|
|
88
84
|
"\"#{@project['version']}\" #{@project['start']} - " +
|
|
89
85
|
"#{@project['end']} {\n"
|
|
90
86
|
generateCustomAttributeDeclarations('resource', @project.resources,
|
|
91
|
-
|
|
92
|
-
generateCustomAttributeDeclarations('task', @project.tasks,
|
|
87
|
+
a('resourceAttributes'))
|
|
88
|
+
generateCustomAttributeDeclarations('task', @project.tasks,
|
|
89
|
+
a('taskAttributes'))
|
|
93
90
|
@file << "}\n\n"
|
|
94
91
|
end
|
|
95
92
|
|
|
@@ -107,8 +104,7 @@ class TaskJuggler
|
|
|
107
104
|
# taskAttributes list.
|
|
108
105
|
@file << ' extend ' + tag + "{\n"
|
|
109
106
|
propertySet.eachAttributeDefinition do |ad|
|
|
110
|
-
next unless ad.userDefined &&
|
|
111
|
-
(attributes.include?(ad.id) || attributes.include?('all'))
|
|
107
|
+
next unless ad.userDefined && attributes.include?(ad.id)
|
|
112
108
|
|
|
113
109
|
@file << " #{ad.objClass.tjpId} #{ad.id} \"#{ad.name}\"\n"
|
|
114
110
|
end
|
|
@@ -121,7 +117,7 @@ class TaskJuggler
|
|
|
121
117
|
properties = @resourceList + @taskList
|
|
122
118
|
|
|
123
119
|
properties.each do |property|
|
|
124
|
-
|
|
120
|
+
a('scenarios').each do |scenarioIdx|
|
|
125
121
|
property['flags', scenarioIdx].each do |flag|
|
|
126
122
|
flags << flag unless flags.include?(flag)
|
|
127
123
|
end
|
|
@@ -133,6 +129,19 @@ class TaskJuggler
|
|
|
133
129
|
end
|
|
134
130
|
end
|
|
135
131
|
|
|
132
|
+
def generateProjectIDs
|
|
133
|
+
# Compile a list of all projectIDs from the tasks in the taskList.
|
|
134
|
+
projectIDs = []
|
|
135
|
+
a('scenarios').each do |scenarioIdx|
|
|
136
|
+
@taskList.each do |task|
|
|
137
|
+
pid = task['projectid', scenarioIdx]
|
|
138
|
+
projectIDs << pid unless projectIDs.include?(pid)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
@file << "projectids #{projectIDs.join(', ')}\n\n"
|
|
143
|
+
end
|
|
144
|
+
|
|
136
145
|
def generateResourceList
|
|
137
146
|
# The resource definitions are generated recursively. So we only need to
|
|
138
147
|
# start it for the top-level resources.
|
|
@@ -181,8 +190,8 @@ class TaskJuggler
|
|
|
181
190
|
|
|
182
191
|
@file << ' ' * indent + "task #{task.id} \"#{task.name}\" {\n"
|
|
183
192
|
|
|
184
|
-
if
|
|
185
|
-
|
|
193
|
+
if a('taskAttributes').include?('depends')
|
|
194
|
+
a('scenarios').each do |scenarioIdx|
|
|
186
195
|
generateTaskDependency(scenarioIdx, task, 'depends', indent + 2)
|
|
187
196
|
generateTaskDependency(scenarioIdx, task, 'precedes', indent + 2)
|
|
188
197
|
end
|
|
@@ -208,7 +217,7 @@ class TaskJuggler
|
|
|
208
217
|
|
|
209
218
|
# For leaf tasks we put some attributes right here.
|
|
210
219
|
if isLeafTask
|
|
211
|
-
|
|
220
|
+
a('scenarios').each do |scenarioIdx|
|
|
212
221
|
generateAttribute(task, 'start', indent + 2, scenarioIdx)
|
|
213
222
|
unless task['milestone', scenarioIdx]
|
|
214
223
|
generateAttribute(task, 'end', indent + 2, scenarioIdx)
|
|
@@ -231,7 +240,7 @@ class TaskJuggler
|
|
|
231
240
|
|
|
232
241
|
# Generate 'depends' or 'precedes' attributes for a task.
|
|
233
242
|
def generateTaskDependency(scenarioIdx, task, tag, indent)
|
|
234
|
-
return unless
|
|
243
|
+
return unless a('taskAttributes').include?('depends')
|
|
235
244
|
|
|
236
245
|
taskDeps = task[tag, scenarioIdx]
|
|
237
246
|
unless taskDeps.empty?
|
|
@@ -261,11 +270,10 @@ class TaskJuggler
|
|
|
261
270
|
attr = resource.getAttr(id)
|
|
262
271
|
next if (!@supportedResourceAttrs.include?(id) &&
|
|
263
272
|
! attrDef.userDefined) ||
|
|
264
|
-
|
|
265
|
-
!@resourceAttrs.include?(id))
|
|
273
|
+
!a('resourceAttributes').include?(id)
|
|
266
274
|
|
|
267
275
|
if attrDef.scenarioSpecific
|
|
268
|
-
|
|
276
|
+
a('scenarios').each do |scenarioIdx|
|
|
269
277
|
generateAttribute(resource, id, 2, scenarioIdx)
|
|
270
278
|
end
|
|
271
279
|
else
|
|
@@ -289,10 +297,10 @@ class TaskJuggler
|
|
|
289
297
|
attr = task.getAttr(id)
|
|
290
298
|
next if (!@supportedTaskAttrs.include?(id) &&
|
|
291
299
|
! attrDef.userDefined) ||
|
|
292
|
-
(
|
|
300
|
+
!a('taskAttributes').include?(id)
|
|
293
301
|
|
|
294
302
|
if attrDef.scenarioSpecific
|
|
295
|
-
|
|
303
|
+
a('scenarios').each do |scenarioIdx|
|
|
296
304
|
# Some attributes need special treatment.
|
|
297
305
|
case id
|
|
298
306
|
when 'depends'
|
|
@@ -313,11 +321,9 @@ class TaskJuggler
|
|
|
313
321
|
end
|
|
314
322
|
|
|
315
323
|
def generateAttribute(property, attrId, indent, scenarioIdx = nil)
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
return if property[attrId, scenarioIdx].nil?
|
|
320
|
-
end
|
|
324
|
+
val = scenarioIdx.nil? ? property.getAttr(attrId) :
|
|
325
|
+
property[attrId, scenarioIdx]
|
|
326
|
+
return if val.nil? || (val.is_a?(Array) && val.empty?)
|
|
321
327
|
|
|
322
328
|
generateAttributeText(property.getAttr(attrId, scenarioIdx).to_tjp,
|
|
323
329
|
indent, scenarioIdx)
|
|
@@ -337,9 +343,8 @@ class TaskJuggler
|
|
|
337
343
|
# report.
|
|
338
344
|
def getBookings
|
|
339
345
|
@bookings = {}
|
|
340
|
-
if
|
|
341
|
-
|
|
342
|
-
@scenarios.each do |scenarioIdx|
|
|
346
|
+
if a('taskAttributes').include?('booking')
|
|
347
|
+
a('scenarios').each do |scenarioIdx|
|
|
343
348
|
@bookings[scenarioIdx] = {}
|
|
344
349
|
@resourceList.each do |resource|
|
|
345
350
|
# Get the bookings for this resource hashed by task.
|
data/lib/taskjuggler3.rb
CHANGED
|
@@ -44,6 +44,10 @@ def processArguments(argv)
|
|
|
44
44
|
'Generate reports despite scheduling errors') do
|
|
45
45
|
@forceReports = true
|
|
46
46
|
end
|
|
47
|
+
opts.on('-o', '--output-dir <directory>', String,
|
|
48
|
+
'Directory the reports should go into') do |arg|
|
|
49
|
+
@outputDir = arg + '/'
|
|
50
|
+
end
|
|
47
51
|
opts.on('-c N', Integer, 'Maximum number of CPU cores to use') do |arg|
|
|
48
52
|
@maxCpuCores = arg
|
|
49
53
|
end
|
|
@@ -88,6 +92,7 @@ end
|
|
|
88
92
|
def main
|
|
89
93
|
@maxCpuCores = 1
|
|
90
94
|
@forceReports = false
|
|
95
|
+
@outputDir = ''
|
|
91
96
|
|
|
92
97
|
errors = false
|
|
93
98
|
tj = TaskJuggler.new(files = processArguments(ARGV))
|
|
@@ -97,7 +102,7 @@ def main
|
|
|
97
102
|
errors = true
|
|
98
103
|
exit 1 unless @forceReports
|
|
99
104
|
end
|
|
100
|
-
exit 1 if !tj.generateReports || errors
|
|
105
|
+
exit 1 if !tj.generateReports(@outputDir) || errors
|
|
101
106
|
|
|
102
107
|
end
|
|
103
108
|
|
data/manual/Getting_Started
CHANGED
|
@@ -22,7 +22,7 @@ to ask TaskJuggler to process it.
|
|
|
22
22
|
|
|
23
23
|
TaskJuggler will try to schedule all tasks with the specified
|
|
24
24
|
conditions and generate the reports that were requested with the
|
|
25
|
-
[[
|
|
25
|
+
[[taskreport]], [[resourcereport]] or other report properties
|
|
26
26
|
in the input file. The report files will be generated in the current
|
|
27
27
|
directory or relative to it.
|
|
28
28
|
|
|
@@ -34,7 +34,7 @@ that are used on some operating systems.
|
|
|
34
34
|
=== Structure of a TJP File ===
|
|
35
35
|
|
|
36
36
|
Each TaskJuggler project consists of one or more text files. There is
|
|
37
|
-
always a main project file that may [[include.properties]] other
|
|
37
|
+
always a main project file that may [[include.properties include]] other
|
|
38
38
|
files. The main file name should have a ''''.tjp'''' suffix, the
|
|
39
39
|
included files must have a ''''.tji'''' suffix.
|
|
40
40
|
|
|
@@ -42,9 +42,9 @@ Every project must start with a [[project project header]]. The
|
|
|
42
42
|
project header must be in the main project file. All other elements
|
|
43
43
|
may be put into include files. The project header must then be
|
|
44
44
|
followed by any number of project properties such as [[account
|
|
45
|
-
accounts]], [[resource resources]]
|
|
46
|
-
must have at least one task defined and should
|
|
47
|
-
|
|
45
|
+
accounts]], [[resource resources]], [[task tasks]] and [[report
|
|
46
|
+
reports]]. Each project must have at least one task defined and should
|
|
47
|
+
have at least one report. Properties don't have to be listed in a
|
|
48
48
|
particular order, but may have interdependencies that require such an
|
|
49
49
|
order. If you want to assign a resource to work on a task, this
|
|
50
50
|
resource needs to be defined first. It is therefor recommended to
|
|
@@ -57,5 +57,56 @@ define them in the following sequence.
|
|
|
57
57
|
* [[vacation vacations]]
|
|
58
58
|
* [[resource resources]]
|
|
59
59
|
* [[task tasks]]
|
|
60
|
-
* [[reports]]
|
|
60
|
+
* [[report reports]]
|
|
61
|
+
* [[export exports]]
|
|
62
|
+
|
|
63
|
+
=== Types of variable Syntax Elements ===
|
|
64
|
+
|
|
65
|
+
==== ABSOLUTE_ID ====
|
|
66
|
+
|
|
67
|
+
An absolute identifier is composed of identifiers that are
|
|
68
|
+
concatenated by dots, e. g. ''''foo.bar''''. It is used to reference
|
|
69
|
+
a TaskJuggler property that lives in a hierarchical name space.
|
|
70
|
+
Accounts, Tasks, Reports are examples for such hierarchical name
|
|
71
|
+
spaces. To reference the sub-task ''''bar'''' of task ''''foo'''' the
|
|
72
|
+
absolute ID ''''foo.bar'''' is used.
|
|
73
|
+
|
|
74
|
+
==== ID ====
|
|
75
|
+
|
|
76
|
+
An identifier is composed of the letters ''''a'''' to ''''z'''',
|
|
77
|
+
''''A'''' to ''''Z'''', the underscore and the digits ''''0'''' to
|
|
78
|
+
''''9''''. There are no limits for the number of characters, but it
|
|
79
|
+
may not begin with a digit.
|
|
80
|
+
|
|
81
|
+
==== INTEGER ====
|
|
82
|
+
|
|
83
|
+
An integer is any natural number, e. g. ''''0'''', ''''1'''',
|
|
84
|
+
''''2'''' and so on.
|
|
85
|
+
|
|
86
|
+
==== STRING ====
|
|
87
|
+
|
|
88
|
+
Strings are character sequences that are enclosed by special
|
|
89
|
+
character marks. There are three different marks supported. For
|
|
90
|
+
short strings that fit on one lines, you can either use single or
|
|
91
|
+
double quotes.
|
|
92
|
+
|
|
93
|
+
'This is a single quoted string.'
|
|
94
|
+
"This is a double quoted string."
|
|
95
|
+
|
|
96
|
+
Single quoted strings may contain double quotes and vice versa.
|
|
97
|
+
|
|
98
|
+
For multi-line strings cut mark strings are recommended. A
|
|
99
|
+
cut-mark-string starts with ''''-8<-'''' (scissor on a dotted line) and
|
|
100
|
+
ends with ''''->8-''''. The start mark must be immediately followed
|
|
101
|
+
by a line break. The indentation of the first line must be repeated
|
|
102
|
+
for all following lines of the string and is not included in the
|
|
103
|
+
resulting strings. The terminating cut mark must only be preceeded by
|
|
104
|
+
white spaces by may not be indented more than the first line indentation.
|
|
105
|
+
|
|
106
|
+
-8<-
|
|
107
|
+
This is a
|
|
108
|
+
multi-line
|
|
109
|
+
string.
|
|
110
|
+
->8-
|
|
111
|
+
|
|
61
112
|
|
data/manual/How_To_Contribute
CHANGED
|
@@ -127,8 +127,7 @@ create the patch or patch-set.
|
|
|
127
127
|
|
|
128
128
|
This will generate a number of files starting with 5-digit file names.
|
|
129
129
|
You then need to attach these files to a posting in the
|
|
130
|
-
[http://www.taskjuggler.org/
|
|
131
|
-
TaskJuggler Developer Forum].
|
|
130
|
+
[http://www.taskjuggler.org/forum.php TaskJuggler Developer Forum].
|
|
132
131
|
|
|
133
132
|
==== Contributing to the User Manual ====
|
|
134
133
|
|
|
@@ -172,8 +171,7 @@ should be documented in the [[TaskJuggler_2x_Migration]] section.
|
|
|
172
171
|
In general, patches are very welcome. Please follow the coding style
|
|
173
172
|
and naming conventions used in the existing code. Larger changes
|
|
174
173
|
should be preceded by a discussion in the
|
|
175
|
-
[http://www.taskjuggler.org/
|
|
176
|
-
TaskJuggler Developer Forum].
|
|
174
|
+
[http://www.taskjuggler.org/forum.php TaskJuggler Developer Forum].
|
|
177
175
|
|
|
178
176
|
==== Some final words to Contributors ====
|
|
179
177
|
|
data/manual/Intro
CHANGED
|
@@ -50,7 +50,7 @@ first impression, you can look at this
|
|
|
50
50
|
[http://www.taskjuggler.org/tj3/examples/tutorial.tjp project file]. The
|
|
51
51
|
project description is fairly intuitive, but very powerful as well.
|
|
52
52
|
The [[Tutorial]] will explain this file line by line. Please look at
|
|
53
|
-
the [http://www.taskjuggler.org/tj3/examples/
|
|
53
|
+
the [http://www.taskjuggler.org/tj3/examples/Overview.html
|
|
54
54
|
resulting reports] that visualize the project.
|
|
55
55
|
|
|
56
56
|
|
|
@@ -97,6 +97,6 @@ The official TaskJuggler web site can be found at
|
|
|
97
97
|
[http://www.taskjuggler.org].
|
|
98
98
|
|
|
99
99
|
Since the developers are mostly busy project managers themselves, we
|
|
100
|
-
have created a [http://www.taskjuggler.org/
|
|
100
|
+
have created a [http://www.taskjuggler.org/forum.php forum] for users
|
|
101
101
|
to help each other.
|
|
102
102
|
|
data/manual/Reporting_Bugs
CHANGED
|
@@ -10,7 +10,10 @@ find a bug, please follow this procedure:
|
|
|
10
10
|
feature.
|
|
11
11
|
|
|
12
12
|
* Check the [http://www.taskjuggler.org TaskJuggler web page] and the
|
|
13
|
-
[http://www.taskjuggler.org/
|
|
13
|
+
[http://www.taskjuggler.org/forum.php discussion groups]. In
|
|
14
|
+
particular, you should check the
|
|
15
|
+
[http://groups.google.com/group/taskjuggler-bugs/topics existing bug
|
|
16
|
+
reports].
|
|
14
17
|
|
|
15
18
|
* Possibly the bug was already found
|
|
16
19
|
and a patch or workaround exists.
|
|
@@ -18,8 +21,12 @@ and a patch or workaround exists.
|
|
|
18
21
|
* Try to create a test project that is as small as possible but still
|
|
19
22
|
reproduces the bug.
|
|
20
23
|
|
|
24
|
+
* If TaskJuggler has crashed you will usually get some debug output. This
|
|
25
|
+
may not make any sense to you but it is vital information to analyze
|
|
26
|
+
the bug. Please include it completely in your bug report.
|
|
27
|
+
|
|
21
28
|
* Send the test project and a detailed description of the problem to
|
|
22
|
-
the [http://www.taskjuggler.org/
|
|
29
|
+
the [http://www.taskjuggler.org/forum.php TaskJuggler Developer
|
|
23
30
|
Forum]. Not sending a test project is the most common mistake when
|
|
24
31
|
reporting bugs. This usually triggers requests or leads to bug reports
|
|
25
32
|
being ignored.
|
data/manual/Rich_Text_Attributes
CHANGED
|
@@ -88,3 +88,44 @@ in nowiki tags.
|
|
|
88
88
|
|
|
89
89
|
<nowiki> This is not '''bold''' text. </nowiki>
|
|
90
90
|
|
|
91
|
+
==== Block and Inline Generators ====
|
|
92
|
+
|
|
93
|
+
Block and inline generators are a very powerful extension that allow
|
|
94
|
+
you to insert arbitrarily complex content. Block generators create a
|
|
95
|
+
text block whereas inline generators generate an element that fits
|
|
96
|
+
inside a text paragraph.
|
|
97
|
+
|
|
98
|
+
Block generators use the following syntax:
|
|
99
|
+
|
|
100
|
+
<[generator_name parameter1="value1" ... ]>
|
|
101
|
+
|
|
102
|
+
Inline generators have a very similar syntax:
|
|
103
|
+
|
|
104
|
+
<-generator_name parameter1="value1" ... ->
|
|
105
|
+
|
|
106
|
+
Each generator is identified by a name. See the following list for
|
|
107
|
+
supported generators and their functionality. Generators can have one or
|
|
108
|
+
more optional parameters. Some parameters are mandatory, other are
|
|
109
|
+
optional. The value of a parameter must be enclosed in single or
|
|
110
|
+
double quotes. Since your rich text content must already be enclosed
|
|
111
|
+
by double or single quotes, make sure you don't use the same quoting
|
|
112
|
+
marks for the parameter value. Alternatively you can put a backslash
|
|
113
|
+
in front of the quote mark to escape it.
|
|
114
|
+
|
|
115
|
+
'''Block Generator''' ''''navigator''''
|
|
116
|
+
|
|
117
|
+
Parameters:
|
|
118
|
+
|
|
119
|
+
* id : ID of a defined [[navigator]]
|
|
120
|
+
|
|
121
|
+
''The navigator generator inserts the referenced navigator.''
|
|
122
|
+
|
|
123
|
+
'''Block Generator''' ''''report''''
|
|
124
|
+
|
|
125
|
+
Paramters:
|
|
126
|
+
|
|
127
|
+
* id : ID of a defined [[report]]
|
|
128
|
+
|
|
129
|
+
''The report generator inserts the referenced report as a new block
|
|
130
|
+
of this text. The referenced report inherits some context such as the
|
|
131
|
+
report period and the property set from the referencing report.''
|