<!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">
<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>
