taskjuggler 0.1.1 → 0.2.0
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 +37 -5
- data/README.rdoc +4 -2
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/benchmarks/css/tjmanual.css +0 -1
- data/benchmarks/htmltaskreport-1.html +47702 -0
- data/benchmarks/htmltaskreport-2.html +23345 -0
- data/benchmarks/htmltaskreport-3.html +23265 -0
- data/benchmarks/htmltaskreport-4.html +22135 -0
- data/benchmarks/profile.clt +36082 -0
- data/benchmarks/tj3.profile +0 -0
- data/benchmarks/tj3.profile.grind +6185 -0
- data/benchmarks/tj3.profile.symbols +432 -0
- data/benchmarks/tj3.profile.txt +448 -0
- data/data/tjp.vim +689 -0
- data/doc/AppConfig.html +26 -2
- data/doc/CHANGELOG.html +60 -8
- data/doc/COPYING.html +26 -2
- data/doc/Diff/Hunk.html +26 -2
- data/doc/Diff.html +26 -2
- data/doc/Diffable.html +26 -2
- data/doc/DiffableString.html +26 -2
- data/doc/Object.html +26 -104
- data/doc/README_rdoc.html +39 -7
- data/doc/RuntimeConfig.html +26 -2
- data/doc/String.html +26 -2
- data/doc/TaskJuggler/Account.html +27 -3
- data/doc/TaskJuggler/AccountAttribute.html +30 -6
- data/doc/TaskJuggler/AccountScenario.html +28 -4
- data/doc/TaskJuggler/Allocation.html +33 -9
- data/doc/TaskJuggler/AllocationAttribute.html +31 -7
- data/doc/TaskJuggler/AttributeBase.html +162 -111
- data/doc/TaskJuggler/AttributeDefinition.html +26 -2
- data/doc/TaskJuggler/AttributeOverwrite.html +26 -2
- data/doc/TaskJuggler/BatchProcessor.html +26 -2
- data/doc/TaskJuggler/Booking.html +29 -5
- data/doc/TaskJuggler/BookingListAttribute.html +29 -5
- data/doc/TaskJuggler/BooleanAttribute.html +30 -6
- data/doc/TaskJuggler/CSVFile.html +26 -2
- data/doc/TaskJuggler/CellSettingPattern.html +26 -2
- data/doc/TaskJuggler/CellSettingPatternList.html +26 -2
- data/doc/TaskJuggler/Charge.html +30 -6
- data/doc/TaskJuggler/ChargeListAttribute.html +29 -5
- data/doc/TaskJuggler/ChargeSet.html +26 -2
- data/doc/TaskJuggler/ChargeSetListAttribute.html +30 -6
- data/doc/TaskJuggler/CollisionDetector.html +26 -2
- data/doc/TaskJuggler/ColumnListAttribute.html +28 -4
- data/doc/TaskJuggler/ColumnTable.html +26 -2
- data/doc/TaskJuggler/Daemon.html +26 -2
- data/doc/TaskJuggler/DataCache.html +26 -2
- data/doc/TaskJuggler/DataCacheEntry.html +26 -2
- data/doc/TaskJuggler/DateAttribute.html +30 -6
- data/doc/TaskJuggler/DefinitionListAttribute.html +28 -4
- data/doc/TaskJuggler/DependencyListAttribute.html +30 -6
- data/doc/TaskJuggler/DurationAttribute.html +31 -7
- data/doc/TaskJuggler/FileList.html +26 -2
- data/doc/TaskJuggler/FileRecord.html +26 -2
- data/doc/TaskJuggler/FixnumAttribute.html +28 -4
- data/doc/TaskJuggler/FlagListAttribute.html +30 -6
- data/doc/TaskJuggler/FloatAttribute.html +29 -5
- data/doc/TaskJuggler/FormatListAttribute.html +29 -5
- data/doc/TaskJuggler/GanttChart.html +26 -2
- data/doc/TaskJuggler/GanttContainer.html +26 -2
- data/doc/TaskJuggler/GanttHeader.html +26 -2
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -2
- data/doc/TaskJuggler/GanttLine.html +27 -3
- data/doc/TaskJuggler/GanttLoadStack.html +26 -2
- data/doc/TaskJuggler/GanttMilestone.html +26 -2
- data/doc/TaskJuggler/GanttRouter.html +26 -2
- data/doc/TaskJuggler/GanttTaskBar.html +26 -2
- data/doc/TaskJuggler/HTMLDocument.html +26 -2
- data/doc/TaskJuggler/HTMLElements.html +623 -0
- data/doc/TaskJuggler/HTMLGraphics.html +26 -2
- data/doc/TaskJuggler/ICalReport.html +864 -0
- data/doc/TaskJuggler/ICalendar/Component.html +969 -0
- data/doc/TaskJuggler/ICalendar/Event.html +742 -0
- data/doc/TaskJuggler/ICalendar/Journal.html +722 -0
- data/doc/TaskJuggler/ICalendar/Person.html +633 -0
- data/doc/TaskJuggler/ICalendar/Todo.html +789 -0
- data/doc/TaskJuggler/ICalendar.html +1035 -0
- data/doc/TaskJuggler/Interval.html +99 -172
- data/doc/TaskJuggler/IntervalList.html +31 -7
- data/doc/TaskJuggler/JobInfo.html +26 -2
- data/doc/TaskJuggler/Journal.html +26 -2
- data/doc/TaskJuggler/JournalEntry.html +26 -2
- data/doc/TaskJuggler/JournalEntryList.html +26 -2
- data/doc/TaskJuggler/KeywordArray.html +26 -2
- data/doc/TaskJuggler/KeywordDocumentation.html +26 -2
- data/doc/TaskJuggler/Limits/Limit.html +124 -49
- data/doc/TaskJuggler/Limits.html +139 -156
- data/doc/TaskJuggler/LimitsAttribute.html +39 -14
- data/doc/TaskJuggler/ListAttributeBase.html +35 -11
- data/doc/TaskJuggler/Log.html +26 -2
- data/doc/TaskJuggler/LogFile.html +26 -2
- data/doc/TaskJuggler/LogicalAttribute.html +26 -2
- data/doc/TaskJuggler/LogicalExpression.html +26 -2
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +35 -11
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +35 -11
- data/doc/TaskJuggler/LogicalFlag.html +26 -2
- data/doc/TaskJuggler/LogicalFunction.html +28 -4
- data/doc/TaskJuggler/LogicalOperation.html +26 -2
- data/doc/TaskJuggler/ManagerResponsibilities.html +26 -2
- data/doc/TaskJuggler/ManagerStatusRecord.html +26 -2
- data/doc/TaskJuggler/Message.html +26 -2
- data/doc/TaskJuggler/MessageHandler.html +108 -62
- data/doc/TaskJuggler/Navigator.html +26 -2
- data/doc/TaskJuggler/NavigatorElement.html +26 -2
- data/doc/TaskJuggler/NikuProject.html +26 -2
- data/doc/TaskJuggler/NikuReport.html +27 -3
- data/doc/TaskJuggler/NikuResource.html +26 -2
- data/doc/TaskJuggler/NodeListAttribute.html +31 -7
- data/doc/TaskJuggler/PlaceHolderCell.html +26 -2
- data/doc/TaskJuggler/ProcessIntercom.html +26 -2
- data/doc/TaskJuggler/ProcessIntercomIface.html +26 -2
- data/doc/TaskJuggler/Project.html +1236 -973
- data/doc/TaskJuggler/ProjectBroker.html +26 -2
- data/doc/TaskJuggler/ProjectBrokerIface.html +26 -2
- data/doc/TaskJuggler/ProjectFileParser.html +29 -4
- data/doc/TaskJuggler/ProjectFileScanner.html +56 -31
- data/doc/TaskJuggler/ProjectRecord.html +26 -2
- data/doc/TaskJuggler/ProjectServer.html +26 -2
- data/doc/TaskJuggler/ProjectServerIface.html +26 -2
- data/doc/TaskJuggler/PropertyAttribute.html +35 -11
- data/doc/TaskJuggler/PropertyList.html +26 -2
- data/doc/TaskJuggler/PropertySet.html +126 -106
- data/doc/TaskJuggler/PropertyTreeNode.html +595 -551
- data/doc/TaskJuggler/Query.html +127 -100
- data/doc/TaskJuggler/RTFHandlers.html +26 -2
- data/doc/TaskJuggler/RTFNavigator.html +26 -2
- data/doc/TaskJuggler/RTFQuery.html +28 -4
- data/doc/TaskJuggler/RTFReport.html +26 -2
- data/doc/TaskJuggler/RTFReportLink.html +26 -2
- data/doc/TaskJuggler/RTFWithQuerySupport.html +26 -2
- data/doc/TaskJuggler/RealFormat.html +26 -2
- data/doc/TaskJuggler/RealFormatAttribute.html +31 -7
- data/doc/TaskJuggler/ReferenceAttribute.html +58 -34
- data/doc/TaskJuggler/Report.html +427 -284
- data/doc/TaskJuggler/ReportBase.html +28 -102
- data/doc/TaskJuggler/ReportContext.html +26 -2
- data/doc/TaskJuggler/ReportScenario.html +633 -0
- data/doc/TaskJuggler/ReportServer.html +26 -2
- data/doc/TaskJuggler/ReportServerIface.html +26 -2
- data/doc/TaskJuggler/ReportServerRecord.html +26 -2
- data/doc/TaskJuggler/ReportServlet.html +26 -2
- data/doc/TaskJuggler/ReportTable.html +26 -2
- data/doc/TaskJuggler/ReportTableCell.html +26 -2
- data/doc/TaskJuggler/ReportTableColumn.html +26 -2
- data/doc/TaskJuggler/ReportTableLegend.html +26 -2
- data/doc/TaskJuggler/ReportTableLine.html +26 -2
- data/doc/TaskJuggler/Resource.html +225 -163
- data/doc/TaskJuggler/ResourceListAttribute.html +71 -47
- data/doc/TaskJuggler/ResourceListRE.html +26 -2
- data/doc/TaskJuggler/ResourceScenario.html +645 -603
- data/doc/TaskJuggler/RichText.html +26 -2
- data/doc/TaskJuggler/RichTextAttribute.html +53 -29
- data/doc/TaskJuggler/RichTextDocument.html +26 -2
- data/doc/TaskJuggler/RichTextElement.html +26 -2
- data/doc/TaskJuggler/RichTextFunctionExample.html +26 -2
- data/doc/TaskJuggler/RichTextFunctionHandler.html +26 -2
- data/doc/TaskJuggler/RichTextImage.html +26 -2
- data/doc/TaskJuggler/RichTextIntermediate.html +29 -5
- data/doc/TaskJuggler/RichTextParser.html +26 -2
- data/doc/TaskJuggler/RichTextScanner.html +26 -2
- data/doc/TaskJuggler/RichTextSnip.html +26 -2
- data/doc/TaskJuggler/RichTextSyntaxRules.html +26 -2
- data/doc/TaskJuggler/Scenario.html +26 -2
- data/doc/TaskJuggler/ScenarioData.html +95 -28
- data/doc/TaskJuggler/ScenarioListAttribute.html +39 -15
- data/doc/TaskJuggler/Scoreboard.html +137 -73
- data/doc/TaskJuggler/ScoreboardInterval.html +1116 -0
- data/doc/TaskJuggler/SheetHandlerBase.html +26 -2
- data/doc/TaskJuggler/SheetReceiver.html +26 -2
- data/doc/TaskJuggler/SheetSender.html +26 -2
- data/doc/TaskJuggler/Shift.html +27 -3
- data/doc/TaskJuggler/ShiftAssignment.html +27 -3
- data/doc/TaskJuggler/ShiftAssignments.html +174 -149
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +41 -16
- data/doc/TaskJuggler/ShiftScenario.html +26 -2
- data/doc/TaskJuggler/SimpleQueryExpander.html +26 -2
- data/doc/TaskJuggler/SortListAttribute.html +35 -11
- data/doc/TaskJuggler/StatusSheetReceiver.html +26 -2
- data/doc/TaskJuggler/StatusSheetReport.html +26 -2
- data/doc/TaskJuggler/StatusSheetSender.html +26 -2
- data/doc/TaskJuggler/StdIoWrapper.html +26 -2
- data/doc/TaskJuggler/StringAttribute.html +39 -15
- data/doc/TaskJuggler/SymbolAttribute.html +35 -11
- data/doc/TaskJuggler/SyntaxReference.html +26 -2
- data/doc/TaskJuggler/TOCEntry.html +26 -2
- data/doc/TaskJuggler/TSResourceRecord.html +26 -2
- data/doc/TaskJuggler/TSTaskRecord.html +26 -2
- data/doc/TaskJuggler/TableColumnDefinition.html +26 -2
- data/doc/TaskJuggler/TableOfContents.html +26 -2
- data/doc/TaskJuggler/TableReport.html +239 -214
- data/doc/TaskJuggler/TagFile/TagFileEntry.html +841 -0
- data/doc/TaskJuggler/TagFile.html +817 -0
- data/doc/TaskJuggler/Task.html +27 -3
- data/doc/TaskJuggler/TaskDepListAttribute.html +47 -23
- data/doc/TaskJuggler/TaskDependency.html +26 -2
- data/doc/TaskJuggler/TaskListAttribute.html +47 -23
- data/doc/TaskJuggler/TaskListRE.html +26 -2
- data/doc/TaskJuggler/TaskScenario.html +2235 -2178
- data/doc/TaskJuggler/TernarySearchTree.html +26 -2
- data/doc/TaskJuggler/TextFormatter.html +26 -2
- data/doc/TaskJuggler/TextParser/Macro.html +26 -2
- data/doc/TaskJuggler/TextParser/MacroTable.html +26 -2
- data/doc/TaskJuggler/TextParser/Pattern.html +26 -2
- data/doc/TaskJuggler/TextParser/Rule.html +26 -2
- data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +32 -8
- data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +39 -15
- data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +26 -2
- data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +119 -86
- data/doc/TaskJuggler/TextParser/Scanner.html +317 -291
- data/doc/TaskJuggler/TextParser/SourceFileInfo.html +26 -2
- data/doc/TaskJuggler/TextParser/StackElement.html +26 -2
- data/doc/TaskJuggler/TextParser/State.html +26 -2
- data/doc/TaskJuggler/TextParser/StateTransition.html +26 -2
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +26 -2
- data/doc/TaskJuggler/TextParser/TokenDoc.html +26 -2
- data/doc/TaskJuggler/TextParser.html +85 -61
- data/doc/TaskJuggler/TextReport.html +26 -2
- data/doc/TaskJuggler/TimeInterval.html +841 -0
- data/doc/TaskJuggler/{IntervalListAttribute.html → TimeIntervalListAttribute.html} +33 -9
- data/doc/TaskJuggler/TimeSheet.html +26 -2
- data/doc/TaskJuggler/TimeSheetReceiver.html +26 -2
- data/doc/TaskJuggler/TimeSheetRecord.html +27 -3
- data/doc/TaskJuggler/TimeSheetReport.html +29 -5
- data/doc/TaskJuggler/TimeSheetSender.html +26 -2
- data/doc/TaskJuggler/TimeSheetSummary.html +26 -2
- data/doc/TaskJuggler/TimeSheets.html +26 -2
- data/doc/TaskJuggler/Tj3.html +150 -111
- data/doc/TaskJuggler/Tj3AppBase.html +26 -2
- data/doc/TaskJuggler/Tj3Client.html +26 -2
- data/doc/TaskJuggler/Tj3Daemon.html +26 -2
- data/doc/TaskJuggler/Tj3Man.html +26 -2
- data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -2
- data/doc/TaskJuggler/Tj3SsReceiver.html +26 -2
- data/doc/TaskJuggler/Tj3SsSender.html +26 -2
- data/doc/TaskJuggler/Tj3TsReceiver.html +26 -2
- data/doc/TaskJuggler/Tj3TsSender.html +26 -2
- data/doc/TaskJuggler/Tj3TsSummary.html +26 -2
- data/doc/TaskJuggler/TjException.html +26 -2
- data/doc/TaskJuggler/TjRuntimeError.html +26 -2
- data/doc/TaskJuggler/TjTime.html +539 -477
- data/doc/TaskJuggler/TjpExample.html +26 -2
- data/doc/TaskJuggler/TjpExportRE.html +240 -161
- data/doc/TaskJuggler/TjpSyntaxRules.html +4236 -3844
- data/doc/TaskJuggler/URLParameter.html +26 -2
- data/doc/TaskJuggler/UserManual.html +26 -2
- data/doc/TaskJuggler/VimSyntax.html +31 -7
- data/doc/TaskJuggler/WebServer.html +26 -2
- data/doc/TaskJuggler/WelcomePage.html +26 -2
- data/doc/TaskJuggler/WorkingHours.html +227 -152
- data/doc/TaskJuggler/WorkingHoursAttribute.html +62 -38
- data/doc/TaskJuggler/XMLBlob.html +26 -2
- data/doc/TaskJuggler/XMLComment.html +26 -2
- data/doc/TaskJuggler/XMLDocument.html +26 -2
- data/doc/TaskJuggler/XMLElement.html +26 -2
- data/doc/TaskJuggler/XMLNamedText.html +26 -2
- data/doc/TaskJuggler/XMLText.html +26 -2
- data/doc/TaskJuggler.html +486 -427
- data/doc/index.html +801 -659
- data/doc/lib/taskjuggler/AccountScenario_rb.html +1 -1
- data/doc/lib/taskjuggler/Account_rb.html +1 -1
- data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +1 -1
- data/doc/lib/taskjuggler/Allocation_rb.html +1 -1
- data/doc/lib/taskjuggler/AppConfig_rb.html +1 -1
- data/doc/lib/taskjuggler/AttributeBase_rb.html +1 -1
- data/doc/lib/taskjuggler/AttributeDefinition_rb.html +1 -1
- data/doc/lib/taskjuggler/Attributes_rb.html +1 -1
- data/doc/lib/taskjuggler/BatchProcessor_rb.html +1 -1
- data/doc/lib/taskjuggler/Booking_rb.html +1 -1
- data/doc/lib/taskjuggler/ChargeSet_rb.html +1 -1
- data/doc/lib/taskjuggler/Charge_rb.html +1 -1
- data/doc/lib/taskjuggler/DataCache_rb.html +1 -1
- data/doc/lib/taskjuggler/FileList_rb.html +1 -1
- data/doc/lib/taskjuggler/HTMLDocument_rb.html +1 -1
- data/doc/lib/{ruby-signal-bug_rb.html → taskjuggler/HTMLElements_rb.html} +9 -9
- data/doc/lib/{exchangebug_rb.html → taskjuggler/ICalendar_rb.html} +9 -9
- data/doc/lib/taskjuggler/IntervalList_rb.html +1 -1
- data/doc/lib/taskjuggler/Interval_rb.html +1 -1
- data/doc/lib/taskjuggler/Journal_rb.html +1 -1
- data/doc/lib/taskjuggler/KeywordArray_rb.html +1 -1
- data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/taskjuggler/Limits_rb.html +1 -1
- data/doc/lib/taskjuggler/LogFile_rb.html +1 -1
- data/doc/lib/taskjuggler/Log_rb.html +1 -1
- data/doc/lib/taskjuggler/LogicalExpression_rb.html +1 -1
- data/doc/lib/taskjuggler/LogicalFunction_rb.html +1 -1
- data/doc/lib/taskjuggler/LogicalOperation_rb.html +1 -1
- data/doc/lib/taskjuggler/MessageHandler_rb.html +1 -1
- data/doc/lib/taskjuggler/ProjectFileParser_rb.html +1 -1
- data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +1 -1
- data/doc/lib/taskjuggler/Project_rb.html +1 -1
- data/doc/lib/taskjuggler/PropertyList_rb.html +1 -1
- data/doc/lib/taskjuggler/PropertySet_rb.html +1 -1
- data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +1 -1
- data/doc/lib/taskjuggler/Query_rb.html +1 -1
- data/doc/lib/taskjuggler/RealFormat_rb.html +1 -1
- data/doc/lib/taskjuggler/ResourceScenario_rb.html +1 -1
- data/doc/lib/taskjuggler/Resource_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/Document_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/Element_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/Parser_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/Scanner_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/Snip_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +1 -1
- data/doc/lib/taskjuggler/RichText_rb.html +1 -1
- data/doc/lib/taskjuggler/RuntimeConfig_rb.html +1 -1
- data/doc/lib/taskjuggler/ScenarioData_rb.html +1 -1
- data/doc/lib/taskjuggler/Scenario_rb.html +1 -1
- data/doc/lib/taskjuggler/Scoreboard_rb.html +1 -1
- data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +1 -1
- data/doc/lib/taskjuggler/SheetReceiver_rb.html +1 -1
- data/doc/lib/taskjuggler/SheetSender_rb.html +1 -1
- data/doc/lib/taskjuggler/ShiftAssignments_rb.html +1 -1
- data/doc/lib/taskjuggler/ShiftScenario_rb.html +1 -1
- data/doc/lib/taskjuggler/Shift_rb.html +1 -1
- data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +1 -1
- data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +1 -1
- data/doc/lib/taskjuggler/StatusSheetSender_rb.html +1 -1
- data/doc/lib/taskjuggler/StdIoWrapper_rb.html +1 -1
- data/doc/lib/taskjuggler/SyntaxReference_rb.html +1 -1
- data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +1 -1
- data/doc/lib/taskjuggler/TaskDependency_rb.html +1 -1
- data/doc/lib/taskjuggler/TaskJuggler_rb.html +1 -1
- data/doc/lib/taskjuggler/TaskScenario_rb.html +1 -1
- data/doc/lib/taskjuggler/Task_rb.html +1 -1
- data/doc/lib/taskjuggler/TernarySearchTree_rb.html +1 -1
- data/doc/lib/taskjuggler/TextFormatter_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/Rule_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/State_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/taskjuggler/TextParser_rb.html +1 -1
- data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +1 -1
- data/doc/lib/taskjuggler/TimeSheetSender_rb.html +1 -1
- data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +1 -1
- data/doc/lib/taskjuggler/TimeSheets_rb.html +1 -1
- data/doc/lib/taskjuggler/Tj3AppBase_rb.html +1 -1
- data/doc/lib/taskjuggler/Tj3Config_rb.html +1 -1
- data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +1 -1
- data/doc/lib/taskjuggler/TjException_rb.html +1 -1
- data/doc/lib/taskjuggler/TjTime_rb.html +1 -1
- data/doc/lib/taskjuggler/TjpExample_rb.html +1 -1
- data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +1 -1
- data/doc/lib/taskjuggler/URLParameter_rb.html +1 -1
- data/doc/lib/taskjuggler/UTF8String_rb.html +1 -1
- data/doc/lib/taskjuggler/UserManual_rb.html +1 -1
- data/doc/lib/taskjuggler/VimSyntax_rb.html +1 -1
- data/doc/lib/taskjuggler/WorkingHours_rb.html +1 -1
- data/doc/lib/taskjuggler/XMLDocument_rb.html +1 -1
- data/doc/lib/taskjuggler/XMLElement_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +1 -1
- data/doc/lib/taskjuggler/apps/Tj3_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/Daemon_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/WebServer_rb.html +1 -1
- data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +1 -1
- data/doc/lib/taskjuggler/deep_copy_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/CSVFile_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttChart_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttLine_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ICalReport_rb.html +71 -0
- data/doc/lib/taskjuggler/reports/Navigator_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/NikuReport_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportBase_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportContext_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/ReportTable_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/Report_rb.html +5 -1
- data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/TableReport_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/TagFile_rb.html +71 -0
- data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/TextReport_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +1 -1
- data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +1 -1
- data/doc/lib/tj3_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/taskjuggler/Account.rb +1 -1
- data/lib/taskjuggler/AccountScenario.rb +1 -1
- data/lib/taskjuggler/Allocation.rb +5 -5
- data/lib/taskjuggler/AttributeBase.rb +30 -22
- data/lib/taskjuggler/Attributes.rb +80 -78
- data/lib/taskjuggler/Booking.rb +2 -2
- data/lib/taskjuggler/Charge.rb +3 -3
- data/lib/taskjuggler/ICalendar.rb +251 -0
- data/lib/taskjuggler/Interval.rb +215 -53
- data/lib/taskjuggler/IntervalList.rb +5 -5
- data/lib/taskjuggler/Limits.rb +79 -69
- data/lib/taskjuggler/LogicalFunction.rb +2 -2
- data/lib/taskjuggler/MessageHandler.rb +11 -6
- data/lib/taskjuggler/Project.rb +208 -95
- data/lib/taskjuggler/ProjectFileParser.rb +2 -2
- data/lib/taskjuggler/ProjectFileScanner.rb +7 -6
- data/lib/taskjuggler/PropertySet.rb +1 -5
- data/lib/taskjuggler/PropertyTreeNode.rb +21 -16
- data/lib/taskjuggler/Query.rb +10 -7
- data/lib/taskjuggler/Resource.rb +6 -1
- data/lib/taskjuggler/ResourceScenario.rb +85 -69
- data/lib/taskjuggler/RichText/RTFQuery.rb +2 -2
- data/lib/taskjuggler/ScenarioData.rb +11 -1
- data/lib/taskjuggler/Scoreboard.rb +8 -1
- data/lib/taskjuggler/Shift.rb +1 -1
- data/lib/taskjuggler/ShiftAssignments.rb +22 -20
- data/lib/taskjuggler/Task.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +65 -51
- data/lib/taskjuggler/TaskScenario.rb +486 -419
- data/lib/taskjuggler/TextParser/Scanner.rb +22 -11
- data/lib/taskjuggler/TimeSheets.rb +1 -1
- data/lib/taskjuggler/Tj3Config.rb +1 -1
- data/lib/taskjuggler/TjTime.rb +7 -3
- data/lib/taskjuggler/TjpSyntaxRules.rb +157 -23
- data/lib/taskjuggler/VimSyntax.rb +18 -0
- data/lib/taskjuggler/WorkingHours.rb +20 -4
- data/lib/taskjuggler/apps/Tj3.rb +16 -1
- data/lib/taskjuggler/reports/GanttLine.rb +1 -1
- data/lib/taskjuggler/reports/ICalReport.rb +136 -0
- data/lib/taskjuggler/reports/NikuReport.rb +1 -1
- data/lib/taskjuggler/reports/Report.rb +59 -0
- data/lib/taskjuggler/reports/ReportBase.rb +2 -67
- data/lib/taskjuggler/reports/TableReport.rb +9 -8
- data/lib/taskjuggler/reports/TagFile.rb +120 -0
- data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
- data/lib/taskjuggler/reports/TjpExportRE.rb +33 -9
- data/manual/Installation +126 -0
- data/spec/ICalendar_spec.rb +45 -0
- data/spec/IntervalList_spec.rb +11 -11
- data/tasks/changelog.rake +150 -60
- data/tasks/gem.rake +1 -0
- data/tasks/vim.rake +2 -2
- data/test/TestSuite/Export-Reports/refs/Booking.tjp +1 -1
- data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +10 -1
- data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +1 -1
- data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
- 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 +0 -20
- data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
- data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
- data/test/TestSuite/HTML-Reports/profile.html +37581 -0
- data/test/TestSuite/{Scheduler/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +3 -3
- data/test/TestSuite/Scheduler/Errors/R.html +113 -0
- data/test/TestSuite/Scheduler/Errors/allocate_no_assigned.tjp +15 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjmanual.css +0 -1
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjreport.css +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/details.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-green.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-red.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-yellow.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resource.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resourcegroup.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/task.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/taskgroup.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-down.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-flat.png +0 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-up.png +0 -0
- data/test/TestSuite/Scheduler/Errors/overbooked_duration.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/overbooked_effort.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/overbooked_length.tjp +13 -0
- data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/StatusSheets/dev2.tji +22 -0
- data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
- data/test/TestSuite/Syntax/Correct/Macro-2.tjp +5 -2
- data/test/TestSuite/Syntax/Errors/scenario_after_tracking.tjp +8 -0
- data/test/TestSuite/TimeSheets/resrep.tji +7 -0
- data/test/TestSuite/TimeSheets/ts.tji +351 -0
- data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
- data/test/test_Limits.rb +38 -30
- data/test/test_Scheduler.rb +2 -2
- data/test/test_ShiftAssignments.rb +8 -8
- data/test/test_WorkingHours.rb +4 -4
- metadata +1015 -1005
- data/lib/exchangebug.rb +0 -42
- data/lib/ruby-signal-bug.rb +0 -55
- data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
- data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
- data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
- data/test/TestSuite/HTML-Reports/reference.html +0 -51
- data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -412
- data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -680
- data/test/TestSuite/ReportGenerator/Correct/DependencyList.csv +0 -4
- data/test/TestSuite/ReportGenerator/Correct/DependencyList.tjp +0 -25
- data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -8
- data/test/TestSuite/ReportGenerator/Correct/Journal-2.csv +0 -8
- data/test/TestSuite/ReportGenerator/Correct/Journal-3.html +0 -28
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
- data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
- 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/' +0 -23
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
- data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
- data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
- data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
- data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
- data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
- data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
- data/test/TestSuite/TimeSheets/uu.txt +0 -29
data/lib/taskjuggler/Project.rb
CHANGED
|
@@ -117,10 +117,16 @@ class TaskJuggler
|
|
|
117
117
|
# Inh. Inh.Prj Scen. Default
|
|
118
118
|
[ 'active', 'Enabled', BooleanAttribute,
|
|
119
119
|
true, false, false, true ],
|
|
120
|
+
[ 'id', 'ID', StringAttribute,
|
|
121
|
+
false, false, false, nil ],
|
|
122
|
+
[ 'name', 'Name', StringAttribute,
|
|
123
|
+
false, false, false, nil ],
|
|
120
124
|
[ 'ownbookings', 'Own Bookings', BooleanAttribute,
|
|
121
125
|
false, false, false, true ],
|
|
122
126
|
[ 'projection', 'Projection Mode', BooleanAttribute,
|
|
123
127
|
true, false, false, false ],
|
|
128
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
129
|
+
false, false, false, nil ],
|
|
124
130
|
]
|
|
125
131
|
attrs.each { |a| @scenarios.addAttributeType(AttributeDefinition.new(*a)) }
|
|
126
132
|
|
|
@@ -128,18 +134,24 @@ class TaskJuggler
|
|
|
128
134
|
attrs = [
|
|
129
135
|
# ID Name Type
|
|
130
136
|
# Inh. Inh.Prj Scen. Default
|
|
137
|
+
[ 'bsi', 'BSI', StringAttribute,
|
|
138
|
+
false, false, false, "" ],
|
|
139
|
+
[ 'id', 'ID', StringAttribute,
|
|
140
|
+
false, false, false, nil ],
|
|
131
141
|
[ 'index', 'Index', FixnumAttribute,
|
|
132
142
|
false, false, false, -1 ],
|
|
143
|
+
[ 'name', 'Name', StringAttribute,
|
|
144
|
+
false, false, false, nil ],
|
|
133
145
|
[ 'replace', 'Replace', BooleanAttribute,
|
|
134
146
|
true, false, true, false ],
|
|
147
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
148
|
+
false, false, false, nil ],
|
|
135
149
|
[ 'timezone', 'Time Zone', StringAttribute,
|
|
136
150
|
true, true, true, TjTime.timeZone ],
|
|
137
151
|
[ 'tree', 'Tree Index', StringAttribute,
|
|
138
152
|
false, false, false, "" ],
|
|
139
|
-
[ 'vacations', 'Vacations',
|
|
153
|
+
[ 'vacations', 'Vacations', TimeIntervalListAttribute,
|
|
140
154
|
true, true, true, [] ],
|
|
141
|
-
[ 'bsi', 'BSI', StringAttribute,
|
|
142
|
-
false, false, false, "" ],
|
|
143
155
|
[ 'workinghours', 'Working Hours', WorkingHoursAttribute,
|
|
144
156
|
true, true, true, nil ]
|
|
145
157
|
]
|
|
@@ -149,13 +161,19 @@ class TaskJuggler
|
|
|
149
161
|
attrs = [
|
|
150
162
|
# ID Name Type
|
|
151
163
|
# Inh. Inh.Prj Scen. Default
|
|
164
|
+
[ 'bsi', 'BSI', StringAttribute,
|
|
165
|
+
false, false, false, "" ],
|
|
166
|
+
[ 'id', 'ID', StringAttribute,
|
|
167
|
+
false, false, false, nil ],
|
|
152
168
|
[ 'index', 'Index', FixnumAttribute,
|
|
153
169
|
false, false, false, -1 ],
|
|
154
170
|
[ 'flags', 'Flags', FlagListAttribute,
|
|
155
171
|
true, false, true, [] ],
|
|
172
|
+
[ 'name', 'Name', StringAttribute,
|
|
173
|
+
false, false, false, nil ],
|
|
174
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
175
|
+
false, false, false, nil ],
|
|
156
176
|
[ 'tree', 'Tree Index', StringAttribute,
|
|
157
|
-
false, false, false, "" ],
|
|
158
|
-
[ 'bsi', 'BSI', StringAttribute,
|
|
159
177
|
false, false, false, "" ]
|
|
160
178
|
]
|
|
161
179
|
attrs.each { |a| @accounts.addAttributeType(AttributeDefinition.new(*a)) }
|
|
@@ -166,6 +184,8 @@ class TaskJuggler
|
|
|
166
184
|
# Inh. Inh.Prj Scen. Default
|
|
167
185
|
[ 'alloctdeffort', 'Alloctd. Effort', FloatAttribute,
|
|
168
186
|
false, false, true, 0.0 ],
|
|
187
|
+
[ 'bsi', 'BSI', StringAttribute,
|
|
188
|
+
false, false, false, "" ],
|
|
169
189
|
[ 'criticalness', 'Criticalness', FloatAttribute,
|
|
170
190
|
false, false, true, 0.0 ],
|
|
171
191
|
[ 'duties', 'Duties', TaskListAttribute,
|
|
@@ -196,16 +216,16 @@ class TaskJuggler
|
|
|
196
216
|
true, true, true, 0.0 ],
|
|
197
217
|
[ 'reports', 'Reports', ResourceListAttribute,
|
|
198
218
|
false, false, true, [] ],
|
|
219
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
220
|
+
false, false, false, nil ],
|
|
199
221
|
[ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
|
|
200
222
|
true, false, true, nil ],
|
|
201
223
|
[ 'tree', 'Tree Index', StringAttribute,
|
|
202
224
|
false, false, false, "" ],
|
|
203
|
-
[ 'vacations', 'Vacations',
|
|
225
|
+
[ 'vacations', 'Vacations', TimeIntervalListAttribute,
|
|
204
226
|
true, true, true, [] ],
|
|
205
227
|
[ 'warn', 'Warning Condition', LogicalExpressionListAttribute,
|
|
206
228
|
false, false, false, [] ],
|
|
207
|
-
[ 'bsi', 'BSI', StringAttribute,
|
|
208
|
-
false, false, false, "" ],
|
|
209
229
|
[ 'workinghours', 'Working Hours', WorkingHoursAttribute,
|
|
210
230
|
true, true, true, nil ]
|
|
211
231
|
]
|
|
@@ -221,6 +241,8 @@ class TaskJuggler
|
|
|
221
241
|
false, false, true, [] ],
|
|
222
242
|
[ 'booking', 'Bookings', BookingListAttribute,
|
|
223
243
|
false, false, true, [] ],
|
|
244
|
+
[ 'bsi', 'BSI', StringAttribute,
|
|
245
|
+
false, false, false, "" ],
|
|
224
246
|
[ 'charge', 'Charges', ChargeListAttribute,
|
|
225
247
|
false, false, true, [] ],
|
|
226
248
|
[ 'chargeset', 'Charge Sets', ChargeSetListAttribute,
|
|
@@ -247,6 +269,8 @@ class TaskJuggler
|
|
|
247
269
|
true, false, true, [] ],
|
|
248
270
|
[ 'forward', 'Scheduling', BooleanAttribute,
|
|
249
271
|
true, false, true, true ],
|
|
272
|
+
[ 'id', 'ID', StringAttribute,
|
|
273
|
+
false, false, false, nil ],
|
|
250
274
|
[ 'index', 'Index', FixnumAttribute,
|
|
251
275
|
false, false, false, -1 ],
|
|
252
276
|
[ 'length', 'Length', DurationAttribute,
|
|
@@ -263,6 +287,8 @@ class TaskJuggler
|
|
|
263
287
|
false, false, true, nil ],
|
|
264
288
|
[ 'minstart', 'Min. Start', DateAttribute,
|
|
265
289
|
true, false, true, nil ],
|
|
290
|
+
[ 'name', 'Name', StringAttribute,
|
|
291
|
+
false, false, false, nil ],
|
|
266
292
|
[ 'note', 'Note', RichTextAttribute,
|
|
267
293
|
false, false, false, nil ],
|
|
268
294
|
[ 'pathcriticalness', 'Path Criticalness', FloatAttribute,
|
|
@@ -277,6 +303,8 @@ class TaskJuggler
|
|
|
277
303
|
true, false, true, [] ],
|
|
278
304
|
[ 'scheduled', 'Scheduled', BooleanAttribute,
|
|
279
305
|
true, false, true, false ],
|
|
306
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
307
|
+
false, false, false, nil ],
|
|
280
308
|
[ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
|
|
281
309
|
true, false, true, nil ],
|
|
282
310
|
[ 'start', 'Start', DateAttribute,
|
|
@@ -290,9 +318,7 @@ class TaskJuggler
|
|
|
290
318
|
[ 'tree', 'Tree Index', StringAttribute,
|
|
291
319
|
false, false, false, "" ],
|
|
292
320
|
[ 'warn', 'Warning Condition', LogicalExpressionListAttribute,
|
|
293
|
-
false, false, false, [] ]
|
|
294
|
-
[ 'bsi', 'BSI', StringAttribute,
|
|
295
|
-
false, false, false, "" ]
|
|
321
|
+
false, false, false, [] ]
|
|
296
322
|
]
|
|
297
323
|
attrs.each { |a| @tasks.addAttributeType(AttributeDefinition.new(*a)) }
|
|
298
324
|
|
|
@@ -300,8 +326,10 @@ class TaskJuggler
|
|
|
300
326
|
attrs = [
|
|
301
327
|
# ID Name Type
|
|
302
328
|
# Inh. Inh.Prj Scen. Default
|
|
329
|
+
[ 'bsi', 'BSI', StringAttribute,
|
|
330
|
+
false, false, false, "" ],
|
|
303
331
|
[ 'caption', 'Caption', RichTextAttribute,
|
|
304
|
-
true,
|
|
332
|
+
true, false, false, nil ],
|
|
305
333
|
[ 'center', 'Center', RichTextAttribute,
|
|
306
334
|
true, false, false, nil ],
|
|
307
335
|
[ 'columns', 'Columns', ColumnListAttribute,
|
|
@@ -315,7 +343,7 @@ class TaskJuggler
|
|
|
315
343
|
[ 'end', 'End', DateAttribute,
|
|
316
344
|
true, true, false, nil ],
|
|
317
345
|
[ 'epilog', 'Epilog', RichTextAttribute,
|
|
318
|
-
true,
|
|
346
|
+
true, false, false, nil ],
|
|
319
347
|
[ 'flags', 'Flags', FlagListAttribute,
|
|
320
348
|
true, false, true, [] ],
|
|
321
349
|
[ 'footer', 'Footer', RichTextAttribute,
|
|
@@ -327,13 +355,15 @@ class TaskJuggler
|
|
|
327
355
|
[ 'header', 'Header', RichTextAttribute,
|
|
328
356
|
true, false, false, nil ],
|
|
329
357
|
[ 'headline', 'Headline', RichTextAttribute,
|
|
330
|
-
true,
|
|
358
|
+
true, false, false, nil ],
|
|
331
359
|
[ 'hideJournalEntry', 'Hide JournalEntry', LogicalExpressionAttribute,
|
|
332
360
|
true, false, false, nil ],
|
|
333
361
|
[ 'hideResource', 'Hide Resource', LogicalExpressionAttribute,
|
|
334
362
|
true, false, false, nil ],
|
|
335
363
|
[ 'hideTask', 'Hide Task', LogicalExpressionAttribute,
|
|
336
364
|
true, false, false, nil ],
|
|
365
|
+
[ 'id', 'ID', StringAttribute,
|
|
366
|
+
false, false, false, nil ],
|
|
337
367
|
[ 'index', 'Index', FixnumAttribute,
|
|
338
368
|
false, false, false, -1 ],
|
|
339
369
|
[ 'interactive', 'Interactive', BooleanAttribute,
|
|
@@ -342,6 +372,8 @@ class TaskJuggler
|
|
|
342
372
|
true, false, false, nil ],
|
|
343
373
|
[ 'loadUnit', 'Load Unit', StringAttribute,
|
|
344
374
|
true, true, false, nil ],
|
|
375
|
+
[ 'name', 'Name', StringAttribute,
|
|
376
|
+
false, false, false, nil ],
|
|
345
377
|
[ 'now', 'Now', DateAttribute,
|
|
346
378
|
true, true, false, nil ],
|
|
347
379
|
[ 'numberFormat', 'Number Format', RealFormatAttribute,
|
|
@@ -366,6 +398,8 @@ class TaskJuggler
|
|
|
366
398
|
true, false, false, [ 0 ] ],
|
|
367
399
|
[ 'selfcontained', 'Selfcontained', BooleanAttribute,
|
|
368
400
|
true, false, false, false ],
|
|
401
|
+
[ 'seqno', 'No', FixnumAttribute,
|
|
402
|
+
false, false, false, nil ],
|
|
369
403
|
[ 'shortTimeFormat', 'Short Time Format', StringAttribute,
|
|
370
404
|
true, true, false, nil ],
|
|
371
405
|
[ 'sortResources', 'Sort Resources', SortListAttribute,
|
|
@@ -381,17 +415,15 @@ class TaskJuggler
|
|
|
381
415
|
[ 'timeFormat', 'Time Format', StringAttribute,
|
|
382
416
|
true, true, false, nil ],
|
|
383
417
|
[ 'timeOffId', 'Time Off ID', StringAttribute,
|
|
384
|
-
false, false,
|
|
418
|
+
false, false, false, nil ],
|
|
385
419
|
[ 'timeOffName', 'Time Off Name', StringAttribute,
|
|
386
|
-
false, false,
|
|
420
|
+
false, false, false, nil ],
|
|
387
421
|
[ 'timezone', 'Time Zone', StringAttribute,
|
|
388
422
|
true, true, false, TjTime.timeZone ],
|
|
389
423
|
[ 'title', 'Title', StringAttribute,
|
|
390
|
-
true,
|
|
424
|
+
true, false, false, nil ],
|
|
391
425
|
[ 'tree', 'Tree Index', StringAttribute,
|
|
392
426
|
false, false, false, "" ],
|
|
393
|
-
[ 'bsi', 'BSI', StringAttribute,
|
|
394
|
-
false, false, false, "" ],
|
|
395
427
|
[ 'weekStartsMonday', 'Week Starts Monday', BooleanAttribute,
|
|
396
428
|
true, true, false, false ]
|
|
397
429
|
]
|
|
@@ -449,12 +481,6 @@ class TaskJuggler
|
|
|
449
481
|
WorkingHours.new(@attributes['scheduleGranularity'],
|
|
450
482
|
@attributes['start'], @attributes['end'],
|
|
451
483
|
@attributes['timezone'])
|
|
452
|
-
# WorkingHours is using a copy-on-write scheme to prevent multiple
|
|
453
|
-
# copies of the same Scoreboard. All other WorkingHours objects are
|
|
454
|
-
# created as copies of this object. By calling
|
|
455
|
-
# WorkingHours::onShift? we make sure this instance has got a
|
|
456
|
-
# Scoreboard that gets reused by the other instances.
|
|
457
|
-
@attributes['workinghours'].onShift?(@attributes['start'])
|
|
458
484
|
end
|
|
459
485
|
end
|
|
460
486
|
value
|
|
@@ -601,7 +627,7 @@ class TaskJuggler
|
|
|
601
627
|
end
|
|
602
628
|
|
|
603
629
|
if @tasks.empty?
|
|
604
|
-
|
|
630
|
+
error('no_tasks', "No tasks defined")
|
|
605
631
|
end
|
|
606
632
|
|
|
607
633
|
@scenarios.each do |sc|
|
|
@@ -643,18 +669,29 @@ class TaskJuggler
|
|
|
643
669
|
# format.
|
|
644
670
|
def checkReports
|
|
645
671
|
if @reports.empty?
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
672
|
+
warning('no_report_defined',
|
|
673
|
+
"This project has no reports defined. " +
|
|
674
|
+
"No output data will be generated.")
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
unless @accounts.empty?
|
|
678
|
+
@reports.each do |report|
|
|
679
|
+
if report.get('costAccount').nil? || report.get('revenueAccount').nil?
|
|
680
|
+
warning('report_without_balance',
|
|
681
|
+
"The report #{report.fullId} has no 'balance' defined. " +
|
|
682
|
+
"No cost or revenue computation will be possible.",
|
|
683
|
+
report.sourceFileInfo)
|
|
684
|
+
end
|
|
685
|
+
end
|
|
649
686
|
end
|
|
650
687
|
|
|
651
688
|
@reports.each do |report|
|
|
652
689
|
return unless report.get('formats').empty?
|
|
653
690
|
end
|
|
654
691
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
692
|
+
warning('all_formats_empty',
|
|
693
|
+
"None of the reports has a 'formats' attribute. " +
|
|
694
|
+
"No output data will be generated.")
|
|
658
695
|
end
|
|
659
696
|
|
|
660
697
|
# Call this function to generate the reports based on the scheduling result.
|
|
@@ -689,10 +726,10 @@ class TaskJuggler
|
|
|
689
726
|
$stdout.print(report.stdout)
|
|
690
727
|
$stderr.print(report.stderr)
|
|
691
728
|
if report.retVal.signaled?
|
|
692
|
-
|
|
729
|
+
error('rg_signal', "Signal raised")
|
|
693
730
|
end
|
|
694
731
|
unless report.retVal.success?
|
|
695
|
-
|
|
732
|
+
error('rg_abort', "Process aborted")
|
|
696
733
|
end
|
|
697
734
|
Log.stopProgressMeter
|
|
698
735
|
end
|
|
@@ -709,9 +746,9 @@ class TaskJuggler
|
|
|
709
746
|
"Request to generate unknown report #{id}")
|
|
710
747
|
end
|
|
711
748
|
if formats.nil? && report.get('formats').empty?
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
749
|
+
error('formats_empty',
|
|
750
|
+
"The report #{report.fullId} has no 'formats' attribute. " +
|
|
751
|
+
"No output data will be generated.", report.sourceFileInfo)
|
|
715
752
|
end
|
|
716
753
|
|
|
717
754
|
Log.startProgressMeter("Report #{report.name}")
|
|
@@ -788,38 +825,69 @@ class TaskJuggler
|
|
|
788
825
|
end
|
|
789
826
|
|
|
790
827
|
# call-seq:
|
|
828
|
+
# isWorkingTime(slotIdx) -> true or false
|
|
791
829
|
# isWorkingTime(slot) -> true or false
|
|
792
830
|
# isWorkingTime(startTime, endTime) -> true or false
|
|
793
831
|
# isWorkingTime(interval) -> true or false
|
|
794
832
|
#
|
|
795
|
-
# Return true if the
|
|
796
|
-
# time or false if not. If the argument is
|
|
797
|
-
# interval must be working time to return true as result. Global work
|
|
798
|
-
# means, no vacation defined and the slot lies within a
|
|
799
|
-
# period.
|
|
833
|
+
# Return true if the slot or interval is withing globally defined working
|
|
834
|
+
# time or false if not. If the argument is a TimeInterval, all slots of
|
|
835
|
+
# the interval must be working time to return true as result. Global work
|
|
836
|
+
# time means, no global vacation defined and the slot lies within a
|
|
837
|
+
# defined global working time period.
|
|
800
838
|
def isWorkingTime(*args)
|
|
801
|
-
# Normalize argument(s) to
|
|
839
|
+
# Normalize argument(s) to TimeInterval
|
|
802
840
|
if args.length == 1
|
|
803
|
-
if args[0].is_a?(
|
|
804
|
-
|
|
841
|
+
if args[0].is_a?(Fixnum) || args[0].is_a?(Bignum)
|
|
842
|
+
return @scoreboard[args[0]].nil?
|
|
843
|
+
elsif args[0].is_a?(TjTime)
|
|
844
|
+
return @scoreboard[dateToIdx(args[0])].nil?
|
|
845
|
+
elsif args[0].is_a?(TimeInterval)
|
|
846
|
+
startIdx = dateToIdx(args[0].start)
|
|
847
|
+
endIdx = dateToIdx(args[0].end)
|
|
805
848
|
else
|
|
806
|
-
|
|
807
|
-
@attributes['scheduleGranularity'])
|
|
849
|
+
raise ArgumentError, "Unsupported argument type #{args[0].class}"
|
|
808
850
|
end
|
|
809
851
|
else
|
|
810
|
-
|
|
852
|
+
startIdx = dateToIdx(args[0])
|
|
853
|
+
endIdx = dateToIdx(args[1])
|
|
811
854
|
end
|
|
812
855
|
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
return false if vacation.overlaps?(iv)
|
|
856
|
+
startIdx.upto(endIdx) do |idx|
|
|
857
|
+
return false if @scoreboard[idx]
|
|
816
858
|
end
|
|
817
859
|
|
|
818
|
-
return false if @attributes['workinghours'].timeOff?(iv)
|
|
819
|
-
|
|
820
860
|
true
|
|
821
861
|
end
|
|
822
862
|
|
|
863
|
+
# call-seq:
|
|
864
|
+
# hasWorkingTime(startTime, endTime) -> true or false
|
|
865
|
+
# hasWorkingTime(interval) -> true or false
|
|
866
|
+
#
|
|
867
|
+
# Return true if the interval overlaps with a globally defined working
|
|
868
|
+
# time or false if not. Global work time means, no global vacation defined
|
|
869
|
+
# and the slot lies within a defined global working time period.
|
|
870
|
+
def hasWorkingTime(*args)
|
|
871
|
+
# Normalize argument(s) to TimeInterval
|
|
872
|
+
if args.length == 1
|
|
873
|
+
if args[0].is_a?(TimeInterval)
|
|
874
|
+
startIdx = dateToIdx(args[0].start)
|
|
875
|
+
endIdx = dateToIdx(args[0].end)
|
|
876
|
+
else
|
|
877
|
+
raise ArgumentError, "Unsupported argument type #{args[0].class}"
|
|
878
|
+
end
|
|
879
|
+
else
|
|
880
|
+
startIdx = dateToIdx(args[0])
|
|
881
|
+
endIdx = dateToIdx(args[1])
|
|
882
|
+
end
|
|
883
|
+
|
|
884
|
+
startIdx.upto(endIdx) do |idx|
|
|
885
|
+
return true if @scoreboard[idx]
|
|
886
|
+
end
|
|
887
|
+
|
|
888
|
+
false
|
|
889
|
+
end
|
|
890
|
+
|
|
823
891
|
# Convert working _seconds_ to working days. The result depends on the
|
|
824
892
|
# setting of the global 'dailyworkinghours' attribute.
|
|
825
893
|
def convertToDailyLoad(seconds)
|
|
@@ -881,6 +949,12 @@ class TaskJuggler
|
|
|
881
949
|
slotsToDays(slots)
|
|
882
950
|
end
|
|
883
951
|
|
|
952
|
+
# Return true if for the date specified by the global scoreboard index
|
|
953
|
+
# _sbIdx_ there is any resource that is available.
|
|
954
|
+
def anyResourceAvailable?(sbIdx)
|
|
955
|
+
@resourceAvailability[sbIdx]
|
|
956
|
+
end
|
|
957
|
+
|
|
884
958
|
# TaskJuggler keeps all times in UTC. All time values must be multiples of
|
|
885
959
|
# the used scheduling granularity. If the local time zone is not
|
|
886
960
|
# hour-aligned to UTC, the maximum allowed schedule granularity is
|
|
@@ -959,8 +1033,7 @@ class TaskJuggler
|
|
|
959
1033
|
unless (rti = RichText.new(rText, RTFHandlers.create(self),
|
|
960
1034
|
@messageHandler).
|
|
961
1035
|
generateIntermediateFormat)
|
|
962
|
-
|
|
963
|
-
"Syntax error in journal message")
|
|
1036
|
+
warning('ptn_journal', "Syntax error in journal message: #{rText}")
|
|
964
1037
|
return nil
|
|
965
1038
|
end
|
|
966
1039
|
# No section numbers, please!
|
|
@@ -984,11 +1057,17 @@ class TaskJuggler
|
|
|
984
1057
|
str
|
|
985
1058
|
end
|
|
986
1059
|
|
|
987
|
-
#
|
|
988
|
-
def error(id, text)
|
|
989
|
-
@messageHandler.error(id, text)
|
|
1060
|
+
# Generate an error message via the message handler.
|
|
1061
|
+
def error(id, text, sourceFileInfo = nil)
|
|
1062
|
+
@messageHandler.error(id, text, sourceFileInfo)
|
|
1063
|
+
end
|
|
1064
|
+
|
|
1065
|
+
# Generate a warning message via the message handle.
|
|
1066
|
+
def warning(id, text, sourceFileInfo = nil)
|
|
1067
|
+
@messageHandler.warning(id, text, sourceFileInfo)
|
|
990
1068
|
end
|
|
991
1069
|
|
|
1070
|
+
|
|
992
1071
|
protected
|
|
993
1072
|
|
|
994
1073
|
def prepareScenario(scIdx)
|
|
@@ -1017,11 +1096,17 @@ class TaskJuggler
|
|
|
1017
1096
|
resources.each { |resource| resource.setDirectReports(scIdx) }
|
|
1018
1097
|
resources.each { |resource| resource.setReports(scIdx) }
|
|
1019
1098
|
|
|
1099
|
+
computeResourceAvailabilities(scIdx, usedResources)
|
|
1100
|
+
|
|
1101
|
+
Log.progress(0.81)
|
|
1020
1102
|
tasks.each { |task| task.prepareScheduling(scIdx) }
|
|
1103
|
+
Log.progress(0.82)
|
|
1021
1104
|
tasks.each { |task| task.Xref(scIdx) }
|
|
1022
1105
|
tasks.each { |task| task.propagateInitialValues(scIdx) }
|
|
1106
|
+
Log.progress(0.83)
|
|
1023
1107
|
tasks.each { |task| task.preScheduleCheck(scIdx) }
|
|
1024
1108
|
|
|
1109
|
+
Log.progress(0.84)
|
|
1025
1110
|
# Check for dependency loops in the task graph.
|
|
1026
1111
|
tasks.each { |task| task.resetLoopFlags(scIdx) }
|
|
1027
1112
|
tasks.each do |task|
|
|
@@ -1084,7 +1169,11 @@ class TaskJuggler
|
|
|
1084
1169
|
# Schedule all tasks for the given Scenario with index +scIdx+.
|
|
1085
1170
|
def scheduleScenario(scIdx)
|
|
1086
1171
|
tasks = PropertyList.new(@tasks)
|
|
1087
|
-
|
|
1172
|
+
# Only care about leaf tasks that are not milestones are aren't
|
|
1173
|
+
# scheduled already (due to bookings).
|
|
1174
|
+
tasks.delete_if { |task| !task.leaf? ||
|
|
1175
|
+
task['milestone', scIdx] ||
|
|
1176
|
+
task['scheduled', scIdx] }
|
|
1088
1177
|
|
|
1089
1178
|
Log.enter('scheduleScenario', "#{tasks.length} leaf tasks")
|
|
1090
1179
|
# The sorting of the work item list determines which tasks will get their
|
|
@@ -1104,50 +1193,58 @@ class TaskJuggler
|
|
|
1104
1193
|
# true.
|
|
1105
1194
|
Log.startProgressMeter("Scheduling scenario " +
|
|
1106
1195
|
"#{scenario(scIdx).get('name')}")
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
#
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
completedTasks = 0
|
|
1114
|
-
workItems.each do |task|
|
|
1115
|
-
completedTasks += 1 if task['scheduled', scIdx]
|
|
1196
|
+
failedTasks = []
|
|
1197
|
+
while !tasks.empty?
|
|
1198
|
+
# Only update the progress bar every 10 completed tasks.
|
|
1199
|
+
if tasks.length % 10 == 0
|
|
1200
|
+
percentComplete = (totalTasks - tasks.length).to_f / totalTasks
|
|
1201
|
+
Log.progress(percentComplete)
|
|
1116
1202
|
end
|
|
1117
1203
|
|
|
1118
|
-
|
|
1119
|
-
#
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1204
|
+
# Now find the task with the highest priority that can be scheduled
|
|
1205
|
+
# and schedule it.
|
|
1206
|
+
taskToRemove = nil
|
|
1207
|
+
tasks.each do |task|
|
|
1208
|
+
# Task not ready? Ignore it.
|
|
1209
|
+
next unless task.readyForScheduling?(scIdx)
|
|
1210
|
+
|
|
1211
|
+
if task.schedule(scIdx)
|
|
1212
|
+
Log << "Task #{task.fullId}: #{task['start', scIdx]} -> " +
|
|
1213
|
+
"#{task['end', scIdx]}"
|
|
1214
|
+
else
|
|
1215
|
+
failedTasks << task
|
|
1216
|
+
end
|
|
1217
|
+
# The tasks has been completed or failed. But we can remove it from
|
|
1218
|
+
# the todo list.
|
|
1219
|
+
taskToRemove = task
|
|
1220
|
+
# The scheduling of this task may cause other higher priority tasks
|
|
1221
|
+
# to be ready now. So we terminate the inner loop and start at the
|
|
1222
|
+
# top of the list again.
|
|
1223
|
+
break
|
|
1224
|
+
end
|
|
1124
1225
|
|
|
1125
|
-
#
|
|
1126
|
-
#
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1226
|
+
# There should always be a task to be removed. If not, the scheduler
|
|
1227
|
+
# has found a set of tasks that deadlock each other.
|
|
1228
|
+
if taskToRemove
|
|
1229
|
+
tasks.delete(taskToRemove)
|
|
1230
|
+
else
|
|
1231
|
+
tasks.each { |t| puts t.fullId }
|
|
1232
|
+
raise 'Scheduler deadlock: Cannot schedule any further tasks'
|
|
1132
1233
|
end
|
|
1133
1234
|
end
|
|
1134
|
-
unscheduledTasks = []
|
|
1135
|
-
tasks.each { |t| unscheduledTasks << t unless t['scheduled', scIdx] }
|
|
1136
1235
|
|
|
1137
|
-
# Check for
|
|
1236
|
+
# Check for failed tasks and report the first 10 of them as
|
|
1138
1237
|
# warnings.
|
|
1139
|
-
unless
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
"#{unscheduledTasks.length} tasks could not be scheduled")
|
|
1238
|
+
unless failedTasks.empty?
|
|
1239
|
+
warning('unscheduled_tasks',
|
|
1240
|
+
"#{failedTasks.length} tasks could not be scheduled")
|
|
1143
1241
|
i = 0
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
scenario(scIdx))
|
|
1242
|
+
failedTasks.each do |t|
|
|
1243
|
+
warning('unscheduled_task',
|
|
1244
|
+
"Task #{t.fullId}: " +
|
|
1245
|
+
"#{t['start', scIdx] ? t['start', scIdx] : '<?>'} -> " +
|
|
1246
|
+
"#{t['end', scIdx] ? t['end', scIdx] : '<?>'}",
|
|
1247
|
+
t.sourceFileInfo)
|
|
1151
1248
|
|
|
1152
1249
|
i += 1
|
|
1153
1250
|
break if i >= 10
|
|
@@ -1197,6 +1294,22 @@ class TaskJuggler
|
|
|
1197
1294
|
end
|
|
1198
1295
|
end
|
|
1199
1296
|
|
|
1297
|
+
def computeResourceAvailabilities(scIdx, usedResources)
|
|
1298
|
+
@resourceAvailability =
|
|
1299
|
+
Scoreboard.new(@attributes['start'], @attributes['end'],
|
|
1300
|
+
@attributes['scheduleGranularity'])
|
|
1301
|
+
|
|
1302
|
+
@resourceAvailability.each_index do |idx|
|
|
1303
|
+
usedResources.each do |resource|
|
|
1304
|
+
if resource.available?(scIdx, idx)
|
|
1305
|
+
@resourceAvailability[idx] = true
|
|
1306
|
+
break
|
|
1307
|
+
end
|
|
1308
|
+
end
|
|
1309
|
+
end
|
|
1310
|
+
end
|
|
1311
|
+
|
|
1312
|
+
|
|
1200
1313
|
def matchingReports(reportId)
|
|
1201
1314
|
list = []
|
|
1202
1315
|
@reports.each do |report|
|
|
@@ -132,8 +132,8 @@ class TaskJuggler
|
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
134
|
|
|
135
|
-
# Convenience function to check that an
|
|
136
|
-
# project time frame.
|
|
135
|
+
# Convenience function to check that an TimeInterval fits completely
|
|
136
|
+
# within the project time frame.
|
|
137
137
|
def checkInterval(iv)
|
|
138
138
|
# Make sure the interval is within the project time frame.
|
|
139
139
|
if iv.start < @project['start'] || iv.start >= @project['end']
|
|
@@ -310,7 +310,7 @@ class TaskJuggler
|
|
|
310
310
|
varName = envRef[2..-2]
|
|
311
311
|
|
|
312
312
|
if (value = ENV[varName])
|
|
313
|
-
@cf.injectText(prefix + value)
|
|
313
|
+
@cf.injectText(prefix + value, envRef.length)
|
|
314
314
|
else
|
|
315
315
|
error('unknown_env_var', "Unknown environment variable '#{varName}'")
|
|
316
316
|
end
|
|
@@ -362,11 +362,12 @@ class TaskJuggler
|
|
|
362
362
|
prefix = ''
|
|
363
363
|
end
|
|
364
364
|
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
macroCallLength = @macroCall.length
|
|
366
|
+
# Remove '${' and '}' and white spaces at begin and end
|
|
367
|
+
argsStr = @macroCall[2..-2].sub(/^[ \t\n]*(.*?)[ \t\n]*$/, '\1')
|
|
367
368
|
# Extract the macro name.
|
|
368
369
|
if argsStr.index(' ').nil?
|
|
369
|
-
expandMacro(prefix, [ argsStr ])
|
|
370
|
+
expandMacro(prefix, [ argsStr ], macroCallLength)
|
|
370
371
|
else
|
|
371
372
|
macroName = argsStr[0, argsStr.index(' ')]
|
|
372
373
|
# Remove the name part from argsStr
|
|
@@ -381,11 +382,11 @@ class TaskJuggler
|
|
|
381
382
|
end
|
|
382
383
|
|
|
383
384
|
unless scanner.eos?
|
|
384
|
-
raise "Junk found at end of macro: #{
|
|
385
|
+
raise "Junk found at end of macro: #{scanner.post_match}"
|
|
385
386
|
end
|
|
386
387
|
|
|
387
388
|
# Expand the macro and inject it into the scanner.
|
|
388
|
-
expandMacro(prefix, [ macroName ] + args)
|
|
389
|
+
expandMacro(prefix, [ macroName ] + args, macroCallLength)
|
|
389
390
|
end
|
|
390
391
|
|
|
391
392
|
[ nil, '' ]
|
|
@@ -178,11 +178,7 @@ class TaskJuggler
|
|
|
178
178
|
def addProperty(property)
|
|
179
179
|
# The PropertyTreeNode objects are indexed by ID or hierachical ID
|
|
180
180
|
# depending on the name space setting of this set.
|
|
181
|
-
|
|
182
|
-
@propertyMap[property.id] = property
|
|
183
|
-
else
|
|
184
|
-
@propertyMap[property.fullId] = property
|
|
185
|
-
end
|
|
181
|
+
@propertyMap[property.id] = property
|
|
186
182
|
@properties << property
|
|
187
183
|
end
|
|
188
184
|
|