taskjuggler 0.0.8 → 0.0.9
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/CHANGELOG +1144 -2047
- data/README +1 -1
- data/Rakefile +6 -6
- data/data/css/tjmanual.css +20 -0
- data/data/css/tjreport.css +7 -6
- data/doc/AppConfig.html +136 -130
- data/doc/Arguments.html +46 -40
- data/doc/CHANGELOG.html +1162 -2057
- data/doc/COPYING.html +8 -2
- data/doc/Object.html +205 -199
- data/doc/README.html +9 -3
- data/doc/RuntimeConfig.html +75 -69
- data/doc/String.html +69 -63
- data/doc/TaskJuggler.html +350 -291
- data/doc/TaskJuggler/Account.html +26 -20
- data/doc/TaskJuggler/AccountAttribute.html +24 -18
- data/doc/TaskJuggler/AccountScenario.html +24 -18
- data/doc/TaskJuggler/Allocation.html +74 -68
- data/doc/TaskJuggler/AllocationAttribute.html +54 -48
- data/doc/TaskJuggler/AttributeBase.html +172 -93
- data/doc/TaskJuggler/AttributeDefinition.html +22 -16
- data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
- data/doc/TaskJuggler/BatchProcessor.html +263 -257
- data/doc/TaskJuggler/Booking.html +44 -38
- data/doc/TaskJuggler/BookingListAttribute.html +25 -21
- data/doc/TaskJuggler/BooleanAttribute.html +24 -18
- data/doc/TaskJuggler/CSVFile.html +193 -187
- data/doc/TaskJuggler/CellSettingPattern.html +13 -7
- data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
- data/doc/TaskJuggler/Charge.html +49 -43
- data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
- data/doc/TaskJuggler/ChargeSet.html +94 -88
- data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
- data/doc/TaskJuggler/CollisionDetector.html +142 -136
- data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
- data/doc/TaskJuggler/ColumnTable.html +50 -44
- data/doc/TaskJuggler/Daemon.html +71 -50
- data/doc/TaskJuggler/DataCache.html +110 -58
- data/doc/TaskJuggler/DataCacheEntry.html +22 -16
- data/doc/TaskJuggler/DateAttribute.html +24 -18
- data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
- data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
- data/doc/TaskJuggler/DurationAttribute.html +25 -19
- data/doc/TaskJuggler/FileList.html +25 -19
- data/doc/TaskJuggler/FileRecord.html +17 -11
- data/doc/TaskJuggler/FixnumAttribute.html +16 -10
- data/doc/TaskJuggler/FlagListAttribute.html +25 -21
- data/doc/TaskJuggler/FloatAttribute.html +20 -14
- data/doc/TaskJuggler/FormatListAttribute.html +17 -11
- data/doc/TaskJuggler/GanttChart.html +242 -236
- data/doc/TaskJuggler/GanttContainer.html +71 -67
- data/doc/TaskJuggler/GanttHeader.html +113 -107
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
- data/doc/TaskJuggler/GanttLine.html +217 -210
- data/doc/TaskJuggler/GanttLoadStack.html +89 -83
- data/doc/TaskJuggler/GanttMilestone.html +11 -6
- data/doc/TaskJuggler/GanttRouter.html +194 -186
- data/doc/TaskJuggler/GanttTaskBar.html +41 -34
- data/doc/TaskJuggler/HTMLDocument.html +52 -46
- data/doc/TaskJuggler/HTMLGraphics.html +58 -52
- data/doc/TaskJuggler/Interval.html +90 -84
- data/doc/TaskJuggler/IntervalList.html +777 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
- data/doc/TaskJuggler/JobInfo.html +36 -30
- data/doc/TaskJuggler/Journal.html +188 -177
- data/doc/TaskJuggler/JournalEntry.html +36 -30
- data/doc/TaskJuggler/JournalEntryList.html +88 -82
- data/doc/TaskJuggler/KeywordArray.html +12 -6
- data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
- data/doc/TaskJuggler/Limits.html +111 -105
- data/doc/TaskJuggler/Limits/Limit.html +71 -65
- data/doc/TaskJuggler/LimitsAttribute.html +21 -15
- data/doc/TaskJuggler/ListAttributeBase.html +16 -10
- data/doc/TaskJuggler/Log.html +111 -105
- data/doc/TaskJuggler/LogFile.html +54 -48
- data/doc/TaskJuggler/LogicalAttribute.html +35 -29
- data/doc/TaskJuggler/LogicalExpression.html +32 -26
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
- data/doc/TaskJuggler/LogicalFlag.html +24 -18
- data/doc/TaskJuggler/LogicalFunction.html +164 -158
- data/doc/TaskJuggler/LogicalOperation.html +138 -132
- data/doc/TaskJuggler/Macro.html +14 -8
- data/doc/TaskJuggler/MacroTable.html +42 -36
- data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
- data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
- data/doc/TaskJuggler/Message.html +56 -50
- data/doc/TaskJuggler/MessageHandler.html +73 -67
- data/doc/TaskJuggler/Navigator.html +92 -86
- data/doc/TaskJuggler/NavigatorElement.html +88 -82
- data/doc/TaskJuggler/NikuProject.html +15 -9
- data/doc/TaskJuggler/NikuReport.html +405 -370
- data/doc/TaskJuggler/NikuResource.html +13 -7
- data/doc/TaskJuggler/NodeListAttribute.html +13 -9
- data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
- data/doc/TaskJuggler/ProcessIntercom.html +116 -110
- data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
- data/doc/TaskJuggler/Project.html +1064 -895
- data/doc/TaskJuggler/ProjectBroker.html +439 -366
- data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
- data/doc/TaskJuggler/ProjectFileParser.html +329 -319
- data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
- data/doc/TaskJuggler/ProjectRecord.html +66 -60
- data/doc/TaskJuggler/ProjectServer.html +287 -280
- data/doc/TaskJuggler/ProjectServerIface.html +43 -37
- data/doc/TaskJuggler/PropertyAttribute.html +16 -10
- data/doc/TaskJuggler/PropertyList.html +205 -199
- data/doc/TaskJuggler/PropertySet.html +264 -296
- data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
- data/doc/TaskJuggler/Query.html +309 -524
- data/doc/TaskJuggler/RTFHandlers.html +17 -11
- data/doc/TaskJuggler/RTFNavigator.html +33 -27
- data/doc/TaskJuggler/RTFQuery.html +135 -129
- data/doc/TaskJuggler/RTFReport.html +63 -57
- data/doc/TaskJuggler/RTFReportLink.html +55 -49
- data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
- data/doc/TaskJuggler/RealFormat.html +64 -58
- data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
- data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
- data/doc/TaskJuggler/Report.html +294 -249
- data/doc/TaskJuggler/ReportBase.html +229 -223
- data/doc/TaskJuggler/ReportContext.html +52 -46
- data/doc/TaskJuggler/ReportServer.html +143 -137
- data/doc/TaskJuggler/ReportServerIface.html +51 -43
- data/doc/TaskJuggler/ReportServerRecord.html +36 -30
- data/doc/TaskJuggler/ReportServlet.html +167 -140
- data/doc/TaskJuggler/ReportTable.html +137 -131
- data/doc/TaskJuggler/ReportTableCell.html +332 -292
- data/doc/TaskJuggler/ReportTableColumn.html +46 -40
- data/doc/TaskJuggler/ReportTableLegend.html +43 -38
- data/doc/TaskJuggler/ReportTableLine.html +66 -60
- data/doc/TaskJuggler/Resource.html +166 -160
- data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
- data/doc/TaskJuggler/ResourceListRE.html +47 -41
- data/doc/TaskJuggler/ResourceScenario.html +671 -644
- data/doc/TaskJuggler/RichText.html +51 -45
- data/doc/TaskJuggler/RichTextAttribute.html +28 -22
- data/doc/TaskJuggler/RichTextDocument.html +96 -90
- data/doc/TaskJuggler/RichTextElement.html +503 -497
- data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
- data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
- data/doc/TaskJuggler/RichTextImage.html +14 -8
- data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
- data/doc/TaskJuggler/RichTextParser.html +59 -53
- data/doc/TaskJuggler/RichTextScanner.html +184 -178
- data/doc/TaskJuggler/RichTextSnip.html +69 -63
- data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
- data/doc/TaskJuggler/Scenario.html +13 -7
- data/doc/TaskJuggler/ScenarioData.html +40 -34
- data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
- data/doc/TaskJuggler/Scoreboard.html +129 -107
- data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
- data/doc/TaskJuggler/SheetReceiver.html +333 -327
- data/doc/TaskJuggler/SheetSender.html +227 -221
- data/doc/TaskJuggler/Shift.html +26 -20
- data/doc/TaskJuggler/ShiftAssignment.html +45 -39
- data/doc/TaskJuggler/ShiftAssignments.html +178 -172
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
- data/doc/TaskJuggler/ShiftScenario.html +29 -23
- data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
- data/doc/TaskJuggler/SortListAttribute.html +17 -13
- data/doc/TaskJuggler/SourceFileInfo.html +19 -13
- data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
- data/doc/TaskJuggler/StatusSheetReport.html +166 -159
- data/doc/TaskJuggler/StatusSheetSender.html +80 -74
- data/doc/TaskJuggler/StringAttribute.html +20 -14
- data/doc/TaskJuggler/SymbolAttribute.html +16 -10
- data/doc/TaskJuggler/SyntaxReference.html +231 -225
- data/doc/TaskJuggler/TOCEntry.html +46 -40
- data/doc/TaskJuggler/TSResourceRecord.html +15 -9
- data/doc/TaskJuggler/TSTaskRecord.html +16 -10
- data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
- data/doc/TaskJuggler/TableOfContents.html +28 -22
- data/doc/TaskJuggler/TableReport.html +906 -866
- data/doc/TaskJuggler/Task.html +99 -93
- data/doc/TaskJuggler/TaskDependency.html +24 -18
- data/doc/TaskJuggler/TaskListAttribute.html +29 -25
- data/doc/TaskJuggler/TaskListRE.html +46 -39
- data/doc/TaskJuggler/TaskScenario.html +2218 -1965
- data/doc/TaskJuggler/TextFormatter.html +154 -148
- data/doc/TaskJuggler/TextParser.html +362 -348
- data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
- data/doc/TaskJuggler/TextParser/Rule.html +147 -141
- data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
- data/doc/TaskJuggler/TextParser/State.html +88 -82
- data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
- data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
- data/doc/TaskJuggler/TextReport.html +80 -74
- data/doc/TaskJuggler/TextScanner.html +284 -272
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
- data/doc/TaskJuggler/TimeSheet.html +123 -117
- data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
- data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
- data/doc/TaskJuggler/TimeSheetReport.html +206 -199
- data/doc/TaskJuggler/TimeSheetSender.html +27 -21
- data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
- data/doc/TaskJuggler/TimeSheets.html +20 -14
- data/doc/TaskJuggler/Tj3AppBase.html +100 -94
- data/doc/TaskJuggler/Tj3Client.html +407 -483
- data/doc/TaskJuggler/Tj3Daemon.html +116 -107
- data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
- data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
- data/doc/TaskJuggler/Tj3SsSender.html +64 -58
- data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
- data/doc/TaskJuggler/Tj3TsSender.html +51 -45
- data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
- data/doc/TaskJuggler/TjException.html +13 -7
- data/doc/TaskJuggler/TjTime.html +444 -438
- data/doc/TaskJuggler/TjpExample.html +84 -78
- data/doc/TaskJuggler/TjpExportRE.html +356 -349
- data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
- data/doc/TaskJuggler/URLParameter.html +16 -10
- data/doc/TaskJuggler/UserManual.html +185 -179
- data/doc/TaskJuggler/VimSyntax.html +144 -138
- data/doc/TaskJuggler/WebServer.html +46 -39
- data/doc/TaskJuggler/WelcomePage.html +769 -0
- data/doc/TaskJuggler/WorkingHours.html +185 -179
- data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
- data/doc/TaskJuggler/XMLBlob.html +21 -15
- data/doc/TaskJuggler/XMLComment.html +17 -11
- data/doc/TaskJuggler/XMLDocument.html +33 -27
- data/doc/TaskJuggler/XMLElement.html +97 -91
- data/doc/TaskJuggler/XMLNamedText.html +13 -7
- data/doc/TaskJuggler/XMLText.html +32 -26
- data/doc/index.html +601 -563
- data/doc/lib/AccountScenario_rb.html +5 -3
- data/doc/lib/Account_rb.html +5 -3
- data/doc/lib/Allocation_rb.html +5 -3
- data/doc/lib/AppConfig_rb.html +5 -3
- data/doc/lib/AttributeBase_rb.html +5 -3
- data/doc/lib/AttributeDefinition_rb.html +5 -3
- data/doc/lib/Attributes_rb.html +5 -3
- data/doc/lib/BatchProcessor_rb.html +5 -3
- data/doc/lib/Booking_rb.html +5 -3
- data/doc/lib/ChargeSet_rb.html +5 -3
- data/doc/lib/Charge_rb.html +5 -3
- data/doc/lib/DataCache_rb.html +5 -3
- data/doc/lib/FileList_rb.html +5 -3
- data/doc/lib/HTMLDocument_rb.html +5 -3
- data/doc/lib/IntervalList_rb.html +69 -0
- data/doc/lib/Interval_rb.html +5 -3
- data/doc/lib/Journal_rb.html +5 -3
- data/doc/lib/KeywordArray_rb.html +5 -3
- data/doc/lib/KeywordDocumentation_rb.html +5 -3
- data/doc/lib/Limits_rb.html +5 -3
- data/doc/lib/LogFile_rb.html +5 -3
- data/doc/lib/Log_rb.html +5 -3
- data/doc/lib/LogicalExpression_rb.html +5 -3
- data/doc/lib/LogicalFunction_rb.html +5 -3
- data/doc/lib/LogicalOperation_rb.html +5 -3
- data/doc/lib/MacroTable_rb.html +5 -3
- data/doc/lib/MessageHandler_rb.html +5 -3
- data/doc/lib/ProjectFileParser_rb.html +5 -3
- data/doc/lib/ProjectFileScanner_rb.html +5 -3
- data/doc/lib/Project_rb.html +5 -3
- data/doc/lib/PropertyList_rb.html +5 -3
- data/doc/lib/PropertySet_rb.html +5 -3
- data/doc/lib/PropertyTreeNode_rb.html +5 -3
- data/doc/lib/Query_rb.html +5 -3
- data/doc/lib/RTFHandlers_rb.html +5 -3
- data/doc/lib/RTFNavigator_rb.html +5 -3
- data/doc/lib/RTFQuery_rb.html +5 -3
- data/doc/lib/RTFReportLink_rb.html +5 -3
- data/doc/lib/RTFReport_rb.html +5 -3
- data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
- data/doc/lib/RealFormat_rb.html +5 -3
- data/doc/lib/ResourceScenario_rb.html +5 -3
- data/doc/lib/Resource_rb.html +5 -3
- data/doc/lib/RichTextDocument_rb.html +5 -3
- data/doc/lib/RichTextElement_rb.html +5 -3
- data/doc/lib/RichTextFunctionExample_rb.html +5 -3
- data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
- data/doc/lib/RichTextParser_rb.html +5 -3
- data/doc/lib/RichTextScanner_rb.html +5 -3
- data/doc/lib/RichTextSnip_rb.html +5 -3
- data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
- data/doc/lib/RichText_rb.html +5 -3
- data/doc/lib/RuntimeConfig_rb.html +5 -3
- data/doc/lib/ScenarioData_rb.html +5 -3
- data/doc/lib/Scenario_rb.html +5 -3
- data/doc/lib/Scoreboard_rb.html +7 -3
- data/doc/lib/SheetHandlerBase_rb.html +5 -3
- data/doc/lib/SheetReceiver_rb.html +5 -3
- data/doc/lib/SheetSender_rb.html +5 -3
- data/doc/lib/ShiftAssignments_rb.html +5 -3
- data/doc/lib/ShiftScenario_rb.html +5 -3
- data/doc/lib/Shift_rb.html +5 -3
- data/doc/lib/SimpleQueryExpander_rb.html +5 -3
- data/doc/lib/SourceFileInfo_rb.html +5 -3
- data/doc/lib/StatusSheetReceiver_rb.html +5 -3
- data/doc/lib/StatusSheetSender_rb.html +5 -3
- data/doc/lib/SyntaxReference_rb.html +5 -3
- data/doc/lib/TOCEntry_rb.html +5 -3
- data/doc/lib/TableColumnDefinition_rb.html +5 -3
- data/doc/lib/TableOfContents_rb.html +5 -3
- data/doc/lib/TaskDependency_rb.html +5 -3
- data/doc/lib/TaskJuggler_rb.html +5 -3
- data/doc/lib/TaskScenario_rb.html +5 -3
- data/doc/lib/Task_rb.html +5 -3
- data/doc/lib/TextFormatter_rb.html +6 -4
- data/doc/lib/TextParser/Pattern_rb.html +5 -3
- data/doc/lib/TextParser/Rule_rb.html +5 -3
- data/doc/lib/TextParser/StackElement_rb.html +5 -3
- data/doc/lib/TextParser/State_rb.html +6 -4
- data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
- data/doc/lib/TextParser_rb.html +5 -3
- data/doc/lib/TextScanner_rb.html +5 -3
- data/doc/lib/TimeSheetReceiver_rb.html +5 -3
- data/doc/lib/TimeSheetSender_rb.html +5 -3
- data/doc/lib/TimeSheetSummary_rb.html +6 -4
- data/doc/lib/TimeSheets_rb.html +5 -3
- data/doc/lib/Tj3AppBase_rb.html +5 -3
- data/doc/lib/Tj3Config_rb.html +5 -3
- data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
- data/doc/lib/TjException_rb.html +5 -3
- data/doc/lib/TjTime_rb.html +5 -3
- data/doc/lib/TjpExample_rb.html +5 -3
- data/doc/lib/TjpSyntaxRules_rb.html +5 -3
- data/doc/lib/URLParameter_rb.html +5 -3
- data/doc/lib/UTF8String_rb.html +5 -3
- data/doc/lib/UserManual_rb.html +5 -3
- data/doc/lib/VimSyntax_rb.html +6 -4
- data/doc/lib/WorkingHours_rb.html +5 -3
- data/doc/lib/XMLDocument_rb.html +5 -3
- data/doc/lib/XMLElement_rb.html +5 -3
- data/doc/lib/daemon/Daemon_rb.html +5 -3
- data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
- data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
- data/doc/lib/daemon/ProjectServer_rb.html +5 -3
- data/doc/lib/daemon/ReportServer_rb.html +5 -3
- data/doc/lib/daemon/ReportServlet_rb.html +69 -0
- data/doc/lib/daemon/WebServer_rb.html +9 -3
- data/doc/lib/daemon/WelcomePage_rb.html +71 -0
- data/doc/lib/deep_copy_rb.html +5 -3
- data/doc/lib/reports/CSVFile_rb.html +5 -3
- data/doc/lib/reports/CollisionDetector_rb.html +5 -3
- data/doc/lib/reports/ColumnTable_rb.html +5 -3
- data/doc/lib/reports/GanttChart_rb.html +5 -3
- data/doc/lib/reports/GanttContainer_rb.html +5 -3
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
- data/doc/lib/reports/GanttHeader_rb.html +5 -3
- data/doc/lib/reports/GanttLine_rb.html +5 -3
- data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
- data/doc/lib/reports/GanttMilestone_rb.html +5 -3
- data/doc/lib/reports/GanttRouter_rb.html +5 -3
- data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
- data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
- data/doc/lib/reports/Navigator_rb.html +5 -3
- data/doc/lib/reports/NikuReport_rb.html +5 -3
- data/doc/lib/reports/ReportBase_rb.html +5 -3
- data/doc/lib/reports/ReportContext_rb.html +5 -3
- data/doc/lib/reports/ReportTableCell_rb.html +5 -3
- data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
- data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
- data/doc/lib/reports/ReportTableLine_rb.html +5 -3
- data/doc/lib/reports/ReportTable_rb.html +5 -3
- data/doc/lib/reports/Report_rb.html +5 -3
- data/doc/lib/reports/ResourceListRE_rb.html +5 -3
- data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
- data/doc/lib/reports/TableReport_rb.html +5 -3
- data/doc/lib/reports/TaskListRE_rb.html +5 -3
- data/doc/lib/reports/TextReport_rb.html +5 -3
- data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
- data/doc/lib/reports/TjpExportRE_rb.html +5 -3
- data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
- data/doc/lib/tj3client_rb.html +5 -3
- data/doc/lib/tj3d_rb.html +6 -4
- data/doc/lib/tj3man_rb.html +5 -3
- data/doc/lib/tj3ss_receiver_rb.html +5 -3
- data/doc/lib/tj3ss_sender_rb.html +5 -3
- data/doc/lib/tj3ts_receiver_rb.html +5 -3
- data/doc/lib/tj3ts_sender_rb.html +5 -3
- data/doc/lib/tj3ts_summary_rb.html +5 -3
- data/examples/tutorial.tjp +13 -5
- data/gem_spec.rb +3 -0
- data/lib/Account.rb +2 -1
- data/lib/AccountScenario.rb +2 -1
- data/lib/Allocation.rb +2 -1
- data/lib/AppConfig.rb +2 -1
- data/lib/AttributeBase.rb +19 -5
- data/lib/AttributeDefinition.rb +2 -1
- data/lib/Attributes.rb +49 -38
- data/lib/BatchProcessor.rb +2 -1
- data/lib/Booking.rb +2 -1
- data/lib/Charge.rb +2 -1
- data/lib/ChargeSet.rb +2 -1
- data/lib/DataCache.rb +15 -1
- data/lib/FileList.rb +2 -1
- data/lib/HTMLDocument.rb +2 -1
- data/lib/Interval.rb +2 -1
- data/lib/IntervalList.rb +100 -0
- data/lib/Journal.rb +8 -2
- data/lib/KeywordArray.rb +2 -1
- data/lib/KeywordDocumentation.rb +10 -6
- data/lib/Limits.rb +2 -1
- data/lib/Log.rb +3 -2
- data/lib/LogFile.rb +2 -1
- data/lib/LogicalExpression.rb +2 -1
- data/lib/LogicalFunction.rb +2 -1
- data/lib/LogicalOperation.rb +2 -1
- data/lib/MacroTable.rb +2 -1
- data/lib/MessageHandler.rb +2 -1
- data/lib/Project.rb +92 -25
- data/lib/ProjectFileParser.rb +7 -2
- data/lib/ProjectFileScanner.rb +2 -1
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +2 -6
- data/lib/PropertyTreeNode.rb +22 -44
- data/lib/Query.rb +32 -13
- data/lib/RTFHandlers.rb +2 -1
- data/lib/RTFNavigator.rb +2 -1
- data/lib/RTFQuery.rb +3 -2
- data/lib/RTFReport.rb +2 -1
- data/lib/RTFReportLink.rb +2 -1
- data/lib/RTFWithQuerySupport.rb +2 -1
- data/lib/RealFormat.rb +2 -1
- data/lib/Resource.rb +2 -1
- data/lib/ResourceScenario.rb +35 -14
- data/lib/RichText.rb +2 -1
- data/lib/RichTextDocument.rb +2 -1
- data/lib/RichTextElement.rb +2 -1
- data/lib/RichTextFunctionExample.rb +2 -1
- data/lib/RichTextFunctionHandler.rb +2 -1
- data/lib/RichTextParser.rb +2 -1
- data/lib/RichTextScanner.rb +2 -1
- data/lib/RichTextSnip.rb +2 -1
- data/lib/RichTextSyntaxRules.rb +2 -1
- data/lib/RuntimeConfig.rb +2 -1
- data/lib/Scenario.rb +2 -1
- data/lib/ScenarioData.rb +2 -1
- data/lib/Scoreboard.rb +27 -8
- data/lib/SheetHandlerBase.rb +2 -1
- data/lib/SheetReceiver.rb +2 -1
- data/lib/SheetSender.rb +2 -1
- data/lib/Shift.rb +2 -1
- data/lib/ShiftAssignments.rb +2 -1
- data/lib/ShiftScenario.rb +2 -1
- data/lib/SimpleQueryExpander.rb +2 -1
- data/lib/SourceFileInfo.rb +2 -1
- data/lib/StatusSheetReceiver.rb +2 -1
- data/lib/StatusSheetSender.rb +2 -1
- data/lib/SyntaxReference.rb +2 -1
- data/lib/TOCEntry.rb +2 -1
- data/lib/TableColumnDefinition.rb +9 -2
- data/lib/TableOfContents.rb +2 -1
- data/lib/Task.rb +2 -1
- data/lib/TaskDependency.rb +2 -1
- data/lib/TaskJuggler.rb +8 -6
- data/lib/TaskScenario.rb +337 -153
- data/lib/TextFormatter.rb +3 -2
- data/lib/TextParser.rb +7 -2
- data/lib/TextParser/Pattern.rb +2 -1
- data/lib/TextParser/Rule.rb +2 -1
- data/lib/TextParser/StackElement.rb +2 -1
- data/lib/TextParser/State.rb +3 -2
- data/lib/TextParser/TokenDoc.rb +2 -1
- data/lib/TextScanner.rb +12 -5
- data/lib/TimeSheetReceiver.rb +2 -1
- data/lib/TimeSheetSender.rb +2 -1
- data/lib/TimeSheetSummary.rb +3 -2
- data/lib/TimeSheets.rb +2 -1
- data/lib/Tj3AppBase.rb +6 -5
- data/lib/Tj3Config.rb +5 -4
- data/lib/Tj3SheetAppBase.rb +2 -1
- data/lib/TjException.rb +2 -1
- data/lib/TjTime.rb +2 -1
- data/lib/TjpExample.rb +2 -1
- data/lib/TjpSyntaxRules.rb +264 -65
- data/lib/URLParameter.rb +2 -1
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +2 -1
- data/lib/VimSyntax.rb +3 -2
- data/lib/WorkingHours.rb +2 -1
- data/lib/XMLDocument.rb +2 -1
- data/lib/XMLElement.rb +2 -1
- data/lib/daemon/Daemon.rb +3 -1
- data/lib/daemon/ProcessIntercom.rb +3 -1
- data/lib/daemon/ProjectBroker.rb +84 -32
- data/lib/daemon/ProjectServer.rb +5 -3
- data/lib/daemon/ReportServer.rb +8 -5
- data/lib/daemon/ReportServlet.rb +166 -0
- data/lib/daemon/WebServer.rb +6 -150
- data/lib/daemon/WelcomePage.rb +80 -0
- data/lib/deep_copy.rb +2 -1
- data/lib/reports/CSVFile.rb +2 -1
- data/lib/reports/CollisionDetector.rb +2 -1
- data/lib/reports/ColumnTable.rb +2 -1
- data/lib/reports/GanttChart.rb +2 -1
- data/lib/reports/GanttContainer.rb +3 -4
- data/lib/reports/GanttHeader.rb +2 -1
- data/lib/reports/GanttHeaderScaleItem.rb +2 -1
- data/lib/reports/GanttLine.rb +12 -10
- data/lib/reports/GanttLoadStack.rb +2 -1
- data/lib/reports/GanttMilestone.rb +3 -3
- data/lib/reports/GanttRouter.rb +4 -1
- data/lib/reports/GanttTaskBar.rb +9 -7
- data/lib/reports/HTMLGraphics.rb +2 -1
- data/lib/reports/Navigator.rb +2 -1
- data/lib/reports/NikuReport.rb +79 -49
- data/lib/reports/Report.rb +42 -10
- data/lib/reports/ReportBase.rb +2 -1
- data/lib/reports/ReportContext.rb +2 -1
- data/lib/reports/ReportTable.rb +2 -1
- data/lib/reports/ReportTableCell.rb +63 -28
- data/lib/reports/ReportTableColumn.rb +2 -1
- data/lib/reports/ReportTableLegend.rb +5 -5
- data/lib/reports/ReportTableLine.rb +2 -1
- data/lib/reports/ResourceListRE.rb +2 -1
- data/lib/reports/StatusSheetReport.rb +4 -2
- data/lib/reports/TableReport.rb +42 -38
- data/lib/reports/TaskListRE.rb +4 -2
- data/lib/reports/TextReport.rb +2 -1
- data/lib/reports/TimeSheetReport.rb +4 -2
- data/lib/reports/TjpExportRE.rb +4 -2
- data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
- data/lib/tj3client.rb +19 -36
- data/lib/tj3d.rb +6 -2
- data/lib/tj3man.rb +4 -3
- data/lib/tj3ss_receiver.rb +2 -1
- data/lib/tj3ss_sender.rb +2 -1
- data/lib/tj3ts_receiver.rb +2 -1
- data/lib/tj3ts_sender.rb +2 -1
- data/lib/tj3ts_summary.rb +2 -1
- data/manual/Day_To_Day_Juggling +36 -0
- data/manual/How_To_Contribute +9 -4
- data/manual/Installation +10 -3
- data/manual/TaskJuggler_Internals +0 -2
- data/manual/Tutorial +25 -3
- data/prj_cfg.rb +4 -2
- data/spec/IntervalList_spec.rb +138 -0
- data/spec/ProjectBroker_spec.rb +133 -0
- data/tasks/changelog.rake +41 -24
- data/tasks/csts.rake +1 -0
- data/tasks/gem.rake +1 -0
- data/tasks/rcov.rake +1 -1
- data/tasks/spec.rake +7 -0
- data/tasks/test.rake +1 -0
- data/test/MessageChecker.rb +2 -1
- data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
- data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
- data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
- data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
- data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
- data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
- data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
- data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
- data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
- data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
- data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
- data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
- data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
- data/test/TestSuite/StatusSheets/sender.log +256 -0
- data/test/TestSuite/StatusSheets/statussheets.log +9 -0
- data/test/TestSuite/StatusSheets/tj3d.log +395 -0
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
- data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
- data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
- data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
- data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
- data/test/all.rb +2 -4
- data/test/test_BatchProcessor.rb +2 -1
- data/test/test_CSV-Reports.rb +34 -23
- data/test/test_CSVFile.rb +2 -1
- data/test/test_CollisionDetector.rb +3 -2
- data/test/test_Journal.rb +2 -1
- data/test/test_Limits.rb +2 -1
- data/test/test_LogicalExpression.rb +2 -1
- data/test/test_MacroTable.rb +2 -1
- data/test/test_Project.rb +3 -2
- data/test/test_ProjectFileScanner.rb +2 -1
- data/test/test_PropertySet.rb +2 -1
- data/test/test_Query.rb +2 -1
- data/test/test_RealFormat.rb +2 -1
- data/test/test_ReportGenerator.rb +2 -1
- data/test/test_RichText.rb +2 -1
- data/test/test_Scheduler.rb +2 -1
- data/test/test_ShiftAssignments.rb +2 -1
- data/test/test_SimpleQueryExpander.rb +2 -1
- data/test/test_Syntax.rb +2 -1
- data/test/test_TextFormatter.rb +3 -2
- data/test/test_TjTime.rb +2 -1
- data/test/test_TjpExample.rb +2 -1
- data/test/test_URLParameter.rb +2 -1
- data/test/test_UTF8String.rb +2 -1
- data/test/test_WorkingHours.rb +2 -1
- data/test/test_deep_copy.rb +2 -1
- metadata +74 -20
- data/doc/StringIO.html +0 -595
- data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
- data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
- data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
data/lib/URLParameter.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = URLParameter.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/UTF8String.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = UTF8String.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/UserManual.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = UserManual.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/VimSyntax.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = VimSyntax.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/WorkingHours.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = WorkingHours.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/XMLDocument.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = XMLDocument.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/XMLElement.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = XMLElement.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/daemon/Daemon.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Daemon.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -20,6 +21,7 @@ class TaskJuggler
|
|
|
20
21
|
class Daemon
|
|
21
22
|
|
|
22
23
|
attr_accessor :daemonize
|
|
24
|
+
attr_reader :log
|
|
23
25
|
|
|
24
26
|
def initialize
|
|
25
27
|
# You can set this flag to false to prevent the program from
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ProcessIntercom.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -11,6 +12,7 @@
|
|
|
11
12
|
#
|
|
12
13
|
|
|
13
14
|
require 'Log'
|
|
15
|
+
require 'LogFile'
|
|
14
16
|
|
|
15
17
|
class TaskJuggler
|
|
16
18
|
|
data/lib/daemon/ProjectBroker.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ProjectBroker.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -36,9 +37,8 @@ class TaskJuggler
|
|
|
36
37
|
# daemon.
|
|
37
38
|
class ProjectBroker < Daemon
|
|
38
39
|
|
|
39
|
-
attr_accessor :port, :uriFile, :enableWebServer, :webServerPort,
|
|
40
|
-
:projectFiles
|
|
41
|
-
attr_reader :authKey
|
|
40
|
+
attr_accessor :authKey, :port, :uriFile, :enableWebServer, :webServerPort,
|
|
41
|
+
:projectFiles, :logStdIO
|
|
42
42
|
|
|
43
43
|
def initialize
|
|
44
44
|
super
|
|
@@ -62,7 +62,11 @@ class TaskJuggler
|
|
|
62
62
|
# requests that the housekeeping thread will then perform.
|
|
63
63
|
@projectsToLoad = Queue.new
|
|
64
64
|
|
|
65
|
-
#
|
|
65
|
+
# Set this flag to true to have standard IO logged into files. There
|
|
66
|
+
# will be seperate set of files for each process.
|
|
67
|
+
@logStdIO = !@daemonize
|
|
68
|
+
|
|
69
|
+
# Reference to WEBrick object.
|
|
66
70
|
@webServer = nil
|
|
67
71
|
|
|
68
72
|
# Port used by the web server
|
|
@@ -94,13 +98,15 @@ EOT
|
|
|
94
98
|
super()
|
|
95
99
|
@log.debug("Starting project broker")
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
if @enableWebServer
|
|
102
|
+
begin
|
|
103
|
+
# The web server must be started before we turn SAFE mode on.
|
|
104
|
+
@webServer = WebServer.new(self, @webServerPort)
|
|
105
|
+
@log.info("TaskJuggler web server is listening on port " +
|
|
106
|
+
"#{@webServerPort}")
|
|
107
|
+
rescue
|
|
108
|
+
@log.fatal("Cannot start web server: #{$!}")
|
|
109
|
+
end
|
|
104
110
|
end
|
|
105
111
|
|
|
106
112
|
# Setup a DRb server to handle the incomming requests from the clients.
|
|
@@ -115,7 +121,7 @@ EOT
|
|
|
115
121
|
@log.fatal("Cannot listen on port #{@port}: #{$!}")
|
|
116
122
|
end
|
|
117
123
|
|
|
118
|
-
if @port == 0
|
|
124
|
+
if @port == 0 && @uriFile
|
|
119
125
|
# If the port is set to 0 (any port) we save the ProjectBroker URI in
|
|
120
126
|
# the file .tj3d.uri. tj3client will look for it.
|
|
121
127
|
begin
|
|
@@ -139,7 +145,7 @@ EOT
|
|
|
139
145
|
DRb.thread.join
|
|
140
146
|
|
|
141
147
|
# If we have created a URI file, we need to delete it again.
|
|
142
|
-
if @port == 0
|
|
148
|
+
if @port == 0 && @uriFile
|
|
143
149
|
begin
|
|
144
150
|
File.delete(@uriFile)
|
|
145
151
|
rescue
|
|
@@ -205,7 +211,7 @@ EOT
|
|
|
205
211
|
|
|
206
212
|
# Adding a new project or replacing an existing one. The command waits
|
|
207
213
|
# until the project has been loaded or the load has failed.
|
|
208
|
-
def addProject
|
|
214
|
+
def addProject(cwd, args, stdOut, stdErr, stdIn, silent)
|
|
209
215
|
# We need some tag to identify the ProjectRecord that this project was
|
|
210
216
|
# associated to. Just use a large enough random number.
|
|
211
217
|
tag = rand(9999999999999)
|
|
@@ -213,7 +219,7 @@ EOT
|
|
|
213
219
|
@log.debug("Pushing #{tag} to load Queue")
|
|
214
220
|
@projectsToLoad.push(tag)
|
|
215
221
|
|
|
216
|
-
# Now we have to wait until the
|
|
222
|
+
# Now we have to wait until the project shows up in the @projects
|
|
217
223
|
# list. We use our tag to identify the right entry.
|
|
218
224
|
pr = nil
|
|
219
225
|
while pr.nil?
|
|
@@ -234,20 +240,60 @@ EOT
|
|
|
234
240
|
"#{pr.uri}")
|
|
235
241
|
# Return the URI and the authentication key of the new ProjectServer.
|
|
236
242
|
[ pr.uri, pr.authKey ]
|
|
243
|
+
|
|
244
|
+
# Open a DRb connection to the ProjectServer process
|
|
245
|
+
begin
|
|
246
|
+
projectServer = DRbObject.new(nil, pr.uri)
|
|
247
|
+
rescue
|
|
248
|
+
stdErr.puts "Can't get ProjectServer object: #{$!}"
|
|
249
|
+
return false
|
|
250
|
+
end
|
|
251
|
+
begin
|
|
252
|
+
# Hook up IO from requestor to the ProjectServer process.
|
|
253
|
+
projectServer.connect(pr.authKey, stdOut, stdErr, stdIn, silent)
|
|
254
|
+
rescue
|
|
255
|
+
stdErr.puts "Can't connect IO: #{$!}"
|
|
256
|
+
return false
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Ask the ProjectServer to load the files in _args_ into the
|
|
260
|
+
# ProjectServer.
|
|
261
|
+
begin
|
|
262
|
+
res = projectServer.loadProject(pr.authKey, [ cwd, *args ])
|
|
263
|
+
rescue
|
|
264
|
+
stdErr.puts "Loading of project failed: #{$!}"
|
|
265
|
+
return false
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Disconnect the IO from the ProjectServer and close the DRb connection.
|
|
269
|
+
begin
|
|
270
|
+
projectServer.disconnect(pr.authKey)
|
|
271
|
+
rescue
|
|
272
|
+
stdErr.puts "Can't disconnect IO: #{$!}"
|
|
273
|
+
return false
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
res
|
|
237
277
|
end
|
|
238
278
|
|
|
239
279
|
def removeProject(indexOrId)
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
@projects
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
280
|
+
@projects.synchronize do
|
|
281
|
+
# Find all projects with the IDs in indexOrId and mark them as :obsolete.
|
|
282
|
+
if /^[0-9]$/.match(indexOrId)
|
|
283
|
+
index = indexOrId.to_i - 1
|
|
284
|
+
if index >= 0 && index < @projects.length
|
|
285
|
+
# If we have marked the project as obsolete, we return false to
|
|
286
|
+
# indicate the double remove.
|
|
287
|
+
return false if p.state == :obsolete
|
|
288
|
+
@projects[index].state = :obsolete
|
|
289
|
+
return true
|
|
290
|
+
end
|
|
291
|
+
else
|
|
249
292
|
@projects.each do |p|
|
|
250
293
|
if indexOrId == p.id
|
|
294
|
+
# If we have marked the project as obsolete, we return false to
|
|
295
|
+
# indicate the double remove.
|
|
296
|
+
return false if p.state == :obsolete
|
|
251
297
|
p.state = :obsolete
|
|
252
298
|
return true
|
|
253
299
|
end
|
|
@@ -305,7 +351,9 @@ EOT
|
|
|
305
351
|
|
|
306
352
|
# This is a callback from the ProjectServer process. It's used to update
|
|
307
353
|
# the current state of the ProjectServer in the ProjectRecord list.
|
|
308
|
-
|
|
354
|
+
# _projectKey_ is the authentication key for that project. It is used to
|
|
355
|
+
# idenfity the entry in the ProjectRecord list to be updated.
|
|
356
|
+
def updateState(projectKey, filesOrId, state, modified)
|
|
309
357
|
result = false
|
|
310
358
|
if filesOrId.is_a?(Array)
|
|
311
359
|
files = filesOrId
|
|
@@ -324,8 +372,8 @@ EOT
|
|
|
324
372
|
next if project.state == :obsolete
|
|
325
373
|
|
|
326
374
|
@log.debug("Updating state for #{id} to #{state}")
|
|
327
|
-
# Only update the record that has the matching
|
|
328
|
-
if project.authKey ==
|
|
375
|
+
# Only update the record that has the matching key
|
|
376
|
+
if project.authKey == projectKey
|
|
329
377
|
project.id = id if id
|
|
330
378
|
# An Array of [ workingDir, tjpFile, ... other tji files ]
|
|
331
379
|
project.files = files if files
|
|
@@ -434,7 +482,7 @@ EOT
|
|
|
434
482
|
@log.debug("Loading project for tag #{tag}")
|
|
435
483
|
end
|
|
436
484
|
pr = ProjectRecord.new(tag)
|
|
437
|
-
ps = ProjectServer.new(project,
|
|
485
|
+
ps = ProjectServer.new(@authKey, project, @logStdIO)
|
|
438
486
|
# The ProjectServer can be reached via this DRb URI
|
|
439
487
|
pr.uri = ps.uri
|
|
440
488
|
# Method calls must be authenticated with this key
|
|
@@ -491,7 +539,9 @@ EOT
|
|
|
491
539
|
when :stop
|
|
492
540
|
@broker.stop
|
|
493
541
|
when :addProject
|
|
494
|
-
|
|
542
|
+
# To pass the DRbObject as separate arguments we need to convert it
|
|
543
|
+
# into a real Array again.
|
|
544
|
+
@broker.addProject(*Array.new(args))
|
|
495
545
|
when :removeProject
|
|
496
546
|
@broker.removeProject(args)
|
|
497
547
|
when :getProject
|
|
@@ -504,8 +554,10 @@ EOT
|
|
|
504
554
|
end
|
|
505
555
|
end
|
|
506
556
|
|
|
507
|
-
def updateState(authKey, id, status, modified)
|
|
508
|
-
|
|
557
|
+
def updateState(authKey, projectKey, id, status, modified)
|
|
558
|
+
return false unless @broker.checkKey(authKey, 'updateState')
|
|
559
|
+
|
|
560
|
+
trap { @broker.updateState(projectKey, id, status, modified) }
|
|
509
561
|
end
|
|
510
562
|
|
|
511
563
|
end
|
data/lib/daemon/ProjectServer.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ProjectServer.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -37,7 +38,8 @@ class TaskJuggler
|
|
|
37
38
|
|
|
38
39
|
attr_reader :authKey, :uri
|
|
39
40
|
|
|
40
|
-
def initialize(projectData = nil, logConsole = false)
|
|
41
|
+
def initialize(daemonAuthKey, projectData = nil, logConsole = false)
|
|
42
|
+
@daemonAuthKey = daemonAuthKey
|
|
41
43
|
@projectData = projectData
|
|
42
44
|
# Since we are still in the ProjectBroker process, the current DRb
|
|
43
45
|
# server is still the ProjectBroker DRb server.
|
|
@@ -247,7 +249,7 @@ class TaskJuggler
|
|
|
247
249
|
def updateState(state, filesOrId, modified)
|
|
248
250
|
begin
|
|
249
251
|
@daemon = DRbObject.new(nil, @daemonURI) unless @daemon
|
|
250
|
-
@daemon.updateState(@authKey, filesOrId, state, modified)
|
|
252
|
+
@daemon.updateState(@daemonAuthKey, @authKey, filesOrId, state, modified)
|
|
251
253
|
rescue
|
|
252
254
|
@log.fatal("Can't update state with daemon: #{$!}")
|
|
253
255
|
end
|
data/lib/daemon/ReportServer.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ReportServer.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -106,10 +107,10 @@ class TaskJuggler
|
|
|
106
107
|
true
|
|
107
108
|
end
|
|
108
109
|
|
|
109
|
-
def generateReport(id, regExpMode, dynamicAttributes)
|
|
110
|
+
def generateReport(id, regExpMode, formats, dynamicAttributes)
|
|
110
111
|
@log.info("Generating report #{id}")
|
|
111
112
|
startTime = Time.now
|
|
112
|
-
if (ok = @tj.generateReport(id, regExpMode, dynamicAttributes))
|
|
113
|
+
if (ok = @tj.generateReport(id, regExpMode, formats, dynamicAttributes))
|
|
113
114
|
@log.info("Report #{id} generated in #{Time.now - startTime} seconds")
|
|
114
115
|
else
|
|
115
116
|
@log.error("Report generation of #{id} failed")
|
|
@@ -180,10 +181,12 @@ class TaskJuggler
|
|
|
180
181
|
trap { @server.addFile(file) }
|
|
181
182
|
end
|
|
182
183
|
|
|
183
|
-
def generateReport(authKey, reportId, regExpMode, dynamicAttributes)
|
|
184
|
+
def generateReport(authKey, reportId, regExpMode, formats, dynamicAttributes)
|
|
184
185
|
return false unless @server.checkKey(authKey, 'generateReport')
|
|
185
186
|
|
|
186
|
-
trap
|
|
187
|
+
trap do
|
|
188
|
+
@server.generateReport(reportId, regExpMode, formats, dynamicAttributes)
|
|
189
|
+
end
|
|
187
190
|
end
|
|
188
191
|
|
|
189
192
|
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
#
|
|
4
|
+
# = ReportServlet.rb -- The TaskJuggler III Project Management Software
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software; you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of version 2 of the GNU General Public License as
|
|
11
|
+
# published by the Free Software Foundation.
|
|
12
|
+
#
|
|
13
|
+
|
|
14
|
+
require 'webrick'
|
|
15
|
+
|
|
16
|
+
class TaskJuggler
|
|
17
|
+
|
|
18
|
+
class ReportServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
19
|
+
|
|
20
|
+
def initialize(config, *options)
|
|
21
|
+
super
|
|
22
|
+
@broker = options[0]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.get_instance(config, options)
|
|
26
|
+
self.new(config, *options)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def do_GET(req, res)
|
|
30
|
+
@req = req
|
|
31
|
+
@res = res
|
|
32
|
+
begin
|
|
33
|
+
projectId = req.query['project']
|
|
34
|
+
reportId = req.query['report']
|
|
35
|
+
if projectId.nil? || reportId.nil?
|
|
36
|
+
generateWelcomePage(projectId)
|
|
37
|
+
else
|
|
38
|
+
attributes = req.query['attributes'] || ''
|
|
39
|
+
attributes = URLParameter.decode(attributes) unless attributes.empty?
|
|
40
|
+
generateReport(projectId, reportId, attributes)
|
|
41
|
+
end
|
|
42
|
+
rescue
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def generateReport(projectId, reportId, attributes)
|
|
49
|
+
# Request the Project credentials from the ProbjectBroker.
|
|
50
|
+
@ps_uri, @ps_authKey = @broker.getProject(projectId)
|
|
51
|
+
if @ps_uri.nil?
|
|
52
|
+
error("No project with ID #{projectId} loaded")
|
|
53
|
+
end
|
|
54
|
+
# Get the responsible ReportServer that can generate the report.
|
|
55
|
+
begin
|
|
56
|
+
@projectServer = DRbObject.new(nil, @ps_uri)
|
|
57
|
+
@rs_uri, @rs_authKey = @projectServer.getReportServer(@ps_authKey)
|
|
58
|
+
@reportServer = DRbObject.new(nil, @rs_uri)
|
|
59
|
+
rescue
|
|
60
|
+
error("Cannot get report server")
|
|
61
|
+
end
|
|
62
|
+
# Create two StringIO buffers that will receive the $stdout and $stderr
|
|
63
|
+
# text from the report server. This buffer will contain the generated
|
|
64
|
+
# report as HTML encoded text. They will be send via DRb, so we have to
|
|
65
|
+
# extend them with DRbUndumped.
|
|
66
|
+
stdOut = StringIO.new('')
|
|
67
|
+
stdOut.include DRbUndumped
|
|
68
|
+
stdErr = StringIO.new('')
|
|
69
|
+
stdErr.include DRbUndumped
|
|
70
|
+
|
|
71
|
+
begin
|
|
72
|
+
@reportServer.connect(@rs_authKey, stdOut, stdErr, $stdin, true)
|
|
73
|
+
rescue
|
|
74
|
+
error("Can't connect IO: #{$!}")
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Ask the ReportServer to generate the reports with the provided ID.
|
|
78
|
+
begin
|
|
79
|
+
@reportServer.generateReport(@rs_authKey, reportId, false, nil,
|
|
80
|
+
attributes)
|
|
81
|
+
rescue
|
|
82
|
+
stdOut.rewind
|
|
83
|
+
stdErr.rewind
|
|
84
|
+
error("Report server crashed: #{$!}\n#{stdErr.read}\n#{stdOut.read}")
|
|
85
|
+
end
|
|
86
|
+
# Disconnect the ReportServer
|
|
87
|
+
begin
|
|
88
|
+
@reportServer.disconnect(@rs_authKey)
|
|
89
|
+
rescue
|
|
90
|
+
error("Can't disconnect IO: #{$!}")
|
|
91
|
+
end
|
|
92
|
+
# And send a termination request.
|
|
93
|
+
begin
|
|
94
|
+
@reportServer.terminate(@rs_authKey)
|
|
95
|
+
rescue
|
|
96
|
+
error("Report server termination failed: #{$!}")
|
|
97
|
+
end
|
|
98
|
+
@reportServer = nil
|
|
99
|
+
|
|
100
|
+
@res['content-type'] = 'text/html'
|
|
101
|
+
stdErr.rewind
|
|
102
|
+
$stderr.puts stdErr.read
|
|
103
|
+
# To read the $stdout of the ReportServer we need to rewind the buffer
|
|
104
|
+
# and then read the full text.
|
|
105
|
+
stdOut.rewind
|
|
106
|
+
@res.body = stdOut.read
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def generateWelcomePage(projectId)
|
|
110
|
+
projects = @broker.getProjectList
|
|
111
|
+
|
|
112
|
+
text = "== Welcome to the TaskJuggler Project Server ==\n----\n"
|
|
113
|
+
projects.each do |id|
|
|
114
|
+
if id == projectId
|
|
115
|
+
# Show the list of reports for this project.
|
|
116
|
+
text << "* [/taskjuggler #{getProjectName(id)}]\n"
|
|
117
|
+
reports = getReportList(id)
|
|
118
|
+
if reports.empty?
|
|
119
|
+
text << "** This project has no reports defined.\n"
|
|
120
|
+
else
|
|
121
|
+
reports.each do |reportId, reportName|
|
|
122
|
+
text << "** [/taskjuggler?project=#{id};report=#{reportId} " +
|
|
123
|
+
"#{reportName}]\n"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
else
|
|
127
|
+
# Just show a link to open the report list.
|
|
128
|
+
text << "* [/taskjuggler?project=#{id} #{getProjectName(id)}]\n"
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
rt = RichText.new(text)
|
|
132
|
+
rti = rt.generateIntermediateFormat
|
|
133
|
+
rti.sectionNumbers = false
|
|
134
|
+
page = HTMLDocument.new
|
|
135
|
+
page.generateHead("The TaskJuggler Project Server")
|
|
136
|
+
page << rti.to_html
|
|
137
|
+
@res['content-type'] = 'text/html'
|
|
138
|
+
@res.body = page.to_s
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def getProjectName(id)
|
|
142
|
+
uri, authKey = @broker.getProject(id)
|
|
143
|
+
return nil unless uri
|
|
144
|
+
projectServer = DRbObject.new(nil, uri)
|
|
145
|
+
return nil unless projectServer
|
|
146
|
+
projectServer.getProjectName(authKey)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def getReportList(id)
|
|
150
|
+
uri, authKey = @broker.getProject(id)
|
|
151
|
+
return [] unless uri
|
|
152
|
+
projectServer = DRbObject.new(nil, uri)
|
|
153
|
+
return [] unless projectServer
|
|
154
|
+
projectServer.getReportList(authKey)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def error(message)
|
|
158
|
+
@res.status = 412
|
|
159
|
+
@res.body = "ERROR: #{message}"
|
|
160
|
+
@res['content-type'] = 'text/plain'
|
|
161
|
+
raise "Error: #{message}"
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|