taskjuggler 0.0.3 → 0.0.4
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/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjmanual.css +52 -0
- data/data/css/tjreport.css +195 -0
- data/data/icons/details.png +0 -0
- data/data/icons/flag-green.png +0 -0
- data/data/icons/flag-red.png +0 -0
- data/data/icons/flag-yellow.png +0 -0
- data/data/icons/resource.png +0 -0
- data/data/icons/resourcegroup.png +0 -0
- data/data/icons/task.png +0 -0
- data/data/icons/taskgroup.png +0 -0
- data/data/icons/trend-down.png +0 -0
- data/data/icons/trend-flat.png +0 -0
- data/data/icons/trend-up.png +0 -0
- data/data/scripts/wz_tooltip.js +1301 -0
- data/doc/classes/AppConfig.html +298 -230
- data/doc/classes/Arguments.html +8 -8
- data/doc/classes/Object.html +7 -7
- data/doc/classes/String.html +89 -89
- data/doc/classes/TaskJuggler.html +396 -264
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +30 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
- data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
- data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
- data/doc/classes/TaskJuggler/Booking.html +18 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
- data/doc/classes/TaskJuggler/CSVFile.html +24 -24
- data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
- data/doc/classes/TaskJuggler/Charge.html +18 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
- data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
- data/doc/classes/TaskJuggler/GanttChart.html +48 -48
- data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
- data/doc/classes/TaskJuggler/GanttLine.html +24 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
- data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +57 -57
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/JobInfo.html +68 -12
- data/doc/classes/TaskJuggler/Journal.html +266 -20
- data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
- data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
- data/doc/classes/TaskJuggler/Limits.html +36 -36
- data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
- data/doc/classes/TaskJuggler/Log.html +145 -107
- data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
- data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
- data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
- data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
- data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
- data/doc/classes/TaskJuggler/Macro.html +6 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +37 -37
- data/doc/classes/TaskJuggler/Message.html +12 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
- data/doc/classes/TaskJuggler/Navigator.html +110 -46
- data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
- data/doc/classes/TaskJuggler/Project.html +1158 -893
- data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
- data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
- data/doc/classes/TaskJuggler/PropertyList.html +225 -155
- data/doc/classes/TaskJuggler/PropertySet.html +375 -332
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
- data/doc/classes/TaskJuggler/Query.html +404 -139
- data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
- data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
- data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
- data/doc/classes/TaskJuggler/RealFormat.html +18 -18
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
- data/doc/classes/TaskJuggler/Report.html +66 -64
- data/doc/classes/TaskJuggler/ReportBase.html +112 -123
- data/doc/classes/TaskJuggler/ReportContext.html +43 -38
- data/doc/classes/TaskJuggler/ReportServer.html +320 -0
- data/doc/classes/TaskJuggler/ReportTable.html +42 -42
- data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
- data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
- data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
- data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
- data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
- data/doc/classes/TaskJuggler/RichText.html +64 -248
- data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
- data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
- data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
- data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
- data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
- data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
- data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
- data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
- data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
- data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
- data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
- data/doc/classes/TaskJuggler/TableReport.html +447 -468
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
- data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
- data/doc/classes/TaskJuggler/TextParser.html +215 -194
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
- data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
- data/doc/classes/TaskJuggler/TextReport.html +77 -74
- data/doc/classes/TaskJuggler/TextScanner.html +294 -281
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
- data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +522 -513
- data/doc/classes/TaskJuggler/TjpExample.html +25 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
- data/doc/classes/TaskJuggler/UserManual.html +212 -213
- data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
- data/doc/classes/TaskJuggler/XMLElement.html +86 -50
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +3 -2
- data/doc/files/lib/Account_rb.html +3 -2
- data/doc/files/lib/Allocation_rb.html +3 -2
- data/doc/files/lib/AppConfig_rb.html +5 -2
- data/doc/files/lib/AttributeBase_rb.html +3 -2
- data/doc/files/lib/AttributeDefinition_rb.html +3 -2
- data/doc/files/lib/Attributes_rb.html +3 -2
- data/doc/files/lib/BatchProcessor_rb.html +4 -3
- data/doc/files/lib/Booking_rb.html +3 -2
- data/doc/files/lib/ChargeSet_rb.html +3 -2
- data/doc/files/lib/Charge_rb.html +3 -2
- data/doc/files/lib/HTMLDocument_rb.html +3 -2
- data/doc/files/lib/Interval_rb.html +3 -2
- data/doc/files/lib/Journal_rb.html +4 -3
- data/doc/files/lib/KeywordArray_rb.html +3 -2
- data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
- data/doc/files/lib/Limits_rb.html +3 -2
- data/doc/files/lib/Log_rb.html +3 -2
- data/doc/files/lib/LogicalExpression_rb.html +3 -2
- data/doc/files/lib/LogicalFunction_rb.html +3 -2
- data/doc/files/lib/LogicalOperation_rb.html +3 -2
- data/doc/files/lib/MacroParser_rb.html +3 -2
- data/doc/files/lib/MacroTable_rb.html +3 -2
- data/doc/files/lib/MessageHandler_rb.html +3 -2
- data/doc/files/lib/Message_rb.html +3 -2
- data/doc/files/lib/ProjectFileParser_rb.html +7 -4
- data/doc/files/lib/Project_rb.html +3 -2
- data/doc/files/lib/PropertyList_rb.html +3 -2
- data/doc/files/lib/PropertySet_rb.html +3 -2
- data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
- data/doc/files/lib/Query_rb.html +3 -2
- data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
- data/doc/files/lib/RTFQuery_rb.html +121 -0
- data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
- data/doc/files/lib/RealFormat_rb.html +3 -2
- data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
- data/doc/files/lib/ReportServer_rb.html +107 -0
- data/doc/files/lib/ResourceScenario_rb.html +3 -2
- data/doc/files/lib/Resource_rb.html +3 -2
- data/doc/files/lib/RichTextDocument_rb.html +4 -3
- data/doc/files/lib/RichTextElement_rb.html +3 -2
- data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
- data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
- data/doc/files/lib/RichTextParser_rb.html +3 -2
- data/doc/files/lib/RichTextScanner_rb.html +3 -2
- data/doc/files/lib/RichTextSnip_rb.html +3 -2
- data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
- data/doc/files/lib/RichText_rb.html +3 -2
- data/doc/files/lib/ScenarioData_rb.html +3 -2
- data/doc/files/lib/Scenario_rb.html +3 -2
- data/doc/files/lib/Scoreboard_rb.html +3 -2
- data/doc/files/lib/ShiftAssignments_rb.html +3 -2
- data/doc/files/lib/ShiftScenario_rb.html +3 -2
- data/doc/files/lib/Shift_rb.html +3 -2
- data/doc/files/lib/SourceFileInfo_rb.html +3 -2
- data/doc/files/lib/SyntaxReference_rb.html +3 -2
- data/doc/files/lib/TOCEntry_rb.html +3 -2
- data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
- data/doc/files/lib/TableOfContents_rb.html +3 -2
- data/doc/files/lib/TaskDependency_rb.html +3 -2
- data/doc/files/lib/TaskJuggler_rb.html +7 -2
- data/doc/files/lib/TaskScenario_rb.html +3 -2
- data/doc/files/lib/Task_rb.html +3 -2
- data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
- data/doc/files/lib/TextParser/Rule_rb.html +4 -3
- data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
- data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
- data/doc/files/lib/TextParser_rb.html +3 -2
- data/doc/files/lib/TextScanner_rb.html +3 -2
- data/doc/files/lib/Tj3Config_rb.html +3 -2
- data/doc/files/lib/TjException_rb.html +3 -2
- data/doc/files/lib/TjTime_rb.html +3 -2
- data/doc/files/lib/TjpExample_rb.html +3 -2
- data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
- data/doc/files/lib/UTF8String_rb.html +14 -6
- data/doc/files/lib/UserManual_rb.html +6 -3
- data/doc/files/lib/WorkingHours_rb.html +3 -2
- data/doc/files/lib/XMLDocument_rb.html +3 -2
- data/doc/files/lib/XMLElement_rb.html +3 -2
- data/doc/files/lib/deep_copy_rb.html +3 -2
- data/doc/files/lib/reports/CSVFile_rb.html +3 -2
- data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
- data/doc/files/lib/reports/GanttChart_rb.html +3 -2
- data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
- data/doc/files/lib/reports/GanttLine_rb.html +3 -2
- data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
- data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
- data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
- data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
- data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
- data/doc/files/lib/reports/Navigator_rb.html +3 -2
- data/doc/files/lib/reports/ReportBase_rb.html +3 -2
- data/doc/files/lib/reports/ReportContext_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
- data/doc/files/lib/reports/ReportTable_rb.html +3 -2
- data/doc/files/lib/reports/Report_rb.html +7 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
- data/doc/files/lib/reports/TableReport_rb.html +3 -2
- data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
- data/doc/files/lib/reports/TextReport_rb.html +4 -3
- data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
- data/doc/files/lib/taskjuggler3_rb.html +94 -77
- data/doc/files/lib/tj3client_rb.html +280 -0
- data/doc/files/lib/tj3man_rb.html +10 -9
- data/doc/fr_class_index.html +27 -5
- data/doc/fr_file_index.html +15 -7
- data/doc/fr_method_index.html +1312 -1020
- data/examples/tutorial.tjp +113 -14
- data/gem_spec.rb +2 -1
- data/lib/Account.rb +1 -1
- data/lib/AccountScenario.rb +1 -1
- data/lib/Allocation.rb +1 -1
- data/lib/AppConfig.rb +23 -10
- data/lib/AttributeBase.rb +34 -6
- data/lib/AttributeDefinition.rb +1 -1
- data/lib/Attributes.rb +51 -16
- data/lib/BatchProcessor.rb +204 -77
- data/lib/Booking.rb +1 -1
- data/lib/Charge.rb +1 -1
- data/lib/ChargeSet.rb +1 -1
- data/lib/HTMLDocument.rb +2 -2
- data/lib/Interval.rb +1 -1
- data/lib/Journal.rb +231 -9
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +6 -4
- data/lib/Limits.rb +1 -1
- data/lib/Log.rb +8 -1
- data/lib/LogicalExpression.rb +14 -13
- data/lib/LogicalFunction.rb +88 -14
- data/lib/LogicalOperation.rb +124 -53
- data/lib/MacroParser.rb +1 -1
- data/lib/MacroTable.rb +2 -2
- data/lib/Message.rb +1 -1
- data/lib/MessageHandler.rb +7 -3
- data/lib/Project.rb +93 -14
- data/lib/ProjectFileParser.rb +30 -15
- data/lib/PropertyList.rb +103 -36
- data/lib/PropertySet.rb +22 -10
- data/lib/PropertyTreeNode.rb +120 -15
- data/lib/Query.rb +119 -48
- data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
- data/lib/RTFQuery.rb +166 -0
- data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
- data/lib/RealFormat.rb +1 -1
- data/lib/RemoteServiceManager.rb +80 -0
- data/lib/ReportServer.rb +66 -0
- data/lib/Resource.rb +1 -1
- data/lib/ResourceScenario.rb +48 -19
- data/lib/RichText.rb +98 -41
- data/lib/RichTextDocument.rb +10 -8
- data/lib/RichTextElement.rb +72 -28
- data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
- data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
- data/lib/RichTextParser.rb +6 -3
- data/lib/RichTextScanner.rb +91 -19
- data/lib/RichTextSnip.rb +8 -3
- data/lib/RichTextSyntaxRules.rb +103 -45
- data/lib/Scenario.rb +1 -1
- data/lib/ScenarioData.rb +2 -2
- data/lib/Scoreboard.rb +1 -1
- data/lib/Shift.rb +1 -1
- data/lib/ShiftAssignments.rb +1 -1
- data/lib/ShiftScenario.rb +1 -1
- data/lib/SourceFileInfo.rb +1 -1
- data/lib/SyntaxReference.rb +2 -2
- data/lib/TOCEntry.rb +1 -1
- data/lib/TableColumnDefinition.rb +59 -16
- data/lib/TableOfContents.rb +1 -1
- data/lib/Task.rb +1 -1
- data/lib/TaskDependency.rb +1 -1
- data/lib/TaskJuggler.rb +31 -8
- data/lib/TaskScenario.rb +165 -16
- data/lib/TextParser.rb +36 -22
- data/lib/TextParser/Pattern.rb +3 -3
- data/lib/TextParser/Rule.rb +2 -2
- data/lib/TextParser/StackElement.rb +4 -3
- data/lib/TextParser/TokenDoc.rb +2 -2
- data/lib/TextScanner.rb +52 -37
- data/lib/Tj3Config.rb +6 -5
- data/lib/TjException.rb +1 -1
- data/lib/TjTime.rb +12 -3
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +1044 -150
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +18 -70
- data/lib/WorkingHours.rb +3 -3
- data/lib/XMLDocument.rb +3 -2
- data/lib/XMLElement.rb +6 -1
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/CSVFile.rb +1 -1
- data/lib/reports/ColumnTable.rb +9 -9
- data/lib/reports/GanttChart.rb +1 -1
- data/lib/reports/GanttContainer.rb +1 -1
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/reports/GanttLine.rb +40 -40
- data/lib/reports/GanttLoadStack.rb +1 -1
- data/lib/reports/GanttMilestone.rb +1 -1
- data/lib/reports/GanttRouter.rb +1 -1
- data/lib/reports/GanttTaskBar.rb +1 -1
- data/lib/reports/HTMLGraphics.rb +1 -1
- data/lib/reports/Navigator.rb +149 -22
- data/lib/reports/Report.rb +115 -172
- data/lib/reports/ReportBase.rb +22 -27
- data/lib/reports/ReportContext.rb +29 -15
- data/lib/reports/ReportTable.rb +1 -1
- data/lib/reports/ReportTableCell.rb +120 -27
- data/lib/reports/ReportTableColumn.rb +3 -3
- data/lib/reports/ReportTableLegend.rb +1 -1
- data/lib/reports/ReportTableLine.rb +10 -2
- data/lib/reports/ResourceListRE.rb +5 -1
- data/lib/reports/TableReport.rb +237 -287
- data/lib/reports/TaskListRE.rb +5 -1
- data/lib/reports/TextReport.rb +7 -4
- data/lib/reports/TimeSheetReport.rb +233 -0
- data/lib/reports/TjpExportRE.rb +2 -2
- data/lib/taskjuggler3.rb +27 -11
- data/lib/tj3client.rb +110 -0
- data/lib/tj3man.rb +4 -4
- data/manual/Getting_Started +0 -50
- data/manual/How_To_Contribute +6 -13
- data/manual/Installation +102 -28
- data/manual/Intro +11 -1
- data/manual/Reporting_Bugs +23 -7
- data/manual/Rich_Text_Attributes +59 -6
- data/manual/TaskJuggler_2x_Migration +27 -0
- data/manual/The_TaskJuggler_Syntax +104 -0
- data/manual/Tutorial +10 -9
- data/prj_cfg.rb +8 -2
- data/tasks/csts.rake +1 -1
- data/tasks/manual.rake +5 -3
- data/test/MessageChecker.rb +1 -1
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
- data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
- data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
- data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
- data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
- data/test/all.rb +2 -2
- data/test/test_BatchProcessor.rb +42 -13
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_Journal.rb +176 -0
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +14 -5
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_RichText.rb +30 -20
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextScanner.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +2 -2
- metadata +610 -532
- data/doc/files/lib/ms_test_rb.html +0 -90
- data/examples/ContactList.html +0 -1467
- data/examples/Deliveries.html +0 -485
- data/examples/Development.html +0 -2525
- data/examples/Overview.html +0 -747
- data/examples/Resource Graph.html +0 -616
- data/lib/ms_test.rb +0 -27
- data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
data/lib/reports/TaskListRE.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskListRE.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -30,6 +30,8 @@ class TaskJuggler
|
|
|
30
30
|
|
|
31
31
|
# Generate the table in the intermediate format.
|
|
32
32
|
def generateIntermediateFormat
|
|
33
|
+
super
|
|
34
|
+
|
|
33
35
|
setReportPeriod
|
|
34
36
|
|
|
35
37
|
# Prepare the task list.
|
|
@@ -37,6 +39,7 @@ class TaskJuggler
|
|
|
37
39
|
taskList.setSorting(@report.get('sortTasks'))
|
|
38
40
|
taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
|
|
39
41
|
@report.get('rollupTask'))
|
|
42
|
+
taskList.query = @report.project.reportContext.query
|
|
40
43
|
taskList.sort!
|
|
41
44
|
|
|
42
45
|
# Prepare the resource list.
|
|
@@ -45,6 +48,7 @@ class TaskJuggler
|
|
|
45
48
|
resourceList = filterResourceList(resourceList, nil,
|
|
46
49
|
@report.get('hideResource'),
|
|
47
50
|
@report.get('rollupResource'))
|
|
51
|
+
resourceList.query = @report.project.reportContext.query
|
|
48
52
|
resourceList.sort!
|
|
49
53
|
|
|
50
54
|
adjustReportPeriod(taskList, @report.get('scenarios'),
|
data/lib/reports/TextReport.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = TextReport.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -28,6 +28,8 @@ class TaskJuggler
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def generateIntermediateFormat
|
|
31
|
+
super
|
|
32
|
+
|
|
31
33
|
if a('center')
|
|
32
34
|
if a('left') && a('right')
|
|
33
35
|
@lWidth = @rWidth = 20
|
|
@@ -66,8 +68,9 @@ class TaskJuggler
|
|
|
66
68
|
%w( left center right).each do |i|
|
|
67
69
|
width = instance_variable_get('@' + i[0].chr + 'Width')
|
|
68
70
|
if width > 0
|
|
69
|
-
tr << (td = XMLElement.new('td', 'width' => "#{width}%"
|
|
70
|
-
|
|
71
|
+
tr << (td = XMLElement.new('td', 'width' => "#{width}%",
|
|
72
|
+
'style' => 'vertical-align:top'))
|
|
73
|
+
td << (el = rt_to_html(i))
|
|
71
74
|
end
|
|
72
75
|
end
|
|
73
76
|
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
#
|
|
4
|
+
# = TimeSheetReport.rb -- The TaskJuggler III Project Management Software
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 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
|
+
# Utility class for the intermediate TimeSheetReport format.
|
|
18
|
+
class TSResourceRecord
|
|
19
|
+
|
|
20
|
+
attr_reader :resource, :tasks
|
|
21
|
+
|
|
22
|
+
def initialize(resource)
|
|
23
|
+
@resource = resource
|
|
24
|
+
@tasks = []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Utility class for the intermediate TimeSheetReport format.
|
|
30
|
+
class TSTaskRecord
|
|
31
|
+
|
|
32
|
+
attr_reader :task, :work, :remaining, :endDate
|
|
33
|
+
|
|
34
|
+
def initialize(task, work, remaining = nil, endDate = nil)
|
|
35
|
+
@task = task
|
|
36
|
+
@work = work
|
|
37
|
+
@remaining = remaining
|
|
38
|
+
@endDate = endDate
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# This specialization of ReportBase implements a template generator for time
|
|
44
|
+
# sheets. The time sheet is structured using the TJP file syntax.
|
|
45
|
+
class TimeSheetReport < ReportBase
|
|
46
|
+
|
|
47
|
+
attr_reader :mainFile
|
|
48
|
+
|
|
49
|
+
# Create a new object and set some default values.
|
|
50
|
+
def initialize(report)
|
|
51
|
+
super(report)
|
|
52
|
+
|
|
53
|
+
@report.set('scenarios', [ 0 ])
|
|
54
|
+
# Show all tasks, sorted by seqno-up.
|
|
55
|
+
@report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
56
|
+
@report.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
57
|
+
# Show all resources, sorted by seqno-up.
|
|
58
|
+
@report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
|
|
59
|
+
@report.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
60
|
+
|
|
61
|
+
@records = []
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# In the future we might want to generate other output than TJP synatx. So
|
|
65
|
+
# we generate an abstract version of the time sheet first. This abstract
|
|
66
|
+
# version has a TSResourceRecord for each resource and each of these
|
|
67
|
+
# records holds a TSTaskRecord for each assigned task.
|
|
68
|
+
def generateIntermediateFormat
|
|
69
|
+
super
|
|
70
|
+
|
|
71
|
+
# Prepare the resource list.
|
|
72
|
+
resourceList = PropertyList.new(@project.resources)
|
|
73
|
+
resourceList.setSorting(@report.get('sortResources'))
|
|
74
|
+
resourceList = filterResourceList(resourceList, nil,
|
|
75
|
+
@report.get('hideResource'),
|
|
76
|
+
@report.get('rollupResource'))
|
|
77
|
+
# Prepare a template for the Query we will use to get all the data.
|
|
78
|
+
scenarioIdx = a('scenarios')[0]
|
|
79
|
+
queryAttrs = { 'project' => @project,
|
|
80
|
+
'scopeProperty' => nil,
|
|
81
|
+
'scenarioIdx' => scenarioIdx,
|
|
82
|
+
'loadUnit' => a('loadUnit'),
|
|
83
|
+
'numberFormat' => a('numberFormat'),
|
|
84
|
+
'timeFormat' => a('timeFormat'),
|
|
85
|
+
'currencyFormat' => a('currencyFormat'),
|
|
86
|
+
'start' => a('start'), 'end' => a('end'),
|
|
87
|
+
'costAccount' => a('costAccount'),
|
|
88
|
+
'revenueAccount' => a('revenueAccount') }
|
|
89
|
+
resourceList.query = Query.new(queryAttrs)
|
|
90
|
+
resourceList.sort!
|
|
91
|
+
|
|
92
|
+
# Prepare the task list.
|
|
93
|
+
taskList = PropertyList.new(@project.tasks)
|
|
94
|
+
taskList.setSorting(@report.get('sortTasks'))
|
|
95
|
+
taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
|
|
96
|
+
@report.get('rollupTask'))
|
|
97
|
+
|
|
98
|
+
resourceList.each do |resource|
|
|
99
|
+
# Time sheets only make sense for leaf resources that actuall do work.
|
|
100
|
+
next unless resource.leaf?
|
|
101
|
+
|
|
102
|
+
# Create a new TSResourceRecord for the resource.
|
|
103
|
+
@records << (resourceRecord = TSResourceRecord.new(resource))
|
|
104
|
+
|
|
105
|
+
# Now we have to find all the task that the resource is allocated to
|
|
106
|
+
# during the report period.
|
|
107
|
+
assignedTaskList = filterTaskList(taskList, resource,
|
|
108
|
+
a('hideTask'),
|
|
109
|
+
a('rollupTask'))
|
|
110
|
+
queryAttrs['scopeProperty'] = resource
|
|
111
|
+
assignedTaskList.query = Query.new(queryAttrs)
|
|
112
|
+
assignedTaskList.sort!
|
|
113
|
+
|
|
114
|
+
assignedTaskList.each do |task|
|
|
115
|
+
# Time sheet task records only make sense for leaf tasks.
|
|
116
|
+
next unless task.leaf?
|
|
117
|
+
|
|
118
|
+
queryAttrs['property'] = task
|
|
119
|
+
query = Query.new(queryAttrs)
|
|
120
|
+
|
|
121
|
+
# Get the allocated effort for the task for this period.
|
|
122
|
+
query.attributeId = 'effort'
|
|
123
|
+
query.start = a('start')
|
|
124
|
+
query.end = a('end')
|
|
125
|
+
query.process
|
|
126
|
+
work = query.to_s
|
|
127
|
+
|
|
128
|
+
if task['effort', scenarioIdx]
|
|
129
|
+
# The task is an effort based task.
|
|
130
|
+
# Get the remaining effort for this task.
|
|
131
|
+
query.start = a('end')
|
|
132
|
+
query.end = task['end', scenarioIdx]
|
|
133
|
+
query.process
|
|
134
|
+
remaining = query.to_s
|
|
135
|
+
endDate = nil
|
|
136
|
+
else
|
|
137
|
+
# The task is a duration task.
|
|
138
|
+
# Get the planned task end date.
|
|
139
|
+
remaining = nil
|
|
140
|
+
endDate = task['end', scenarioIdx]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Put all data into a TSTaskRecord and push it into the resource
|
|
144
|
+
# record.
|
|
145
|
+
resourceRecord.tasks <<
|
|
146
|
+
TSTaskRecord.new(task, work, remaining, endDate)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Generate a time sheet in TJP syntax format.
|
|
152
|
+
def to_tjp
|
|
153
|
+
|
|
154
|
+
# Prepare the task list.
|
|
155
|
+
@taskList = PropertyList.new(@project.tasks)
|
|
156
|
+
@taskList.setSorting(a('sortTasks'))
|
|
157
|
+
@taskList = filterTaskList(@taskList, nil, a('hideTask'), a('rollupTask'))
|
|
158
|
+
@taskList.sort!
|
|
159
|
+
|
|
160
|
+
# This String will hold the result.
|
|
161
|
+
@file = ''
|
|
162
|
+
|
|
163
|
+
# Iterate over all the resources that we have TSResourceRecords for.
|
|
164
|
+
@records.each do |rr|
|
|
165
|
+
resource = rr.resource
|
|
166
|
+
# Generate the time sheet header
|
|
167
|
+
@file << "timesheet #{resource.fullId} " +
|
|
168
|
+
"#{a('start')} - #{a('end')} {\n\n"
|
|
169
|
+
|
|
170
|
+
if rr.tasks.empty?
|
|
171
|
+
# If there were no assignments, just write a comment.
|
|
172
|
+
@file << " # There were no planned tasks assignements for " +
|
|
173
|
+
"this period!\n\n"
|
|
174
|
+
else
|
|
175
|
+
rr.tasks.each do |tr|
|
|
176
|
+
task = tr.task
|
|
177
|
+
|
|
178
|
+
@file << " # Task: #{task.name}\n"
|
|
179
|
+
@file << " task #{task.fullId} {\n"
|
|
180
|
+
@file << " work #{tr.work}\n"
|
|
181
|
+
if tr.remaining
|
|
182
|
+
@file << " remaining #{tr.remaining}\n"
|
|
183
|
+
else
|
|
184
|
+
@file << " end #{tr.endDate.to_tjp}\n"
|
|
185
|
+
end
|
|
186
|
+
@file << " status green \"Your status here!\" {\n" +
|
|
187
|
+
" summary\n" +
|
|
188
|
+
" -8<-\n" +
|
|
189
|
+
" Your summary here!\n" +
|
|
190
|
+
" ->8-\n" +
|
|
191
|
+
" }\n"
|
|
192
|
+
@file << " }\n\n"
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
@file << <<'EOT'
|
|
196
|
+
# If you had unplanned tasks, uncomment and fill out the following lines:
|
|
197
|
+
# newtask new.task.id "A task title" {
|
|
198
|
+
# work X.Xd
|
|
199
|
+
# remaining Y.Yd
|
|
200
|
+
# }
|
|
201
|
+
EOT
|
|
202
|
+
@file << "}\n\n"
|
|
203
|
+
end
|
|
204
|
+
@file
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
private
|
|
208
|
+
|
|
209
|
+
# This utility function is used to indent multi-line attributes. All
|
|
210
|
+
# attributes should be filtered through this function. Attributes that
|
|
211
|
+
# contain line breaks will be indented properly. In addition to the
|
|
212
|
+
# indentation specified by _indent_ all but the first line will be indented
|
|
213
|
+
# after the first word of the first line. The text may not end with a line
|
|
214
|
+
# break.
|
|
215
|
+
def indentBlock(text, indent)
|
|
216
|
+
out = ''
|
|
217
|
+
firstSpace = 0
|
|
218
|
+
text.length.times do |i|
|
|
219
|
+
if firstSpace == 0 && text[i] == ?\ # There must be a space after ?
|
|
220
|
+
firstSpace = i
|
|
221
|
+
end
|
|
222
|
+
out << text[i]
|
|
223
|
+
if text[i] == ?\n
|
|
224
|
+
out += ' ' * (indent + firstSpace)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
out
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
end
|
|
233
|
+
|
data/lib/reports/TjpExportRE.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjpExportRE.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -41,8 +41,8 @@ class TaskJuggler
|
|
|
41
41
|
@report.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
# There is nothing to do here.
|
|
45
44
|
def generateIntermediateFormat
|
|
45
|
+
super
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
# Return the project data in TJP syntax format.
|
data/lib/taskjuggler3.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = taskjuggler3.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -20,12 +20,12 @@ AppConfig.appName = 'taskjuggler3'
|
|
|
20
20
|
def processArguments(argv)
|
|
21
21
|
opts = OptionParser.new
|
|
22
22
|
|
|
23
|
-
opts.banner = "#{AppConfig.
|
|
23
|
+
opts.banner = "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
24
24
|
"#{AppConfig.packageInfo}\n\n" +
|
|
25
25
|
"Copyright (c) #{AppConfig.copyright.join(', ')}" +
|
|
26
26
|
" by #{AppConfig.authors.join(', ')}\n\n" +
|
|
27
27
|
"#{AppConfig.license}\n" +
|
|
28
|
-
"For more info about #{AppConfig.
|
|
28
|
+
"For more info about #{AppConfig.softwareName} see " +
|
|
29
29
|
"#{AppConfig.contact}\n\n" +
|
|
30
30
|
"Usage: #{AppConfig.appName} [options] file.tjp " +
|
|
31
31
|
"[ file1.tji ... ]"
|
|
@@ -44,6 +44,11 @@ def processArguments(argv)
|
|
|
44
44
|
'Generate reports despite scheduling errors') do
|
|
45
45
|
@forceReports = true
|
|
46
46
|
end
|
|
47
|
+
opts.on('-s', '--report-server',
|
|
48
|
+
'Parse and schedule the project and wait for remote report ' +
|
|
49
|
+
'requests') do
|
|
50
|
+
@reportServer = true
|
|
51
|
+
end
|
|
47
52
|
opts.on('-o', '--output-dir <directory>', String,
|
|
48
53
|
'Directory the reports should go into') do |arg|
|
|
49
54
|
@outputDir = arg + '/'
|
|
@@ -57,7 +62,7 @@ def processArguments(argv)
|
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
opts.on_tail('--version', 'Show version info') do
|
|
60
|
-
puts "#{AppConfig.
|
|
65
|
+
puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
61
66
|
"#{AppConfig.packageInfo}"
|
|
62
67
|
exit 0
|
|
63
68
|
end
|
|
@@ -74,12 +79,12 @@ def processArguments(argv)
|
|
|
74
79
|
|
|
75
80
|
if files.empty?
|
|
76
81
|
puts opts.to_s
|
|
77
|
-
$stderr.puts "\nNo file name specified!"
|
|
82
|
+
$stderr.puts "\nNo project file name specified!"
|
|
78
83
|
exit 1
|
|
79
84
|
end
|
|
80
85
|
|
|
81
86
|
unless TaskJuggler::Log.silent
|
|
82
|
-
puts "#{AppConfig.
|
|
87
|
+
puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
83
88
|
"#{AppConfig.packageInfo}\n\n" +
|
|
84
89
|
"Copyright (c) #{AppConfig.copyright.join(', ')}" +
|
|
85
90
|
" by #{AppConfig.authors.join(', ')}\n\n" +
|
|
@@ -92,17 +97,28 @@ end
|
|
|
92
97
|
def main
|
|
93
98
|
@maxCpuCores = 1
|
|
94
99
|
@forceReports = false
|
|
100
|
+
@reportServer = false
|
|
95
101
|
@outputDir = ''
|
|
96
102
|
|
|
97
|
-
|
|
98
|
-
|
|
103
|
+
# Install signal handler to exit gracefully on CTRL-C.
|
|
104
|
+
Kernel.trap('INT') do
|
|
105
|
+
puts "\nAborting on user request!"
|
|
106
|
+
exit 1
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
files = processArguments(ARGV)
|
|
110
|
+
tj = TaskJuggler.new(true)
|
|
99
111
|
tj.maxCpuCores = @maxCpuCores
|
|
100
|
-
exit 1 unless tj.parse(files)
|
|
112
|
+
exit 1 unless tj.parse(files, @reportServer)
|
|
101
113
|
if !tj.schedule
|
|
102
|
-
errors = true
|
|
103
114
|
exit 1 unless @forceReports
|
|
104
115
|
end
|
|
105
|
-
|
|
116
|
+
|
|
117
|
+
if @reportServer
|
|
118
|
+
tj.serveReports
|
|
119
|
+
else
|
|
120
|
+
exit 1 if !tj.generateReports(@outputDir) || tj.errors > 0
|
|
121
|
+
end
|
|
106
122
|
|
|
107
123
|
end
|
|
108
124
|
|
data/lib/tj3client.rb
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
#
|
|
4
|
+
# = tj3client.rb -- The TaskJuggler III Project Management Software
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 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 'optparse'
|
|
14
|
+
require 'drb'
|
|
15
|
+
require 'Tj3Config'
|
|
16
|
+
|
|
17
|
+
# Name of the application suite
|
|
18
|
+
AppConfig.appName = 'tj3client'
|
|
19
|
+
|
|
20
|
+
def processArguments(argv)
|
|
21
|
+
opts = OptionParser.new
|
|
22
|
+
|
|
23
|
+
opts.banner = "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
24
|
+
"#{AppConfig.packageInfo}\n\n" +
|
|
25
|
+
"Copyright (c) #{AppConfig.copyright.join(', ')}" +
|
|
26
|
+
" by #{AppConfig.authors.join(', ')}\n\n" +
|
|
27
|
+
"#{AppConfig.license}\n" +
|
|
28
|
+
"For more info about #{AppConfig.softwareName} see " +
|
|
29
|
+
"#{AppConfig.contact}\n\n" +
|
|
30
|
+
"Usage: #{AppConfig.appName} [options] file.tjp " +
|
|
31
|
+
"[ file1.tji ... ]"
|
|
32
|
+
opts.separator ""
|
|
33
|
+
opts.on('--silent', "Don't show program and progress information") do
|
|
34
|
+
@silent = true
|
|
35
|
+
end
|
|
36
|
+
opts.on('-g', '--generate-report <ID>', String,
|
|
37
|
+
'Generate reports despite scheduling errors') do |arg|
|
|
38
|
+
@reports << arg
|
|
39
|
+
end
|
|
40
|
+
opts.on_tail('-h', '--help', 'Show this message') do
|
|
41
|
+
puts opts.to_s
|
|
42
|
+
exit 0
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
opts.on_tail('--version', 'Show version info') do
|
|
46
|
+
puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
47
|
+
"#{AppConfig.packageInfo}"
|
|
48
|
+
exit 0
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Show some progress information by default
|
|
52
|
+
@silent = false
|
|
53
|
+
begin
|
|
54
|
+
files = opts.parse(argv)
|
|
55
|
+
rescue OptionParser::ParseError => msg
|
|
56
|
+
puts opts.to_s + "\n"
|
|
57
|
+
$stderr.puts msg
|
|
58
|
+
exit 0
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
unless @silent
|
|
62
|
+
puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
|
63
|
+
"#{AppConfig.packageInfo}\n\n" +
|
|
64
|
+
"Copyright (c) #{AppConfig.copyright.join(', ')}" +
|
|
65
|
+
" by #{AppConfig.authors.join(', ')}\n\n" +
|
|
66
|
+
"#{AppConfig.license}\n"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
files
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def main
|
|
73
|
+
@reports = []
|
|
74
|
+
|
|
75
|
+
# Install signal handler to exit gracefully on CTRL-C.
|
|
76
|
+
Kernel.trap('INT') do
|
|
77
|
+
puts "\nAborting on user request!"
|
|
78
|
+
exit 1
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
files = processArguments(ARGV)
|
|
82
|
+
|
|
83
|
+
# Connect to the RemoteServiceManager object and request a new service
|
|
84
|
+
# process.
|
|
85
|
+
DRb.start_service
|
|
86
|
+
serviceManager = DRbObject.new(nil, 'druby://localhost:8474')
|
|
87
|
+
|
|
88
|
+
uri = serviceManager.requestService
|
|
89
|
+
DRb.stop_service
|
|
90
|
+
|
|
91
|
+
DRb.start_service
|
|
92
|
+
server = DRbObject.new(nil, uri)
|
|
93
|
+
server.connect($stdout, $stderr)
|
|
94
|
+
|
|
95
|
+
files.each do |file|
|
|
96
|
+
fileContent = IO.read(file)
|
|
97
|
+
server.parse(fileContent)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
@reports.each do |id|
|
|
101
|
+
server.generateReport(id)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
server.disconnect
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
main()
|
|
108
|
+
exit 0
|
|
109
|
+
|
|
110
|
+
|