taskjuggler 0.0.11 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|