taskjuggler 0.0.4 → 0.0.5
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/README +1 -1
- data/bin/tj3client +3 -0
- data/bin/tj3d +3 -0
- data/bin/tj3ts_receiver +3 -0
- data/bin/tj3ts_sender +3 -0
- data/bin/tj3ts_summary +3 -0
- data/data/css/tjmanual.css +14 -0
- data/data/css/tjreport.css +233 -21
- data/data/scripts/wz_tooltip.js +20 -20
- data/doc/AppConfig.html +1389 -0
- data/doc/Arguments.html +678 -0
- data/doc/COPYING.html +837 -0
- data/doc/Object.html +996 -0
- data/doc/README.html +523 -0
- data/doc/RuntimeConfig.html +762 -0
- data/doc/String.html +872 -0
- data/doc/TaskJuggler/Account.html +691 -0
- data/doc/TaskJuggler/AccountAttribute.html +707 -0
- data/doc/TaskJuggler/AccountScenario.html +650 -0
- data/doc/TaskJuggler/Allocation.html +898 -0
- data/doc/TaskJuggler/AllocationAttribute.html +737 -0
- data/doc/TaskJuggler/AttributeBase.html +1193 -0
- data/doc/TaskJuggler/AttributeDefinition.html +753 -0
- data/doc/TaskJuggler/BatchProcessor.html +1112 -0
- data/doc/TaskJuggler/Booking.html +797 -0
- data/doc/TaskJuggler/BookingListAttribute.html +709 -0
- data/doc/TaskJuggler/BooleanAttribute.html +707 -0
- data/doc/TaskJuggler/CSVFile.html +924 -0
- data/doc/TaskJuggler/CellSettingPattern.html +638 -0
- data/doc/TaskJuggler/CellSettingPatternList.html +687 -0
- data/doc/TaskJuggler/Charge.html +715 -0
- data/doc/TaskJuggler/ChargeListAttribute.html +671 -0
- data/doc/TaskJuggler/ChargeSet.html +887 -0
- data/doc/TaskJuggler/ChargeSetListAttribute.html +718 -0
- data/doc/TaskJuggler/ColumnListAttribute.html +673 -0
- data/doc/TaskJuggler/ColumnTable.html +701 -0
- data/doc/TaskJuggler/Daemon.html +728 -0
- data/doc/TaskJuggler/DateAttribute.html +675 -0
- data/doc/TaskJuggler/DefinitionListAttribute.html +593 -0
- data/doc/TaskJuggler/DependencyListAttribute.html +713 -0
- data/doc/TaskJuggler/DurationAttribute.html +707 -0
- data/doc/TaskJuggler/FixnumAttribute.html +629 -0
- data/doc/TaskJuggler/FlagListAttribute.html +709 -0
- data/doc/TaskJuggler/FloatAttribute.html +671 -0
- data/doc/TaskJuggler/FormatListAttribute.html +635 -0
- data/doc/TaskJuggler/GanttChart.html +1473 -0
- data/doc/TaskJuggler/GanttContainer.html +885 -0
- data/doc/TaskJuggler/GanttHeader.html +886 -0
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +700 -0
- data/doc/TaskJuggler/GanttLine.html +1263 -0
- data/doc/TaskJuggler/GanttLoadStack.html +766 -0
- data/doc/TaskJuggler/GanttMilestone.html +865 -0
- data/doc/TaskJuggler/GanttRouter.html +1433 -0
- data/doc/TaskJuggler/GanttTaskBar.html +880 -0
- data/doc/TaskJuggler/HTMLDocument.html +719 -0
- data/doc/TaskJuggler/HTMLGraphics.html +775 -0
- data/doc/TaskJuggler/Interval.html +1016 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +713 -0
- data/doc/TaskJuggler/JobInfo.html +881 -0
- data/doc/TaskJuggler/Journal.html +991 -0
- data/doc/TaskJuggler/JournalEntry.html +779 -0
- data/doc/TaskJuggler/JournalEntryList.html +952 -0
- data/doc/TaskJuggler/KeywordArray.html +628 -0
- data/doc/TaskJuggler/KeywordDocumentation.html +1662 -0
- data/doc/TaskJuggler/Limits/Limit.html +826 -0
- data/doc/TaskJuggler/Limits.html +966 -0
- data/doc/TaskJuggler/LimitsAttribute.html +707 -0
- data/doc/TaskJuggler/ListAttributeBase.html +641 -0
- data/doc/TaskJuggler/Log.html +1103 -0
- data/doc/TaskJuggler/LogFile.html +918 -0
- data/doc/TaskJuggler/LogicalAttribute.html +698 -0
- data/doc/TaskJuggler/LogicalExpression.html +739 -0
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +629 -0
- data/doc/TaskJuggler/LogicalFlag.html +681 -0
- data/doc/TaskJuggler/LogicalFunction.html +1218 -0
- data/doc/TaskJuggler/LogicalOperation.html +1078 -0
- data/doc/TaskJuggler/Macro.html +646 -0
- data/doc/TaskJuggler/MacroParser.html +810 -0
- data/doc/TaskJuggler/MacroTable.html +810 -0
- data/doc/TaskJuggler/ManagerResponsibilities.html +674 -0
- data/doc/TaskJuggler/ManagerStatusRecord.html +678 -0
- data/doc/TaskJuggler/Message.html +757 -0
- data/doc/TaskJuggler/MessageHandler.html +679 -0
- data/doc/TaskJuggler/Navigator.html +867 -0
- data/doc/TaskJuggler/NavigatorElement.html +932 -0
- data/doc/TaskJuggler/NikuProject.html +662 -0
- data/doc/TaskJuggler/NikuReport.html +1316 -0
- data/doc/TaskJuggler/NikuResource.html +632 -0
- data/doc/TaskJuggler/OnShiftCache.html +864 -0
- data/doc/TaskJuggler/ProcessIntercom.html +847 -0
- data/doc/TaskJuggler/ProcessIntercomIface.html +664 -0
- data/doc/TaskJuggler/Project.html +3056 -0
- data/doc/TaskJuggler/ProjectBroker.html +1260 -0
- data/doc/TaskJuggler/ProjectBrokerIface.html +734 -0
- data/doc/TaskJuggler/ProjectFileParser.html +1951 -0
- data/doc/TaskJuggler/ProjectRecord.html +859 -0
- data/doc/TaskJuggler/ProjectServer.html +1092 -0
- data/doc/TaskJuggler/ProjectServerIface.html +768 -0
- data/doc/TaskJuggler/PropertyAttribute.html +629 -0
- data/doc/TaskJuggler/PropertyList.html +1336 -0
- data/doc/TaskJuggler/PropertySet.html +1785 -0
- data/doc/TaskJuggler/PropertyTreeNode.html +2482 -0
- data/doc/TaskJuggler/Query.html +1831 -0
- data/doc/TaskJuggler/RTFNavigator.html +729 -0
- data/doc/TaskJuggler/RTFQuery.html +1038 -0
- data/doc/TaskJuggler/RTFReport.html +740 -0
- data/doc/TaskJuggler/RealFormat.html +743 -0
- data/doc/TaskJuggler/RealFormatAttribute.html +593 -0
- data/doc/TaskJuggler/ReferenceAttribute.html +782 -0
- data/doc/TaskJuggler/Report.html +1255 -0
- data/doc/TaskJuggler/ReportBase.html +1198 -0
- data/doc/TaskJuggler/ReportContext.html +711 -0
- data/doc/TaskJuggler/ReportServer.html +988 -0
- data/doc/TaskJuggler/ReportServerIface.html +838 -0
- data/doc/TaskJuggler/ReportServerRecord.html +716 -0
- data/doc/TaskJuggler/ReportTable.html +1106 -0
- data/doc/TaskJuggler/ReportTableCell.html +1536 -0
- data/doc/TaskJuggler/ReportTableColumn.html +828 -0
- data/doc/TaskJuggler/ReportTableLegend.html +999 -0
- data/doc/TaskJuggler/ReportTableLine.html +1003 -0
- data/doc/TaskJuggler/Resource.html +938 -0
- data/doc/TaskJuggler/ResourceListAttribute.html +752 -0
- data/doc/TaskJuggler/ResourceListRE.html +674 -0
- data/doc/TaskJuggler/ResourceScenario.html +2457 -0
- data/doc/TaskJuggler/RichText.html +791 -0
- data/doc/TaskJuggler/RichTextAttribute.html +743 -0
- data/doc/TaskJuggler/RichTextDocument.html +972 -0
- data/doc/TaskJuggler/RichTextElement.html +1615 -0
- data/doc/TaskJuggler/RichTextException.html +667 -0
- data/doc/TaskJuggler/RichTextFunctionExample.html +737 -0
- data/doc/TaskJuggler/RichTextFunctionHandler.html +689 -0
- data/doc/TaskJuggler/RichTextImage.html +650 -0
- data/doc/TaskJuggler/RichTextIntermediate.html +1161 -0
- data/doc/TaskJuggler/RichTextParser.html +756 -0
- data/doc/TaskJuggler/RichTextScanner.html +2010 -0
- data/doc/TaskJuggler/RichTextSnip.html +942 -0
- data/doc/TaskJuggler/RichTextSyntaxRules.html +1722 -0
- data/doc/TaskJuggler/Scenario.html +594 -0
- data/doc/TaskJuggler/ScenarioData.html +815 -0
- data/doc/TaskJuggler/ScenarioListAttribute.html +671 -0
- data/doc/TaskJuggler/Scoreboard.html +1114 -0
- data/doc/TaskJuggler/SheetHandlerBase.html +1115 -0
- data/doc/TaskJuggler/SheetReceiver.html +1293 -0
- data/doc/TaskJuggler/SheetSender.html +1089 -0
- data/doc/TaskJuggler/Shift.html +689 -0
- data/doc/TaskJuggler/ShiftAssignment.html +950 -0
- data/doc/TaskJuggler/ShiftAssignments.html +1379 -0
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +707 -0
- data/doc/TaskJuggler/ShiftScenario.html +720 -0
- data/doc/TaskJuggler/SortListAttribute.html +631 -0
- data/doc/TaskJuggler/SourceFileInfo.html +698 -0
- data/doc/TaskJuggler/StatusSheetReceiver.html +615 -0
- data/doc/TaskJuggler/StatusSheetReport.html +872 -0
- data/doc/TaskJuggler/StatusSheetSender.html +654 -0
- data/doc/TaskJuggler/StringAttribute.html +671 -0
- data/doc/TaskJuggler/SymbolAttribute.html +629 -0
- data/doc/TaskJuggler/SyntaxReference.html +1155 -0
- data/doc/TaskJuggler/TOCEntry.html +723 -0
- data/doc/TaskJuggler/TSResourceRecord.html +670 -0
- data/doc/TaskJuggler/TSTaskRecord.html +682 -0
- data/doc/TaskJuggler/TableColumnDefinition.html +830 -0
- data/doc/TaskJuggler/TableOfContents.html +692 -0
- data/doc/TaskJuggler/TableReport.html +2444 -0
- data/doc/TaskJuggler/Task.html +781 -0
- data/doc/TaskJuggler/TaskDependency.html +730 -0
- data/doc/TaskJuggler/TaskListAttribute.html +713 -0
- data/doc/TaskJuggler/TaskListRE.html +673 -0
- data/doc/TaskJuggler/TaskScenario.html +4380 -0
- data/doc/TaskJuggler/TextFormatter.html +911 -0
- data/doc/TaskJuggler/TextParser/Pattern.html +1482 -0
- data/doc/TaskJuggler/TextParser/Rule.html +1288 -0
- data/doc/TaskJuggler/TextParser/StackElement.html +726 -0
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +648 -0
- data/doc/TaskJuggler/TextParser/TokenDoc.html +680 -0
- data/doc/TaskJuggler/TextParser.html +1670 -0
- data/doc/TaskJuggler/TextReport.html +856 -0
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +831 -0
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +832 -0
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +737 -0
- data/doc/TaskJuggler/TextScanner.html +2430 -0
- data/doc/TaskJuggler/TimeSheet.html +1233 -0
- data/doc/TaskJuggler/TimeSheetReceiver.html +612 -0
- data/doc/TaskJuggler/TimeSheetRecord.html +1352 -0
- data/doc/TaskJuggler/TimeSheetReport.html +948 -0
- data/doc/TaskJuggler/TimeSheetSender.html +637 -0
- data/doc/TaskJuggler/TimeSheetSummary.html +865 -0
- data/doc/TaskJuggler/TimeSheets.html +674 -0
- data/doc/TaskJuggler/Tj3AppBase.html +782 -0
- data/doc/TaskJuggler/Tj3Client.html +1455 -0
- data/doc/TaskJuggler/Tj3Daemon.html +767 -0
- data/doc/TaskJuggler/Tj3SheetAppBase.html +696 -0
- data/doc/TaskJuggler/Tj3SsReceiver.html +682 -0
- data/doc/TaskJuggler/Tj3SsSender.html +708 -0
- data/doc/TaskJuggler/Tj3TsReceiver.html +681 -0
- data/doc/TaskJuggler/Tj3TsSender.html +702 -0
- data/doc/TaskJuggler/Tj3TsSummary.html +710 -0
- data/doc/TaskJuggler/TjException.html +630 -0
- data/doc/TaskJuggler/TjTime.html +2590 -0
- data/doc/TaskJuggler/TjpExample.html +835 -0
- data/doc/TaskJuggler/TjpExportRE.html +1581 -0
- data/doc/TaskJuggler/TjpSyntaxRules.html +13004 -0
- data/doc/TaskJuggler/UserManual.html +1145 -0
- data/doc/TaskJuggler/WorkingHours.html +1101 -0
- data/doc/TaskJuggler/WorkingHoursAttribute.html +694 -0
- data/doc/TaskJuggler/XMLBlob.html +645 -0
- data/doc/TaskJuggler/XMLComment.html +640 -0
- data/doc/TaskJuggler/XMLDocument.html +732 -0
- data/doc/TaskJuggler/XMLElement.html +900 -0
- data/doc/TaskJuggler/XMLNamedText.html +601 -0
- data/doc/TaskJuggler/XMLText.html +655 -0
- data/doc/TaskJuggler.html +2243 -0
- data/doc/index.html +3778 -17
- data/doc/lib/AccountScenario_rb.html +67 -0
- data/doc/lib/Account_rb.html +69 -0
- data/doc/lib/Allocation_rb.html +69 -0
- data/doc/lib/AppConfig_rb.html +69 -0
- data/doc/lib/AttributeBase_rb.html +67 -0
- data/doc/lib/AttributeDefinition_rb.html +65 -0
- data/doc/lib/Attributes_rb.html +81 -0
- data/doc/lib/BatchProcessor_rb.html +69 -0
- data/doc/lib/Booking_rb.html +65 -0
- data/doc/lib/ChargeSet_rb.html +67 -0
- data/doc/lib/Charge_rb.html +67 -0
- data/doc/lib/HTMLDocument_rb.html +67 -0
- data/doc/lib/Interval_rb.html +67 -0
- data/doc/lib/Journal_rb.html +65 -0
- data/doc/lib/KeywordArray_rb.html +65 -0
- data/doc/lib/KeywordDocumentation_rb.html +75 -0
- data/doc/lib/Limits_rb.html +67 -0
- data/doc/lib/LogFile_rb.html +67 -0
- data/doc/lib/Log_rb.html +69 -0
- data/doc/lib/LogicalExpression_rb.html +71 -0
- data/doc/lib/LogicalFunction_rb.html +67 -0
- data/doc/lib/LogicalOperation_rb.html +67 -0
- data/doc/lib/MacroParser_rb.html +69 -0
- data/doc/lib/MacroTable_rb.html +73 -0
- data/doc/lib/MessageHandler_rb.html +65 -0
- data/doc/lib/Message_rb.html +67 -0
- data/doc/lib/ProjectFileParser_rb.html +79 -0
- data/doc/lib/Project_rb.html +109 -0
- data/doc/lib/PropertyList_rb.html +65 -0
- data/doc/lib/PropertySet_rb.html +69 -0
- data/doc/lib/PropertyTreeNode_rb.html +65 -0
- data/doc/lib/Query_rb.html +67 -0
- data/doc/lib/RTFNavigator_rb.html +71 -0
- data/doc/lib/RTFQuery_rb.html +71 -0
- data/doc/lib/RTFReport_rb.html +69 -0
- data/doc/lib/RealFormat_rb.html +65 -0
- data/doc/lib/ResourceScenario_rb.html +67 -0
- data/doc/lib/Resource_rb.html +69 -0
- data/doc/lib/RichTextDocument_rb.html +71 -0
- data/doc/lib/RichTextElement_rb.html +73 -0
- data/doc/lib/RichTextFunctionExample_rb.html +71 -0
- data/doc/lib/RichTextFunctionHandler_rb.html +65 -0
- data/doc/lib/RichTextParser_rb.html +71 -0
- data/doc/lib/RichTextScanner_rb.html +67 -0
- data/doc/lib/RichTextSnip_rb.html +69 -0
- data/doc/lib/RichTextSyntaxRules_rb.html +65 -0
- data/doc/lib/RichText_rb.html +69 -0
- data/doc/lib/RuntimeConfig_rb.html +67 -0
- data/doc/lib/ScenarioData_rb.html +69 -0
- data/doc/lib/Scenario_rb.html +67 -0
- data/doc/lib/Scoreboard_rb.html +65 -0
- data/doc/lib/SheetHandlerBase_rb.html +69 -0
- data/doc/lib/SheetReceiver_rb.html +75 -0
- data/doc/lib/SheetSender_rb.html +73 -0
- data/doc/lib/ShiftAssignments_rb.html +67 -0
- data/doc/lib/ShiftScenario_rb.html +67 -0
- data/doc/lib/Shift_rb.html +69 -0
- data/doc/lib/SourceFileInfo_rb.html +65 -0
- data/doc/lib/StatusSheetReceiver_rb.html +67 -0
- data/doc/lib/StatusSheetSender_rb.html +67 -0
- data/doc/lib/SyntaxReference_rb.html +73 -0
- data/doc/lib/TOCEntry_rb.html +69 -0
- data/doc/lib/TableColumnDefinition_rb.html +65 -0
- data/doc/lib/TableOfContents_rb.html +69 -0
- data/doc/lib/TaskDependency_rb.html +65 -0
- data/doc/lib/TaskJuggler_rb.html +73 -0
- data/doc/lib/TaskScenario_rb.html +67 -0
- data/doc/lib/Task_rb.html +69 -0
- data/doc/lib/TextFormatter_rb.html +67 -0
- data/doc/lib/TextParser/Pattern_rb.html +67 -0
- data/doc/lib/TextParser/Rule_rb.html +65 -0
- data/doc/lib/TextParser/StackElement_rb.html +65 -0
- data/doc/lib/TextParser/TokenDoc_rb.html +65 -0
- data/doc/lib/TextParser_rb.html +75 -0
- data/doc/lib/TextScanner_rb.html +79 -0
- data/doc/lib/TimeSheetReceiver_rb.html +67 -0
- data/doc/lib/TimeSheetSender_rb.html +67 -0
- data/doc/lib/TimeSheetSummary_rb.html +67 -0
- data/doc/lib/TimeSheets_rb.html +65 -0
- data/doc/lib/Tj3AppBase_rb.html +77 -0
- data/doc/lib/Tj3Config_rb.html +69 -0
- data/doc/lib/Tj3SheetAppBase_rb.html +67 -0
- data/doc/lib/TjException_rb.html +65 -0
- data/doc/lib/TjTime_rb.html +69 -0
- data/doc/lib/TjpExample_rb.html +67 -0
- data/doc/lib/TjpSyntaxRules_rb.html +65 -0
- data/doc/lib/UTF8String_rb.html +65 -0
- data/doc/lib/UserManual_rb.html +77 -0
- data/doc/lib/WorkingHours_rb.html +67 -0
- data/doc/lib/XMLDocument_rb.html +67 -0
- data/doc/lib/XMLElement_rb.html +67 -0
- data/doc/lib/daemon/Daemon_rb.html +67 -0
- data/doc/lib/daemon/ProcessIntercom_rb.html +67 -0
- data/doc/lib/daemon/ProjectBroker_rb.html +79 -0
- data/doc/lib/daemon/ProjectServer_rb.html +83 -0
- data/doc/lib/daemon/ReportServer_rb.html +73 -0
- data/doc/lib/deep_copy_rb.html +65 -0
- data/doc/lib/reports/CSVFile_rb.html +67 -0
- data/doc/lib/reports/ColumnTable_rb.html +67 -0
- data/doc/lib/reports/GanttChart_rb.html +73 -0
- data/doc/lib/reports/GanttContainer_rb.html +67 -0
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +65 -0
- data/doc/lib/reports/GanttHeader_rb.html +67 -0
- data/doc/lib/reports/GanttLine_rb.html +77 -0
- data/doc/lib/reports/GanttLoadStack_rb.html +67 -0
- data/doc/lib/reports/GanttMilestone_rb.html +67 -0
- data/doc/lib/reports/GanttRouter_rb.html +65 -0
- data/doc/lib/reports/GanttTaskBar_rb.html +67 -0
- data/doc/lib/reports/HTMLGraphics_rb.html +65 -0
- data/doc/lib/reports/Navigator_rb.html +67 -0
- data/doc/lib/reports/NikuReport_rb.html +69 -0
- data/doc/lib/reports/ReportBase_rb.html +65 -0
- data/doc/lib/reports/ReportContext_rb.html +65 -0
- data/doc/lib/reports/ReportTableCell_rb.html +65 -0
- data/doc/lib/reports/ReportTableColumn_rb.html +65 -0
- data/doc/lib/reports/ReportTableLegend_rb.html +65 -0
- data/doc/lib/reports/ReportTableLine_rb.html +67 -0
- data/doc/lib/reports/ReportTable_rb.html +69 -0
- data/doc/lib/reports/Report_rb.html +91 -0
- data/doc/lib/reports/ResourceListRE_rb.html +73 -0
- data/doc/lib/reports/StatusSheetReport_rb.html +67 -0
- data/doc/lib/reports/TableReport_rb.html +75 -0
- data/doc/lib/reports/TaskListRE_rb.html +73 -0
- data/doc/lib/reports/TextReport_rb.html +67 -0
- data/doc/lib/reports/TimeSheetReport_rb.html +67 -0
- data/doc/lib/reports/TjpExportRE_rb.html +67 -0
- data/doc/lib/ruby-signal-bug_rb.html +54 -0
- data/doc/lib/taskjuggler3_rb.html +73 -0
- data/doc/lib/tj3client_rb.html +73 -0
- data/doc/lib/tj3d_rb.html +73 -0
- data/doc/lib/tj3man_rb.html +73 -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 +701 -0
- data/examples/tutorial.tjp +25 -6
- data/lib/Attributes.rb +6 -2
- data/lib/HTMLDocument.rb +18 -2
- data/lib/Journal.rb +47 -4
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +17 -77
- data/lib/Log.rb +3 -1
- data/lib/LogFile.rb +72 -0
- data/lib/LogicalExpression.rb +5 -10
- data/lib/LogicalFunction.rb +34 -18
- data/lib/LogicalOperation.rb +32 -18
- data/lib/Project.rb +85 -13
- data/lib/ProjectFileParser.rb +19 -6
- data/lib/PropertyList.rb +12 -2
- data/lib/PropertyTreeNode.rb +23 -9
- data/lib/Query.rb +51 -13
- data/lib/RTFReport.rb +2 -2
- data/lib/Resource.rb +157 -0
- data/lib/ResourceScenario.rb +215 -68
- data/lib/RichText.rb +15 -3
- data/lib/RichTextDocument.rb +2 -4
- data/lib/RichTextElement.rb +87 -25
- data/lib/RichTextScanner.rb +32 -5
- data/lib/RichTextSnip.rb +6 -4
- data/lib/RichTextSyntaxRules.rb +44 -8
- data/lib/RuntimeConfig.rb +93 -0
- data/lib/Scoreboard.rb +6 -6
- data/lib/SheetHandlerBase.rb +215 -0
- data/lib/SheetReceiver.rb +355 -0
- data/lib/SheetSender.rb +264 -0
- data/lib/ShiftAssignments.rb +35 -27
- data/lib/StatusSheetReceiver.rb +45 -0
- data/lib/StatusSheetSender.rb +54 -0
- data/lib/SyntaxReference.rb +2 -7
- data/lib/Task.rb +70 -0
- data/lib/TaskJuggler.rb +114 -12
- data/lib/TaskScenario.rb +131 -22
- data/lib/TextFormatter.rb +177 -0
- data/lib/TextParser.rb +10 -1
- data/lib/TextScanner.rb +63 -33
- data/lib/TimeSheetReceiver.rb +42 -0
- data/lib/TimeSheetSender.rb +55 -0
- data/lib/TimeSheetSummary.rb +149 -0
- data/lib/TimeSheets.rb +406 -0
- data/lib/Tj3AppBase.rb +114 -0
- data/lib/Tj3Config.rb +1 -1
- data/lib/Tj3SheetAppBase.rb +59 -0
- data/lib/TjTime.rb +14 -1
- data/lib/TjpSyntaxRules.rb +573 -211
- data/lib/UTF8String.rb +4 -0
- data/lib/UserManual.rb +8 -7
- data/lib/XMLElement.rb +27 -19
- data/lib/daemon/Daemon.rb +70 -0
- data/lib/daemon/ProcessIntercom.rb +117 -0
- data/lib/daemon/ProjectBroker.rb +450 -0
- data/lib/daemon/ProjectServer.rb +348 -0
- data/lib/daemon/ReportServer.rb +194 -0
- data/lib/reports/ColumnTable.rb +2 -0
- data/lib/reports/GanttChart.rb +5 -7
- data/lib/reports/GanttContainer.rb +5 -8
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttLine.rb +89 -53
- data/lib/reports/GanttMilestone.rb +7 -4
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/HTMLGraphics.rb +24 -9
- data/lib/reports/NikuReport.rb +414 -0
- data/lib/reports/Report.rb +54 -20
- data/lib/reports/ReportBase.rb +21 -0
- data/lib/reports/ReportTable.rb +29 -11
- data/lib/reports/ReportTableCell.rb +154 -86
- data/lib/reports/ReportTableLegend.rb +77 -80
- data/lib/reports/ResourceListRE.rb +2 -3
- data/lib/reports/StatusSheetReport.rb +231 -0
- data/lib/reports/TableReport.rb +74 -65
- data/lib/reports/TaskListRE.rb +2 -4
- data/lib/reports/TextReport.rb +18 -12
- data/lib/reports/TimeSheetReport.rb +145 -80
- data/lib/reports/TjpExportRE.rb +4 -4
- data/lib/ruby-signal-bug.rb +43 -0
- data/lib/taskjuggler3.rb +27 -10
- data/lib/tj3client.rb +411 -77
- data/lib/tj3d.rb +110 -0
- data/lib/tj3ss_receiver.rb +56 -0
- data/lib/tj3ss_sender.rb +84 -0
- data/lib/tj3ts_receiver.rb +59 -0
- data/lib/tj3ts_sender.rb +78 -0
- data/lib/tj3ts_summary.rb +87 -0
- data/manual/Day_To_Day_Juggling +761 -32
- data/manual/Getting_Started +12 -12
- data/manual/Rich_Text_Attributes +13 -1
- data/manual/TaskJuggler_2x_Migration +41 -3
- data/manual/TaskJuggler_Internals +87 -0
- data/manual/The_TaskJuggler_Syntax +1 -2
- data/manual/Tutorial +10 -10
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -1
- data/test/TestSuite/HTML-Reports/TimeSheet.html +79 -0
- data/test/TestSuite/HTML-Reports/icons/trend-down.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-flat.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-up.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.html +51 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.html +603 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.tjp +57 -0
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +32 -18
- data/test/TestSuite/Scheduler/Correct/Manager.tjp +9 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +429 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.html +162 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.tjp +67 -0
- data/test/TestSuite/{Syntax/Correct/TimeSheet.tjp → Scheduler/Correct/TimeSheet2.tjp} +21 -8
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +52 -0
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +195 -0
- data/test/TestSuite/{Syntax → 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/{Syntax → Scheduler}/Correct/icons/resource.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/task.png +0 -0
- data/test/TestSuite/{Syntax → 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/{HTML-Reports/scripts → Scheduler/Correct}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_group.tjp +15 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_self.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/resource_fail_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/resource_warn_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_fail_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/task_warn_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +21 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +18 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +27 -0
- data/test/TestSuite/StatusSheets/boss.tji +45 -0
- data/test/TestSuite/StatusSheets/boss_mail +51 -0
- data/test/TestSuite/StatusSheets/dev2_mail +37 -0
- data/test/TestSuite/StatusSheets/project.tjp +275 -0
- data/test/TestSuite/StatusSheets/run +50 -0
- data/test/TestSuite/Syntax/Correct/Include.tjp +4 -0
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +10 -1
- data/test/TestSuite/Syntax/Correct/Manager.tjp +30 -0
- data/test/TestSuite/Syntax/Correct/Niku.tjp +66 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +83 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +1 -0
- data/test/TestSuite/Syntax/Correct/include/dir2/file3.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/file1.tji +3 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +29 -8
- data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +23 -0
- data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +18 -0
- data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +27 -0
- data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +29 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +31 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +54 -0
- data/test/TestSuite/TimeSheets/TimeSheets/all.tji +2 -0
- data/test/TestSuite/TimeSheets/dev2_mail1 +84 -0
- data/test/TestSuite/TimeSheets/dev2_mail2 +87 -0
- data/test/TestSuite/TimeSheets/project.tjp +271 -0
- data/test/TestSuite/TimeSheets/receiver.log +102 -0
- data/test/TestSuite/TimeSheets/run +75 -0
- data/test/TestSuite/TimeSheets/sender.log +794 -0
- data/test/TestSuite/TimeSheets/summary.log +884 -0
- data/test/TestSuite/TimeSheets/timesheets.log +45 -0
- data/test/TestSuite/TimeSheets/tj3d.log +292 -0
- data/test/test_CSV-Reports.rb +5 -3
- data/test/test_RichText.rb +264 -56
- data/test/test_Scheduler.rb +1 -0
- data/test/test_TextFormatter.rb +142 -0
- data/test/test_TjTime.rb +15 -0
- metadata +816 -644
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/AppConfig.html +0 -880
- data/doc/classes/Arguments.html +0 -230
- data/doc/classes/Object.html +0 -229
- data/doc/classes/String.html +0 -399
- data/doc/classes/TaskJuggler/Account.html +0 -257
- data/doc/classes/TaskJuggler/AccountAttribute.html +0 -261
- data/doc/classes/TaskJuggler/AccountScenario.html +0 -218
- data/doc/classes/TaskJuggler/Allocation.html +0 -423
- data/doc/classes/TaskJuggler/AllocationAttribute.html +0 -291
- data/doc/classes/TaskJuggler/AttributeBase.html +0 -704
- data/doc/classes/TaskJuggler/AttributeDefinition.html +0 -276
- data/doc/classes/TaskJuggler/BatchProcessor.html +0 -347
- data/doc/classes/TaskJuggler/Booking.html +0 -311
- data/doc/classes/TaskJuggler/BookingListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/BooleanAttribute.html +0 -261
- data/doc/classes/TaskJuggler/CSVFile.html +0 -329
- data/doc/classes/TaskJuggler/CellSettingPattern.html +0 -201
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +0 -253
- data/doc/classes/TaskJuggler/Charge.html +0 -283
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/ChargeSet.html +0 -444
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +0 -276
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +0 -231
- data/doc/classes/TaskJuggler/ColumnTable.html +0 -262
- data/doc/classes/TaskJuggler/DateAttribute.html +0 -233
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +0 -162
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/DurationAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FixnumAttribute.html +0 -194
- data/doc/classes/TaskJuggler/FlagListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/FloatAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FormatListAttribute.html +0 -197
- data/doc/classes/TaskJuggler/GanttChart.html +0 -696
- data/doc/classes/TaskJuggler/GanttContainer.html +0 -445
- data/doc/classes/TaskJuggler/GanttHeader.html +0 -284
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +0 -249
- data/doc/classes/TaskJuggler/GanttLine.html +0 -402
- data/doc/classes/TaskJuggler/GanttLoadStack.html +0 -331
- data/doc/classes/TaskJuggler/GanttMilestone.html +0 -419
- data/doc/classes/TaskJuggler/GanttRouter.html +0 -431
- data/doc/classes/TaskJuggler/GanttTaskBar.html +0 -433
- data/doc/classes/TaskJuggler/HTMLDocument.html +0 -240
- data/doc/classes/TaskJuggler/HTMLGraphics.html +0 -231
- data/doc/classes/TaskJuggler/Interval.html +0 -558
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/JobInfo.html +0 -340
- data/doc/classes/TaskJuggler/Journal.html +0 -443
- data/doc/classes/TaskJuggler/JournalEntry.html +0 -274
- data/doc/classes/TaskJuggler/JournalEntryList.html +0 -454
- data/doc/classes/TaskJuggler/KeywordArray.html +0 -179
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +0 -846
- data/doc/classes/TaskJuggler/Limits/Limit.html +0 -385
- data/doc/classes/TaskJuggler/Limits.html +0 -422
- data/doc/classes/TaskJuggler/LimitsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ListAttributeBase.html +0 -207
- data/doc/classes/TaskJuggler/Log.html +0 -655
- data/doc/classes/TaskJuggler/LogicalAttribute.html +0 -259
- data/doc/classes/TaskJuggler/LogicalExpression.html +0 -292
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +0 -194
- data/doc/classes/TaskJuggler/LogicalFlag.html +0 -209
- data/doc/classes/TaskJuggler/LogicalFunction.html +0 -339
- data/doc/classes/TaskJuggler/LogicalOperation.html +0 -351
- data/doc/classes/TaskJuggler/Macro.html +0 -198
- data/doc/classes/TaskJuggler/MacroParser.html +0 -360
- data/doc/classes/TaskJuggler/MacroTable.html +0 -370
- data/doc/classes/TaskJuggler/Message.html +0 -285
- data/doc/classes/TaskJuggler/MessageHandler.html +0 -231
- data/doc/classes/TaskJuggler/Navigator.html +0 -313
- data/doc/classes/TaskJuggler/NavigatorElement.html +0 -449
- data/doc/classes/TaskJuggler/OnShiftCache.html +0 -316
- data/doc/classes/TaskJuggler/Project.html +0 -2257
- data/doc/classes/TaskJuggler/ProjectFileParser.html +0 -420
- data/doc/classes/TaskJuggler/PropertyAttribute.html +0 -194
- data/doc/classes/TaskJuggler/PropertyList.html +0 -668
- data/doc/classes/TaskJuggler/PropertySet.html +0 -1286
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +0 -1742
- data/doc/classes/TaskJuggler/Query.html +0 -870
- data/doc/classes/TaskJuggler/RTFNavigator.html +0 -293
- data/doc/classes/TaskJuggler/RTFQuery.html +0 -343
- data/doc/classes/TaskJuggler/RTFReport.html +0 -304
- data/doc/classes/TaskJuggler/RealFormat.html +0 -309
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +0 -162
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +0 -328
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +0 -335
- data/doc/classes/TaskJuggler/Report.html +0 -321
- data/doc/classes/TaskJuggler/ReportBase.html +0 -437
- data/doc/classes/TaskJuggler/ReportContext.html +0 -248
- data/doc/classes/TaskJuggler/ReportServer.html +0 -320
- data/doc/classes/TaskJuggler/ReportTable.html +0 -526
- data/doc/classes/TaskJuggler/ReportTableCell.html +0 -614
- data/doc/classes/TaskJuggler/ReportTableColumn.html +0 -368
- data/doc/classes/TaskJuggler/ReportTableLegend.html +0 -347
- data/doc/classes/TaskJuggler/ReportTableLine.html +0 -481
- data/doc/classes/TaskJuggler/Resource.html +0 -211
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +0 -302
- data/doc/classes/TaskJuggler/ResourceListRE.html +0 -245
- data/doc/classes/TaskJuggler/ResourceScenario.html +0 -1229
- data/doc/classes/TaskJuggler/RichText.html +0 -357
- data/doc/classes/TaskJuggler/RichTextAttribute.html +0 -293
- data/doc/classes/TaskJuggler/RichTextDocument.html +0 -424
- data/doc/classes/TaskJuggler/RichTextElement.html +0 -932
- data/doc/classes/TaskJuggler/RichTextException.html +0 -212
- data/doc/classes/TaskJuggler/RichTextFunctionExample.html +0 -301
- data/doc/classes/TaskJuggler/RichTextFunctionHandler.html +0 -245
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +0 -563
- data/doc/classes/TaskJuggler/RichTextParser.html +0 -321
- data/doc/classes/TaskJuggler/RichTextScanner.html +0 -424
- data/doc/classes/TaskJuggler/RichTextSnip.html +0 -404
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +0 -1105
- data/doc/classes/TaskJuggler/Scenario.html +0 -163
- data/doc/classes/TaskJuggler/ScenarioData.html +0 -358
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/Scoreboard.html +0 -642
- data/doc/classes/TaskJuggler/Shift.html +0 -255
- data/doc/classes/TaskJuggler/ShiftAssignment.html +0 -492
- data/doc/classes/TaskJuggler/ShiftAssignments.html +0 -719
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ShiftScenario.html +0 -282
- data/doc/classes/TaskJuggler/SortListAttribute.html +0 -196
- data/doc/classes/TaskJuggler/SourceFileInfo.html +0 -251
- data/doc/classes/TaskJuggler/StringAttribute.html +0 -229
- data/doc/classes/TaskJuggler/SymbolAttribute.html +0 -194
- data/doc/classes/TaskJuggler/SyntaxReference.html +0 -520
- data/doc/classes/TaskJuggler/TOCEntry.html +0 -246
- data/doc/classes/TaskJuggler/TSResourceRecord.html +0 -197
- data/doc/classes/TaskJuggler/TSTaskRecord.html +0 -215
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +0 -309
- data/doc/classes/TaskJuggler/TableOfContents.html +0 -260
- data/doc/classes/TaskJuggler/TableReport.html +0 -1015
- data/doc/classes/TaskJuggler/Task.html +0 -203
- data/doc/classes/TaskJuggler/TaskDependency.html +0 -255
- data/doc/classes/TaskJuggler/TaskListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/TaskListRE.html +0 -245
- data/doc/classes/TaskJuggler/TaskScenario.html +0 -2543
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +0 -927
- data/doc/classes/TaskJuggler/TextParser/Rule.html +0 -783
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +0 -272
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +0 -212
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +0 -225
- data/doc/classes/TaskJuggler/TextParser.html +0 -754
- data/doc/classes/TaskJuggler/TextReport.html +0 -367
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -355
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +0 -348
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +0 -264
- data/doc/classes/TaskJuggler/TextScanner.html +0 -815
- data/doc/classes/TaskJuggler/TimeSheetReport.html +0 -406
- data/doc/classes/TaskJuggler/TjException.html +0 -185
- data/doc/classes/TaskJuggler/TjTime.html +0 -1904
- data/doc/classes/TaskJuggler/TjpExample.html +0 -314
- data/doc/classes/TaskJuggler/TjpExportRE.html +0 -306
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +0 -10812
- data/doc/classes/TaskJuggler/UserManual.html +0 -605
- data/doc/classes/TaskJuggler/WorkingHours.html +0 -586
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +0 -252
- data/doc/classes/TaskJuggler/XMLBlob.html +0 -207
- data/doc/classes/TaskJuggler/XMLComment.html +0 -206
- data/doc/classes/TaskJuggler/XMLDocument.html +0 -298
- data/doc/classes/TaskJuggler/XMLElement.html +0 -389
- data/doc/classes/TaskJuggler/XMLNamedText.html +0 -174
- data/doc/classes/TaskJuggler/XMLText.html +0 -221
- data/doc/classes/TaskJuggler.html +0 -1573
- data/doc/files/COPYING.html +0 -448
- data/doc/files/README.html +0 -134
- data/doc/files/lib/AccountScenario_rb.html +0 -117
- data/doc/files/lib/Account_rb.html +0 -119
- data/doc/files/lib/Allocation_rb.html +0 -119
- data/doc/files/lib/AppConfig_rb.html +0 -119
- data/doc/files/lib/AttributeBase_rb.html +0 -117
- data/doc/files/lib/AttributeDefinition_rb.html +0 -107
- data/doc/files/lib/Attributes_rb.html +0 -131
- data/doc/files/lib/BatchProcessor_rb.html +0 -119
- data/doc/files/lib/Booking_rb.html +0 -107
- data/doc/files/lib/ChargeSet_rb.html +0 -117
- data/doc/files/lib/Charge_rb.html +0 -117
- data/doc/files/lib/HTMLDocument_rb.html +0 -117
- data/doc/files/lib/Interval_rb.html +0 -117
- data/doc/files/lib/Journal_rb.html +0 -107
- data/doc/files/lib/KeywordArray_rb.html +0 -107
- data/doc/files/lib/KeywordDocumentation_rb.html +0 -123
- data/doc/files/lib/Limits_rb.html +0 -117
- data/doc/files/lib/Log_rb.html +0 -117
- data/doc/files/lib/LogicalExpression_rb.html +0 -121
- data/doc/files/lib/LogicalFunction_rb.html +0 -117
- data/doc/files/lib/LogicalOperation_rb.html +0 -117
- data/doc/files/lib/MacroParser_rb.html +0 -119
- data/doc/files/lib/MacroTable_rb.html +0 -123
- data/doc/files/lib/MessageHandler_rb.html +0 -107
- data/doc/files/lib/Message_rb.html +0 -117
- data/doc/files/lib/ProjectFileParser_rb.html +0 -129
- data/doc/files/lib/Project_rb.html +0 -153
- data/doc/files/lib/PropertyList_rb.html +0 -107
- data/doc/files/lib/PropertySet_rb.html +0 -119
- data/doc/files/lib/PropertyTreeNode_rb.html +0 -107
- data/doc/files/lib/Query_rb.html +0 -117
- data/doc/files/lib/RTFNavigator_rb.html +0 -121
- data/doc/files/lib/RTFQuery_rb.html +0 -121
- data/doc/files/lib/RTFReport_rb.html +0 -119
- data/doc/files/lib/RealFormat_rb.html +0 -107
- data/doc/files/lib/RemoteServiceManager_rb.html +0 -117
- data/doc/files/lib/ReportServer_rb.html +0 -107
- data/doc/files/lib/ResourceScenario_rb.html +0 -117
- data/doc/files/lib/Resource_rb.html +0 -119
- data/doc/files/lib/RichTextDocument_rb.html +0 -121
- data/doc/files/lib/RichTextElement_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionExample_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionHandler_rb.html +0 -107
- data/doc/files/lib/RichTextParser_rb.html +0 -121
- data/doc/files/lib/RichTextScanner_rb.html +0 -117
- data/doc/files/lib/RichTextSnip_rb.html +0 -119
- data/doc/files/lib/RichTextSyntaxRules_rb.html +0 -107
- data/doc/files/lib/RichText_rb.html +0 -119
- data/doc/files/lib/ScenarioData_rb.html +0 -119
- data/doc/files/lib/Scenario_rb.html +0 -117
- data/doc/files/lib/Scoreboard_rb.html +0 -107
- data/doc/files/lib/ShiftAssignments_rb.html +0 -117
- data/doc/files/lib/ShiftScenario_rb.html +0 -117
- data/doc/files/lib/Shift_rb.html +0 -119
- data/doc/files/lib/SourceFileInfo_rb.html +0 -107
- data/doc/files/lib/SyntaxReference_rb.html +0 -123
- data/doc/files/lib/TOCEntry_rb.html +0 -119
- data/doc/files/lib/TableColumnDefinition_rb.html +0 -107
- data/doc/files/lib/TableOfContents_rb.html +0 -119
- data/doc/files/lib/TaskDependency_rb.html +0 -107
- data/doc/files/lib/TaskJuggler_rb.html +0 -125
- data/doc/files/lib/TaskScenario_rb.html +0 -117
- data/doc/files/lib/Task_rb.html +0 -119
- data/doc/files/lib/TextParser/Pattern_rb.html +0 -117
- data/doc/files/lib/TextParser/Rule_rb.html +0 -107
- data/doc/files/lib/TextParser/StackElement_rb.html +0 -107
- data/doc/files/lib/TextParser/TokenDoc_rb.html +0 -107
- data/doc/files/lib/TextParser_rb.html +0 -125
- data/doc/files/lib/TextScanner_rb.html +0 -129
- data/doc/files/lib/Tj3Config_rb.html +0 -119
- data/doc/files/lib/TjException_rb.html +0 -107
- data/doc/files/lib/TjTime_rb.html +0 -119
- data/doc/files/lib/TjpExample_rb.html +0 -117
- data/doc/files/lib/TjpSyntaxRules_rb.html +0 -107
- data/doc/files/lib/UTF8String_rb.html +0 -140
- data/doc/files/lib/UserManual_rb.html +0 -127
- data/doc/files/lib/WorkingHours_rb.html +0 -117
- data/doc/files/lib/XMLDocument_rb.html +0 -117
- data/doc/files/lib/XMLElement_rb.html +0 -117
- data/doc/files/lib/deep_copy_rb.html +0 -107
- data/doc/files/lib/reports/CSVFile_rb.html +0 -117
- data/doc/files/lib/reports/ColumnTable_rb.html +0 -117
- data/doc/files/lib/reports/GanttChart_rb.html +0 -123
- data/doc/files/lib/reports/GanttContainer_rb.html +0 -117
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +0 -107
- data/doc/files/lib/reports/GanttHeader_rb.html +0 -117
- data/doc/files/lib/reports/GanttLine_rb.html +0 -127
- data/doc/files/lib/reports/GanttLoadStack_rb.html +0 -117
- data/doc/files/lib/reports/GanttMilestone_rb.html +0 -117
- data/doc/files/lib/reports/GanttRouter_rb.html +0 -107
- data/doc/files/lib/reports/GanttTaskBar_rb.html +0 -117
- data/doc/files/lib/reports/HTMLGraphics_rb.html +0 -107
- data/doc/files/lib/reports/Navigator_rb.html +0 -117
- data/doc/files/lib/reports/ReportBase_rb.html +0 -107
- data/doc/files/lib/reports/ReportContext_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableCell_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableColumn_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLegend_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLine_rb.html +0 -117
- data/doc/files/lib/reports/ReportTable_rb.html +0 -119
- data/doc/files/lib/reports/Report_rb.html +0 -137
- data/doc/files/lib/reports/ResourceListRE_rb.html +0 -123
- data/doc/files/lib/reports/TableReport_rb.html +0 -125
- data/doc/files/lib/reports/TaskListRE_rb.html +0 -123
- data/doc/files/lib/reports/TextReport_rb.html +0 -117
- data/doc/files/lib/reports/TimeSheetReport_rb.html +0 -117
- data/doc/files/lib/reports/TjpExportRE_rb.html +0 -117
- data/doc/files/lib/taskjuggler3_rb.html +0 -298
- data/doc/files/lib/tj3client_rb.html +0 -280
- data/doc/files/lib/tj3man_rb.html +0 -190
- data/doc/fr_class_index.html +0 -345
- data/doc/fr_file_index.html +0 -247
- data/doc/fr_method_index.html +0 -2355
- data/doc/rdoc-style.css +0 -299
- data/lib/RemoteServiceManager.rb +0 -80
- data/lib/ReportServer.rb +0 -66
- data/test/TestSuite/HTML-Reports/Alerts.html +0 -172
- data/test/TestSuite/HTML-Reports/CellText.html +0 -758
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +0 -156
- data/test/TestSuite/HTML-Reports/IsOngoing.html +0 -172
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +0 -80
- data/test/TestSuite/HTML-Reports/Query.html +0 -31
- data/test/TestSuite/HTML-Reports/depArrows.html +0 -842
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +0 -31
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +0 -1301
- data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +0 -9
data/lib/tj3client.rb
CHANGED
@@ -10,101 +10,435 @@
|
|
10
10
|
# published by the Free Software Foundation.
|
11
11
|
#
|
12
12
|
|
13
|
-
require 'optparse'
|
14
13
|
require 'drb'
|
15
|
-
require '
|
14
|
+
require 'drb/acl'
|
15
|
+
require 'Tj3AppBase'
|
16
|
+
require 'LogFile'
|
16
17
|
|
17
|
-
# Name of the application
|
18
|
+
# Name of the application
|
18
19
|
AppConfig.appName = 'tj3client'
|
19
20
|
|
20
|
-
|
21
|
-
opts = OptionParser.new
|
22
|
-
|
23
|
-
opts.banner = "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
24
|
-
"#{AppConfig.packageInfo}\n\n" +
|
25
|
-
"Copyright (c) #{AppConfig.copyright.join(', ')}" +
|
26
|
-
" by #{AppConfig.authors.join(', ')}\n\n" +
|
27
|
-
"#{AppConfig.license}\n" +
|
28
|
-
"For more info about #{AppConfig.softwareName} see " +
|
29
|
-
"#{AppConfig.contact}\n\n" +
|
30
|
-
"Usage: #{AppConfig.appName} [options] file.tjp " +
|
31
|
-
"[ file1.tji ... ]"
|
32
|
-
opts.separator ""
|
33
|
-
opts.on('--silent', "Don't show program and progress information") do
|
34
|
-
@silent = true
|
35
|
-
end
|
36
|
-
opts.on('-g', '--generate-report <ID>', String,
|
37
|
-
'Generate reports despite scheduling errors') do |arg|
|
38
|
-
@reports << arg
|
39
|
-
end
|
40
|
-
opts.on_tail('-h', '--help', 'Show this message') do
|
41
|
-
puts opts.to_s
|
42
|
-
exit 0
|
43
|
-
end
|
21
|
+
class TaskJuggler
|
44
22
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
23
|
+
# The Tj3Client class provides the primary interface to the TaskJuggler
|
24
|
+
# daemon. It exposes a rich commandline interface that supports key
|
25
|
+
# operations like add/removing a project, generating a report or checking a
|
26
|
+
# time or status sheet. All connections are made via DRb and tj3client
|
27
|
+
# requires a properly configured tj3d to work.
|
28
|
+
class Tj3Client < Tj3AppBase
|
50
29
|
|
51
|
-
|
52
|
-
|
53
|
-
begin
|
54
|
-
files = opts.parse(argv)
|
55
|
-
rescue OptionParser::ParseError => msg
|
56
|
-
puts opts.to_s + "\n"
|
57
|
-
$stderr.puts msg
|
58
|
-
exit 0
|
59
|
-
end
|
30
|
+
def initialize
|
31
|
+
super
|
60
32
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
33
|
+
# For security reasons, this will probably not change. All DRb
|
34
|
+
# operations are limited to localhost only. The client and the sever
|
35
|
+
# must have access to the identical file system.
|
36
|
+
@host = '127.0.0.1'
|
37
|
+
# The default port. 'T' and 'J' in ASCII decimal
|
38
|
+
@port = 8474
|
39
|
+
# This must must be changed for the communication to work.
|
40
|
+
@authKey = nil
|
41
|
+
# Determines whether report IDs are fix IDs or regular expressions that
|
42
|
+
# match a set of reports.
|
43
|
+
@regExpMode = false
|
68
44
|
|
69
|
-
|
70
|
-
end
|
45
|
+
@mandatoryArgs = '<command> [arg1 arg2 ...]'
|
71
46
|
|
72
|
-
|
73
|
-
|
47
|
+
# This list describes the supported command line commands and their
|
48
|
+
# parameter.
|
49
|
+
# :label : The command name
|
50
|
+
# :args : A list of parameters. If the first character is a '+' the
|
51
|
+
# parameter must be provided 1 or more times. If the first character is
|
52
|
+
# a '*' the parameter must be provided 0 or more times. Repeatable and
|
53
|
+
# optional paramters must follow the mandatory ones.
|
54
|
+
# :descr : A short description of the command used for the help text.
|
55
|
+
@commands = [
|
56
|
+
{ :label => 'status',
|
57
|
+
:args => [],
|
58
|
+
:descr => 'Display the status of the available projects' },
|
59
|
+
{ :label => 'terminate',
|
60
|
+
:args => [],
|
61
|
+
:descr => 'Terminate the TaskJuggler daemon' },
|
62
|
+
{ :label => 'add',
|
63
|
+
:args => [ 'tjp file', '*tji file'],
|
64
|
+
:descr => 'Add a new project or update and existing one' },
|
65
|
+
{ :label => 'remove',
|
66
|
+
:args => [ '+project ID' ],
|
67
|
+
:descr => 'Remove the project with the specified ID from the daemon' },
|
68
|
+
{ :label => 'report',
|
69
|
+
:args => [ 'project ID', '+report ID', '!=', '*tji file'],
|
70
|
+
:descr => 'Generate the report with the provided ID for ' +
|
71
|
+
'the project with the given ID'},
|
72
|
+
{ :label => 'list-reports',
|
73
|
+
:args => [ 'project ID', '!report ID' ],
|
74
|
+
:descr => 'List all available reports of the project or those ' +
|
75
|
+
'that match the provided report ID' },
|
76
|
+
{ :label => 'check-ts',
|
77
|
+
:args => [ 'project ID', 'time sheet' ],
|
78
|
+
:descr => 'Check the provided time sheet for correctness' +
|
79
|
+
'against the project with the given ID'},
|
80
|
+
{ :label => 'check-ss',
|
81
|
+
:args => [ 'project ID', 'status sheet' ],
|
82
|
+
:descr => 'Check the provided status sheet for correctness ' +
|
83
|
+
'against the project with the given ID'}
|
84
|
+
]
|
85
|
+
end
|
74
86
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
87
|
+
def processArguments(argv)
|
88
|
+
super do
|
89
|
+
@opts.banner += <<'EOT'
|
90
|
+
The TaskJuggler client is used to send commands and data to the TaskJuggler
|
91
|
+
daemon. The communication is done via TCP/IP.
|
80
92
|
|
81
|
-
|
93
|
+
The following commands are supported:
|
82
94
|
|
83
|
-
|
84
|
-
# process.
|
85
|
-
DRb.start_service
|
86
|
-
serviceManager = DRbObject.new(nil, 'druby://localhost:8474')
|
95
|
+
EOT
|
87
96
|
|
88
|
-
|
89
|
-
|
97
|
+
# Convert the command list into a help text.
|
98
|
+
@commands.each do |cmd|
|
99
|
+
tail = ''
|
100
|
+
args = cmd[:args].dup
|
101
|
+
args.map! do |c|
|
102
|
+
if c[0] == '*'
|
103
|
+
"[<#{c[1..-1]}> ...]"
|
104
|
+
elsif c[0] == '+'
|
105
|
+
"<#{c[1..-1]}> [<#{c[1..-1]}> ...]"
|
106
|
+
elsif c[0] == '!'
|
107
|
+
tail += ']'
|
108
|
+
"[#{c[1..-1]} "
|
109
|
+
else
|
110
|
+
"<#{c}>"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
args = args.join(' ')
|
114
|
+
@opts.banner += " #{cmd[:label] + ' ' + args + tail}" +
|
115
|
+
"\n\n#{' ' * 10 + format(cmd[:descr], 10)}\n"
|
116
|
+
end
|
117
|
+
@opts.on('-p', '--port <NUMBER>', Integer,
|
118
|
+
format('Use the specified TCP/IP port')) do |arg|
|
119
|
+
@port = arg
|
120
|
+
end
|
121
|
+
@opts.on('-r', '--regexp',
|
122
|
+
format('The report IDs are not fixed but regular expressions ' +
|
123
|
+
'that match a set of reports')) do |arg|
|
124
|
+
@regExpMode = true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
90
128
|
|
91
|
-
|
92
|
-
|
93
|
-
|
129
|
+
def main
|
130
|
+
args = super
|
131
|
+
# Run a first check of the non-option command line arguments.
|
132
|
+
checkCommand(args)
|
133
|
+
# Read some configuration variables. Except for the authKey, they are
|
134
|
+
# all optional.
|
135
|
+
@rc.configure(self, 'global')
|
94
136
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
137
|
+
connectDaemon
|
138
|
+
retVal = executeCommand(args[0], args[1..-1])
|
139
|
+
disconnectDaemon
|
140
|
+
|
141
|
+
retVal
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
|
146
|
+
def checkCommand(args)
|
147
|
+
if args.empty?
|
148
|
+
errorMessage = 'You must specify a command!'
|
149
|
+
else
|
150
|
+
errorMessage = "Unknown command #{args[0]}"
|
151
|
+
@commands.each do |cmd|
|
152
|
+
# The first value of args is the command name.
|
153
|
+
if cmd[:label] == args[0]
|
154
|
+
# Find out how many arguments we need to have and if that's a
|
155
|
+
# lower limit or a fixed value.
|
156
|
+
minArgs = 0
|
157
|
+
varArgs = false
|
158
|
+
cmd[:args].each do |arg|
|
159
|
+
# Arguments starting with '+' must have 1 or more showings.
|
160
|
+
# Arguments starting with '*' may show up 0 or more times.
|
161
|
+
minArgs += 1 unless '!*'.include?(arg[0])
|
162
|
+
varArgs = true if '!*+'.include?(arg[0])
|
163
|
+
end
|
164
|
+
return true if args.length - 1 >= minArgs
|
165
|
+
errorMessage = "Command #{args[0]} must have " +
|
166
|
+
"#{varArgs ? 'at least ' : ''}#{minArgs} " +
|
167
|
+
'arguments'
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
error(errorMessage)
|
173
|
+
end
|
174
|
+
|
175
|
+
def connectDaemon
|
176
|
+
unless @authKey
|
177
|
+
$stderr.puts <<'EOT'
|
178
|
+
You must set an authentication key in the configuration file. Create a file
|
179
|
+
named .taskjugglerrc or taskjuggler.rc that contains at least the following
|
180
|
+
lines. Replace 'your_secret_key' with some random character sequence.
|
181
|
+
|
182
|
+
_global:
|
183
|
+
authKey: your_secret_key
|
184
|
+
EOT
|
185
|
+
end
|
186
|
+
|
187
|
+
# We try to play it safe here. The client also starts a DRb server, so
|
188
|
+
# we need to make sure it's constricted to localhost only. We require
|
189
|
+
# the DRb server for the standard IO redirection to work.
|
190
|
+
$SAFE = 1
|
191
|
+
DRb.install_acl(ACL.new(%w[ deny all
|
192
|
+
allow 127.0.0.1 ]))
|
193
|
+
DRb.start_service('druby://127.0.0.1:0')
|
194
|
+
|
195
|
+
begin
|
196
|
+
# Get the ProjectBroker object from the tj3d.
|
197
|
+
@broker = DRbObject.new(nil, "druby://#{@host}:#{@port}")
|
198
|
+
# Client and server should always come from the same Gem. Since we
|
199
|
+
# restict communication to localhost, that's probably not a problem.
|
200
|
+
if (check = @broker.apiVersion(@authKey, 1)) < 0
|
201
|
+
error('This client is too old for the server. Please ' +
|
202
|
+
'upgrade to a more recent version of the software.')
|
203
|
+
elsif check == 0
|
204
|
+
error('Authentication failed. Please check your authentication ' +
|
205
|
+
'key to match the server key.')
|
206
|
+
end
|
207
|
+
rescue
|
208
|
+
error("TaskJuggler server on host '#{@host}' port " +
|
209
|
+
"#{@port} is not responding: #{$!}")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def disconnectDaemon
|
214
|
+
@broker = nil
|
215
|
+
|
216
|
+
DRb.stop_service
|
217
|
+
end
|
218
|
+
|
219
|
+
def executeCommand(command, args)
|
220
|
+
case command
|
221
|
+
when 'status'
|
222
|
+
$stdout.puts callDaemon(:status, [])
|
223
|
+
when 'terminate'
|
224
|
+
callDaemon(:stop, [])
|
225
|
+
when 'add'
|
226
|
+
# Ask the daemon to create a new ProjectServer process and return a
|
227
|
+
# DRbObject to access it.
|
228
|
+
connectToProjectServer
|
229
|
+
# Ask the server to load the files in _args_ into the ProjectServer.
|
230
|
+
begin
|
231
|
+
res = @projectServer.loadProject(@ps_authKey, [ Dir.getwd, *args ])
|
232
|
+
rescue
|
233
|
+
error("Loading of project failed: #{$!}")
|
234
|
+
end
|
235
|
+
disconnectProjectServer
|
236
|
+
return res ? 0 : 1
|
237
|
+
when 'remove'
|
238
|
+
args.each do |arg|
|
239
|
+
unless callDaemon(:removeProject, arg)
|
240
|
+
error("Project '#{arg}' not found in list")
|
241
|
+
end
|
242
|
+
end
|
243
|
+
when 'report'
|
244
|
+
# The first value of args is the project ID. The following values
|
245
|
+
# could be either report IDs or TJI file # names ('.' or '*.tji').
|
246
|
+
projectId = args.shift
|
247
|
+
# Ask the ProjectServer to launch a new ReportServer process and
|
248
|
+
# provide a DRbObject reference to it.
|
249
|
+
connectToReportServer(projectId)
|
250
|
+
|
251
|
+
reportIds, tjiFiles = splitIdsAndFiles(args)
|
252
|
+
if reportIds.empty?
|
253
|
+
disconnectReportServer
|
254
|
+
error('You must provide at least one report ID')
|
255
|
+
end
|
256
|
+
# Send the provided .tji files to the ReportServer.
|
257
|
+
failed = !addFiles(tjiFiles)
|
258
|
+
# Ask the ReportServer to generate the reports with the provided IDs.
|
259
|
+
unless failed
|
260
|
+
reportIds.each do |reportId|
|
261
|
+
unless @reportServer.generateReport(@rs_authKey, reportId,
|
262
|
+
@regExpMode)
|
263
|
+
failed = true
|
264
|
+
break
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
# Terminate the ReportServer
|
269
|
+
disconnectReportServer
|
270
|
+
return failed ? 1 : 0
|
271
|
+
when 'list-reports'
|
272
|
+
# The first value of args is the project ID. The following values
|
273
|
+
# could be either report IDs or TJI file # names ('.' or '*.tji').
|
274
|
+
projectId = args.shift
|
275
|
+
# Ask the ProjectServer to launch a new ReportServer process and
|
276
|
+
# provide a DRbObject reference to it.
|
277
|
+
connectToReportServer(projectId)
|
278
|
+
|
279
|
+
reportIds, tjiFiles = splitIdsAndFiles(args)
|
280
|
+
if reportIds.empty?
|
281
|
+
# If the user did not provide a report ID we generate a full list.
|
282
|
+
reportIds = [ '.*' ]
|
283
|
+
@regExpMode = true
|
284
|
+
end
|
285
|
+
# Send the provided .tji files to the ReportServer.
|
286
|
+
failed = !addFiles(tjiFiles)
|
287
|
+
# Ask the ReportServer to generate the reports with the provided IDs.
|
288
|
+
unless failed
|
289
|
+
reportIds.each do |reportId|
|
290
|
+
unless @reportServer.listReports(@rs_authKey, reportId, @regExpMode)
|
291
|
+
failed = true
|
292
|
+
break
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
# Terminate the ReportServer
|
297
|
+
disconnectReportServer
|
298
|
+
return failed ? 1 : 0
|
299
|
+
when 'check-ts'
|
300
|
+
connectToReportServer(args[0])
|
301
|
+
begin
|
302
|
+
res = @reportServer.checkTimeSheet(@rs_authKey, args[1])
|
303
|
+
rescue
|
304
|
+
error("Time sheet check failed: #{$!}")
|
305
|
+
end
|
306
|
+
disconnectReportServer
|
307
|
+
return res ? 0 : 1
|
308
|
+
when 'check-ss'
|
309
|
+
connectToReportServer(args[0])
|
310
|
+
begin
|
311
|
+
res = @reportServer.checkStatusSheet(@rs_authKey, args[1])
|
312
|
+
rescue
|
313
|
+
error("Status sheet check failed: #{$!}")
|
314
|
+
end
|
315
|
+
disconnectReportServer
|
316
|
+
return res ? 0 : 1
|
317
|
+
else
|
318
|
+
raise "Unknown command #{command}"
|
319
|
+
end
|
320
|
+
0
|
321
|
+
end
|
322
|
+
|
323
|
+
def connectToProjectServer
|
324
|
+
@ps_uri, @ps_authKey = callDaemon(:addProject, [])
|
325
|
+
begin
|
326
|
+
@projectServer = DRbObject.new(nil, @ps_uri)
|
327
|
+
rescue
|
328
|
+
error("Can't get ProjectServer object: #{$!}")
|
329
|
+
end
|
330
|
+
begin
|
331
|
+
@projectServer.connect(@ps_authKey, $stdout, $stderr, $stdin, @silent)
|
332
|
+
rescue
|
333
|
+
error("Can't connect IO: #{$!}")
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
def disconnectProjectServer
|
338
|
+
begin
|
339
|
+
@projectServer.disconnect(@ps_authKey)
|
340
|
+
rescue
|
341
|
+
error("Can't disconnect IO: #{$!}")
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
def connectToReportServer(projectId)
|
346
|
+
@ps_uri, @ps_authKey = callDaemon(:getProject, projectId)
|
347
|
+
if @ps_uri.nil?
|
348
|
+
error("No project with ID #{projectId} loaded")
|
349
|
+
end
|
350
|
+
begin
|
351
|
+
@projectServer = DRbObject.new(nil, @ps_uri)
|
352
|
+
@rs_uri, @rs_authKey = @projectServer.getReportServer(@ps_authKey)
|
353
|
+
@reportServer = DRbObject.new(nil, @rs_uri)
|
354
|
+
rescue
|
355
|
+
error("Cannot get report server")
|
356
|
+
end
|
357
|
+
begin
|
358
|
+
@reportServer.connect(@rs_authKey, $stdout, $stderr, $stdin, @silent)
|
359
|
+
rescue
|
360
|
+
error("Can't connect IO: #{$!}")
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
def disconnectReportServer
|
365
|
+
begin
|
366
|
+
@reportServer.disconnect(@rs_authKey)
|
367
|
+
rescue
|
368
|
+
error("Can't disconnect IO: #{$!}")
|
369
|
+
end
|
370
|
+
begin
|
371
|
+
@reportServer.terminate(@rs_authKey)
|
372
|
+
rescue
|
373
|
+
error("Report server termination failed: #{$!}")
|
374
|
+
end
|
375
|
+
@reportServer = nil
|
376
|
+
begin
|
377
|
+
@projectServer.dropReportServer(@ps_authKey, @rs_uri)
|
378
|
+
rescue
|
379
|
+
error("Cannot drop report server: #{$!}")
|
380
|
+
end
|
381
|
+
@rs_uri = nil
|
382
|
+
@rs_authKey = nil
|
383
|
+
@projectServer = nil
|
384
|
+
@ps_uri = nil
|
385
|
+
@ps_authKey = nil
|
386
|
+
end
|
387
|
+
|
388
|
+
# Call the TaskJuggler daemon (ProjectBroker) and execute the provided
|
389
|
+
# command with the provided arguments.
|
390
|
+
def callDaemon(command, args)
|
391
|
+
begin
|
392
|
+
return @broker.command(@authKey, command, args)
|
393
|
+
rescue
|
394
|
+
error("Call to TaskJuggler server on host '#{@host}' " +
|
395
|
+
"port #{@port} failed: #{$!}")
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
# Sort the remaining arguments into a report ID and a TJI file list.
|
400
|
+
# If .tji files are present, they must be separated from the report ID
|
401
|
+
# list by a '='.
|
402
|
+
def splitIdsAndFiles(args)
|
403
|
+
reportIds = []
|
404
|
+
tjiFiles = []
|
405
|
+
addToReports = true
|
406
|
+
args.each do |arg|
|
407
|
+
if arg == '='
|
408
|
+
# Switch to tji file list.
|
409
|
+
addToReports = false
|
410
|
+
elsif addToReports
|
411
|
+
reportIds << arg
|
412
|
+
else
|
413
|
+
tjiFiles << arg
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
[ reportIds, tjiFiles ]
|
418
|
+
end
|
419
|
+
|
420
|
+
# Transfer the _tjiFiles_ to the _reportServer_.
|
421
|
+
def addFiles(tjiFiles)
|
422
|
+
tjiFiles.each do |file|
|
423
|
+
begin
|
424
|
+
unless @reportServer.addFile(@rs_authKey, file)
|
425
|
+
return false
|
426
|
+
end
|
427
|
+
rescue
|
428
|
+
error("Cannot add file #{file} to ReportServer")
|
429
|
+
end
|
430
|
+
end
|
431
|
+
true
|
432
|
+
end
|
433
|
+
|
434
|
+
def error(message)
|
435
|
+
$stderr.puts "ERROR: #{message}"
|
436
|
+
exit 1
|
437
|
+
end
|
99
438
|
|
100
|
-
@reports.each do |id|
|
101
|
-
server.generateReport(id)
|
102
439
|
end
|
103
440
|
|
104
|
-
server.disconnect
|
105
441
|
end
|
106
442
|
|
107
|
-
main()
|
108
|
-
exit 0
|
109
|
-
|
443
|
+
exit TaskJuggler::Tj3Client.new.main()
|
110
444
|
|
data/lib/tj3d.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = tj3ss_receiver.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of version 2 of the GNU General Public License as
|
10
|
+
# published by the Free Software Foundation.
|
11
|
+
#
|
12
|
+
|
13
|
+
require 'drb'
|
14
|
+
require 'Tj3AppBase'
|
15
|
+
require 'LogFile'
|
16
|
+
require 'daemon/ProjectBroker'
|
17
|
+
|
18
|
+
# Name of the application
|
19
|
+
AppConfig.appName = 'tj3d'
|
20
|
+
|
21
|
+
class TaskJuggler
|
22
|
+
|
23
|
+
class Tj3Daemon < Tj3AppBase
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
super
|
27
|
+
@mandatoryArgs = '[<tjp file> [<tji file> ...] ...]'
|
28
|
+
|
29
|
+
@log = LogFile.instance
|
30
|
+
@log.logFile = Dir.getwd + "/#{AppConfig.appName}.log"
|
31
|
+
@log.appName = AppConfig.appName
|
32
|
+
@daemonize = true
|
33
|
+
@port = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def processArguments(argv)
|
37
|
+
super do
|
38
|
+
@opts.banner += <<'EOT'
|
39
|
+
The TaskJuggler daemon can be used to quickly generate reports for a number
|
40
|
+
of scheduled projects that are resident in memory. Once the daemon has been
|
41
|
+
started tj3client can be used to control it.
|
42
|
+
EOT
|
43
|
+
@opts.on('-d', '--dont-daemonize',
|
44
|
+
format("Don't put program into daemon mode. Keep it " +
|
45
|
+
'connected to the terminal and show debug output.')) do
|
46
|
+
@daemonize = false
|
47
|
+
end
|
48
|
+
@opts.on('-p', '--port <NUMBER>', Integer,
|
49
|
+
format('Use the specified TCP/IP port')) do |arg|
|
50
|
+
@port = arg
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def main
|
56
|
+
files = super
|
57
|
+
broker = ProjectBroker.new
|
58
|
+
@rc.configure(self, 'global')
|
59
|
+
@rc.configure(@log, 'global.log')
|
60
|
+
@rc.configure(broker, 'global')
|
61
|
+
@rc.configure(broker, 'daemon')
|
62
|
+
broker.port = @port if @port
|
63
|
+
|
64
|
+
projects = []
|
65
|
+
project = nil
|
66
|
+
files.each do |file|
|
67
|
+
if file[-4..-1] == '.tjp'
|
68
|
+
# The project master file determines the working directory. If it's
|
69
|
+
# an absolute file name, that directory will become the working
|
70
|
+
# directory. If it's a relative file name, the current working
|
71
|
+
# directory will be kept.
|
72
|
+
if file[0] == '/'
|
73
|
+
# Absolute file name
|
74
|
+
workingDir = File.dirname(file)
|
75
|
+
fileName = File.basename(file)
|
76
|
+
else
|
77
|
+
# Relative file name
|
78
|
+
workingDir = Dir.getwd
|
79
|
+
fileName = file
|
80
|
+
end
|
81
|
+
project = [ workingDir, fileName ]
|
82
|
+
projects << project
|
83
|
+
elsif file[-4..-1] == '.tji'
|
84
|
+
# .tji files are optional. But if they are specified, they must
|
85
|
+
# always follow the master file in the list.
|
86
|
+
if project.nil?
|
87
|
+
error("You must specify a '.tjp' file before the '.tji' files")
|
88
|
+
end
|
89
|
+
project << file
|
90
|
+
else
|
91
|
+
error("Project files must have a '.tjp' or '.tji' extension")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
broker.daemonize = @daemonize
|
96
|
+
|
97
|
+
broker.start(projects)
|
98
|
+
end
|
99
|
+
|
100
|
+
def error(message)
|
101
|
+
$stderr.puts "ERROR: #{message}"
|
102
|
+
exit 1
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
exit TaskJuggler::Tj3Daemon.new.main()
|
110
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = tj3ss_receiver.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of version 2 of the GNU General Public License as
|
10
|
+
# published by the Free Software Foundation.
|
11
|
+
#
|
12
|
+
|
13
|
+
require 'Tj3SheetAppBase'
|
14
|
+
require 'StatusSheetReceiver'
|
15
|
+
|
16
|
+
# Name of the application
|
17
|
+
AppConfig.appName = 'tj3ss_receiver'
|
18
|
+
|
19
|
+
class TaskJuggler
|
20
|
+
|
21
|
+
class Tj3SsReceiver < Tj3SheetAppBase
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def processArguments(argv)
|
28
|
+
super do
|
29
|
+
@opts.banner += <<'EOT'
|
30
|
+
This program can be used to receive filled-out status sheets via email.
|
31
|
+
It reads the emails from STDIN and extracts the status sheet from the
|
32
|
+
attached files. The status sheet is checked for correctness. Good status
|
33
|
+
sheets are filed away. The sender be informed by email that the status
|
34
|
+
sheets was accepted or rejected.
|
35
|
+
EOT
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def main
|
40
|
+
super
|
41
|
+
ts = TaskJuggler::StatusSheetReceiver.new('tj3ss_receiver')
|
42
|
+
@rc.configure(ts, 'global')
|
43
|
+
@rc.configure(ts, 'statussheets')
|
44
|
+
@rc.configure(ts, 'statussheets.receiver')
|
45
|
+
ts.workingDir = @workingDir if @workingDir
|
46
|
+
ts.dryRun = @dryRun
|
47
|
+
|
48
|
+
ts.processEmail
|
49
|
+
0
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
exit TaskJuggler::Tj3SsReceiver.new.main()
|