<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase, class: ServerTaskBuilder, class: ServerTaskImpl">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">021</span><span id="line-21"></span>
<span class="source-line-no">022</span><span id="line-22">/** Builder for information about active monitored server tasks */</span>
<span class="source-line-no">023</span><span id="line-23">@InterfaceAudience.Private</span>
<span class="source-line-no">024</span><span id="line-24">public final class ServerTaskBuilder {</span>
<span class="source-line-no">025</span><span id="line-25"></span>
<span class="source-line-no">026</span><span id="line-26">  public static ServerTaskBuilder newBuilder() {</span>
<span class="source-line-no">027</span><span id="line-27">    return new ServerTaskBuilder();</span>
<span class="source-line-no">028</span><span id="line-28">  }</span>
<span class="source-line-no">029</span><span id="line-29"></span>
<span class="source-line-no">030</span><span id="line-30">  private String description = "";</span>
<span class="source-line-no">031</span><span id="line-31">  private String status = "";</span>
<span class="source-line-no">032</span><span id="line-32">  private ServerTask.State state = ServerTask.State.RUNNING;</span>
<span class="source-line-no">033</span><span id="line-33">  private long startTime;</span>
<span class="source-line-no">034</span><span id="line-34">  private long completionTime;</span>
<span class="source-line-no">035</span><span id="line-35"></span>
<span class="source-line-no">036</span><span id="line-36">  private ServerTaskBuilder() {</span>
<span class="source-line-no">037</span><span id="line-37">  }</span>
<span class="source-line-no">038</span><span id="line-38"></span>
<span class="source-line-no">039</span><span id="line-39">  private static final class ServerTaskImpl implements ServerTask {</span>
<span class="source-line-no">040</span><span id="line-40"></span>
<span class="source-line-no">041</span><span id="line-41">    private final String description;</span>
<span class="source-line-no">042</span><span id="line-42">    private final String status;</span>
<span class="source-line-no">043</span><span id="line-43">    private final ServerTask.State state;</span>
<span class="source-line-no">044</span><span id="line-44">    private final long startTime;</span>
<span class="source-line-no">045</span><span id="line-45">    private final long completionTime;</span>
<span class="source-line-no">046</span><span id="line-46"></span>
<span class="source-line-no">047</span><span id="line-47">    private ServerTaskImpl(final String description, final String status,</span>
<span class="source-line-no">048</span><span id="line-48">      final ServerTask.State state, final long startTime, final long completionTime) {</span>
<span class="source-line-no">049</span><span id="line-49">      this.description = description;</span>
<span class="source-line-no">050</span><span id="line-50">      this.status = status;</span>
<span class="source-line-no">051</span><span id="line-51">      this.state = state;</span>
<span class="source-line-no">052</span><span id="line-52">      this.startTime = startTime;</span>
<span class="source-line-no">053</span><span id="line-53">      this.completionTime = completionTime;</span>
<span class="source-line-no">054</span><span id="line-54">    }</span>
<span class="source-line-no">055</span><span id="line-55"></span>
<span class="source-line-no">056</span><span id="line-56">    @Override</span>
<span class="source-line-no">057</span><span id="line-57">    public String getDescription() {</span>
<span class="source-line-no">058</span><span id="line-58">      return description;</span>
<span class="source-line-no">059</span><span id="line-59">    }</span>
<span class="source-line-no">060</span><span id="line-60"></span>
<span class="source-line-no">061</span><span id="line-61">    @Override</span>
<span class="source-line-no">062</span><span id="line-62">    public String getStatus() {</span>
<span class="source-line-no">063</span><span id="line-63">      return status;</span>
<span class="source-line-no">064</span><span id="line-64">    }</span>
<span class="source-line-no">065</span><span id="line-65"></span>
<span class="source-line-no">066</span><span id="line-66">    @Override</span>
<span class="source-line-no">067</span><span id="line-67">    public State getState() {</span>
<span class="source-line-no">068</span><span id="line-68">      return state;</span>
<span class="source-line-no">069</span><span id="line-69">    }</span>
<span class="source-line-no">070</span><span id="line-70"></span>
<span class="source-line-no">071</span><span id="line-71">    @Override</span>
<span class="source-line-no">072</span><span id="line-72">    public long getStartTime() {</span>
<span class="source-line-no">073</span><span id="line-73">      return startTime;</span>
<span class="source-line-no">074</span><span id="line-74">    }</span>
<span class="source-line-no">075</span><span id="line-75"></span>
<span class="source-line-no">076</span><span id="line-76">    @Override</span>
<span class="source-line-no">077</span><span id="line-77">    public long getCompletionTime() {</span>
<span class="source-line-no">078</span><span id="line-78">      return completionTime;</span>
<span class="source-line-no">079</span><span id="line-79">    }</span>
<span class="source-line-no">080</span><span id="line-80"></span>
<span class="source-line-no">081</span><span id="line-81">    @Override</span>
<span class="source-line-no">082</span><span id="line-82">    public String toString() {</span>
<span class="source-line-no">083</span><span id="line-83">      StringBuilder sb = new StringBuilder(512);</span>
<span class="source-line-no">084</span><span id="line-84">      sb.append(getDescription());</span>
<span class="source-line-no">085</span><span id="line-85">      sb.append(": status=");</span>
<span class="source-line-no">086</span><span id="line-86">      sb.append(getStatus());</span>
<span class="source-line-no">087</span><span id="line-87">      sb.append(", state=");</span>
<span class="source-line-no">088</span><span id="line-88">      sb.append(getState());</span>
<span class="source-line-no">089</span><span id="line-89">      sb.append(", startTime=");</span>
<span class="source-line-no">090</span><span id="line-90">      sb.append(getStartTime());</span>
<span class="source-line-no">091</span><span id="line-91">      sb.append(", completionTime=");</span>
<span class="source-line-no">092</span><span id="line-92">      sb.append(getCompletionTime());</span>
<span class="source-line-no">093</span><span id="line-93">      return sb.toString();</span>
<span class="source-line-no">094</span><span id="line-94">    }</span>
<span class="source-line-no">095</span><span id="line-95"></span>
<span class="source-line-no">096</span><span id="line-96">  }</span>
<span class="source-line-no">097</span><span id="line-97"></span>
<span class="source-line-no">098</span><span id="line-98">  public ServerTaskBuilder setDescription(final String description) {</span>
<span class="source-line-no">099</span><span id="line-99">    this.description = description;</span>
<span class="source-line-no">100</span><span id="line-100">    return this;</span>
<span class="source-line-no">101</span><span id="line-101">  }</span>
<span class="source-line-no">102</span><span id="line-102"></span>
<span class="source-line-no">103</span><span id="line-103">  public ServerTaskBuilder setStatus(final String status) {</span>
<span class="source-line-no">104</span><span id="line-104">    this.status = status;</span>
<span class="source-line-no">105</span><span id="line-105">    return this;</span>
<span class="source-line-no">106</span><span id="line-106">  }</span>
<span class="source-line-no">107</span><span id="line-107"></span>
<span class="source-line-no">108</span><span id="line-108">  public ServerTaskBuilder setState(final ServerTask.State state) {</span>
<span class="source-line-no">109</span><span id="line-109">    this.state = state;</span>
<span class="source-line-no">110</span><span id="line-110">    return this;</span>
<span class="source-line-no">111</span><span id="line-111">  }</span>
<span class="source-line-no">112</span><span id="line-112"></span>
<span class="source-line-no">113</span><span id="line-113">  public ServerTaskBuilder setStartTime(final long startTime) {</span>
<span class="source-line-no">114</span><span id="line-114">    this.startTime = startTime;</span>
<span class="source-line-no">115</span><span id="line-115">    return this;</span>
<span class="source-line-no">116</span><span id="line-116">  }</span>
<span class="source-line-no">117</span><span id="line-117"></span>
<span class="source-line-no">118</span><span id="line-118">  public ServerTaskBuilder setCompletionTime(final long completionTime) {</span>
<span class="source-line-no">119</span><span id="line-119">    this.completionTime = completionTime;</span>
<span class="source-line-no">120</span><span id="line-120">    return this;</span>
<span class="source-line-no">121</span><span id="line-121">  }</span>
<span class="source-line-no">122</span><span id="line-122"></span>
<span class="source-line-no">123</span><span id="line-123">  public ServerTask build() {</span>
<span class="source-line-no">124</span><span id="line-124">    return new ServerTaskImpl(description, status, state, startTime, completionTime);</span>
<span class="source-line-no">125</span><span id="line-125">  }</span>
<span class="source-line-no">126</span><span id="line-126"></span>
<span class="source-line-no">127</span><span id="line-127">}</span>




























































</pre>
</div>
</main>
</body>
</html>
