taskjuggler 0.0.11 → 0.1.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 +6 -1550
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/benchmarks/profile.clt +36082 -0
- data/benchmarks/profile.html +58182 -0
- data/benchmarks/runbench.rb +2 -2
- data/data/css/tjmanual.css +0 -1
- data/doc/AppConfig.html +1491 -0
- data/doc/CHANGELOG.html +557 -0
- data/doc/COPYING.html +899 -0
- data/doc/Diff.html +1193 -0
- data/doc/Diff/Hunk.html +1026 -0
- data/doc/Diffable.html +684 -0
- data/doc/DiffableString.html +684 -0
- data/doc/Object.html +720 -0
- data/doc/README_rdoc.html +742 -0
- data/doc/RuntimeConfig.html +856 -0
- data/doc/String.html +1005 -0
- data/doc/TaskJuggler.html +2639 -0
- data/doc/TaskJuggler/Account.html +753 -0
- data/doc/TaskJuggler/AccountAttribute.html +769 -0
- data/doc/TaskJuggler/AccountScenario.html +712 -0
- data/doc/TaskJuggler/Allocation.html +963 -0
- data/doc/TaskJuggler/AllocationAttribute.html +799 -0
- data/doc/TaskJuggler/AttributeBase.html +1328 -0
- data/doc/TaskJuggler/AttributeDefinition.html +815 -0
- data/doc/TaskJuggler/AttributeOverwrite.html +606 -0
- data/doc/TaskJuggler/BatchProcessor.html +1178 -0
- data/doc/TaskJuggler/Booking.html +859 -0
- data/doc/TaskJuggler/BookingListAttribute.html +769 -0
- data/doc/TaskJuggler/BooleanAttribute.html +769 -0
- data/doc/TaskJuggler/CSVFile.html +1128 -0
- data/doc/TaskJuggler/CellSettingPattern.html +700 -0
- data/doc/TaskJuggler/CellSettingPatternList.html +749 -0
- data/doc/TaskJuggler/Charge.html +777 -0
- data/doc/TaskJuggler/ChargeListAttribute.html +733 -0
- data/doc/TaskJuggler/ChargeSet.html +949 -0
- data/doc/TaskJuggler/ChargeSetListAttribute.html +778 -0
- data/doc/TaskJuggler/CollisionDetector.html +1089 -0
- data/doc/TaskJuggler/ColumnListAttribute.html +733 -0
- data/doc/TaskJuggler/ColumnTable.html +763 -0
- data/doc/TaskJuggler/Daemon.html +819 -0
- data/doc/TaskJuggler/DataCache.html +1025 -0
- data/doc/TaskJuggler/DataCacheEntry.html +737 -0
- data/doc/TaskJuggler/DateAttribute.html +737 -0
- data/doc/TaskJuggler/DefinitionListAttribute.html +655 -0
- data/doc/TaskJuggler/DependencyListAttribute.html +773 -0
- data/doc/TaskJuggler/DurationAttribute.html +770 -0
- data/doc/TaskJuggler/FileList.html +793 -0
- data/doc/TaskJuggler/FileRecord.html +702 -0
- data/doc/TaskJuggler/FixnumAttribute.html +691 -0
- data/doc/TaskJuggler/FlagListAttribute.html +769 -0
- data/doc/TaskJuggler/FloatAttribute.html +733 -0
- data/doc/TaskJuggler/FormatListAttribute.html +697 -0
- data/doc/TaskJuggler/GanttChart.html +1487 -0
- data/doc/TaskJuggler/GanttContainer.html +945 -0
- data/doc/TaskJuggler/GanttHeader.html +948 -0
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +762 -0
- data/doc/TaskJuggler/GanttLine.html +1325 -0
- data/doc/TaskJuggler/GanttLoadStack.html +828 -0
- data/doc/TaskJuggler/GanttMilestone.html +926 -0
- data/doc/TaskJuggler/GanttRouter.html +1136 -0
- data/doc/TaskJuggler/GanttTaskBar.html +948 -0
- data/doc/TaskJuggler/HTMLDocument.html +754 -0
- data/doc/TaskJuggler/HTMLElements.html +599 -0
- data/doc/TaskJuggler/HTMLGraphics.html +837 -0
- data/doc/TaskJuggler/Interval.html +1076 -0
- data/doc/TaskJuggler/IntervalList.html +797 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +773 -0
- data/doc/TaskJuggler/JobInfo.html +943 -0
- data/doc/TaskJuggler/Journal.html +1248 -0
- data/doc/TaskJuggler/JournalEntry.html +860 -0
- data/doc/TaskJuggler/JournalEntryList.html +1229 -0
- data/doc/TaskJuggler/KeywordArray.html +696 -0
- data/doc/TaskJuggler/KeywordDocumentation.html +2250 -0
- data/doc/TaskJuggler/Limits.html +1036 -0
- data/doc/TaskJuggler/Limits/Limit.html +947 -0
- data/doc/TaskJuggler/LimitsAttribute.html +734 -0
- data/doc/TaskJuggler/ListAttributeBase.html +703 -0
- data/doc/TaskJuggler/Log.html +1163 -0
- data/doc/TaskJuggler/LogFile.html +980 -0
- data/doc/TaskJuggler/LogicalAttribute.html +760 -0
- data/doc/TaskJuggler/LogicalExpression.html +801 -0
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +691 -0
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +691 -0
- data/doc/TaskJuggler/LogicalFlag.html +753 -0
- data/doc/TaskJuggler/LogicalFunction.html +1409 -0
- data/doc/TaskJuggler/LogicalOperation.html +1144 -0
- data/doc/TaskJuggler/ManagerResponsibilities.html +736 -0
- data/doc/TaskJuggler/ManagerStatusRecord.html +740 -0
- data/doc/TaskJuggler/Message.html +837 -0
- data/doc/TaskJuggler/MessageHandler.html +1056 -0
- data/doc/TaskJuggler/Navigator.html +943 -0
- data/doc/TaskJuggler/NavigatorElement.html +994 -0
- data/doc/TaskJuggler/NikuProject.html +724 -0
- data/doc/TaskJuggler/NikuReport.html +1470 -0
- data/doc/TaskJuggler/NikuResource.html +694 -0
- data/doc/TaskJuggler/NodeListAttribute.html +655 -0
- data/doc/TaskJuggler/PlaceHolderCell.html +748 -0
- data/doc/TaskJuggler/ProcessIntercom.html +1017 -0
- data/doc/TaskJuggler/ProcessIntercomIface.html +773 -0
- data/doc/TaskJuggler/Project.html +3478 -0
- data/doc/TaskJuggler/ProjectBroker.html +1676 -0
- data/doc/TaskJuggler/ProjectBrokerIface.html +851 -0
- data/doc/TaskJuggler/ProjectFileParser.html +2102 -0
- data/doc/TaskJuggler/ProjectFileScanner.html +1896 -0
- data/doc/TaskJuggler/ProjectRecord.html +978 -0
- data/doc/TaskJuggler/ProjectServer.html +1249 -0
- data/doc/TaskJuggler/ProjectServerIface.html +868 -0
- data/doc/TaskJuggler/PropertyAttribute.html +691 -0
- data/doc/TaskJuggler/PropertyList.html +1399 -0
- data/doc/TaskJuggler/PropertySet.html +1796 -0
- data/doc/TaskJuggler/PropertyTreeNode.html +2851 -0
- data/doc/TaskJuggler/Query.html +1756 -0
- data/doc/TaskJuggler/RTFHandlers.html +664 -0
- data/doc/TaskJuggler/RTFNavigator.html +792 -0
- data/doc/TaskJuggler/RTFQuery.html +1083 -0
- data/doc/TaskJuggler/RTFReport.html +820 -0
- data/doc/TaskJuggler/RTFReportLink.html +812 -0
- data/doc/TaskJuggler/RTFWithQuerySupport.html +702 -0
- data/doc/TaskJuggler/RealFormat.html +805 -0
- data/doc/TaskJuggler/RealFormatAttribute.html +655 -0
- data/doc/TaskJuggler/ReferenceAttribute.html +880 -0
- data/doc/TaskJuggler/Report.html +1501 -0
- data/doc/TaskJuggler/ReportBase.html +1266 -0
- data/doc/TaskJuggler/ReportContext.html +837 -0
- data/doc/TaskJuggler/ReportServer.html +1068 -0
- data/doc/TaskJuggler/ReportServerIface.html +902 -0
- data/doc/TaskJuggler/ReportServerRecord.html +781 -0
- data/doc/TaskJuggler/ReportServlet.html +1029 -0
- data/doc/TaskJuggler/ReportTable.html +1179 -0
- data/doc/TaskJuggler/ReportTableCell.html +1666 -0
- data/doc/TaskJuggler/ReportTableColumn.html +890 -0
- data/doc/TaskJuggler/ReportTableLegend.html +1060 -0
- data/doc/TaskJuggler/ReportTableLine.html +1067 -0
- data/doc/TaskJuggler/Resource.html +1004 -0
- data/doc/TaskJuggler/ResourceListAttribute.html +829 -0
- data/doc/TaskJuggler/ResourceListRE.html +737 -0
- data/doc/TaskJuggler/ResourceScenario.html +2549 -0
- data/doc/TaskJuggler/RichText.html +879 -0
- data/doc/TaskJuggler/RichTextAttribute.html +811 -0
- data/doc/TaskJuggler/RichTextDocument.html +1038 -0
- data/doc/TaskJuggler/RichTextElement.html +1780 -0
- data/doc/TaskJuggler/RichTextFunctionExample.html +799 -0
- data/doc/TaskJuggler/RichTextFunctionHandler.html +750 -0
- data/doc/TaskJuggler/RichTextImage.html +712 -0
- data/doc/TaskJuggler/RichTextIntermediate.html +1285 -0
- data/doc/TaskJuggler/RichTextParser.html +868 -0
- data/doc/TaskJuggler/RichTextScanner.html +1565 -0
- data/doc/TaskJuggler/RichTextSnip.html +1000 -0
- data/doc/TaskJuggler/RichTextSyntaxRules.html +2052 -0
- data/doc/TaskJuggler/Scenario.html +656 -0
- data/doc/TaskJuggler/ScenarioData.html +838 -0
- data/doc/TaskJuggler/ScenarioListAttribute.html +733 -0
- data/doc/TaskJuggler/Scoreboard.html +1201 -0
- data/doc/TaskJuggler/SheetHandlerBase.html +1297 -0
- data/doc/TaskJuggler/SheetReceiver.html +1398 -0
- data/doc/TaskJuggler/SheetSender.html +1168 -0
- data/doc/TaskJuggler/Shift.html +751 -0
- data/doc/TaskJuggler/ShiftAssignment.html +1008 -0
- data/doc/TaskJuggler/ShiftAssignments.html +1413 -0
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +734 -0
- data/doc/TaskJuggler/ShiftScenario.html +782 -0
- data/doc/TaskJuggler/SimpleQueryExpander.html +732 -0
- data/doc/TaskJuggler/SortListAttribute.html +691 -0
- data/doc/TaskJuggler/StatusSheetReceiver.html +678 -0
- data/doc/TaskJuggler/StatusSheetReport.html +935 -0
- data/doc/TaskJuggler/StatusSheetSender.html +808 -0
- data/doc/TaskJuggler/StdIoWrapper.html +696 -0
- data/doc/TaskJuggler/StringAttribute.html +733 -0
- data/doc/TaskJuggler/SymbolAttribute.html +691 -0
- data/doc/TaskJuggler/SyntaxReference.html +1240 -0
- data/doc/TaskJuggler/TOCEntry.html +836 -0
- data/doc/TaskJuggler/TSResourceRecord.html +732 -0
- data/doc/TaskJuggler/TSTaskRecord.html +744 -0
- data/doc/TaskJuggler/TableColumnDefinition.html +949 -0
- data/doc/TaskJuggler/TableOfContents.html +790 -0
- data/doc/TaskJuggler/TableReport.html +2555 -0
- data/doc/TaskJuggler/Task.html +890 -0
- data/doc/TaskJuggler/TaskDepListAttribute.html +773 -0
- data/doc/TaskJuggler/TaskDependency.html +832 -0
- data/doc/TaskJuggler/TaskListAttribute.html +773 -0
- data/doc/TaskJuggler/TaskListRE.html +736 -0
- data/doc/TaskJuggler/TaskScenario.html +5180 -0
- data/doc/TaskJuggler/TernarySearchTree.html +1341 -0
- data/doc/TaskJuggler/TextFormatter.html +973 -0
- data/doc/TaskJuggler/TextParser.html +1862 -0
- data/doc/TaskJuggler/TextParser/Macro.html +708 -0
- data/doc/TaskJuggler/TextParser/MacroTable.html +832 -0
- data/doc/TaskJuggler/TextParser/Pattern.html +1743 -0
- data/doc/TaskJuggler/TextParser/Rule.html +1419 -0
- data/doc/TaskJuggler/TextParser/Scanner.html +1516 -0
- data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +661 -0
- data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +727 -0
- data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +724 -0
- data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +1095 -0
- data/doc/TaskJuggler/TextParser/SourceFileInfo.html +760 -0
- data/doc/TaskJuggler/TextParser/StackElement.html +940 -0
- data/doc/TaskJuggler/TextParser/State.html +1015 -0
- data/doc/TaskJuggler/TextParser/StateTransition.html +808 -0
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +711 -0
- data/doc/TaskJuggler/TextParser/TokenDoc.html +742 -0
- data/doc/TaskJuggler/TextReport.html +921 -0
- data/doc/TaskJuggler/TimeSheet.html +1264 -0
- data/doc/TaskJuggler/TimeSheetReceiver.html +675 -0
- data/doc/TaskJuggler/TimeSheetRecord.html +1415 -0
- data/doc/TaskJuggler/TimeSheetReport.html +1013 -0
- data/doc/TaskJuggler/TimeSheetSender.html +700 -0
- data/doc/TaskJuggler/TimeSheetSummary.html +959 -0
- data/doc/TaskJuggler/TimeSheets.html +736 -0
- data/doc/TaskJuggler/Tj3.html +857 -0
- data/doc/TaskJuggler/Tj3AppBase.html +942 -0
- data/doc/TaskJuggler/Tj3Client.html +1510 -0
- data/doc/TaskJuggler/Tj3Daemon.html +870 -0
- data/doc/TaskJuggler/Tj3Man.html +768 -0
- data/doc/TaskJuggler/Tj3SheetAppBase.html +758 -0
- data/doc/TaskJuggler/Tj3SsReceiver.html +747 -0
- data/doc/TaskJuggler/Tj3SsSender.html +780 -0
- data/doc/TaskJuggler/Tj3TsReceiver.html +747 -0
- data/doc/TaskJuggler/Tj3TsSender.html +767 -0
- data/doc/TaskJuggler/Tj3TsSummary.html +775 -0
- data/doc/TaskJuggler/TjException.html +692 -0
- data/doc/TaskJuggler/TjRuntimeError.html +606 -0
- data/doc/TaskJuggler/TjTime.html +3117 -0
- data/doc/TaskJuggler/TjpExample.html +897 -0
- data/doc/TaskJuggler/TjpExportRE.html +1772 -0
- data/doc/TaskJuggler/TjpSyntaxRules.html +14329 -0
- data/doc/TaskJuggler/URLParameter.html +691 -0
- data/doc/TaskJuggler/UserManual.html +1224 -0
- data/doc/TaskJuggler/VimSyntax.html +1064 -0
- data/doc/TaskJuggler/WebServer.html +757 -0
- data/doc/TaskJuggler/WelcomePage.html +789 -0
- data/doc/TaskJuggler/WorkingHours.html +1218 -0
- data/doc/TaskJuggler/WorkingHoursAttribute.html +756 -0
- data/doc/TaskJuggler/XMLBlob.html +707 -0
- data/doc/TaskJuggler/XMLComment.html +702 -0
- data/doc/TaskJuggler/XMLDocument.html +803 -0
- data/doc/TaskJuggler/XMLElement.html +990 -0
- data/doc/TaskJuggler/XMLNamedText.html +663 -0
- data/doc/TaskJuggler/XMLText.html +717 -0
- data/doc/index.html +4518 -0
- data/doc/lib/taskjuggler/AccountScenario_rb.html +69 -0
- data/doc/lib/taskjuggler/Account_rb.html +71 -0
- data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +67 -0
- data/doc/lib/taskjuggler/Allocation_rb.html +71 -0
- data/doc/lib/taskjuggler/AppConfig_rb.html +69 -0
- data/doc/lib/taskjuggler/AttributeBase_rb.html +69 -0
- data/doc/lib/taskjuggler/AttributeDefinition_rb.html +67 -0
- data/doc/lib/taskjuggler/Attributes_rb.html +83 -0
- data/doc/lib/taskjuggler/BatchProcessor_rb.html +71 -0
- data/doc/lib/taskjuggler/Booking_rb.html +67 -0
- data/doc/lib/taskjuggler/ChargeSet_rb.html +69 -0
- data/doc/lib/taskjuggler/Charge_rb.html +69 -0
- data/doc/lib/taskjuggler/DataCache_rb.html +71 -0
- data/doc/lib/taskjuggler/FileList_rb.html +67 -0
- data/doc/lib/taskjuggler/HTMLDocument_rb.html +71 -0
- data/doc/lib/taskjuggler/HTMLElements_rb.html +69 -0
- data/doc/lib/taskjuggler/IntervalList_rb.html +69 -0
- data/doc/lib/taskjuggler/Interval_rb.html +69 -0
- data/doc/lib/taskjuggler/Journal_rb.html +67 -0
- data/doc/lib/taskjuggler/KeywordArray_rb.html +67 -0
- data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +77 -0
- data/doc/lib/taskjuggler/Limits_rb.html +69 -0
- data/doc/lib/taskjuggler/LogFile_rb.html +69 -0
- data/doc/lib/taskjuggler/Log_rb.html +71 -0
- data/doc/lib/taskjuggler/LogicalExpression_rb.html +73 -0
- data/doc/lib/taskjuggler/LogicalFunction_rb.html +69 -0
- data/doc/lib/taskjuggler/LogicalOperation_rb.html +69 -0
- data/doc/lib/taskjuggler/MessageHandler_rb.html +69 -0
- data/doc/lib/taskjuggler/ProjectFileParser_rb.html +77 -0
- data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +69 -0
- data/doc/lib/taskjuggler/Project_rb.html +113 -0
- data/doc/lib/taskjuggler/PropertyList_rb.html +67 -0
- data/doc/lib/taskjuggler/PropertySet_rb.html +71 -0
- data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +67 -0
- data/doc/lib/taskjuggler/Query_rb.html +69 -0
- data/doc/lib/taskjuggler/RealFormat_rb.html +67 -0
- data/doc/lib/taskjuggler/ResourceScenario_rb.html +69 -0
- data/doc/lib/taskjuggler/Resource_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText/Document_rb.html +73 -0
- data/doc/lib/taskjuggler/RichText/Element_rb.html +75 -0
- data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +73 -0
- data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +67 -0
- data/doc/lib/taskjuggler/RichText/Parser_rb.html +75 -0
- data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +75 -0
- data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +73 -0
- data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +73 -0
- data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +75 -0
- data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +69 -0
- data/doc/lib/taskjuggler/RichText/Scanner_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText/Snip_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +67 -0
- data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +71 -0
- data/doc/lib/taskjuggler/RichText_rb.html +73 -0
- data/doc/lib/taskjuggler/RuntimeConfig_rb.html +69 -0
- data/doc/lib/taskjuggler/ScenarioData_rb.html +71 -0
- data/doc/lib/taskjuggler/Scenario_rb.html +69 -0
- data/doc/lib/taskjuggler/Scoreboard_rb.html +69 -0
- data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +75 -0
- data/doc/lib/taskjuggler/SheetReceiver_rb.html +81 -0
- data/doc/lib/taskjuggler/SheetSender_rb.html +79 -0
- data/doc/lib/taskjuggler/ShiftAssignments_rb.html +71 -0
- data/doc/lib/taskjuggler/ShiftScenario_rb.html +69 -0
- data/doc/lib/taskjuggler/Shift_rb.html +71 -0
- data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +69 -0
- data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +69 -0
- data/doc/lib/taskjuggler/StatusSheetSender_rb.html +69 -0
- data/doc/lib/taskjuggler/StdIoWrapper_rb.html +67 -0
- data/doc/lib/taskjuggler/SyntaxReference_rb.html +75 -0
- data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +67 -0
- data/doc/lib/taskjuggler/TaskDependency_rb.html +67 -0
- data/doc/lib/taskjuggler/TaskJuggler_rb.html +75 -0
- data/doc/lib/taskjuggler/TaskScenario_rb.html +71 -0
- data/doc/lib/taskjuggler/Task_rb.html +71 -0
- data/doc/lib/taskjuggler/TernarySearchTree_rb.html +69 -0
- data/doc/lib/taskjuggler/TextFormatter_rb.html +69 -0
- data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +67 -0
- data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +71 -0
- data/doc/lib/taskjuggler/TextParser/Rule_rb.html +69 -0
- data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +77 -0
- data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +67 -0
- data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +67 -0
- data/doc/lib/taskjuggler/TextParser/State_rb.html +67 -0
- data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +67 -0
- data/doc/lib/taskjuggler/TextParser_rb.html +79 -0
- data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +69 -0
- data/doc/lib/taskjuggler/TimeSheetSender_rb.html +69 -0
- data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +69 -0
- data/doc/lib/taskjuggler/TimeSheets_rb.html +67 -0
- data/doc/lib/taskjuggler/Tj3AppBase_rb.html +79 -0
- data/doc/lib/taskjuggler/Tj3Config_rb.html +71 -0
- data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +69 -0
- data/doc/lib/taskjuggler/TjException_rb.html +67 -0
- data/doc/lib/taskjuggler/TjTime_rb.html +71 -0
- data/doc/lib/taskjuggler/TjpExample_rb.html +69 -0
- data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +67 -0
- data/doc/lib/taskjuggler/URLParameter_rb.html +69 -0
- data/doc/lib/taskjuggler/UTF8String_rb.html +69 -0
- data/doc/lib/taskjuggler/UserManual_rb.html +81 -0
- data/doc/lib/taskjuggler/VimSyntax_rb.html +69 -0
- data/doc/lib/taskjuggler/WorkingHours_rb.html +71 -0
- data/doc/lib/taskjuggler/XMLDocument_rb.html +69 -0
- data/doc/lib/taskjuggler/XMLElement_rb.html +69 -0
- data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +75 -0
- data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +75 -0
- data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +75 -0
- data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +71 -0
- data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +71 -0
- data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +71 -0
- data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +71 -0
- data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +71 -0
- data/doc/lib/taskjuggler/apps/Tj3_rb.html +71 -0
- data/doc/lib/taskjuggler/daemon/Daemon_rb.html +69 -0
- data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +71 -0
- data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +83 -0
- data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +85 -0
- data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +73 -0
- data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +69 -0
- data/doc/lib/taskjuggler/daemon/WebServer_rb.html +81 -0
- data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +71 -0
- data/doc/lib/taskjuggler/deep_copy_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/CSVFile_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttChart_rb.html +75 -0
- data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttLine_rb.html +79 -0
- data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/Navigator_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/NikuReport_rb.html +71 -0
- data/doc/lib/taskjuggler/reports/ReportBase_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/ReportContext_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +67 -0
- data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/ReportTable_rb.html +71 -0
- data/doc/lib/taskjuggler/reports/Report_rb.html +93 -0
- data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +75 -0
- data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/TableReport_rb.html +77 -0
- data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +75 -0
- data/doc/lib/taskjuggler/reports/TextReport_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +69 -0
- data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +69 -0
- data/doc/lib/tj3_rb.html +69 -0
- data/doc/lib/tj3client_rb.html +69 -0
- data/doc/lib/tj3d_rb.html +69 -0
- data/doc/lib/tj3man_rb.html +69 -0
- data/doc/lib/tj3ss_receiver_rb.html +69 -0
- data/doc/lib/tj3ss_sender_rb.html +69 -0
- data/doc/lib/tj3ts_receiver_rb.html +69 -0
- data/doc/lib/tj3ts_sender_rb.html +69 -0
- data/doc/lib/tj3ts_summary_rb.html +69 -0
- data/doc/rdoc.css +706 -0
- data/examples/tutorial.tjp +2 -1
- data/lib/taskjuggler/Attributes.rb +33 -12
- data/lib/taskjuggler/DataCache.rb +17 -0
- data/lib/taskjuggler/FileList.rb +9 -0
- data/lib/taskjuggler/HTMLDocument.rb +19 -21
- data/lib/taskjuggler/HTMLElements.rb +46 -0
- data/lib/taskjuggler/Journal.rb +95 -46
- data/lib/taskjuggler/KeywordDocumentation.rb +248 -185
- data/lib/taskjuggler/LogicalExpression.rb +2 -2
- data/lib/taskjuggler/LogicalFunction.rb +22 -1
- data/lib/taskjuggler/LogicalOperation.rb +15 -5
- data/lib/taskjuggler/Project.rb +73 -16
- data/lib/taskjuggler/ProjectFileParser.rb +1 -1
- data/lib/taskjuggler/ProjectFileScanner.rb +27 -0
- data/lib/taskjuggler/PropertySet.rb +22 -45
- data/lib/taskjuggler/PropertyTreeNode.rb +99 -128
- data/lib/taskjuggler/Query.rb +39 -8
- data/lib/taskjuggler/Resource.rb +15 -6
- data/lib/taskjuggler/RichText/Document.rb +3 -3
- data/lib/taskjuggler/RichText/RTFQuery.rb +4 -4
- data/lib/taskjuggler/SheetHandlerBase.rb +14 -12
- data/lib/taskjuggler/SheetReceiver.rb +17 -15
- data/lib/taskjuggler/SheetSender.rb +16 -10
- data/{spec/support → lib/taskjuggler}/StdIoWrapper.rb +17 -0
- data/lib/taskjuggler/SyntaxReference.rb +2 -2
- data/lib/taskjuggler/TableColumnDefinition.rb +4 -3
- data/lib/taskjuggler/Task.rb +7 -2
- data/lib/taskjuggler/TaskJuggler.rb +74 -0
- data/lib/taskjuggler/TaskScenario.rb +62 -83
- data/lib/taskjuggler/TextParser.rb +20 -13
- data/lib/taskjuggler/TextParser/Scanner.rb +17 -1
- data/lib/taskjuggler/TimeSheetSummary.rb +9 -5
- data/lib/taskjuggler/TimeSheets.rb +6 -1
- data/lib/taskjuggler/Tj3AppBase.rb +41 -18
- data/lib/taskjuggler/Tj3Config.rb +1 -1
- data/lib/taskjuggler/TjTime.rb +6 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +408 -227
- data/lib/taskjuggler/UTF8String.rb +10 -0
- data/lib/taskjuggler/UserManual.rb +89 -81
- data/lib/taskjuggler/WorkingHours.rb +2 -3
- data/lib/taskjuggler/XMLDocument.rb +13 -4
- data/lib/taskjuggler/XMLElement.rb +31 -3
- data/lib/taskjuggler/apps/Tj3.rb +53 -21
- data/lib/taskjuggler/apps/Tj3Client.rb +19 -17
- data/lib/taskjuggler/apps/Tj3Daemon.rb +24 -21
- data/lib/taskjuggler/{Tj3Man.rb → apps/Tj3Man.rb} +2 -2
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +14 -11
- data/lib/taskjuggler/apps/Tj3SsSender.rb +17 -14
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +14 -11
- data/lib/taskjuggler/apps/Tj3TsSender.rb +16 -13
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +16 -13
- data/lib/taskjuggler/reports/GanttChart.rb +1 -1
- data/lib/taskjuggler/reports/GanttRouter.rb +0 -2
- data/lib/taskjuggler/reports/GanttTaskBar.rb +2 -1
- data/lib/taskjuggler/reports/Navigator.rb +2 -1
- data/lib/taskjuggler/reports/NikuReport.rb +11 -7
- data/lib/taskjuggler/reports/ReportContext.rb +1 -0
- data/lib/taskjuggler/reports/StatusSheetReport.rb +7 -2
- data/lib/taskjuggler/reports/TableReport.rb +6 -4
- data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -0
- data/lib/taskjuggler/reports/TjpExportRE.rb +4 -4
- data/lib/tj3man.rb +1 -1
- data/manual/Day_To_Day_Juggling +134 -137
- data/manual/TaskJuggler_2x_Migration +39 -32
- data/manual/The_TaskJuggler_Syntax +6 -0
- data/prj_cfg.rb +2 -3
- data/spec/StatusSheets_spec.rb +314 -0
- data/spec/TimeSheets_spec.rb +237 -16
- data/spec/Tj3_spec.rb +1 -1
- data/spec/support/DaemonControl.rb +1 -1
- data/tasks/changelog.rake +13 -3
- data/tasks/manual.rake +1 -1
- data/test/TestSuite/CSV-Reports/refs/celltext.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/taskreport.csv +1 -1
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +1 -1
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +3 -1
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +4 -1
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +1 -1
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +4 -1
- data/test/TestSuite/CSV-Reports/taskreport.tjp +3 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +3 -1
- data/test/TestSuite/CSV-Reports/weekly.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Account.tjp +25 -30
- data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +43 -72
- data/test/TestSuite/Export-Reports/refs/Alternative.tjp +17 -22
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +11 -10
- data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Booking.tjp +16 -23
- data/test/TestSuite/Export-Reports/refs/Caption.tjp +13 -16
- data/test/TestSuite/Export-Reports/refs/Celltext.tjp +12 -16
- data/test/TestSuite/Export-Reports/refs/Comments.tjp +15 -19
- data/test/TestSuite/Export-Reports/refs/Complete.tjp +17 -26
- data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
- data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Depends1.tjp +5 -4
- data/test/TestSuite/Export-Reports/refs/Durations.tjp +18 -27
- data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +21 -20
- data/test/TestSuite/Export-Reports/refs/EnvVar.tjp +21 -0
- data/test/TestSuite/Export-Reports/refs/Flags.tjp +6 -5
- data/test/TestSuite/Export-Reports/refs/Gap.tjp +2 -1
- data/test/TestSuite/Export-Reports/refs/HtmlTaskReport.tjp +15 -19
- data/test/TestSuite/Export-Reports/refs/Include.tjp +21 -20
- data/test/TestSuite/Export-Reports/refs/Journal.tjp +6 -5
- data/test/TestSuite/Export-Reports/refs/Limits-1.tjp +92 -140
- data/test/TestSuite/Export-Reports/refs/LoadUnits.tjp +293 -566
- data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/LogicalFunction.tjp +17 -22
- data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +32 -53
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Manager.tjp +51 -50
- data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +22 -31
- data/test/TestSuite/Export-Reports/refs/Milestone.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/MinMax.tjp +2 -1
- data/test/TestSuite/Export-Reports/refs/Niku.tjp +80 -139
- data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Period.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Persistent.tjp +17 -21
- data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Priority.tjp +121 -107
- data/test/TestSuite/Export-Reports/refs/Project.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Query.tjp +17 -26
- data/test/TestSuite/Export-Reports/refs/Reports.tjp +42 -61
- data/test/TestSuite/Export-Reports/refs/Resource.tjp +21 -20
- data/test/TestSuite/Export-Reports/refs/ResourcePrefix.tjp +16 -20
- data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +36 -35
- data/test/TestSuite/Export-Reports/refs/Responsible.tjp +17 -21
- data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +36 -35
- data/test/TestSuite/Export-Reports/refs/Scenario.tjp +3 -1
- data/test/TestSuite/Export-Reports/refs/Scheduling.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Select.tjp +29 -43
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +12 -11
- data/test/TestSuite/Export-Reports/refs/Simple.tjp +15 -19
- data/test/TestSuite/Export-Reports/refs/StatusSheet.tjp +33 -47
- data/test/TestSuite/Export-Reports/refs/String.tjp +9 -10
- data/test/TestSuite/Export-Reports/refs/Supplement.tjp +7 -8
- data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +10 -11
- data/test/TestSuite/Export-Reports/refs/TaskRoot.tjp +10 -9
- data/test/TestSuite/Export-Reports/refs/TimeFrame.tjp +9 -9
- data/test/TestSuite/Export-Reports/refs/TimeSheet1.tjp +25 -37
- data/test/TestSuite/Export-Reports/refs/Timezone.tjp +1 -0
- data/test/TestSuite/Export-Reports/refs/Vacation.tjp +26 -25
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +453 -821
- 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/{ReportGenerator/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +27 -3
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions3.tjp +20 -0
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions4.tjp +16 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/DependencyList-1.csv +4 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Journal-2.csv +8 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions3-1.csv +4 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions4-1.csv +2 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +3 -1
- data/test/TestSuite/Scheduler/Correct/Booking.tjp +8 -7
- data/test/TestSuite/Scheduler/Correct/Booking2.tjp +16 -9
- data/test/TestSuite/Scheduler/Correct/Booking3.tjp +28 -0
- data/test/TestSuite/Scheduler/Correct/Container.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Depends.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +4 -4
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +3 -1
- data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/MultipleMandatories.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +7 -7
- data/test/TestSuite/Scheduler/Correct/Scenarios.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Shift.tjp +7 -5
- data/test/TestSuite/Scheduler/Correct/Shift2.tjp +1 -1
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +5 -2
- data/test/TestSuite/Scheduler/Errors/booking_no_duty.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +5 -2
- data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +4 -2
- data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +4 -2
- data/test/TestSuite/StatusSheets/dev2.tji +22 -0
- data/test/TestSuite/StatusSheets/run +1 -1
- data/test/TestSuite/Syntax/Correct/Booking.tjp +0 -5
- data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
- data/test/TestSuite/Syntax/Correct/EnvVar.tjp +12 -0
- data/test/TestSuite/Syntax/Correct/Freeze.tjp +1 -3
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +9 -5
- data/test/TestSuite/Syntax/Correct/Priority.tjp +22 -11
- data/test/TestSuite/Syntax/Correct/Scenario.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +2 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +4 -4
- data/test/TestSuite/Syntax/Correct/css/tjmanual.css +20 -0
- data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -6
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +2 -1
- data/test/TestSuite/Syntax/Errors/no_own_resource_booking.tjp +16 -0
- data/test/TestSuite/Syntax/Errors/no_own_task_booking.tjp +16 -0
- data/test/TestSuite/Syntax/Errors/resourceroot_leaf.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/runaway_token.tjp +8 -0
- data/test/TestSuite/Syntax/Errors/sorting_bsi.tjp +11 -0
- data/test/TestSuite/Syntax/Errors/ss_no_tracking_scenario.tjp +14 -0
- data/test/TestSuite/Syntax/Errors/taskroot_leaf.tjp +8 -0
- data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/ts_no_tracking_scenario.tjp +14 -0
- data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +4 -2
- data/test/TestSuite/Syntax/Errors/unknown_env_var.tjp +7 -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_Export-Reports.rb +3 -0
- data/test/test_Journal.rb +4 -4
- data/test/test_PropertySet.rb +5 -5
- data/test/test_Syntax.rb +3 -0
- data/test/test_WorkingHours.rb +11 -18
- metadata +1012 -649
- data/lib/exchangebug.rb +0 -42
- data/lib/ruby-signal-bug.rb +0 -55
- data/spec/tj3client.log +0 -23
- data/test/TestSuite/CSV-Reports/alert.tjp +0 -9
- data/test/TestSuite/CSV-Reports/refs/alert.csv +0 -15
- data/test/TestSuite/Export-Reports/refs/CriticalPath.tjp +0 -41
- data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -89
- data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -79
- 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 -1
- data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -78
- data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -6
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
- data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +0 -66
- data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +0 -413
- data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
- 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/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/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
- 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/CriticalPath.tjp +0 -33
- data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
- data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
- data/test/TestSuite/Syntax/Correct/niku.xml +0 -30
- data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +0 -11
- data/test/TestSuite/TimeSheets/uu.txt +0 -29
|
@@ -42,6 +42,38 @@ class TaskJuggler
|
|
|
42
42
|
# specified by a hierachical _id_ (e. g. 'father.son').
|
|
43
43
|
def initialize(propertySet, id, name, parent)
|
|
44
44
|
@propertySet = propertySet
|
|
45
|
+
@project = propertySet.project
|
|
46
|
+
@parent = parent
|
|
47
|
+
# Attributes are created on-demand. We need to be careful that a pure
|
|
48
|
+
# check for existance does not create them unecessarily.
|
|
49
|
+
@attributes = Hash.new do |hash, attributeId|
|
|
50
|
+
unless (aType = attributeDefinition(attributeId))
|
|
51
|
+
raise ArgumentError,
|
|
52
|
+
"Unknown attribute '#{attributeId}' requested for " +
|
|
53
|
+
"#{self.class.to_s.sub(/TaskJuggler::/, '')} '#{fullId}'"
|
|
54
|
+
end
|
|
55
|
+
unless aType.scenarioSpecific
|
|
56
|
+
hash[attributeId] = aType.objClass.new(@propertySet, aType)
|
|
57
|
+
else
|
|
58
|
+
raise ArgumentError, "Attribute '#{attributeId}' is scenario specific"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
@scenarioAttributes = Array.new(@project.scenarioCount) do
|
|
62
|
+
Hash.new do |hash, attributeId|
|
|
63
|
+
unless (aType = attributeDefinition(attributeId))
|
|
64
|
+
raise ArgumentError,
|
|
65
|
+
"Unknown attribute '#{attributeId}' requested for " +
|
|
66
|
+
"#{self.class.to_s.sub(/TaskJuggler::/, '')} '#{fullId}'"
|
|
67
|
+
end
|
|
68
|
+
if aType.scenarioSpecific
|
|
69
|
+
hash[attributeId] = aType.objClass.new(@propertySet, aType)
|
|
70
|
+
else
|
|
71
|
+
raise ArgumentError,
|
|
72
|
+
"Attribute '#{attributeId}' is not scenario specific"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
45
77
|
# If _id_ is still nil, we generate a unique id.
|
|
46
78
|
unless id
|
|
47
79
|
tag = self.class.to_s.gsub(/TaskJuggler::/, '')
|
|
@@ -51,27 +83,32 @@ class TaskJuggler
|
|
|
51
83
|
if !@propertySet.flatNamespace && id.include?('.')
|
|
52
84
|
parentId = id[0..(id.rindex('.') - 1)]
|
|
53
85
|
# Set parent to the parent property if it's still nil.
|
|
54
|
-
parent = @propertySet[parentId] unless parent
|
|
86
|
+
@parent = @propertySet[parentId] unless @parent
|
|
55
87
|
if $DEBUG
|
|
56
|
-
if
|
|
88
|
+
if !@parent || !@propertySet[@parent.fullId]
|
|
57
89
|
raise "Fatal Error: parent must be member of same property set"
|
|
58
90
|
end
|
|
59
|
-
if parentId != parent.fullId
|
|
60
|
-
raise "Fatal Error: parent (#{parent.fullId}) and parent ID " +
|
|
61
|
-
"(#{parentId}) don't match"
|
|
91
|
+
if parentId != @parent.fullId
|
|
92
|
+
raise "Fatal Error: parent (#{@parent.fullId}) and parent ID " +
|
|
93
|
+
"(#{@parentId}) don't match"
|
|
62
94
|
end
|
|
63
95
|
end
|
|
64
96
|
@id = id[(id.rindex('.') + 1).. -1]
|
|
65
97
|
else
|
|
66
98
|
@id = id
|
|
67
99
|
end
|
|
100
|
+
# The attribute 'id' is either the short ID or the full hierarchical ID.
|
|
101
|
+
set('id', fullId)
|
|
102
|
+
|
|
103
|
+
# The name of the property.
|
|
68
104
|
@name = name
|
|
69
|
-
|
|
105
|
+
set('name', name)
|
|
106
|
+
|
|
70
107
|
@level = -1
|
|
71
108
|
@sourceFileInfo = nil
|
|
72
109
|
|
|
73
|
-
@parent = parent
|
|
74
110
|
@sequenceNo = @propertySet.items + 1
|
|
111
|
+
set('seqno', @sequenceNo)
|
|
75
112
|
# This is a list of the real sub nodes of this PropertyTreeNode.
|
|
76
113
|
@children = []
|
|
77
114
|
# This is a list of the adopted sub nodes of this PropertyTreeNode.
|
|
@@ -85,10 +122,6 @@ class TaskJuggler
|
|
|
85
122
|
# node.
|
|
86
123
|
@stepParents = []
|
|
87
124
|
|
|
88
|
-
@attributes = Hash.new
|
|
89
|
-
@scenarioAttributes = Array.new(@project.scenarioCount)
|
|
90
|
-
@scenarioAttributes.collect! { |sca| sca = Hash.new }
|
|
91
|
-
|
|
92
125
|
# Scenario specific data
|
|
93
126
|
@data = nil
|
|
94
127
|
end
|
|
@@ -230,9 +263,9 @@ class TaskJuggler
|
|
|
230
263
|
end
|
|
231
264
|
|
|
232
265
|
# Return a list of all leaf nodes of this node.
|
|
233
|
-
def allLeaves
|
|
266
|
+
def allLeaves(withoutSelf = false)
|
|
234
267
|
if leaf?
|
|
235
|
-
res = [ self ]
|
|
268
|
+
res = withoutSelf ? [] : [ self ]
|
|
236
269
|
else
|
|
237
270
|
res = []
|
|
238
271
|
@children.each do |c|
|
|
@@ -242,20 +275,6 @@ class TaskJuggler
|
|
|
242
275
|
res
|
|
243
276
|
end
|
|
244
277
|
|
|
245
|
-
# Iterator over all non-scenario-specific attributes of this node.
|
|
246
|
-
def eachAttribute
|
|
247
|
-
@attributes.each do |attr|
|
|
248
|
-
yield attr
|
|
249
|
-
end
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
# Iterator over all scenario-specific attributes of this node.
|
|
253
|
-
def eachScenarioAttribute(scenario)
|
|
254
|
-
@scenarioAttributes[scenario].each_value do |attr|
|
|
255
|
-
yield attr
|
|
256
|
-
end
|
|
257
|
-
end
|
|
258
|
-
|
|
259
278
|
# Return the full id of this node. For PropertySet objects with a flat
|
|
260
279
|
# namespace, this is just the ID. Otherwise, the full ID is composed of all
|
|
261
280
|
# IDs from the root node to this node, separating the IDs by a dot.
|
|
@@ -285,9 +304,9 @@ class TaskJuggler
|
|
|
285
304
|
end
|
|
286
305
|
|
|
287
306
|
# Return the hierarchical index of this node. In project management lingo
|
|
288
|
-
# this is called the
|
|
307
|
+
# this is called the Breakdown Structure Index (BSI). The result is an Array
|
|
289
308
|
# with an index for each level from the root to this node.
|
|
290
|
-
def
|
|
309
|
+
def getBSIndicies
|
|
291
310
|
idcs = []
|
|
292
311
|
p = self
|
|
293
312
|
begin
|
|
@@ -358,95 +377,43 @@ class TaskJuggler
|
|
|
358
377
|
n
|
|
359
378
|
end
|
|
360
379
|
|
|
361
|
-
# Register a new attribute with the PropertyTreeNode and create the
|
|
362
|
-
# instances for each scenario.
|
|
363
|
-
def declareAttribute(attributeType)
|
|
364
|
-
if attributeType.scenarioSpecific
|
|
365
|
-
@project.scenarioCount.times do |i|
|
|
366
|
-
attribute = attributeType.objClass.new(self, attributeType)
|
|
367
|
-
@scenarioAttributes[i][attribute.id] = attribute
|
|
368
|
-
end
|
|
369
|
-
else
|
|
370
|
-
attribute = attributeType.objClass.new(self, attributeType)
|
|
371
|
-
@attributes[attribute.id] = attribute
|
|
372
|
-
end
|
|
373
|
-
end
|
|
374
|
-
|
|
375
380
|
# Return the type of the attribute with ID _attributeId_.
|
|
376
381
|
def attributeDefinition(attributeId)
|
|
377
382
|
@propertySet.attributeDefinitions[attributeId]
|
|
378
383
|
end
|
|
379
384
|
|
|
380
385
|
# Return the value of the non-scenario-specific attribute with ID
|
|
381
|
-
# _attributeId_.
|
|
382
|
-
# raised.
|
|
386
|
+
# _attributeId_. This method works for built-in attributes as well.
|
|
387
|
+
# In case the attribute does not exist, an exception is raised.
|
|
383
388
|
def get(attributeId)
|
|
384
|
-
|
|
385
|
-
when 'id'
|
|
386
|
-
@id
|
|
387
|
-
when 'name'
|
|
388
|
-
@name
|
|
389
|
-
when 'seqno'
|
|
390
|
-
@sequenceNo
|
|
391
|
-
else
|
|
392
|
-
unless @attributes.has_key?(attributeId)
|
|
393
|
-
raise "Unknown attribute '#{attributeId}' requested for " +
|
|
394
|
-
"#{self.class.to_s.sub(/TaskJuggler::/, '')} '#{fullId}'"
|
|
395
|
-
end
|
|
396
|
-
@attributes[attributeId].get
|
|
397
|
-
end
|
|
389
|
+
@attributes[attributeId].get
|
|
398
390
|
end
|
|
399
391
|
|
|
400
|
-
# Return the value of the attribute with ID _attributeId_.
|
|
392
|
+
# Return the value of the attribute with ID _attributeId_. This method
|
|
393
|
+
# works for built-in attributes as well. In case this is a
|
|
401
394
|
# scenario-specific attribute, the scenario index needs to be provided by
|
|
402
|
-
# _scenarioIdx_.
|
|
403
|
-
|
|
404
|
-
if scenarioIdx.nil?
|
|
405
|
-
case attributeId
|
|
406
|
-
when 'id'
|
|
407
|
-
@id
|
|
408
|
-
when 'name'
|
|
409
|
-
@name
|
|
410
|
-
when 'seqno'
|
|
411
|
-
@sequenceNo
|
|
412
|
-
else
|
|
413
|
-
@attributes[attributeId]
|
|
414
|
-
end
|
|
415
|
-
else
|
|
416
|
-
@scenarioAttributes[scenarioIdx][attributeId]
|
|
417
|
-
end
|
|
418
|
-
end
|
|
419
|
-
|
|
420
|
-
# This function is similar to getAttr() but it always returns a
|
|
421
|
-
# AttributeBase object.
|
|
395
|
+
# _scenarioIdx_, otherwise it must be nil. In case the attribute does not
|
|
396
|
+
# exist, an exception is raised.
|
|
422
397
|
def getAttribute(attributeId, scenarioIdx = nil)
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
StringAttribute.new(self, fullId)
|
|
426
|
-
when 'name'
|
|
427
|
-
StringAttribute.new(self, @name)
|
|
428
|
-
when 'seqno'
|
|
429
|
-
FixnumAttribute.new(self, @sequenceNo)
|
|
398
|
+
if scenarioIdx
|
|
399
|
+
@scenarioAttributes[scenarioIdx][attributeId]
|
|
430
400
|
else
|
|
431
|
-
@attributes[attributeId]
|
|
432
|
-
(scenarioIdx && @scenarioAttributes[scenarioIdx][attributeId])
|
|
401
|
+
@attributes[attributeId]
|
|
433
402
|
end
|
|
434
403
|
end
|
|
435
404
|
|
|
436
405
|
# Set the non-scenario-specific attribute with ID _attributeId_ to _value_.
|
|
437
406
|
# In case the attribute does not exist, an exception is raised.
|
|
438
407
|
def set(attributeId, value)
|
|
439
|
-
unless @attributes.has_key?(attributeId)
|
|
440
|
-
raise "Unknown attribute #{attributeId}"
|
|
441
|
-
end
|
|
442
408
|
@attributes[attributeId].set(value)
|
|
443
409
|
end
|
|
444
410
|
|
|
445
|
-
# Set the scenario specific attribute with ID _attributeId_ for the
|
|
446
|
-
# with index _scenario_ to _value_.
|
|
447
|
-
#
|
|
411
|
+
# Set the scenario specific attribute with ID _attributeId_ for the
|
|
412
|
+
# scenario with index _scenario_ to _value_. If _scenario_ is nil, the
|
|
413
|
+
# attribute must not be scenario specific. In case the attribute does not
|
|
414
|
+
# exist, an exception is raised.
|
|
448
415
|
def []=(attributeId, scenario, value)
|
|
449
|
-
if
|
|
416
|
+
if scenario
|
|
450
417
|
if AttributeBase.mode == 0
|
|
451
418
|
# If we get values in 'provided' mode, we copy them immedidately to
|
|
452
419
|
# all derived scenarios.
|
|
@@ -474,10 +441,8 @@ class TaskJuggler
|
|
|
474
441
|
else
|
|
475
442
|
@scenarioAttributes[scenario][attributeId].set(value)
|
|
476
443
|
end
|
|
477
|
-
elsif @attributes.has_key?(attributeId)
|
|
478
|
-
@attributes[attributeId].set(value)
|
|
479
444
|
else
|
|
480
|
-
|
|
445
|
+
@attributes[attributeId].set(value)
|
|
481
446
|
end
|
|
482
447
|
end
|
|
483
448
|
|
|
@@ -485,21 +450,19 @@ class TaskJuggler
|
|
|
485
450
|
# scenario-specific attributes, _scenario_ must indicate the index of the
|
|
486
451
|
# Scenario.
|
|
487
452
|
def [](attributeId, scenario)
|
|
488
|
-
|
|
489
|
-
@scenarioAttributes[scenario][attributeId].get
|
|
490
|
-
else
|
|
491
|
-
get(attributeId);
|
|
492
|
-
end
|
|
453
|
+
@scenarioAttributes[scenario][attributeId].get
|
|
493
454
|
end
|
|
494
455
|
|
|
495
456
|
# Returns true if the value of the attribute _attributeId_ (in scenario
|
|
496
457
|
# _scenarioIdx_) has been provided by the user.
|
|
497
458
|
def provided(attributeId, scenarioIdx = nil)
|
|
498
459
|
if scenarioIdx
|
|
499
|
-
|
|
460
|
+
unless @scenarioAttributes[scenarioIdx].has_key?(attributeId)
|
|
461
|
+
return false
|
|
462
|
+
end
|
|
500
463
|
@scenarioAttributes[scenarioIdx][attributeId].provided
|
|
501
464
|
else
|
|
502
|
-
return false
|
|
465
|
+
return false unless @attributes.has_key?(attributeId)
|
|
503
466
|
@attributes[attributeId].provided
|
|
504
467
|
end
|
|
505
468
|
end
|
|
@@ -508,27 +471,32 @@ class TaskJuggler
|
|
|
508
471
|
# _scenarioIdx_) has been inherited from a parent node or scenario.
|
|
509
472
|
def inherited(attributeId, scenarioIdx = nil)
|
|
510
473
|
if scenarioIdx
|
|
511
|
-
|
|
474
|
+
unless @scenarioAttributes[scenarioIdx].has_key?(attributeId)
|
|
475
|
+
return false
|
|
476
|
+
end
|
|
512
477
|
@scenarioAttributes[scenarioIdx][attributeId].inherited
|
|
513
478
|
else
|
|
514
|
-
return false
|
|
479
|
+
return false unless @attributes.has_key?(attributeId)
|
|
515
480
|
@attributes[attributeId].inherited
|
|
516
481
|
end
|
|
517
482
|
end
|
|
518
483
|
|
|
519
484
|
def modified?(attributeId, scenarioIdx = nil)
|
|
520
485
|
if scenarioIdx
|
|
521
|
-
|
|
486
|
+
unless @scenarioAttributes[scenarioIdx].has_key?(attributeId)
|
|
487
|
+
return false
|
|
488
|
+
end
|
|
489
|
+
|
|
522
490
|
@scenarioAttributes[scenarioIdx][attributeId].provided ||
|
|
523
491
|
@scenarioAttributes[scenarioIdx][attributeId].inherited
|
|
524
492
|
else
|
|
525
|
-
return false
|
|
493
|
+
return false unless @attributes.has_key?(attributeId)
|
|
526
494
|
@attributes[attributeId].provided || @attributes[attributeId].inherited
|
|
527
495
|
end
|
|
528
496
|
end
|
|
529
497
|
|
|
530
498
|
def checkFailsAndWarnings
|
|
531
|
-
if @attributes
|
|
499
|
+
if @attributes.has_key?('fail') || @attributes.has_key?('warn')
|
|
532
500
|
propertyType = case self
|
|
533
501
|
when Task
|
|
534
502
|
'task'
|
|
@@ -544,7 +512,7 @@ class TaskJuggler
|
|
|
544
512
|
'end' => @project['end'],
|
|
545
513
|
'loadUnit' => :days,
|
|
546
514
|
'numberFormat' => @project['numberFormat'],
|
|
547
|
-
'timeFormat' =>
|
|
515
|
+
'timeFormat' => nil,
|
|
548
516
|
'currencyFormat' => @project['currencyFormat'] }
|
|
549
517
|
query = Query.new(queryAttrs)
|
|
550
518
|
if @attributes['fail']
|
|
@@ -575,7 +543,7 @@ class TaskJuggler
|
|
|
575
543
|
def query_alert(query)
|
|
576
544
|
journal = @project['journal']
|
|
577
545
|
query.sortable = query.numerical = alert =
|
|
578
|
-
journal.alertLevel(query.end, self)
|
|
546
|
+
journal.alertLevel(query.end, self, query.hideJournalEntry)
|
|
579
547
|
query.string = colorName = @project.alertLevelName(alert)
|
|
580
548
|
rText = "<fcol:#{colorName.downcase}>#{colorName}</fcol>"
|
|
581
549
|
unless (rti = RichText.new(rText, RTFHandlers.create(@project),
|
|
@@ -591,32 +559,36 @@ class TaskJuggler
|
|
|
591
559
|
|
|
592
560
|
def query_alertmessages(query)
|
|
593
561
|
journalMessages(@project['journal'].alertEntries(query.end, self, 1,
|
|
594
|
-
query.start
|
|
562
|
+
query.start,
|
|
563
|
+
query.hideJournalEntry),
|
|
595
564
|
query, true)
|
|
596
565
|
end
|
|
597
566
|
|
|
598
567
|
def query_alertsummaries(query)
|
|
599
568
|
journalMessages(@project['journal'].alertEntries(query.end, self, 1,
|
|
600
|
-
query.start
|
|
569
|
+
query.start,
|
|
570
|
+
query.hideJournalEntry),
|
|
601
571
|
query, false)
|
|
602
572
|
end
|
|
603
573
|
|
|
604
574
|
def query_journalmessages(query)
|
|
605
575
|
journalMessages(@project['journal'].currentEntries(query.end, self, 0,
|
|
606
|
-
query.start
|
|
576
|
+
query.start,
|
|
577
|
+
query.hideJournalEntry),
|
|
607
578
|
query, true)
|
|
608
579
|
end
|
|
609
580
|
|
|
610
581
|
def query_journalsummaries(query)
|
|
611
582
|
journalMessages(@project['journal'].currentEntries(query.end, self, 0,
|
|
612
|
-
query.start
|
|
583
|
+
query.start,
|
|
584
|
+
query.hideJournalEntry),
|
|
613
585
|
query, false)
|
|
614
586
|
end
|
|
615
587
|
|
|
616
588
|
def query_alerttrend(query)
|
|
617
589
|
journal = @project['journal']
|
|
618
|
-
startAlert = journal.alertLevel(query.start, self)
|
|
619
|
-
endAlert = journal.alertLevel(query.end, self)
|
|
590
|
+
startAlert = journal.alertLevel(query.start, self, query.hideJournalEntry)
|
|
591
|
+
endAlert = journal.alertLevel(query.end, self, query.hideJournalEntry)
|
|
620
592
|
if startAlert < endAlert
|
|
621
593
|
query.sortable = 0
|
|
622
594
|
query.string = 'Up'
|
|
@@ -642,22 +614,18 @@ class TaskJuggler
|
|
|
642
614
|
end
|
|
643
615
|
res += ' Children: ' + children + "\n" unless children.empty?
|
|
644
616
|
@attributes.sort.each do |key, attr|
|
|
645
|
-
#
|
|
646
|
-
res += indent(" #{key}: ", attr.to_s)
|
|
647
|
-
#end
|
|
617
|
+
res += indent(" #{key}: ", attr.to_s)
|
|
648
618
|
end
|
|
649
619
|
unless @scenarioAttributes.empty?
|
|
650
620
|
project.scenarioCount.times do |sc|
|
|
651
621
|
break if @scenarioAttributes[sc].nil?
|
|
652
622
|
headerShown = false
|
|
653
623
|
@scenarioAttributes[sc].sort.each do |key, attr|
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
headerShown = true
|
|
658
|
-
end
|
|
659
|
-
res += indent(" #{key}: ", attr.to_s)
|
|
624
|
+
unless headerShown
|
|
625
|
+
res += " Scenario #{project.scenario(sc).get('id')} (#{sc})\n"
|
|
626
|
+
headerShown = true
|
|
660
627
|
end
|
|
628
|
+
res += indent(" #{key}: ", attr.to_s)
|
|
661
629
|
end
|
|
662
630
|
end
|
|
663
631
|
end
|
|
@@ -700,6 +668,9 @@ class TaskJuggler
|
|
|
700
668
|
rText += "''by <nowiki>#{entry.author.name}</nowiki>''"
|
|
701
669
|
end
|
|
702
670
|
rText += "\n\n"
|
|
671
|
+
unless entry.flags.empty?
|
|
672
|
+
rText += "''Flags:'' #{entry.flags.join(', ')}\n\n"
|
|
673
|
+
end
|
|
703
674
|
if entry.summary
|
|
704
675
|
rText += entry.summary.richText.inputText + "\n\n"
|
|
705
676
|
end
|
data/lib/taskjuggler/Query.rb
CHANGED
|
@@ -36,7 +36,8 @@ class TaskJuggler
|
|
|
36
36
|
@@ps = %w( project propertyType propertyId property
|
|
37
37
|
scopePropertyType scopePropertyId scopeProperty
|
|
38
38
|
attributeId scenario scenarioIdx
|
|
39
|
-
loadUnit
|
|
39
|
+
loadUnit numberFormat currencyFormat timeFormat
|
|
40
|
+
listItem listType hideJournalEntry
|
|
40
41
|
costAccount revenueAccount selfContained)
|
|
41
42
|
@@ps.each do |p|
|
|
42
43
|
attr_accessor p.to_sym
|
|
@@ -58,6 +59,10 @@ class TaskJuggler
|
|
|
58
59
|
%w( end endIdx start startIdx ).each do |p|
|
|
59
60
|
send(p + '=', parameters[p]) if parameters[p]
|
|
60
61
|
end
|
|
62
|
+
# The custom data hash can be filled with results to be returned for
|
|
63
|
+
# special attributes that are not directly property attributes or
|
|
64
|
+
# computed attributes.
|
|
65
|
+
@customData = {}
|
|
61
66
|
|
|
62
67
|
reset
|
|
63
68
|
end
|
|
@@ -68,10 +73,10 @@ class TaskJuggler
|
|
|
68
73
|
def start=(date)
|
|
69
74
|
if date.is_a?(TjTime)
|
|
70
75
|
@start = date
|
|
71
|
-
@startIdx = @project.dateToIdx(date)
|
|
72
76
|
else
|
|
73
77
|
raise "Unsupported type #{date.class}"
|
|
74
78
|
end
|
|
79
|
+
@startIdx = @project.dateToIdx(@start)
|
|
75
80
|
end
|
|
76
81
|
|
|
77
82
|
def startIdx=(idx)
|
|
@@ -86,10 +91,10 @@ class TaskJuggler
|
|
|
86
91
|
def end=(date)
|
|
87
92
|
if date.is_a?(TjTime)
|
|
88
93
|
@end = date
|
|
89
|
-
@endIdx = @project.dateToIdx(date)
|
|
90
94
|
else
|
|
91
95
|
raise "Unsupported type #{date.class}"
|
|
92
96
|
end
|
|
97
|
+
@endIdx = @project.dateToIdx(@end)
|
|
93
98
|
end
|
|
94
99
|
|
|
95
100
|
def endIdx=(idx)
|
|
@@ -101,6 +106,13 @@ class TaskJuggler
|
|
|
101
106
|
end
|
|
102
107
|
end
|
|
103
108
|
|
|
109
|
+
# Set a custom data entry. _name_ is the name of the pseudo attribute.
|
|
110
|
+
# _data_ must be a Hash that contains the value for :numberical, :string,
|
|
111
|
+
# :sortable or :rti results.
|
|
112
|
+
def setCustomData(name, data)
|
|
113
|
+
@customData[name] = data
|
|
114
|
+
end
|
|
115
|
+
|
|
104
116
|
# This method tries to resolve the query and return a result. In case it
|
|
105
117
|
# finds an attribute that matches the query, it returns true; false
|
|
106
118
|
# otherwise. The actual result data is stored in the Query object. It can
|
|
@@ -120,13 +132,17 @@ class TaskJuggler
|
|
|
120
132
|
|
|
121
133
|
unless @property
|
|
122
134
|
# No property was provided. We are looking for a project attribute.
|
|
123
|
-
supportedAttrs = %w( copyright currency end name now projectid
|
|
135
|
+
supportedAttrs = %w( copyright currency end journal name now projectid
|
|
124
136
|
start version )
|
|
125
137
|
unless supportedAttrs.include?(@attributeId)
|
|
126
138
|
@errorMessage = "Unsupported project attribute '#{@attributeId}'"
|
|
127
139
|
return @ok = false
|
|
128
140
|
end
|
|
129
|
-
|
|
141
|
+
if @project.respond_to?(attributeId)
|
|
142
|
+
@project.send(attributeId, self)
|
|
143
|
+
else
|
|
144
|
+
attr = @project[@attributeId]
|
|
145
|
+
end
|
|
130
146
|
if attr.is_a?(TjTime)
|
|
131
147
|
@sortable = @numerical = attr
|
|
132
148
|
@string = attr.to_s(@timeFormat)
|
|
@@ -157,15 +173,30 @@ class TaskJuggler
|
|
|
157
173
|
|
|
158
174
|
queryMethodName = 'query_' + @attributeId
|
|
159
175
|
# First we check for non-scenario-specific query functions.
|
|
160
|
-
if @
|
|
176
|
+
if (data = @customData[@attributeId])
|
|
177
|
+
@sortable = data[:sortable]
|
|
178
|
+
@numerical = data[:numerical]
|
|
179
|
+
@string = data[:string]
|
|
180
|
+
@rti = data[:rti]
|
|
181
|
+
elsif @property.respond_to?(queryMethodName)
|
|
161
182
|
@property.send(queryMethodName, self)
|
|
162
|
-
elsif @scenarioIdx &&
|
|
183
|
+
elsif @scenarioIdx && @property.data &&
|
|
163
184
|
@property.data[@scenarioIdx].respond_to?(queryMethodName)
|
|
164
185
|
# Then we check for scenario-specific ones via the @data member.
|
|
165
186
|
@property.send(queryMethodName, @scenarioIdx, self)
|
|
166
187
|
else
|
|
167
188
|
# The result is a BaseAttribute
|
|
168
|
-
|
|
189
|
+
begin
|
|
190
|
+
# The user may also provide a scenario index for
|
|
191
|
+
# non-scenario-specific values. We need to check if the attribute
|
|
192
|
+
# is really scenario specific or not because
|
|
193
|
+
# PropertyTreeNode::getAttribute can only handle an index for
|
|
194
|
+
# scenario-specific attributs.
|
|
195
|
+
aType = @property.attributeDefinition(@attributeId)
|
|
196
|
+
raise ArgumentError unless aType
|
|
197
|
+
scIdx = aType.scenarioSpecific ? @scenarioIdx : nil
|
|
198
|
+
@attr = @property.getAttribute(@attributeId, scIdx)
|
|
199
|
+
rescue ArgumentError
|
|
169
200
|
@errorMessage = "Unknown attribute #{@attributeId} queried"
|
|
170
201
|
return @ok = false
|
|
171
202
|
end
|