Package org.nasutekds.server.util.cli

Source Code of org.nasutekds.server.util.cli.PointAdder

/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License").  You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/nasutekds/resource/legal-notices/NasuTekDS.LICENSE
* or https://NasuTekDS.dev.java.net/NasuTekDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/nasutekds/resource/legal-notices/NasuTekDS.LICENSE.  If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
*      Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
*      Copyright 2010 Sun Microsystems, Inc.
*/
package org.nasutekds.server.util.cli;

import org.nasutekds.messages.MessageBuilder;
import org.nasutekds.quicksetup.util.PlainTextProgressMessageFormatter;
import org.nasutekds.quicksetup.util.ProgressMessageFormatter;

/**
* Class used to add points periodically to the end of the output.
*
*/
public class PointAdder implements Runnable
{
  private final ConsoleApplication app;
  private Thread t;
  private boolean stopPointAdder;
  private boolean pointAdderStopped;
  private long periodTime = DEFAULT_PERIOD_TIME;
  private final boolean isError;
  private final ProgressMessageFormatter formatter;


  /**
   * The default period time used to write points in the output.
   */
  public static final long DEFAULT_PERIOD_TIME = 3000;

  /**
   * Default constructor.
   * @param app the console application to be used.
   * Creates a PointAdder that writes to the standard output with the default
   * period time.
   */
  public PointAdder(ConsoleApplication app)
  {
    this(app, DEFAULT_PERIOD_TIME, false,
        new PlainTextProgressMessageFormatter());
  }

  /**
   * Default constructor.
   * @param app the console application to be used.
   * @param periodTime the time between printing two points.
   * @param isError whether the points must be printed in error stream
   * or output stream.
   * @param formatter the text formatter.
   */
  public PointAdder(ConsoleApplication app,
      long periodTime, boolean isError,
      ProgressMessageFormatter formatter)
  {
    this.app = app;
    this.periodTime = periodTime;
    this.isError = isError;
    this.formatter = formatter;
  }

  /**
   * Starts the PointAdder: points are added at the end of the logs
   * periodically.
   */
  public void start()
  {
    MessageBuilder mb = new MessageBuilder();
    mb.append(formatter.getSpace());
    for (int i=0; i< 5; i++)
    {
      mb.append(formatter.getFormattedPoint());
    }
    if (isError)
    {
      app.print(mb.toMessage());
    }
    else
    {
      app.printProgress(mb.toMessage());
    }
    t = new Thread(this);
    t.start();
  }

  /**
   * Stops the PointAdder: points are no longer added at the end of the logs
   * periodically.
   */
  public synchronized void stop()
  {
    stopPointAdder = true;
    while (!pointAdderStopped)
    {
      try
      {
        t.interrupt();
        // To allow the thread to set the boolean.
        Thread.sleep(100);
      }
      catch (Throwable t)
      {
      }
    }
  }

  /**
   * {@inheritDoc}
   */
  public void run()
  {
    while (!stopPointAdder)
    {
      try
      {
        Thread.sleep(periodTime);
        if (isError)
        {
          app.print(formatter.getFormattedPoint());
        }
        else
        {
          app.printProgress(formatter.getFormattedPoint());
        }
      }
      catch (Throwable t)
      {
      }
    }
    pointAdderStopped = true;
  }
}
TOP

Related Classes of org.nasutekds.server.util.cli.PointAdder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.