doc/TaskJuggler/Tj3Client.html in taskjuggler-0.0.6 vs doc/TaskJuggler/Tj3Client.html in taskjuggler-0.0.7

- old
+ new

@@ -191,10 +191,14 @@ <li><a href="../TaskJuggler/DependencyListAttribute.html">TaskJuggler::DependencyListAttribute</a></li> <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li> + <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li> + + <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li> + <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li> <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li> <li><a href="../TaskJuggler/FloatAttribute.html">TaskJuggler::FloatAttribute</a></li> @@ -263,12 +267,10 @@ <li><a href="../TaskJuggler/LogicalOperation.html">TaskJuggler::LogicalOperation</a></li> <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li> - <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li> - <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li> <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li> <li><a href="../TaskJuggler/ManagerStatusRecord.html">TaskJuggler::ManagerStatusRecord</a></li> @@ -329,10 +331,12 @@ <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li> <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li> + <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li> + <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li> <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li> <li><a href="../TaskJuggler/ReferenceAttribute.html">TaskJuggler::ReferenceAttribute</a></li> @@ -375,12 +379,10 @@ <li><a href="../TaskJuggler/RichTextDocument.html">TaskJuggler::RichTextDocument</a></li> <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li> - <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li> - <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li> <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li> <li><a href="../TaskJuggler/RichTextImage.html">TaskJuggler::RichTextImage</a></li> @@ -417,10 +419,12 @@ <li><a href="../TaskJuggler/ShiftAssignmentsAttribute.html">TaskJuggler::ShiftAssignmentsAttribute</a></li> <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li> + <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li> + <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li> <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li> <li><a href="../TaskJuggler/StatusSheetReceiver.html">TaskJuggler::StatusSheetReceiver</a></li> @@ -527,10 +531,12 @@ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li> <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li> + <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li> + <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li> <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li> <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li> @@ -622,57 +628,64 @@ 34: <span class="ruby-comment cmt"># operations are limited to localhost only. The client and the sever</span> 35: <span class="ruby-comment cmt"># must have access to the identical file system.</span> 36: <span class="ruby-ivar">@host</span> = <span class="ruby-value str">'127.0.0.1'</span> 37: <span class="ruby-comment cmt"># The default port. 'T' and 'J' in ASCII decimal</span> 38: <span class="ruby-ivar">@port</span> = <span class="ruby-value">8474</span> -39: <span class="ruby-comment cmt"># This must must be changed for the communication to work.</span> -40: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span> -41: <span class="ruby-comment cmt"># Determines whether report IDs are fix IDs or regular expressions that</span> -42: <span class="ruby-comment cmt"># match a set of reports.</span> -43: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">false</span> -44: -45: <span class="ruby-ivar">@mandatoryArgs</span> = <span class="ruby-value str">'&lt;command&gt; [arg1 arg2 ...]'</span> +39: <span class="ruby-comment cmt"># The file with the server URI in case port is 0.</span> +40: <span class="ruby-ivar">@uriFile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Dir</span>.<span class="ruby-identifier">getwd</span>, <span class="ruby-value str">'.tj3d.uri'</span>) +41: <span class="ruby-comment cmt"># This must must be changed for the communication to work.</span> +42: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span> +43: <span class="ruby-comment cmt"># Determines whether report IDs are fix IDs or regular expressions that</span> +44: <span class="ruby-comment cmt"># match a set of reports.</span> +45: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">false</span> 46: -47: <span class="ruby-comment cmt"># This list describes the supported command line commands and their</span> -48: <span class="ruby-comment cmt"># parameter.</span> -49: <span class="ruby-comment cmt"># :label : The command name</span> -50: <span class="ruby-comment cmt"># :args : A list of parameters. If the first character is a '+' the</span> -51: <span class="ruby-comment cmt"># parameter must be provided 1 or more times. If the first character is</span> -52: <span class="ruby-comment cmt"># a '*' the parameter must be provided 0 or more times. Repeatable and</span> -53: <span class="ruby-comment cmt"># optional paramters must follow the mandatory ones.</span> -54: <span class="ruby-comment cmt"># :descr : A short description of the command used for the help text.</span> -55: <span class="ruby-ivar">@commands</span> = [ -56: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'status'</span>, -57: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [], -58: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Display the status of the available projects'</span> }, -59: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'terminate'</span>, -60: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [], -61: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Terminate the TaskJuggler daemon'</span> }, -62: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'add'</span>, -63: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'tjp file'</span>, <span class="ruby-value str">'*tji file'</span>], -64: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Add a new project or update and existing one'</span> }, -65: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'remove'</span>, -66: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'+project ID'</span> ], -67: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Remove the project with the specified ID from the daemon'</span> }, -68: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'report'</span>, -69: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'+report ID'</span>, <span class="ruby-value str">'!='</span>, <span class="ruby-value str">'*tji file'</span>], -70: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Generate the report with the provided ID for '</span> <span class="ruby-operator">+</span> -71: <span class="ruby-value str">'the project with the given ID'</span>}, -72: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'list-reports'</span>, -73: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'!report ID'</span> ], -74: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'List all available reports of the project or those '</span> <span class="ruby-operator">+</span> -75: <span class="ruby-value str">'that match the provided report ID'</span> }, -76: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'check-ts'</span>, -77: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'time sheet'</span> ], -78: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Check the provided time sheet for correctness'</span> <span class="ruby-operator">+</span> -79: <span class="ruby-value str">'against the project with the given ID'</span>}, -80: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'check-ss'</span>, -81: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'status sheet'</span> ], -82: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Check the provided status sheet for correctness '</span> <span class="ruby-operator">+</span> -83: <span class="ruby-value str">'against the project with the given ID'</span>} -84: ] -85: <span class="ruby-keyword kw">end</span></pre> +47: <span class="ruby-ivar">@mandatoryArgs</span> = <span class="ruby-value str">'&lt;command&gt; [arg1 arg2 ...]'</span> +48: +49: <span class="ruby-comment cmt"># This list describes the supported command line commands and their</span> +50: <span class="ruby-comment cmt"># parameter.</span> +51: <span class="ruby-comment cmt"># :label : The command name</span> +52: <span class="ruby-comment cmt"># :args : A list of parameters. If the first character is a '+' the</span> +53: <span class="ruby-comment cmt"># parameter must be provided 1 or more times. If the first character is</span> +54: <span class="ruby-comment cmt"># a '*' the parameter must be provided 0 or more times. Repeatable and</span> +55: <span class="ruby-comment cmt"># optional paramters must follow the mandatory ones.</span> +56: <span class="ruby-comment cmt"># :descr : A short description of the command used for the help text.</span> +57: <span class="ruby-ivar">@commands</span> = [ +58: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'status'</span>, +59: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [], +60: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Display the status of the available projects'</span> }, +61: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'terminate'</span>, +62: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [], +63: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Terminate the TaskJuggler daemon'</span> }, +64: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'add'</span>, +65: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'tjp file'</span>, <span class="ruby-value str">'*tji file'</span>], +66: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Add a new project or update and existing one'</span> }, +67: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'update'</span>, +68: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [], +69: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Reload all projects that have modified files and '</span><span class="ruby-operator">+</span> +70: <span class="ruby-value str">'are not being reloaded already'</span> }, +71: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'remove'</span>, +72: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'+project ID'</span> ], +73: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Remove the project with the specified ID from the '</span> <span class="ruby-operator">+</span> +74: <span class="ruby-value str">'daemon'</span> }, +75: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'report'</span>, +76: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'+report ID'</span>, <span class="ruby-value str">'!='</span>, <span class="ruby-value str">'*tji file'</span>], +77: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Generate the report with the provided ID for '</span> <span class="ruby-operator">+</span> +78: <span class="ruby-value str">'the project with the given ID'</span>}, +79: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'list-reports'</span>, +80: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'!report ID'</span> ], +81: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'List all available reports of the project or those '</span> <span class="ruby-operator">+</span> +82: <span class="ruby-value str">'that match the provided report ID'</span> }, +83: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'check-ts'</span>, +84: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'time sheet'</span> ], +85: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Check the provided time sheet for correctness '</span> <span class="ruby-operator">+</span> +86: <span class="ruby-value str">'against the project with the given ID'</span>}, +87: { <span class="ruby-value">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'check-ss'</span>, +88: <span class="ruby-value">:args</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-value str">'project ID'</span>, <span class="ruby-value str">'status sheet'</span> ], +89: <span class="ruby-value">:descr</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Check the provided status sheet for correctness '</span> <span class="ruby-operator">+</span> +90: <span class="ruby-value str">'against the project with the given ID'</span>} +91: ] +92: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -705,25 +718,25 @@ <div class="method-source-code" id="main-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 129</span> -129: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">main</span> -130: <span class="ruby-identifier">args</span> = <span class="ruby-keyword kw">super</span> -131: <span class="ruby-comment cmt"># Run a first check of the non-option command line arguments.</span> -132: <span class="ruby-identifier">checkCommand</span>(<span class="ruby-identifier">args</span>) -133: <span class="ruby-comment cmt"># Read some configuration variables. Except for the authKey, they are</span> -134: <span class="ruby-comment cmt"># all optional.</span> -135: <span class="ruby-ivar">@rc</span>.<span class="ruby-identifier">configure</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-value str">'global'</span>) -136: -137: <span class="ruby-identifier">connectDaemon</span> -138: <span class="ruby-identifier">retVal</span> = <span class="ruby-identifier">executeCommand</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]) -139: <span class="ruby-identifier">disconnectDaemon</span> -140: -141: <span class="ruby-identifier">retVal</span> -142: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 141</span> +141: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">main</span> +142: <span class="ruby-identifier">args</span> = <span class="ruby-keyword kw">super</span> +143: <span class="ruby-comment cmt"># Run a first check of the non-option command line arguments.</span> +144: <span class="ruby-identifier">checkCommand</span>(<span class="ruby-identifier">args</span>) +145: <span class="ruby-comment cmt"># Read some configuration variables. Except for the authKey, they are</span> +146: <span class="ruby-comment cmt"># all optional.</span> +147: <span class="ruby-ivar">@rc</span>.<span class="ruby-identifier">configure</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-value str">'global'</span>) +148: +149: <span class="ruby-identifier">connectDaemon</span> +150: <span class="ruby-identifier">retVal</span> = <span class="ruby-identifier">executeCommand</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]) +151: <span class="ruby-identifier">disconnectDaemon</span> +152: +153: <span class="ruby-identifier">retVal</span> +154: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -750,46 +763,51 @@ <div class="method-source-code" id="process-rguments-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 87</span> - 87: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processArguments</span>(<span class="ruby-identifier">argv</span>) - 88: <span class="ruby-keyword kw">super</span> <span class="ruby-keyword kw">do</span> - 89: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">banner</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">The TaskJuggler client is used to send commands and data to the TaskJugglerdaemon. The communication is done via TCP/IP.The following commands are supported:</span> - 90: - 91: <span class="ruby-comment cmt"># Convert the command list into a help text.</span> - 92: <span class="ruby-ivar">@commands</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cmd</span><span class="ruby-operator">|</span> - 93: <span class="ruby-identifier">tail</span> = <span class="ruby-value str">''</span> - 94: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:args</span>].<span class="ruby-identifier">dup</span> - 95: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> - 96: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'*'</span> - 97: <span class="ruby-node">&quot;[&lt;#{c[1..-1]}&gt; ...]&quot;</span> - 98: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'+'</span> - 99: <span class="ruby-node">&quot;&lt;#{c[1..-1]}&gt; [&lt;#{c[1..-1]}&gt; ...]&quot;</span> -100: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'!'</span> -101: <span class="ruby-identifier">tail</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">']'</span> -102: <span class="ruby-node">&quot;[#{c[1..-1]} &quot;</span> -103: <span class="ruby-keyword kw">else</span> -104: <span class="ruby-node">&quot;&lt;#{c}&gt;&quot;</span> -105: <span class="ruby-keyword kw">end</span> -106: <span class="ruby-keyword kw">end</span> -107: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>) -108: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">banner</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{cmd[:label] + ' ' + args + tail}&quot;</span> <span class="ruby-operator">+</span> -109: <span class="ruby-node">&quot;\n\n#{' ' * 10 + format(cmd[:descr], 10)}\n&quot;</span> -110: <span class="ruby-keyword kw">end</span> -111: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-p'</span>, <span class="ruby-value str">'--port &lt;NUMBER&gt;'</span>, <span class="ruby-constant">Integer</span>, -112: <span class="ruby-identifier">format</span>(<span class="ruby-value str">'Use the specified TCP/IP port'</span>)) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> -113: <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">arg</span> -114: <span class="ruby-keyword kw">end</span> -115: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-r'</span>, <span class="ruby-value str">'--regexp'</span>, -116: <span class="ruby-identifier">format</span>(<span class="ruby-value str">'The report IDs are not fixed but regular expressions '</span> <span class="ruby-operator">+</span> -117: <span class="ruby-value str">'that match a set of reports'</span>)) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> -118: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">true</span> -119: <span class="ruby-keyword kw">end</span> -120: <span class="ruby-keyword kw">end</span> -121: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 94</span> + 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processArguments</span>(<span class="ruby-identifier">argv</span>) + 95: <span class="ruby-keyword kw">super</span> <span class="ruby-keyword kw">do</span> + 96: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">banner</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">The TaskJuggler client is used to send commands and data to the TaskJugglerdaemon. The communication is done via TCP/IP.The following commands are supported:</span> + 97: + 98: <span class="ruby-comment cmt"># Convert the command list into a help text.</span> + 99: <span class="ruby-ivar">@commands</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cmd</span><span class="ruby-operator">|</span> +100: <span class="ruby-identifier">tail</span> = <span class="ruby-value str">''</span> +101: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:args</span>].<span class="ruby-identifier">dup</span> +102: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> +103: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'*'</span> +104: <span class="ruby-node">&quot;[&lt;#{c[1..-1]}&gt; ...]&quot;</span> +105: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'+'</span> +106: <span class="ruby-node">&quot;&lt;#{c[1..-1]}&gt; [&lt;#{c[1..-1]}&gt; ...]&quot;</span> +107: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'!'</span> +108: <span class="ruby-identifier">tail</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">']'</span> +109: <span class="ruby-node">&quot;[#{c[1..-1]} &quot;</span> +110: <span class="ruby-keyword kw">else</span> +111: <span class="ruby-node">&quot;&lt;#{c}&gt;&quot;</span> +112: <span class="ruby-keyword kw">end</span> +113: <span class="ruby-keyword kw">end</span> +114: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">' '</span>) +115: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">banner</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{cmd[:label] + ' ' + args + tail}&quot;</span> <span class="ruby-operator">+</span> +116: <span class="ruby-node">&quot;\n\n#{' ' * 10 + format(cmd[:descr], 10)}\n&quot;</span> +117: <span class="ruby-keyword kw">end</span> +118: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-p'</span>, <span class="ruby-value str">'--port &lt;NUMBER&gt;'</span>, <span class="ruby-constant">Integer</span>, +119: <span class="ruby-identifier">format</span>(<span class="ruby-value str">'Use the specified TCP/IP port'</span>)) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +120: <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">arg</span> +121: <span class="ruby-keyword kw">end</span> +122: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--urifile'</span>, <span class="ruby-constant">String</span>, +123: <span class="ruby-identifier">format</span>(<span class="ruby-value str">'If the port is 0, use this file to get the URI '</span> <span class="ruby-operator">+</span> +124: <span class="ruby-value str">'of the server.'</span>)) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +125: <span class="ruby-ivar">@uriFile</span> = <span class="ruby-identifier">arg</span> +126: <span class="ruby-keyword kw">end</span> +127: <span class="ruby-ivar">@opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-r'</span>, <span class="ruby-value str">'--regexp'</span>, +128: <span class="ruby-identifier">format</span>(<span class="ruby-value str">'The report IDs are not fixed but regular expressions '</span> <span class="ruby-operator">+</span> +129: <span class="ruby-value str">'that match a set of reports'</span>)) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +130: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">true</span> +131: <span class="ruby-keyword kw">end</span> +132: <span class="ruby-keyword kw">end</span> +133: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -824,23 +842,23 @@ <div class="method-source-code" id="add-iles-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 418</span> -418: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) -419: <span class="ruby-identifier">tjiFiles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> -420: <span class="ruby-keyword kw">begin</span> -421: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">addFile</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">file</span>) -422: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> -423: <span class="ruby-keyword kw">end</span> -424: <span class="ruby-keyword kw">rescue</span> -425: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Cannot add file #{file} to ReportServer&quot;</span>) -426: <span class="ruby-keyword kw">end</span> -427: <span class="ruby-keyword kw">end</span> -428: <span class="ruby-keyword kw">true</span> -429: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 446</span> +446: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) +447: <span class="ruby-identifier">tjiFiles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> +448: <span class="ruby-keyword kw">begin</span> +449: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">addFile</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">file</span>) +450: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> +451: <span class="ruby-keyword kw">end</span> +452: <span class="ruby-keyword kw">rescue</span> +453: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Cannot add file #{file} to ReportServer&quot;</span>) +454: <span class="ruby-keyword kw">end</span> +455: <span class="ruby-keyword kw">end</span> +456: <span class="ruby-keyword kw">true</span> +457: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -871,19 +889,19 @@ <div class="method-source-code" id="call-aemon-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 387</span> -387: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) -388: <span class="ruby-keyword kw">begin</span> -389: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@broker</span>.<span class="ruby-identifier">command</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) -390: <span class="ruby-keyword kw">rescue</span> -391: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Call to TaskJuggler server on host '#{@host}' &quot;</span> <span class="ruby-operator">+</span> -392: <span class="ruby-node">&quot;port #{@port} failed: #{$!}&quot;</span>) -393: <span class="ruby-keyword kw">end</span> -394: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 415</span> +415: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) +416: <span class="ruby-keyword kw">begin</span> +417: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@broker</span>.<span class="ruby-identifier">command</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) +418: <span class="ruby-keyword kw">rescue</span> +419: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Call to TaskJuggler server on host '#{@host}' &quot;</span> <span class="ruby-operator">+</span> +420: <span class="ruby-node">&quot;port #{@port} failed: #{$!}&quot;</span>) +421: <span class="ruby-keyword kw">end</span> +422: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -910,39 +928,39 @@ <div class="method-source-code" id="check-ommand-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 146</span> -146: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkCommand</span>(<span class="ruby-identifier">args</span>) -147: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span> -148: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-value str">'You must specify a command!'</span> -149: <span class="ruby-keyword kw">else</span> -150: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-node">&quot;Unknown command #{args[0]}&quot;</span> -151: <span class="ruby-ivar">@commands</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cmd</span><span class="ruby-operator">|</span> -152: <span class="ruby-comment cmt"># The first value of args is the command name.</span> -153: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:label</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>] -154: <span class="ruby-comment cmt"># Find out how many arguments we need to have and if that's a</span> -155: <span class="ruby-comment cmt"># lower limit or a fixed value.</span> -156: <span class="ruby-identifier">minArgs</span> = <span class="ruby-value">0</span> -157: <span class="ruby-identifier">varArgs</span> = <span class="ruby-keyword kw">false</span> -158: <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:args</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> -159: <span class="ruby-comment cmt"># Arguments starting with '+' must have 1 or more showings.</span> -160: <span class="ruby-comment cmt"># Arguments starting with '*' may show up 0 or more times.</span> -161: <span class="ruby-identifier">minArgs</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-value str">'!*'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>[<span class="ruby-value">0</span>]) -162: <span class="ruby-identifier">varArgs</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'!*+'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>[<span class="ruby-value">0</span>]) -163: <span class="ruby-keyword kw">end</span> -164: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">minArgs</span> -165: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-node">&quot;Command #{args[0]} must have &quot;</span> <span class="ruby-operator">+</span> -166: <span class="ruby-node">&quot;#{varArgs ? 'at least ' : ''}#{minArgs} &quot;</span> <span class="ruby-operator">+</span> -167: <span class="ruby-value str">'arguments'</span> -168: <span class="ruby-keyword kw">end</span> -169: <span class="ruby-keyword kw">end</span> -170: <span class="ruby-keyword kw">end</span> -171: -172: <span class="ruby-identifier">error</span>(<span class="ruby-identifier">errorMessage</span>) -173: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 158</span> +158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkCommand</span>(<span class="ruby-identifier">args</span>) +159: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span> +160: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-value str">'You must specify a command!'</span> +161: <span class="ruby-keyword kw">else</span> +162: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-node">&quot;Unknown command #{args[0]}&quot;</span> +163: <span class="ruby-ivar">@commands</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cmd</span><span class="ruby-operator">|</span> +164: <span class="ruby-comment cmt"># The first value of args is the command name.</span> +165: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:label</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>] +166: <span class="ruby-comment cmt"># Find out how many arguments we need to have and if that's a</span> +167: <span class="ruby-comment cmt"># lower limit or a fixed value.</span> +168: <span class="ruby-identifier">minArgs</span> = <span class="ruby-value">0</span> +169: <span class="ruby-identifier">varArgs</span> = <span class="ruby-keyword kw">false</span> +170: <span class="ruby-identifier">cmd</span>[<span class="ruby-value">:args</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +171: <span class="ruby-comment cmt"># Arguments starting with '+' must have 1 or more showings.</span> +172: <span class="ruby-comment cmt"># Arguments starting with '*' may show up 0 or more times.</span> +173: <span class="ruby-identifier">minArgs</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-value str">'!*'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>[<span class="ruby-value">0</span>]) +174: <span class="ruby-identifier">varArgs</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'!*+'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>[<span class="ruby-value">0</span>]) +175: <span class="ruby-keyword kw">end</span> +176: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">minArgs</span> +177: <span class="ruby-identifier">errorMessage</span> = <span class="ruby-node">&quot;Command #{args[0]} must have &quot;</span> <span class="ruby-operator">+</span> +178: <span class="ruby-node">&quot;#{varArgs ? 'at least ' : ''}#{minArgs} &quot;</span> <span class="ruby-operator">+</span> +179: <span class="ruby-value str">'arguments'</span> +180: <span class="ruby-keyword kw">end</span> +181: <span class="ruby-keyword kw">end</span> +182: <span class="ruby-keyword kw">end</span> +183: +184: <span class="ruby-identifier">error</span>(<span class="ruby-identifier">errorMessage</span>) +185: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -969,41 +987,54 @@ <div class="method-source-code" id="connect-aemon-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 175</span> -175: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectDaemon</span> -176: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@authKey</span> -177: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">You must set an authentication key in the configuration file. Create a filenamed .taskjugglerrc or taskjuggler.rc that contains at least the followinglines. Replace 'your_secret_key' with some random character sequence._global: authKey: your_secret_key</span> -178: <span class="ruby-keyword kw">end</span> -179: -180: <span class="ruby-comment cmt"># We try to play it safe here. The client also starts a DRb server, so</span> -181: <span class="ruby-comment cmt"># we need to make sure it's constricted to localhost only. We require</span> -182: <span class="ruby-comment cmt"># the DRb server for the standard IO redirection to work.</span> -183: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span> -184: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all -185: allow 127.0.0.1 ]</span>)) -186: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>) -187: -188: <span class="ruby-keyword kw">begin</span> -189: <span class="ruby-comment cmt"># Get the ProjectBroker object from the tj3d.</span> -190: <span class="ruby-ivar">@broker</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-node">&quot;druby://#{@host}:#{@port}&quot;</span>) -191: <span class="ruby-comment cmt"># Client and server should always come from the same Gem. Since we</span> -192: <span class="ruby-comment cmt"># restict communication to localhost, that's probably not a problem.</span> -193: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">check</span> = <span class="ruby-ivar">@broker</span>.<span class="ruby-identifier">apiVersion</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-value">1</span>)) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> -194: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'This client is too old for the server. Please '</span> <span class="ruby-operator">+</span> -195: <span class="ruby-value str">'upgrade to a more recent version of the software.'</span>) -196: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">check</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> -197: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'Authentication failed. Please check your authentication '</span> <span class="ruby-operator">+</span> -198: <span class="ruby-value str">'key to match the server key.'</span>) -199: <span class="ruby-keyword kw">end</span> -200: <span class="ruby-keyword kw">rescue</span> -201: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;TaskJuggler server on host '#{@host}' port &quot;</span> <span class="ruby-operator">+</span> -202: <span class="ruby-node">&quot;#{@port} is not responding&quot;</span>) + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 187</span> +187: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectDaemon</span> +188: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@authKey</span> +189: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">You must set an authentication key in the configuration file. Create a filenamed .taskjugglerrc or taskjuggler.rc that contains at least the followinglines. Replace 'your_secret_key' with some random character sequence._global: authKey: your_secret_key</span> +190: <span class="ruby-keyword kw">end</span> +191: +192: <span class="ruby-identifier">uri</span> = <span class="ruby-node">&quot;druby://#{@host}:#{@port}&quot;</span> +193: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@port</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> +194: <span class="ruby-comment cmt"># If the @port is configured to 0, we need to read the URI to connect</span> +195: <span class="ruby-comment cmt"># to the server from the .tj3d.uri file that has been generated by the</span> +196: <span class="ruby-comment cmt"># server.</span> +197: <span class="ruby-keyword kw">begin</span> +198: <span class="ruby-identifier">uri</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-ivar">@uriFile</span>).<span class="ruby-identifier">chomp</span> +199: <span class="ruby-keyword kw">rescue</span> +200: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'The server port is configured to be 0, but no '</span> <span class="ruby-operator">+</span> +201: <span class="ruby-node">&quot;.tj3d.uri file can be found: #{$!}&quot;</span>) +202: <span class="ruby-keyword kw">end</span> 203: <span class="ruby-keyword kw">end</span> -204: <span class="ruby-keyword kw">end</span></pre> +204: +205: <span class="ruby-comment cmt"># We try to play it safe here. The client also starts a DRb server, so</span> +206: <span class="ruby-comment cmt"># we need to make sure it's constricted to localhost only. We require</span> +207: <span class="ruby-comment cmt"># the DRb server for the standard IO redirection to work.</span> +208: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span> +209: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all +210: allow 127.0.0.1 ]</span>)) +211: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>) +212: +213: <span class="ruby-keyword kw">begin</span> +214: <span class="ruby-comment cmt"># Get the ProjectBroker object from the tj3d.</span> +215: <span class="ruby-ivar">@broker</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">uri</span>) +216: <span class="ruby-comment cmt"># Client and server should always come from the same Gem. Since we</span> +217: <span class="ruby-comment cmt"># restict communication to localhost, that's probably not a problem.</span> +218: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">check</span> = <span class="ruby-ivar">@broker</span>.<span class="ruby-identifier">apiVersion</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-value">1</span>)) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> +219: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'This client is too old for the server. Please '</span> <span class="ruby-operator">+</span> +220: <span class="ruby-value str">'upgrade to a more recent version of the software.'</span>) +221: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">check</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> +222: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'Authentication failed. Please check your authentication '</span> <span class="ruby-operator">+</span> +223: <span class="ruby-value str">'key to match the server key.'</span>) +224: <span class="ruby-keyword kw">end</span> +225: <span class="ruby-keyword kw">rescue</span> +226: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;TaskJuggler server on host '#{@host}' port &quot;</span> <span class="ruby-operator">+</span> +227: <span class="ruby-node">&quot;#{@port} is not responding&quot;</span>) +228: <span class="ruby-keyword kw">end</span> +229: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1030,24 +1061,24 @@ <div class="method-source-code" id="connect-o-roject-erver-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 325</span> -325: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectToProjectServer</span> -326: <span class="ruby-ivar">@ps_uri</span>, <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:addProject</span>, []) -327: <span class="ruby-keyword kw">begin</span> -328: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@ps_uri</span>) -329: <span class="ruby-keyword kw">rescue</span> -330: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't get ProjectServer object: #{$!}&quot;</span>) -331: <span class="ruby-keyword kw">end</span> -332: <span class="ruby-keyword kw">begin</span> -333: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-ivar">@ps_authKey</span>, <span class="ruby-identifier">$stdout</span>, <span class="ruby-identifier">$stderr</span>, <span class="ruby-identifier">$stdin</span>, <span class="ruby-ivar">@silent</span>) -334: <span class="ruby-keyword kw">rescue</span> -335: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't connect IO: #{$!}&quot;</span>) -336: <span class="ruby-keyword kw">end</span> -337: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 353</span> +353: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectToProjectServer</span> +354: <span class="ruby-ivar">@ps_uri</span>, <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:addProject</span>, []) +355: <span class="ruby-keyword kw">begin</span> +356: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@ps_uri</span>) +357: <span class="ruby-keyword kw">rescue</span> +358: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't get ProjectServer object: #{$!}&quot;</span>) +359: <span class="ruby-keyword kw">end</span> +360: <span class="ruby-keyword kw">begin</span> +361: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-ivar">@ps_authKey</span>, <span class="ruby-identifier">$stdout</span>, <span class="ruby-identifier">$stderr</span>, <span class="ruby-identifier">$stdin</span>, <span class="ruby-ivar">@silent</span>) +362: <span class="ruby-keyword kw">rescue</span> +363: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't connect IO: #{$!}&quot;</span>) +364: <span class="ruby-keyword kw">end</span> +365: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1074,29 +1105,29 @@ <div class="method-source-code" id="connect-o-eport-erver-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 347</span> -347: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">projectId</span>) -348: <span class="ruby-ivar">@ps_uri</span>, <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:getProject</span>, <span class="ruby-identifier">projectId</span>) -349: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@ps_uri</span>.<span class="ruby-identifier">nil?</span> -350: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;No project with ID #{projectId} loaded&quot;</span>) -351: <span class="ruby-keyword kw">end</span> -352: <span class="ruby-keyword kw">begin</span> -353: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@ps_uri</span>) -354: <span class="ruby-ivar">@rs_uri</span>, <span class="ruby-ivar">@rs_authKey</span> = <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">getReportServer</span>(<span class="ruby-ivar">@ps_authKey</span>) -355: <span class="ruby-ivar">@reportServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@rs_uri</span>) -356: <span class="ruby-keyword kw">rescue</span> -357: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;Cannot get report server&quot;</span>) -358: <span class="ruby-keyword kw">end</span> -359: <span class="ruby-keyword kw">begin</span> -360: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">$stdout</span>, <span class="ruby-identifier">$stderr</span>, <span class="ruby-identifier">$stdin</span>, <span class="ruby-ivar">@silent</span>) -361: <span class="ruby-keyword kw">rescue</span> -362: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't connect IO: #{$!}&quot;</span>) -363: <span class="ruby-keyword kw">end</span> -364: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 375</span> +375: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">projectId</span>) +376: <span class="ruby-ivar">@ps_uri</span>, <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:getProject</span>, <span class="ruby-identifier">projectId</span>) +377: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@ps_uri</span>.<span class="ruby-identifier">nil?</span> +378: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;No project with ID #{projectId} loaded&quot;</span>) +379: <span class="ruby-keyword kw">end</span> +380: <span class="ruby-keyword kw">begin</span> +381: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@ps_uri</span>) +382: <span class="ruby-ivar">@rs_uri</span>, <span class="ruby-ivar">@rs_authKey</span> = <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">getReportServer</span>(<span class="ruby-ivar">@ps_authKey</span>) +383: <span class="ruby-ivar">@reportServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@rs_uri</span>) +384: <span class="ruby-keyword kw">rescue</span> +385: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;Cannot get report server&quot;</span>) +386: <span class="ruby-keyword kw">end</span> +387: <span class="ruby-keyword kw">begin</span> +388: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">$stdout</span>, <span class="ruby-identifier">$stderr</span>, <span class="ruby-identifier">$stdin</span>, <span class="ruby-ivar">@silent</span>) +389: <span class="ruby-keyword kw">rescue</span> +390: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't connect IO: #{$!}&quot;</span>) +391: <span class="ruby-keyword kw">end</span> +392: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1123,16 +1154,16 @@ <div class="method-source-code" id="disconnect-aemon-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 213</span> -213: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectDaemon</span> -214: <span class="ruby-ivar">@broker</span> = <span class="ruby-keyword kw">nil</span> -215: -216: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">stop_service</span> -217: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 238</span> +238: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectDaemon</span> +239: <span class="ruby-ivar">@broker</span> = <span class="ruby-keyword kw">nil</span> +240: +241: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">stop_service</span> +242: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1159,18 +1190,18 @@ <div class="method-source-code" id="disconnect-roject-erver-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 339</span> -339: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectProjectServer</span> -340: <span class="ruby-keyword kw">begin</span> -341: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">disconnect</span>(<span class="ruby-ivar">@ps_authKey</span>) -342: <span class="ruby-keyword kw">rescue</span> -343: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't disconnect IO: #{$!}&quot;</span>) -344: <span class="ruby-keyword kw">end</span> -345: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 367</span> +367: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectProjectServer</span> +368: <span class="ruby-keyword kw">begin</span> +369: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">disconnect</span>(<span class="ruby-ivar">@ps_authKey</span>) +370: <span class="ruby-keyword kw">rescue</span> +371: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't disconnect IO: #{$!}&quot;</span>) +372: <span class="ruby-keyword kw">end</span> +373: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1197,29 +1228,29 @@ <div class="method-source-code" id="disconnect-eport-erver-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 366</span> -366: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectReportServer</span> -367: <span class="ruby-keyword kw">begin</span> -368: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">disconnect</span>(<span class="ruby-ivar">@rs_authKey</span>) -369: <span class="ruby-keyword kw">rescue</span> -370: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't disconnect IO: #{$!}&quot;</span>) -371: <span class="ruby-keyword kw">end</span> -372: <span class="ruby-keyword kw">begin</span> -373: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@rs_authKey</span>) -374: <span class="ruby-keyword kw">rescue</span> -375: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Report server termination failed: #{$!}&quot;</span>) -376: <span class="ruby-keyword kw">end</span> -377: <span class="ruby-ivar">@reportServer</span> = <span class="ruby-keyword kw">nil</span> -378: <span class="ruby-ivar">@rs_uri</span> = <span class="ruby-keyword kw">nil</span> -379: <span class="ruby-ivar">@rs_authKey</span> = <span class="ruby-keyword kw">nil</span> -380: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span> -381: <span class="ruby-ivar">@ps_uri</span> = <span class="ruby-keyword kw">nil</span> -382: <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-keyword kw">nil</span> -383: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 394</span> +394: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnectReportServer</span> +395: <span class="ruby-keyword kw">begin</span> +396: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">disconnect</span>(<span class="ruby-ivar">@rs_authKey</span>) +397: <span class="ruby-keyword kw">rescue</span> +398: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't disconnect IO: #{$!}&quot;</span>) +399: <span class="ruby-keyword kw">end</span> +400: <span class="ruby-keyword kw">begin</span> +401: <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@rs_authKey</span>) +402: <span class="ruby-keyword kw">rescue</span> +403: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Report server termination failed: #{$!}&quot;</span>) +404: <span class="ruby-keyword kw">end</span> +405: <span class="ruby-ivar">@reportServer</span> = <span class="ruby-keyword kw">nil</span> +406: <span class="ruby-ivar">@rs_uri</span> = <span class="ruby-keyword kw">nil</span> +407: <span class="ruby-ivar">@rs_authKey</span> = <span class="ruby-keyword kw">nil</span> +408: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span> +409: <span class="ruby-ivar">@ps_uri</span> = <span class="ruby-keyword kw">nil</span> +410: <span class="ruby-ivar">@ps_authKey</span> = <span class="ruby-keyword kw">nil</span> +411: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1246,15 +1277,15 @@ <div class="method-source-code" id="error-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 436</span> -436: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>) -437: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;ERROR: #{message}&quot;</span> -438: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span> -439: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 464</span> +464: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>) +465: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;ERROR: #{message}&quot;</span> +466: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span> +467: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1281,116 +1312,119 @@ <div class="method-source-code" id="execute-ommand-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 219</span> -219: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">executeCommand</span>(<span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) -220: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">command</span> -221: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'status'</span> -222: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:status</span>, []) -223: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'terminate'</span> -224: <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:stop</span>, []) -225: <span class="ruby-identifier">info</span>(<span class="ruby-value str">'Daemon terminated'</span>) -226: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'add'</span> -227: <span class="ruby-comment cmt"># Ask the daemon to create a new ProjectServer process and return a</span> -228: <span class="ruby-comment cmt"># DRbObject to access it.</span> -229: <span class="ruby-identifier">connectToProjectServer</span> -230: <span class="ruby-comment cmt"># Ask the server to load the files in _args_ into the ProjectServer.</span> -231: <span class="ruby-keyword kw">begin</span> -232: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@ps_authKey</span>, [ <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">getwd</span>, *<span class="ruby-identifier">args</span> ]) -233: <span class="ruby-keyword kw">rescue</span> -234: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Loading of project failed: #{$!}&quot;</span>) -235: <span class="ruby-keyword kw">end</span> -236: <span class="ruby-identifier">disconnectProjectServer</span> -237: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> -238: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'remove'</span> -239: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> -240: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:removeProject</span>, <span class="ruby-identifier">arg</span>) -241: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Project '#{arg}' not found in list&quot;</span>) -242: <span class="ruby-keyword kw">end</span> -243: <span class="ruby-keyword kw">end</span> -244: <span class="ruby-identifier">info</span>(<span class="ruby-value str">'Project removed'</span>) -245: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'report'</span> -246: <span class="ruby-comment cmt"># The first value of args is the project ID. The following values</span> -247: <span class="ruby-comment cmt"># could be either report IDs or TJI file # names ('.' or '*.tji').</span> -248: <span class="ruby-identifier">projectId</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> -249: <span class="ruby-comment cmt"># Ask the ProjectServer to launch a new ReportServer process and</span> -250: <span class="ruby-comment cmt"># provide a DRbObject reference to it.</span> -251: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">projectId</span>) -252: -253: <span class="ruby-identifier">reportIds</span>, <span class="ruby-identifier">tjiFiles</span> = <span class="ruby-identifier">splitIdsAndFiles</span>(<span class="ruby-identifier">args</span>) -254: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">empty?</span> -255: <span class="ruby-identifier">disconnectReportServer</span> -256: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'You must provide at least one report ID'</span>) -257: <span class="ruby-keyword kw">end</span> -258: <span class="ruby-comment cmt"># Send the provided .tji files to the ReportServer.</span> -259: <span class="ruby-identifier">failed</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) -260: <span class="ruby-comment cmt"># Ask the ReportServer to generate the reports with the provided IDs.</span> -261: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">failed</span> -262: <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reportId</span><span class="ruby-operator">|</span> -263: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">generateReport</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">reportId</span>, -264: <span class="ruby-ivar">@regExpMode</span>, <span class="ruby-keyword kw">nil</span>) -265: <span class="ruby-identifier">failed</span> = <span class="ruby-keyword kw">true</span> -266: <span class="ruby-keyword kw">break</span> -267: <span class="ruby-keyword kw">end</span> -268: <span class="ruby-keyword kw">end</span> -269: <span class="ruby-keyword kw">end</span> -270: <span class="ruby-comment cmt"># Terminate the ReportServer</span> -271: <span class="ruby-identifier">disconnectReportServer</span> -272: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">failed</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> -273: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'list-reports'</span> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 244</span> +244: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">executeCommand</span>(<span class="ruby-identifier">command</span>, <span class="ruby-identifier">args</span>) +245: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">command</span> +246: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'status'</span> +247: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:status</span>, []) +248: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'terminate'</span> +249: <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:stop</span>, []) +250: <span class="ruby-identifier">info</span>(<span class="ruby-value str">'Daemon terminated'</span>) +251: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'add'</span> +252: <span class="ruby-comment cmt"># Ask the daemon to create a new ProjectServer process and return a</span> +253: <span class="ruby-comment cmt"># DRbObject to access it.</span> +254: <span class="ruby-identifier">connectToProjectServer</span> +255: <span class="ruby-comment cmt"># Ask the server to load the files in _args_ into the ProjectServer.</span> +256: <span class="ruby-keyword kw">begin</span> +257: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@ps_authKey</span>, [ <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">getwd</span>, *<span class="ruby-identifier">args</span> ]) +258: <span class="ruby-keyword kw">rescue</span> +259: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Loading of project failed: #{$!}&quot;</span>) +260: <span class="ruby-keyword kw">end</span> +261: <span class="ruby-identifier">disconnectProjectServer</span> +262: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> +263: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'remove'</span> +264: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +265: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:removeProject</span>, <span class="ruby-identifier">arg</span>) +266: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Project '#{arg}' not found in list&quot;</span>) +267: <span class="ruby-keyword kw">end</span> +268: <span class="ruby-keyword kw">end</span> +269: <span class="ruby-identifier">info</span>(<span class="ruby-value str">'Project removed'</span>) +270: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'update'</span> +271: <span class="ruby-identifier">callDaemon</span>(<span class="ruby-value">:update</span>, []) +272: <span class="ruby-identifier">info</span>(<span class="ruby-value str">'Reload requested'</span>) +273: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'report'</span> 274: <span class="ruby-comment cmt"># The first value of args is the project ID. The following values</span> 275: <span class="ruby-comment cmt"># could be either report IDs or TJI file # names ('.' or '*.tji').</span> 276: <span class="ruby-identifier">projectId</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> 277: <span class="ruby-comment cmt"># Ask the ProjectServer to launch a new ReportServer process and</span> 278: <span class="ruby-comment cmt"># provide a DRbObject reference to it.</span> 279: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">projectId</span>) 280: 281: <span class="ruby-identifier">reportIds</span>, <span class="ruby-identifier">tjiFiles</span> = <span class="ruby-identifier">splitIdsAndFiles</span>(<span class="ruby-identifier">args</span>) 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">empty?</span> -283: <span class="ruby-comment cmt"># If the user did not provide a report ID we generate a full list.</span> -284: <span class="ruby-identifier">reportIds</span> = [ <span class="ruby-value str">'.*'</span> ] -285: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">true</span> -286: <span class="ruby-keyword kw">end</span> -287: <span class="ruby-comment cmt"># Send the provided .tji files to the ReportServer.</span> -288: <span class="ruby-identifier">failed</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) -289: <span class="ruby-comment cmt"># Ask the ReportServer to generate the reports with the provided IDs.</span> -290: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">failed</span> -291: <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reportId</span><span class="ruby-operator">|</span> -292: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">listReports</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">reportId</span>, <span class="ruby-ivar">@regExpMode</span>) +283: <span class="ruby-identifier">disconnectReportServer</span> +284: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'You must provide at least one report ID'</span>) +285: <span class="ruby-keyword kw">end</span> +286: <span class="ruby-comment cmt"># Send the provided .tji files to the ReportServer.</span> +287: <span class="ruby-identifier">failed</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) +288: <span class="ruby-comment cmt"># Ask the ReportServer to generate the reports with the provided IDs.</span> +289: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">failed</span> +290: <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reportId</span><span class="ruby-operator">|</span> +291: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">generateReport</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">reportId</span>, +292: <span class="ruby-ivar">@regExpMode</span>, <span class="ruby-keyword kw">nil</span>) 293: <span class="ruby-identifier">failed</span> = <span class="ruby-keyword kw">true</span> 294: <span class="ruby-keyword kw">break</span> 295: <span class="ruby-keyword kw">end</span> 296: <span class="ruby-keyword kw">end</span> 297: <span class="ruby-keyword kw">end</span> 298: <span class="ruby-comment cmt"># Terminate the ReportServer</span> 299: <span class="ruby-identifier">disconnectReportServer</span> 300: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">failed</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> -301: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'check-ts'</span> -302: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]) -303: <span class="ruby-keyword kw">begin</span> -304: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">checkTimeSheet</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]) -305: <span class="ruby-keyword kw">rescue</span> -306: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Time sheet check failed: #{$!}&quot;</span>) -307: <span class="ruby-keyword kw">end</span> -308: <span class="ruby-identifier">disconnectReportServer</span> -309: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> -310: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'check-ss'</span> -311: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]) -312: <span class="ruby-keyword kw">begin</span> -313: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">checkStatusSheet</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]) -314: <span class="ruby-keyword kw">rescue</span> -315: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Status sheet check failed: #{$!}&quot;</span>) -316: <span class="ruby-keyword kw">end</span> -317: <span class="ruby-identifier">disconnectReportServer</span> -318: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> -319: <span class="ruby-keyword kw">else</span> -320: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown command #{command}&quot;</span> -321: <span class="ruby-keyword kw">end</span> -322: <span class="ruby-value">0</span> -323: <span class="ruby-keyword kw">end</span></pre> +301: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'list-reports'</span> +302: <span class="ruby-comment cmt"># The first value of args is the project ID. The following values</span> +303: <span class="ruby-comment cmt"># could be either report IDs or TJI file # names ('.' or '*.tji').</span> +304: <span class="ruby-identifier">projectId</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> +305: <span class="ruby-comment cmt"># Ask the ProjectServer to launch a new ReportServer process and</span> +306: <span class="ruby-comment cmt"># provide a DRbObject reference to it.</span> +307: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">projectId</span>) +308: +309: <span class="ruby-identifier">reportIds</span>, <span class="ruby-identifier">tjiFiles</span> = <span class="ruby-identifier">splitIdsAndFiles</span>(<span class="ruby-identifier">args</span>) +310: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">empty?</span> +311: <span class="ruby-comment cmt"># If the user did not provide a report ID we generate a full list.</span> +312: <span class="ruby-identifier">reportIds</span> = [ <span class="ruby-value str">'.*'</span> ] +313: <span class="ruby-ivar">@regExpMode</span> = <span class="ruby-keyword kw">true</span> +314: <span class="ruby-keyword kw">end</span> +315: <span class="ruby-comment cmt"># Send the provided .tji files to the ReportServer.</span> +316: <span class="ruby-identifier">failed</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">addFiles</span>(<span class="ruby-identifier">tjiFiles</span>) +317: <span class="ruby-comment cmt"># Ask the ReportServer to generate the reports with the provided IDs.</span> +318: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">failed</span> +319: <span class="ruby-identifier">reportIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reportId</span><span class="ruby-operator">|</span> +320: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">listReports</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">reportId</span>, <span class="ruby-ivar">@regExpMode</span>) +321: <span class="ruby-identifier">failed</span> = <span class="ruby-keyword kw">true</span> +322: <span class="ruby-keyword kw">break</span> +323: <span class="ruby-keyword kw">end</span> +324: <span class="ruby-keyword kw">end</span> +325: <span class="ruby-keyword kw">end</span> +326: <span class="ruby-comment cmt"># Terminate the ReportServer</span> +327: <span class="ruby-identifier">disconnectReportServer</span> +328: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">failed</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span> +329: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'check-ts'</span> +330: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]) +331: <span class="ruby-keyword kw">begin</span> +332: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">checkTimeSheet</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]) +333: <span class="ruby-keyword kw">rescue</span> +334: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Time sheet check failed: #{$!}&quot;</span>) +335: <span class="ruby-keyword kw">end</span> +336: <span class="ruby-identifier">disconnectReportServer</span> +337: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> +338: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'check-ss'</span> +339: <span class="ruby-identifier">connectToReportServer</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]) +340: <span class="ruby-keyword kw">begin</span> +341: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@reportServer</span>.<span class="ruby-identifier">checkStatusSheet</span>(<span class="ruby-ivar">@rs_authKey</span>, <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>]) +342: <span class="ruby-keyword kw">rescue</span> +343: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Status sheet check failed: #{$!}&quot;</span>) +344: <span class="ruby-keyword kw">end</span> +345: <span class="ruby-identifier">disconnectReportServer</span> +346: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span> +347: <span class="ruby-keyword kw">else</span> +348: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown command #{command}&quot;</span> +349: <span class="ruby-keyword kw">end</span> +350: <span class="ruby-value">0</span> +351: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1417,15 +1451,15 @@ <div class="method-source-code" id="info-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 431</span> -431: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">info</span>(<span class="ruby-identifier">message</span>) -432: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@silent</span> -433: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{message}&quot;</span> -434: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 459</span> +459: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">info</span>(<span class="ruby-identifier">message</span>) +460: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@silent</span> +461: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{message}&quot;</span> +462: <span class="ruby-keyword kw">end</span></pre> </div> </div> @@ -1456,27 +1490,27 @@ <div class="method-source-code" id="split-ds-nd-iles-source"> <pre> - <span class="ruby-comment cmt"># File lib/tj3client.rb, line 399</span> -399: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">splitIdsAndFiles</span>(<span class="ruby-identifier">args</span>) -400: <span class="ruby-identifier">reportIds</span> = [] -401: <span class="ruby-identifier">tjiFiles</span> = [] -402: <span class="ruby-identifier">addToReports</span> = <span class="ruby-keyword kw">true</span> -403: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> -404: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span> -405: <span class="ruby-comment cmt"># Switch to tji file list.</span> -406: <span class="ruby-identifier">addToReports</span> = <span class="ruby-keyword kw">false</span> -407: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">addToReports</span> -408: <span class="ruby-identifier">reportIds</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">arg</span> -409: <span class="ruby-keyword kw">else</span> -410: <span class="ruby-identifier">tjiFiles</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">arg</span> -411: <span class="ruby-keyword kw">end</span> -412: <span class="ruby-keyword kw">end</span> -413: -414: [ <span class="ruby-identifier">reportIds</span>, <span class="ruby-identifier">tjiFiles</span> ] -415: <span class="ruby-keyword kw">end</span></pre> + <span class="ruby-comment cmt"># File lib/tj3client.rb, line 427</span> +427: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">splitIdsAndFiles</span>(<span class="ruby-identifier">args</span>) +428: <span class="ruby-identifier">reportIds</span> = [] +429: <span class="ruby-identifier">tjiFiles</span> = [] +430: <span class="ruby-identifier">addToReports</span> = <span class="ruby-keyword kw">true</span> +431: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span> +432: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span> +433: <span class="ruby-comment cmt"># Switch to tji file list.</span> +434: <span class="ruby-identifier">addToReports</span> = <span class="ruby-keyword kw">false</span> +435: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">addToReports</span> +436: <span class="ruby-identifier">reportIds</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">arg</span> +437: <span class="ruby-keyword kw">else</span> +438: <span class="ruby-identifier">tjiFiles</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">arg</span> +439: <span class="ruby-keyword kw">end</span> +440: <span class="ruby-keyword kw">end</span> +441: +442: [ <span class="ruby-identifier">reportIds</span>, <span class="ruby-identifier">tjiFiles</span> ] +443: <span class="ruby-keyword kw">end</span></pre> </div> </div>