taskjuggler 0.0.6 → 0.0.7
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 +160 -0
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjreport.css +7 -2
- data/doc/AppConfig.html +10 -4
- data/doc/Arguments.html +10 -4
- data/doc/CHANGELOG.html +171 -5
- data/doc/COPYING.html +10 -4
- data/doc/Object.html +11 -107
- data/doc/README.html +10 -4
- data/doc/RuntimeConfig.html +10 -4
- data/doc/String.html +16 -11
- data/doc/StringIO.html +10 -4
- data/doc/TaskJuggler.html +506 -435
- data/doc/TaskJuggler/Account.html +10 -4
- data/doc/TaskJuggler/AccountAttribute.html +10 -4
- data/doc/TaskJuggler/AccountScenario.html +10 -4
- data/doc/TaskJuggler/Allocation.html +69 -60
- data/doc/TaskJuggler/AllocationAttribute.html +10 -4
- data/doc/TaskJuggler/AttributeBase.html +10 -4
- data/doc/TaskJuggler/AttributeDefinition.html +10 -4
- data/doc/TaskJuggler/BatchProcessor.html +202 -192
- data/doc/TaskJuggler/Booking.html +10 -4
- data/doc/TaskJuggler/BookingListAttribute.html +10 -4
- data/doc/TaskJuggler/BooleanAttribute.html +10 -4
- data/doc/TaskJuggler/CSVFile.html +10 -4
- data/doc/TaskJuggler/CellSettingPattern.html +10 -4
- data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
- data/doc/TaskJuggler/Charge.html +10 -4
- data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
- data/doc/TaskJuggler/ChargeSet.html +10 -4
- data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnTable.html +10 -4
- data/doc/TaskJuggler/Daemon.html +71 -52
- data/doc/TaskJuggler/DateAttribute.html +10 -4
- data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
- data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
- data/doc/TaskJuggler/DurationAttribute.html +10 -4
- data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
- data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
- data/doc/TaskJuggler/FixnumAttribute.html +10 -4
- data/doc/TaskJuggler/FlagListAttribute.html +10 -4
- data/doc/TaskJuggler/FloatAttribute.html +10 -4
- data/doc/TaskJuggler/FormatListAttribute.html +10 -4
- data/doc/TaskJuggler/GanttChart.html +10 -4
- data/doc/TaskJuggler/GanttContainer.html +14 -8
- data/doc/TaskJuggler/GanttHeader.html +10 -4
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
- data/doc/TaskJuggler/GanttLine.html +29 -24
- data/doc/TaskJuggler/GanttLoadStack.html +10 -4
- data/doc/TaskJuggler/GanttMilestone.html +10 -4
- data/doc/TaskJuggler/GanttRouter.html +10 -4
- data/doc/TaskJuggler/GanttTaskBar.html +20 -10
- data/doc/TaskJuggler/HTMLDocument.html +10 -4
- data/doc/TaskJuggler/HTMLGraphics.html +10 -4
- data/doc/TaskJuggler/Interval.html +10 -4
- data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
- data/doc/TaskJuggler/JobInfo.html +10 -4
- data/doc/TaskJuggler/Journal.html +227 -160
- data/doc/TaskJuggler/JournalEntry.html +10 -4
- data/doc/TaskJuggler/JournalEntryList.html +158 -72
- data/doc/TaskJuggler/KeywordArray.html +21 -9
- data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
- data/doc/TaskJuggler/Limits.html +13 -8
- data/doc/TaskJuggler/Limits/Limit.html +10 -4
- data/doc/TaskJuggler/LimitsAttribute.html +10 -4
- data/doc/TaskJuggler/ListAttributeBase.html +10 -4
- data/doc/TaskJuggler/Log.html +10 -4
- data/doc/TaskJuggler/LogFile.html +10 -4
- data/doc/TaskJuggler/LogicalAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalExpression.html +11 -5
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalFlag.html +10 -4
- data/doc/TaskJuggler/LogicalFunction.html +132 -124
- data/doc/TaskJuggler/LogicalOperation.html +10 -4
- data/doc/TaskJuggler/Macro.html +16 -10
- data/doc/TaskJuggler/MacroTable.html +44 -38
- data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
- data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
- data/doc/TaskJuggler/Message.html +92 -68
- data/doc/TaskJuggler/MessageHandler.html +349 -28
- data/doc/TaskJuggler/Navigator.html +10 -4
- data/doc/TaskJuggler/NavigatorElement.html +10 -4
- data/doc/TaskJuggler/NikuProject.html +10 -4
- data/doc/TaskJuggler/NikuReport.html +10 -4
- data/doc/TaskJuggler/NikuResource.html +10 -4
- data/doc/TaskJuggler/NodeListAttribute.html +10 -4
- data/doc/TaskJuggler/OnShiftCache.html +10 -4
- data/doc/TaskJuggler/ProcessIntercom.html +118 -111
- data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
- data/doc/TaskJuggler/Project.html +886 -913
- data/doc/TaskJuggler/ProjectBroker.html +442 -331
- data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
- data/doc/TaskJuggler/ProjectFileParser.html +320 -317
- data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
- data/doc/TaskJuggler/ProjectRecord.html +119 -56
- data/doc/TaskJuggler/ProjectServer.html +282 -237
- data/doc/TaskJuggler/ProjectServerIface.html +45 -39
- data/doc/TaskJuggler/PropertyAttribute.html +10 -4
- data/doc/TaskJuggler/PropertyList.html +177 -173
- data/doc/TaskJuggler/PropertySet.html +11 -5
- data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
- data/doc/TaskJuggler/Query.html +280 -256
- data/doc/TaskJuggler/RTFHandlers.html +10 -4
- data/doc/TaskJuggler/RTFNavigator.html +33 -26
- data/doc/TaskJuggler/RTFQuery.html +135 -169
- data/doc/TaskJuggler/RTFReport.html +63 -56
- data/doc/TaskJuggler/RTFReportLink.html +58 -47
- data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
- data/doc/TaskJuggler/RealFormat.html +10 -4
- data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
- data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
- data/doc/TaskJuggler/Report.html +333 -290
- data/doc/TaskJuggler/ReportBase.html +182 -174
- data/doc/TaskJuggler/ReportContext.html +10 -4
- data/doc/TaskJuggler/ReportServer.html +144 -126
- data/doc/TaskJuggler/ReportServerIface.html +50 -44
- data/doc/TaskJuggler/ReportServerRecord.html +38 -32
- data/doc/TaskJuggler/ReportServlet.html +144 -137
- data/doc/TaskJuggler/ReportTable.html +10 -4
- data/doc/TaskJuggler/ReportTableCell.html +169 -164
- data/doc/TaskJuggler/ReportTableColumn.html +10 -4
- data/doc/TaskJuggler/ReportTableLegend.html +10 -4
- data/doc/TaskJuggler/ReportTableLine.html +10 -4
- data/doc/TaskJuggler/Resource.html +121 -115
- data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
- data/doc/TaskJuggler/ResourceListRE.html +10 -4
- data/doc/TaskJuggler/ResourceScenario.html +13 -7
- data/doc/TaskJuggler/RichText.html +61 -37
- data/doc/TaskJuggler/RichTextAttribute.html +10 -4
- data/doc/TaskJuggler/RichTextDocument.html +91 -81
- data/doc/TaskJuggler/RichTextElement.html +378 -317
- data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
- data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
- data/doc/TaskJuggler/RichTextImage.html +10 -4
- data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
- data/doc/TaskJuggler/RichTextParser.html +48 -40
- data/doc/TaskJuggler/RichTextScanner.html +328 -906
- data/doc/TaskJuggler/RichTextSnip.html +59 -57
- data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
- data/doc/TaskJuggler/Scenario.html +10 -4
- data/doc/TaskJuggler/ScenarioData.html +33 -30
- data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
- data/doc/TaskJuggler/Scoreboard.html +10 -4
- data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
- data/doc/TaskJuggler/SheetReceiver.html +334 -313
- data/doc/TaskJuggler/SheetSender.html +10 -4
- data/doc/TaskJuggler/Shift.html +10 -4
- data/doc/TaskJuggler/ShiftAssignment.html +10 -4
- data/doc/TaskJuggler/ShiftAssignments.html +10 -4
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
- data/doc/TaskJuggler/ShiftScenario.html +10 -4
- data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
- data/doc/TaskJuggler/SortListAttribute.html +10 -4
- data/doc/TaskJuggler/SourceFileInfo.html +10 -4
- data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
- data/doc/TaskJuggler/StatusSheetReport.html +10 -4
- data/doc/TaskJuggler/StatusSheetSender.html +10 -4
- data/doc/TaskJuggler/StringAttribute.html +10 -4
- data/doc/TaskJuggler/SymbolAttribute.html +10 -4
- data/doc/TaskJuggler/SyntaxReference.html +260 -230
- data/doc/TaskJuggler/TOCEntry.html +99 -42
- data/doc/TaskJuggler/TSResourceRecord.html +10 -4
- data/doc/TaskJuggler/TSTaskRecord.html +10 -4
- data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
- data/doc/TaskJuggler/TableOfContents.html +54 -12
- data/doc/TaskJuggler/TableReport.html +877 -872
- data/doc/TaskJuggler/Task.html +117 -68
- data/doc/TaskJuggler/TaskDependency.html +10 -4
- data/doc/TaskJuggler/TaskListAttribute.html +10 -4
- data/doc/TaskJuggler/TaskListRE.html +10 -4
- data/doc/TaskJuggler/TaskScenario.html +1681 -1563
- data/doc/TaskJuggler/TextFormatter.html +10 -4
- data/doc/TaskJuggler/TextParser.html +567 -534
- data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
- data/doc/TaskJuggler/TextParser/Rule.html +26 -15
- data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
- data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
- data/doc/TaskJuggler/TextReport.html +15 -6
- data/doc/TaskJuggler/TextScanner.html +319 -287
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
- data/doc/TaskJuggler/TimeSheet.html +138 -175
- data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
- data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
- data/doc/TaskJuggler/TimeSheetReport.html +47 -42
- data/doc/TaskJuggler/TimeSheetSender.html +10 -4
- data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
- data/doc/TaskJuggler/TimeSheets.html +22 -16
- data/doc/TaskJuggler/Tj3AppBase.html +10 -4
- data/doc/TaskJuggler/Tj3Client.html +399 -365
- data/doc/TaskJuggler/Tj3Daemon.html +107 -94
- data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
- data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3SsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3TsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
- data/doc/TaskJuggler/TjException.html +10 -4
- data/doc/TaskJuggler/TjTime.html +145 -140
- data/doc/TaskJuggler/TjpExample.html +10 -4
- data/doc/TaskJuggler/TjpExportRE.html +122 -118
- data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
- data/doc/TaskJuggler/URLParameter.html +10 -4
- data/doc/TaskJuggler/UserManual.html +162 -155
- data/doc/TaskJuggler/VimSyntax.html +1028 -0
- data/doc/TaskJuggler/WebServer.html +45 -27
- data/doc/TaskJuggler/WorkingHours.html +10 -4
- data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
- data/doc/TaskJuggler/XMLBlob.html +10 -4
- data/doc/TaskJuggler/XMLComment.html +10 -4
- data/doc/TaskJuggler/XMLDocument.html +10 -4
- data/doc/TaskJuggler/XMLElement.html +10 -4
- data/doc/TaskJuggler/XMLNamedText.html +10 -4
- data/doc/TaskJuggler/XMLText.html +10 -4
- data/doc/index.html +735 -677
- data/doc/lib/AccountScenario_rb.html +1 -1
- data/doc/lib/Account_rb.html +1 -1
- data/doc/lib/Allocation_rb.html +1 -1
- data/doc/lib/AppConfig_rb.html +1 -1
- data/doc/lib/AttributeBase_rb.html +1 -1
- data/doc/lib/AttributeDefinition_rb.html +1 -1
- data/doc/lib/Attributes_rb.html +1 -1
- data/doc/lib/BatchProcessor_rb.html +1 -1
- data/doc/lib/Booking_rb.html +1 -1
- data/doc/lib/ChargeSet_rb.html +1 -1
- data/doc/lib/Charge_rb.html +1 -1
- data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
- data/doc/lib/HTMLDocument_rb.html +1 -1
- data/doc/lib/Interval_rb.html +1 -1
- data/doc/lib/Journal_rb.html +1 -1
- data/doc/lib/KeywordArray_rb.html +1 -1
- data/doc/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/Limits_rb.html +1 -1
- data/doc/lib/LogFile_rb.html +1 -1
- data/doc/lib/Log_rb.html +1 -1
- data/doc/lib/LogicalExpression_rb.html +1 -1
- data/doc/lib/LogicalFunction_rb.html +1 -1
- data/doc/lib/LogicalOperation_rb.html +1 -1
- data/doc/lib/MacroTable_rb.html +1 -3
- data/doc/lib/MessageHandler_rb.html +1 -1
- data/doc/lib/ProjectFileParser_rb.html +1 -1
- data/doc/lib/ProjectFileScanner_rb.html +1 -1
- data/doc/lib/Project_rb.html +4 -2
- data/doc/lib/PropertyList_rb.html +1 -1
- data/doc/lib/PropertySet_rb.html +1 -1
- data/doc/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/lib/Query_rb.html +1 -1
- data/doc/lib/RTFHandlers_rb.html +1 -1
- data/doc/lib/RTFNavigator_rb.html +1 -1
- data/doc/lib/RTFQuery_rb.html +2 -2
- data/doc/lib/RTFReportLink_rb.html +4 -2
- data/doc/lib/RTFReport_rb.html +1 -1
- data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
- data/doc/lib/RealFormat_rb.html +1 -1
- data/doc/lib/ResourceScenario_rb.html +1 -1
- data/doc/lib/Resource_rb.html +1 -1
- data/doc/lib/RichTextDocument_rb.html +1 -1
- data/doc/lib/RichTextElement_rb.html +1 -1
- data/doc/lib/RichTextFunctionExample_rb.html +1 -1
- data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
- data/doc/lib/RichTextParser_rb.html +1 -1
- data/doc/lib/RichTextScanner_rb.html +3 -1
- data/doc/lib/RichTextSnip_rb.html +1 -1
- data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/lib/RichText_rb.html +3 -1
- data/doc/lib/RuntimeConfig_rb.html +1 -1
- data/doc/lib/ScenarioData_rb.html +2 -2
- data/doc/lib/Scenario_rb.html +1 -1
- data/doc/lib/Scoreboard_rb.html +1 -1
- data/doc/lib/SheetHandlerBase_rb.html +5 -1
- data/doc/lib/SheetReceiver_rb.html +3 -1
- data/doc/lib/SheetSender_rb.html +1 -1
- data/doc/lib/ShiftAssignments_rb.html +1 -1
- data/doc/lib/ShiftScenario_rb.html +1 -1
- data/doc/lib/Shift_rb.html +1 -1
- data/doc/lib/SimpleQueryExpander_rb.html +67 -0
- data/doc/lib/SourceFileInfo_rb.html +1 -1
- data/doc/lib/StatusSheetReceiver_rb.html +1 -1
- data/doc/lib/StatusSheetSender_rb.html +1 -1
- data/doc/lib/SyntaxReference_rb.html +1 -1
- data/doc/lib/TOCEntry_rb.html +1 -1
- data/doc/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/lib/TableOfContents_rb.html +1 -1
- data/doc/lib/TaskDependency_rb.html +1 -1
- data/doc/lib/TaskJuggler_rb.html +1 -1
- data/doc/lib/TaskScenario_rb.html +1 -1
- data/doc/lib/Task_rb.html +1 -1
- data/doc/lib/TextFormatter_rb.html +1 -1
- data/doc/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/TextParser/Rule_rb.html +1 -1
- data/doc/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/TextParser_rb.html +3 -1
- data/doc/lib/TextScanner_rb.html +1 -3
- data/doc/lib/TimeSheetReceiver_rb.html +1 -1
- data/doc/lib/TimeSheetSender_rb.html +1 -1
- data/doc/lib/TimeSheetSummary_rb.html +1 -1
- data/doc/lib/TimeSheets_rb.html +1 -1
- data/doc/lib/Tj3AppBase_rb.html +1 -1
- data/doc/lib/Tj3Config_rb.html +1 -1
- data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
- data/doc/lib/TjException_rb.html +1 -1
- data/doc/lib/TjTime_rb.html +1 -1
- data/doc/lib/TjpExample_rb.html +1 -1
- data/doc/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/lib/URLParameter_rb.html +1 -1
- data/doc/lib/UTF8String_rb.html +1 -1
- data/doc/lib/UserManual_rb.html +1 -1
- data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
- data/doc/lib/WorkingHours_rb.html +1 -1
- data/doc/lib/XMLDocument_rb.html +1 -1
- data/doc/lib/XMLElement_rb.html +1 -1
- data/doc/lib/daemon/Daemon_rb.html +1 -1
- data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
- data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
- data/doc/lib/daemon/ProjectServer_rb.html +1 -1
- data/doc/lib/daemon/ReportServer_rb.html +1 -3
- data/doc/lib/daemon/WebServer_rb.html +1 -1
- data/doc/lib/deep_copy_rb.html +1 -1
- data/doc/lib/reports/CSVFile_rb.html +1 -1
- data/doc/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/reports/GanttChart_rb.html +1 -1
- data/doc/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/lib/reports/GanttLine_rb.html +1 -1
- data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/lib/reports/Navigator_rb.html +1 -1
- data/doc/lib/reports/NikuReport_rb.html +1 -1
- data/doc/lib/reports/ReportBase_rb.html +1 -1
- data/doc/lib/reports/ReportContext_rb.html +1 -1
- data/doc/lib/reports/ReportTableCell_rb.html +1 -1
- data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/lib/reports/ReportTable_rb.html +1 -1
- data/doc/lib/reports/Report_rb.html +1 -1
- data/doc/lib/reports/ResourceListRE_rb.html +1 -1
- data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
- data/doc/lib/reports/TableReport_rb.html +1 -1
- data/doc/lib/reports/TaskListRE_rb.html +1 -1
- data/doc/lib/reports/TextReport_rb.html +1 -1
- data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
- data/doc/lib/reports/TjpExportRE_rb.html +1 -1
- data/doc/lib/taskjuggler3_rb.html +1 -1
- data/doc/lib/tj3client_rb.html +1 -1
- data/doc/lib/tj3d_rb.html +1 -1
- data/doc/lib/tj3man_rb.html +1 -1
- data/doc/lib/tj3ss_receiver_rb.html +1 -1
- data/doc/lib/tj3ss_sender_rb.html +1 -1
- data/doc/lib/tj3ts_receiver_rb.html +1 -1
- data/doc/lib/tj3ts_sender_rb.html +1 -1
- data/doc/lib/tj3ts_summary_rb.html +1 -1
- data/lib/Allocation.rb +8 -5
- data/lib/BatchProcessor.rb +7 -3
- data/lib/FileList.rb +58 -0
- data/lib/Journal.rb +73 -33
- data/lib/KeywordArray.rb +4 -0
- data/lib/KeywordDocumentation.rb +45 -11
- data/lib/Limits.rb +0 -1
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalFunction.rb +14 -12
- data/lib/MacroTable.rb +3 -4
- data/lib/MessageHandler.rb +136 -7
- data/lib/Project.rb +72 -86
- data/lib/ProjectFileParser.rb +30 -33
- data/lib/ProjectFileScanner.rb +7 -16
- data/lib/PropertyList.rb +25 -27
- data/lib/PropertySet.rb +1 -1
- data/lib/PropertyTreeNode.rb +9 -12
- data/lib/Query.rb +5 -4
- data/lib/RTFNavigator.rb +2 -1
- data/lib/RTFQuery.rb +4 -11
- data/lib/RTFReport.rb +2 -1
- data/lib/RTFReportLink.rb +10 -4
- data/lib/RTFWithQuerySupport.rb +45 -0
- data/lib/Resource.rb +20 -20
- data/lib/ResourceScenario.rb +3 -3
- data/lib/RichText.rb +15 -7
- data/lib/RichTextDocument.rb +8 -4
- data/lib/RichTextElement.rb +35 -12
- data/lib/RichTextFunctionHandler.rb +11 -12
- data/lib/RichTextParser.rb +5 -3
- data/lib/RichTextScanner.rb +144 -565
- data/lib/RichTextSnip.rb +3 -7
- data/lib/RichTextSyntaxRules.rb +51 -32
- data/lib/ScenarioData.rb +16 -25
- data/lib/SheetHandlerBase.rb +59 -2
- data/lib/SheetReceiver.rb +36 -18
- data/lib/SimpleQueryExpander.rb +58 -0
- data/lib/SyntaxReference.rb +9 -5
- data/lib/TOCEntry.rb +2 -0
- data/lib/TableOfContents.rb +4 -0
- data/lib/Task.rb +23 -12
- data/lib/TaskJuggler.rb +72 -33
- data/lib/TaskScenario.rb +131 -53
- data/lib/TextParser.rb +43 -30
- data/lib/TextParser/Pattern.rb +17 -13
- data/lib/TextParser/Rule.rb +5 -0
- data/lib/TextScanner.rb +46 -25
- data/lib/TimeSheetSummary.rb +9 -7
- data/lib/TimeSheets.rb +14 -23
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +1 -2
- data/lib/TjpSyntaxRules.rb +128 -104
- data/lib/UTF8String.rb +0 -1
- data/lib/UserManual.rb +5 -4
- data/lib/VimSyntax.rb +223 -0
- data/lib/daemon/Daemon.rb +9 -0
- data/lib/daemon/ProcessIntercom.rb +19 -4
- data/lib/daemon/ProjectBroker.rb +149 -68
- data/lib/daemon/ProjectServer.rb +119 -79
- data/lib/daemon/ReportServer.rb +42 -31
- data/lib/daemon/WebServer.rb +21 -2
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/GanttContainer.rb +2 -2
- data/lib/reports/GanttLine.rb +2 -3
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/Report.rb +62 -57
- data/lib/reports/ReportBase.rb +6 -4
- data/lib/reports/ReportTableCell.rb +13 -14
- data/lib/reports/TableReport.rb +2 -1
- data/lib/reports/TextReport.rb +3 -0
- data/lib/reports/TimeSheetReport.rb +2 -3
- data/lib/reports/TjpExportRE.rb +0 -2
- data/lib/tj3client.rb +31 -3
- data/lib/tj3d.rb +8 -1
- data/manual/Day_To_Day_Juggling +2 -95
- data/manual/How_To_Contribute +2 -1
- data/manual/Rich_Text_Attributes +37 -3
- data/manual/Software +203 -0
- data/test/MessageChecker.rb +4 -4
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
- data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
- data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
- data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
- data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
- data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
- data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
- data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
- data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
- data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
- data/test/TestSuite/StatusSheets/dev2.tji +22 -0
- data/test/TestSuite/StatusSheets/resrep.tji +7 -0
- data/test/TestSuite/StatusSheets/run +6 -4
- data/test/TestSuite/StatusSheets/tj3d.log +312 -0
- data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
- data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
- data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/resrep.tji +7 -0
- data/test/TestSuite/TimeSheets/run +6 -5
- data/test/TestSuite/TimeSheets/statussheets.log +1 -0
- data/test/TestSuite/TimeSheets/ts.tji +351 -0
- data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
- data/test/test_PropertySet.rb +2 -2
- data/test/test_RichText.rb +178 -387
- data/test/test_SimpleQueryExpander.rb +55 -0
- data/test/test_deep_copy.rb +2 -2
- metadata +854 -834
- data/lib/MacroParser.rb +0 -77
- data/lib/Message.rb +0 -56
- data/lib/ruby-signal-bug.rb +0 -43
- data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
- data/test/TestSuite/HTML-Reports/reference.html +0 -51
- data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
- data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
- data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
- data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
- data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
- data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
- data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
data/lib/deep_copy.rb
CHANGED
|
@@ -37,7 +37,7 @@ class Object
|
|
|
37
37
|
# Built-in classed can't be cloned either. The check below is probably
|
|
38
38
|
# cheaper than the frequent (hiddent) exceptions from those objects.
|
|
39
39
|
return self if frozen? || nil? || is_a?(Fixnum) || is_a?(Float) ||
|
|
40
|
-
is_a?(TrueClass) || is_a?(FalseClass)
|
|
40
|
+
is_a?(TrueClass) || is_a?(FalseClass) || is_a?(Symbol)
|
|
41
41
|
|
|
42
42
|
# In case we have loops in our graph, we return references, not
|
|
43
43
|
# deep-copied objects.
|
|
@@ -58,10 +58,10 @@ class TaskJuggler
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def addBlockedZones(router)
|
|
61
|
-
height = (@lineHeight / 2) - @@size
|
|
62
61
|
# Horizontal block
|
|
63
62
|
router.addZone(@start - @@size, @y + (@lineHeight / 2) - @@size - 2,
|
|
64
|
-
@end - @start + 1 + 2 * @@size, 2 * @@size + 5, true,
|
|
63
|
+
@end - @start + 1 + 2 * @@size, 2 * @@size + 5, true,
|
|
64
|
+
false)
|
|
65
65
|
# Block for arrowhead.
|
|
66
66
|
router.addZone(@start - @@size - 9, @y + (@lineHeight / 2) - 7, 10, 15,
|
|
67
67
|
true, true)
|
data/lib/reports/GanttLine.rb
CHANGED
|
@@ -338,9 +338,8 @@ class TaskJuggler
|
|
|
338
338
|
tooltip = tooltip.getPattern(query)
|
|
339
339
|
return unless tooltip && !tooltip.empty?
|
|
340
340
|
|
|
341
|
-
if tooltip.respond_to?('functionHandler')
|
|
342
|
-
|
|
343
|
-
tooltip.functionHandler('query').setQuery(query)
|
|
341
|
+
if tooltip.respond_to?('functionHandler')
|
|
342
|
+
tooltip.setQuery(query)
|
|
344
343
|
end
|
|
345
344
|
if query
|
|
346
345
|
query.attributeId = 'name'
|
data/lib/reports/GanttTaskBar.rb
CHANGED
|
@@ -81,14 +81,18 @@ class TaskJuggler
|
|
|
81
81
|
html << rectToHTML(xStart, 0, width, @lineHeight, 'tj_gantt_frame')
|
|
82
82
|
|
|
83
83
|
# First we draw the task frame.
|
|
84
|
-
html <<
|
|
85
|
-
|
|
84
|
+
html << rectToHTML(xStart, yCenter - @@size, width, 2 * @@size,
|
|
85
|
+
'taskbarframe')
|
|
86
86
|
|
|
87
87
|
# The we draw the filling.
|
|
88
88
|
html << rectToHTML(xStart + 1, yCenter - @@size + 1, width - 2,
|
|
89
89
|
2 * @@size - 2, 'taskbar')
|
|
90
90
|
# And then the progress bar. If task is null we assume 50% completion.
|
|
91
|
-
|
|
91
|
+
if @task && @task['complete', @scenarioIdx]
|
|
92
|
+
completion = @task['complete', @scenarioIdx] / 100.0
|
|
93
|
+
else
|
|
94
|
+
completion = 0.5
|
|
95
|
+
end
|
|
92
96
|
html << rectToHTML(xStart + 1, yCenter - @@size / 2,
|
|
93
97
|
(width - 2) * completion, @@size, 'progressbar')
|
|
94
98
|
end
|
data/lib/reports/Report.rb
CHANGED
|
@@ -47,61 +47,53 @@ class TaskJuggler
|
|
|
47
47
|
# report defined by all the class attributes and report elements is
|
|
48
48
|
# generated according the the requested output format(s).
|
|
49
49
|
def generate
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
raise 'Unknown report output format #{format}.'
|
|
67
|
-
end
|
|
50
|
+
generateIntermediateFormat
|
|
51
|
+
|
|
52
|
+
# Then generate the actual output format.
|
|
53
|
+
get('formats').each do |format|
|
|
54
|
+
case format
|
|
55
|
+
when :html
|
|
56
|
+
generateHTML
|
|
57
|
+
copyAuxiliaryFiles
|
|
58
|
+
when :csv
|
|
59
|
+
generateCSV
|
|
60
|
+
when :niku
|
|
61
|
+
generateNiku
|
|
62
|
+
when :tjp
|
|
63
|
+
generateTJP
|
|
64
|
+
else
|
|
65
|
+
raise 'Unknown report output format #{format}.'
|
|
68
66
|
end
|
|
69
|
-
rescue TjException
|
|
70
|
-
error('reporting_failed', $!.message)
|
|
71
67
|
end
|
|
72
|
-
|
|
68
|
+
true
|
|
73
69
|
end
|
|
74
70
|
|
|
75
71
|
# Generate an output format agnostic version that can later be turned into
|
|
76
72
|
# the respective output formats.
|
|
77
73
|
def generateIntermediateFormat
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
raise "Unknown report type"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Most output format can be generated from a common intermediate
|
|
100
|
-
# representation of the elements. We generate that IR first.
|
|
101
|
-
@content.generateIntermediateFormat if @content
|
|
102
|
-
rescue TjException
|
|
103
|
-
error('report_IR_generattion_failed', $!.message)
|
|
74
|
+
@content = nil
|
|
75
|
+
case @typeSpec
|
|
76
|
+
when :export
|
|
77
|
+
@content = TjpExportRE.new(self)
|
|
78
|
+
when :niku
|
|
79
|
+
@content = NikuReport.new(self)
|
|
80
|
+
when :resourcereport
|
|
81
|
+
@content = ResourceListRE.new(self)
|
|
82
|
+
when :textreport
|
|
83
|
+
@content = TextReport.new(self)
|
|
84
|
+
when :taskreport
|
|
85
|
+
@content = TaskListRE.new(self)
|
|
86
|
+
when :statusSheet
|
|
87
|
+
@content = StatusSheetReport.new(self)
|
|
88
|
+
when :timeSheet
|
|
89
|
+
@content = TimeSheetReport.new(self)
|
|
90
|
+
else
|
|
91
|
+
raise "Unknown report type"
|
|
104
92
|
end
|
|
93
|
+
|
|
94
|
+
# Most output format can be generated from a common intermediate
|
|
95
|
+
# representation of the elements. We generate that IR first.
|
|
96
|
+
@content.generateIntermediateFormat if @content
|
|
105
97
|
end
|
|
106
98
|
|
|
107
99
|
# Render the content of the report as HTML (without the framing).
|
|
@@ -116,6 +108,22 @@ class TaskJuggler
|
|
|
116
108
|
@project.reportContexts.first.report.get('interactive')
|
|
117
109
|
end
|
|
118
110
|
|
|
111
|
+
def error(id, message)
|
|
112
|
+
if message && !message.empty?
|
|
113
|
+
@project.messageHandler.error(id, message, @sourceFileInfo)
|
|
114
|
+
else
|
|
115
|
+
# We have no message, so the error has already been reported to the
|
|
116
|
+
# MessageHandler. Just trigger another exception to signal the error.
|
|
117
|
+
raise TjException
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def warning(id, message)
|
|
122
|
+
if message && !message.empty?
|
|
123
|
+
@project.messageHandler.warning(id, message, @sourceFileInfo)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
119
127
|
private
|
|
120
128
|
# Convenience function to access a report attribute
|
|
121
129
|
def a(attribute)
|
|
@@ -204,7 +212,8 @@ EOT
|
|
|
204
212
|
return nil unless @content
|
|
205
213
|
|
|
206
214
|
# CSV format can only handle the first element.
|
|
207
|
-
csv = @content.to_csv
|
|
215
|
+
return nil unless (csv = @content.to_csv)
|
|
216
|
+
|
|
208
217
|
# Expand nested tables into the outer table.
|
|
209
218
|
columnIdx = 0
|
|
210
219
|
while columnIdx < csv[0].length do
|
|
@@ -286,10 +295,10 @@ EOT
|
|
|
286
295
|
|
|
287
296
|
def copyDirectory(dirName)
|
|
288
297
|
# The directory needs to be in the same directory as the HTML report.
|
|
289
|
-
auxDstDir = File.dirname((@name[0] == '/' ? '' : @project.outputDir) +
|
|
290
|
-
|
|
298
|
+
auxDstDir = (File.dirname((@name[0] == '/' ? '' : @project.outputDir) +
|
|
299
|
+
@name) + '/').untaint
|
|
291
300
|
# Find the data directory that came with the TaskJuggler installation.
|
|
292
|
-
auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0]
|
|
301
|
+
auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0].untaint
|
|
293
302
|
# Raise an error if we haven't found the data directory
|
|
294
303
|
dataDirError(dirName) if auxSrcDir.nil? || !File.exists?(auxSrcDir)
|
|
295
304
|
# Don't copy directory if all files are up-to-date.
|
|
@@ -314,18 +323,14 @@ EOT
|
|
|
314
323
|
end
|
|
315
324
|
|
|
316
325
|
def dataDirError(dirName)
|
|
317
|
-
|
|
326
|
+
error('data_dir_error', <<"EOT"
|
|
318
327
|
Cannot find the #{dirName} directory. This is usually the result of an
|
|
319
328
|
improper TaskJuggler installation. If you know the directory, you can use the
|
|
320
329
|
TASKJUGGLER_DATA_PATH environment variable to specify the location. The
|
|
321
330
|
variable should be set to the path without the /data at the end. Multiple
|
|
322
331
|
directories must be separated by colons.
|
|
323
332
|
EOT
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
def error(id, message)
|
|
327
|
-
@project.messageHandler.send(Message.new(id, 'error', message, nil, nil,
|
|
328
|
-
@sourceFileInfo))
|
|
333
|
+
)
|
|
329
334
|
end
|
|
330
335
|
|
|
331
336
|
end
|
data/lib/reports/ReportBase.rb
CHANGED
|
@@ -31,9 +31,9 @@ class TaskJuggler
|
|
|
31
31
|
query = @report.project.reportContexts.last.query
|
|
32
32
|
%w( header left center right footer
|
|
33
33
|
prolog headline caption epilog ).each do |name|
|
|
34
|
-
next unless text = a(name)
|
|
34
|
+
next unless (text = a(name))
|
|
35
35
|
|
|
36
|
-
text.
|
|
36
|
+
text.setQuery(query)
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -73,7 +73,8 @@ class TaskJuggler
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
standardFilterOps(list, hideExpr, rollupExpr, openNodes, resource,
|
|
76
|
+
standardFilterOps(list, hideExpr, rollupExpr, openNodes, resource,
|
|
77
|
+
taskRoot)
|
|
77
78
|
end
|
|
78
79
|
|
|
79
80
|
# Take the complete resource list and remove all resources that are matching
|
|
@@ -104,7 +105,8 @@ class TaskJuggler
|
|
|
104
105
|
end
|
|
105
106
|
end
|
|
106
107
|
|
|
107
|
-
standardFilterOps(list, hideExpr, rollupExpr, openNodes, task,
|
|
108
|
+
standardFilterOps(list, hideExpr, rollupExpr, openNodes, task,
|
|
109
|
+
resourceRoot)
|
|
108
110
|
end
|
|
109
111
|
|
|
110
112
|
private
|
|
@@ -108,7 +108,8 @@ class TaskJuggler
|
|
|
108
108
|
|
|
109
109
|
# Insert a padding cell for the left side indentation.
|
|
110
110
|
if @leftIndent
|
|
111
|
-
row << XMLElement.new('td', 'style' => "width:#{@leftIndent}px; "
|
|
111
|
+
row << XMLElement.new('td', 'style' => "min-width:#{@leftIndent}px; " +
|
|
112
|
+
"width:#{@leftIndent}px; ")
|
|
112
113
|
end
|
|
113
114
|
row << cellIcon(cell)
|
|
114
115
|
|
|
@@ -120,8 +121,8 @@ class TaskJuggler
|
|
|
120
121
|
if tooltip && !tooltip.empty? && !@selfcontained
|
|
121
122
|
if @showTooltipHint
|
|
122
123
|
row << (td = XMLElement.new('td'))
|
|
123
|
-
td <<
|
|
124
|
-
|
|
124
|
+
td << XMLElement.new('img', 'src' => 'icons/details.png',
|
|
125
|
+
'class' => 'tj_table_cell_tooltip')
|
|
125
126
|
addHtmlTooltip(tooltip, td, cell)
|
|
126
127
|
else
|
|
127
128
|
addHtmlTooltip(tooltip, cell)
|
|
@@ -130,7 +131,8 @@ class TaskJuggler
|
|
|
130
131
|
|
|
131
132
|
# Insert a padding cell for the right side indentation.
|
|
132
133
|
if @rightIndent
|
|
133
|
-
row << XMLElement.new('td', 'style' => "width:#{@rightIndent}px; "
|
|
134
|
+
row << XMLElement.new('td', 'style' => "min-width:#{@rightIndent}px; " +
|
|
135
|
+
"width:#{@rightIndent}px; ")
|
|
134
136
|
end
|
|
135
137
|
|
|
136
138
|
cell
|
|
@@ -148,9 +150,8 @@ class TaskJuggler
|
|
|
148
150
|
elsif @data && @data.is_a?(String)
|
|
149
151
|
@data
|
|
150
152
|
elsif @text
|
|
151
|
-
if @text.respond_to?('functionHandler')
|
|
152
|
-
|
|
153
|
-
@text.functionHandler('query').setQuery(@query)
|
|
153
|
+
if @text.respond_to?('functionHandler')
|
|
154
|
+
@text.setQuery(@query)
|
|
154
155
|
end
|
|
155
156
|
str = @text.to_s
|
|
156
157
|
# Remove any trailing line breaks. These don't really make much
|
|
@@ -247,9 +248,8 @@ class TaskJuggler
|
|
|
247
248
|
textAsString =
|
|
248
249
|
if @text.is_a?(RichTextIntermediate)
|
|
249
250
|
# @text is a RichText.
|
|
250
|
-
if @text.respond_to?('functionHandler')
|
|
251
|
-
|
|
252
|
-
@text.functionHandler('query').setQuery(@query)
|
|
251
|
+
if @text.respond_to?('functionHandler')
|
|
252
|
+
@text.setQuery(@query)
|
|
253
253
|
end
|
|
254
254
|
@text.to_s
|
|
255
255
|
else
|
|
@@ -288,7 +288,7 @@ class TaskJuggler
|
|
|
288
288
|
# Assuming an average character width of 8 pixels
|
|
289
289
|
if @width && (text.length > (@width / 8))
|
|
290
290
|
text = text[0, @width / 8]
|
|
291
|
-
modified =
|
|
291
|
+
modified = true
|
|
292
292
|
end
|
|
293
293
|
# Add three dots to show that there is more info available.
|
|
294
294
|
text += "..." if modified
|
|
@@ -299,9 +299,8 @@ class TaskJuggler
|
|
|
299
299
|
return unless tooltip && !tooltip.empty? && !@selfcontained
|
|
300
300
|
|
|
301
301
|
hook = trigger if hook.nil?
|
|
302
|
-
if tooltip.respond_to?('functionHandler')
|
|
303
|
-
|
|
304
|
-
tooltip.functionHandler('query').setQuery(@query)
|
|
302
|
+
if tooltip.respond_to?('functionHandler')
|
|
303
|
+
tooltip.setQuery(@query)
|
|
305
304
|
end
|
|
306
305
|
if @query
|
|
307
306
|
@query.attributeId = 'name'
|
data/lib/reports/TableReport.rb
CHANGED
|
@@ -38,9 +38,11 @@ class TaskJuggler
|
|
|
38
38
|
'effortdone' => [ 'Effort Done', true, :right, true ],
|
|
39
39
|
'effortleft' => [ 'Effort Left', true, :right, true ],
|
|
40
40
|
'freetime' => [ 'Free Time', true, :right, true ],
|
|
41
|
+
'freework' => [ 'Free Work', true, :right, true ],
|
|
41
42
|
'followers' => [ 'Followers', false, :left, true ],
|
|
42
43
|
'id' => [ 'Id', false, :left, false ],
|
|
43
44
|
'journal' => [ 'Journal', false, :left, false ],
|
|
45
|
+
'journal_sub' => [ 'Journal', false, :left, false ],
|
|
44
46
|
'journalmessages' => [ 'Journal Messages', false, :left, false ],
|
|
45
47
|
'journalsummaries' => [ 'Journal Summaries', false, :left, false ],
|
|
46
48
|
'line' => [ 'Line No.', false, :right, false ],
|
|
@@ -822,7 +824,6 @@ class TaskJuggler
|
|
|
822
824
|
# date to the next cell.
|
|
823
825
|
def genCalChartResourceCell(origQuery, line, columnDef, t,
|
|
824
826
|
sameTimeNextFunc)
|
|
825
|
-
resource = line.property
|
|
826
827
|
# Find out if we have an enclosing task scope.
|
|
827
828
|
if line.scopeLine && line.scopeLine.property.is_a?(Task)
|
|
828
829
|
task = line.scopeLine.property
|
data/lib/reports/TextReport.rb
CHANGED
|
@@ -131,7 +131,7 @@ EOT
|
|
|
131
131
|
# status green "Your headline here!" {
|
|
132
132
|
# summary -8<-
|
|
133
133
|
# A summary text
|
|
134
|
-
# -
|
|
134
|
+
# ->8-
|
|
135
135
|
# details -8<-
|
|
136
136
|
# Some more details
|
|
137
137
|
# ->8-
|
|
@@ -254,6 +254,7 @@ EOT
|
|
|
254
254
|
workPercent = (workDays / (weeksToReport * weeklyWorkingDays)) *
|
|
255
255
|
100.0
|
|
256
256
|
|
|
257
|
+
remaining = endDate = nil
|
|
257
258
|
if task['effort', scenarioIdx] > 0
|
|
258
259
|
# The task is an effort based task.
|
|
259
260
|
# Get the remaining effort for this task.
|
|
@@ -262,11 +263,9 @@ EOT
|
|
|
262
263
|
query.loadUnit = :days
|
|
263
264
|
query.process
|
|
264
265
|
remaining = query.to_s
|
|
265
|
-
endDate = nil
|
|
266
266
|
else
|
|
267
267
|
# The task is a duration task.
|
|
268
268
|
# Get the planned task end date.
|
|
269
|
-
remaining = nil
|
|
270
269
|
endDate = task['end', scenarioIdx]
|
|
271
270
|
end
|
|
272
271
|
|
data/lib/reports/TjpExportRE.rb
CHANGED
|
@@ -263,7 +263,6 @@ class TaskJuggler
|
|
|
263
263
|
@file << "supplement resource #{resource.fullId} {\n"
|
|
264
264
|
@project.resources.eachAttributeDefinition do |attrDef|
|
|
265
265
|
id = attrDef.id
|
|
266
|
-
attr = resource.getAttr(id)
|
|
267
266
|
next if (!@supportedResourceAttrs.include?(id) &&
|
|
268
267
|
! attrDef.userDefined) ||
|
|
269
268
|
!a('resourceAttributes').include?(id)
|
|
@@ -290,7 +289,6 @@ class TaskJuggler
|
|
|
290
289
|
@file << "supplement task #{task.fullId} {\n"
|
|
291
290
|
@project.tasks.eachAttributeDefinition do |attrDef|
|
|
292
291
|
id = attrDef.id
|
|
293
|
-
attr = task.getAttr(id)
|
|
294
292
|
next if (!@supportedTaskAttrs.include?(id) && !attrDef.userDefined) ||
|
|
295
293
|
!a('taskAttributes').include?(id)
|
|
296
294
|
|
data/lib/tj3client.rb
CHANGED
|
@@ -36,6 +36,8 @@ class TaskJuggler
|
|
|
36
36
|
@host = '127.0.0.1'
|
|
37
37
|
# The default port. 'T' and 'J' in ASCII decimal
|
|
38
38
|
@port = 8474
|
|
39
|
+
# The file with the server URI in case port is 0.
|
|
40
|
+
@uriFile = File.join(Dir.getwd, '.tj3d.uri')
|
|
39
41
|
# This must must be changed for the communication to work.
|
|
40
42
|
@authKey = nil
|
|
41
43
|
# Determines whether report IDs are fix IDs or regular expressions that
|
|
@@ -62,9 +64,14 @@ class TaskJuggler
|
|
|
62
64
|
{ :label => 'add',
|
|
63
65
|
:args => [ 'tjp file', '*tji file'],
|
|
64
66
|
:descr => 'Add a new project or update and existing one' },
|
|
67
|
+
{ :label => 'update',
|
|
68
|
+
:args => [],
|
|
69
|
+
:descr => 'Reload all projects that have modified files and '+
|
|
70
|
+
'are not being reloaded already' },
|
|
65
71
|
{ :label => 'remove',
|
|
66
72
|
:args => [ '+project ID' ],
|
|
67
|
-
:descr => 'Remove the project with the specified ID from the
|
|
73
|
+
:descr => 'Remove the project with the specified ID from the ' +
|
|
74
|
+
'daemon' },
|
|
68
75
|
{ :label => 'report',
|
|
69
76
|
:args => [ 'project ID', '+report ID', '!=', '*tji file'],
|
|
70
77
|
:descr => 'Generate the report with the provided ID for ' +
|
|
@@ -75,7 +82,7 @@ class TaskJuggler
|
|
|
75
82
|
'that match the provided report ID' },
|
|
76
83
|
{ :label => 'check-ts',
|
|
77
84
|
:args => [ 'project ID', 'time sheet' ],
|
|
78
|
-
:descr => 'Check the provided time sheet for correctness' +
|
|
85
|
+
:descr => 'Check the provided time sheet for correctness ' +
|
|
79
86
|
'against the project with the given ID'},
|
|
80
87
|
{ :label => 'check-ss',
|
|
81
88
|
:args => [ 'project ID', 'status sheet' ],
|
|
@@ -118,6 +125,11 @@ EOT
|
|
|
118
125
|
format('Use the specified TCP/IP port')) do |arg|
|
|
119
126
|
@port = arg
|
|
120
127
|
end
|
|
128
|
+
@opts.on('--urifile', String,
|
|
129
|
+
format('If the port is 0, use this file to get the URI ' +
|
|
130
|
+
'of the server.')) do |arg|
|
|
131
|
+
@uriFile = arg
|
|
132
|
+
end
|
|
121
133
|
@opts.on('-r', '--regexp',
|
|
122
134
|
format('The report IDs are not fixed but regular expressions ' +
|
|
123
135
|
'that match a set of reports')) do |arg|
|
|
@@ -184,6 +196,19 @@ _global:
|
|
|
184
196
|
EOT
|
|
185
197
|
end
|
|
186
198
|
|
|
199
|
+
uri = "druby://#{@host}:#{@port}"
|
|
200
|
+
if @port == 0
|
|
201
|
+
# If the @port is configured to 0, we need to read the URI to connect
|
|
202
|
+
# to the server from the .tj3d.uri file that has been generated by the
|
|
203
|
+
# server.
|
|
204
|
+
begin
|
|
205
|
+
uri = File.read(@uriFile).chomp
|
|
206
|
+
rescue
|
|
207
|
+
error('The server port is configured to be 0, but no ' +
|
|
208
|
+
".tj3d.uri file can be found: #{$!}")
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
187
212
|
# We try to play it safe here. The client also starts a DRb server, so
|
|
188
213
|
# we need to make sure it's constricted to localhost only. We require
|
|
189
214
|
# the DRb server for the standard IO redirection to work.
|
|
@@ -194,7 +219,7 @@ EOT
|
|
|
194
219
|
|
|
195
220
|
begin
|
|
196
221
|
# Get the ProjectBroker object from the tj3d.
|
|
197
|
-
@broker = DRbObject.new(nil,
|
|
222
|
+
@broker = DRbObject.new(nil, uri)
|
|
198
223
|
# Client and server should always come from the same Gem. Since we
|
|
199
224
|
# restict communication to localhost, that's probably not a problem.
|
|
200
225
|
if (check = @broker.apiVersion(@authKey, 1)) < 0
|
|
@@ -242,6 +267,9 @@ EOT
|
|
|
242
267
|
end
|
|
243
268
|
end
|
|
244
269
|
info('Project removed')
|
|
270
|
+
when 'update'
|
|
271
|
+
callDaemon(:update, [])
|
|
272
|
+
info('Reload requested')
|
|
245
273
|
when 'report'
|
|
246
274
|
# The first value of args is the project ID. The following values
|
|
247
275
|
# could be either report IDs or TJI file # names ('.' or '*.tji').
|