Add a state tracker and show a progress bar

Add a state tracking class that is capable of keeping track of
the internal state of the computation. Use it to provide a status
bar at the lower end of the terminal.

--
Change-Id: I39c17a80a238b3bc0d94527652b56a793f580d02
Reviewed-on: https://bazel-review.googlesource.com/#/c/3014
MOS_MIGRATED_REVID=115538418
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java
new file mode 100644
index 0000000..d87fafe
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalStateTracker.java
@@ -0,0 +1,40 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.runtime;
+
+import com.google.devtools.build.lib.pkgcache.LoadingPhaseCompleteEvent;
+import com.google.devtools.build.lib.util.io.AnsiTerminalWriter;
+
+import java.io.IOException;
+
+/**
+ * An experimental state tracker for the new experimental UI.
+ */
+class ExperimentalStateTracker {
+
+  private String statusMessage;
+
+  ExperimentalStateTracker() {
+    statusMessage = "Loading";
+  }
+
+  void loadingComplete(LoadingPhaseCompleteEvent event) {
+    int count = event.getTargets().size();
+    statusMessage = "Loaded " + count + " targets, continuing work...";
+  }
+
+  void writeProgressBar(AnsiTerminalWriter terminalWriter) throws IOException {
+    terminalWriter.okStatus().append("NOW:").normal().append(" " + statusMessage);
+  }
+}