TextLabel.java

/*
 * Created on 2005/07/28
 * Copyright (C) 2005 Koga Laboratory. All rights reserved.
 *
 */
package org.mklab.tool.graph.gnuplot.decoration;

/**
 * テキストラベルを表すクラスです。
 * 
 * @author koga
 * @version $Revision: 1.9 $, 2005/07/28
 */
public class TextLabel implements GnuplotComponent {

  /** テキスト */
  private String text;
  /** 表示位置のX座標 */
  private double x;
  /** 表示位置のY座標 */
  private double y;
  /** テキスト描画に関する属性 */
  private String attribute;

  /**
   * コンストラクター
   * 
   */
  public TextLabel() {
    this(null, 0, 0, null);
  }

  /**
   * コンストラクター
   * 
   * @param text テキスト
   * @param x 表示位置のX座標
   * @param y 表示位置のY座標
   */
  public TextLabel(String text, double x, double y) {
    this(text, x, y, null);
  }

  /**
   * コンストラクター
   * 
   * @param text テキスト
   * @param x 表示位置のX座標
   * @param y 表示位置のY座標
   * @param attribute テキスト描画に関する属性
   */
  public TextLabel(String text, double x, double y, String attribute) {
    this.text = text;
    this.x = x;
    this.y = y;
    this.attribute = attribute;
  }

  /**
   * 設定するためのコマンド文字列を得る。
   * 
   * @return 設定するためのコマンド文字列
   */
  @SuppressWarnings("nls")
  public String getCommand() {
    if (this.attribute == null || this.attribute.length() == 0) {
      return "set label '" + this.text + "' at " + this.x + "," + this.y;
    }
    return "set label '" + this.text + "' at " + this.x + "," + this.y + " " + this.attribute;
  }

  /**
   * ラベルを設定します。
   * 
   * @param text テキスト
   * @param x 表示位置のX座標
   * @param y 表示位置のY座標
   */
  public void setLabel(String text, double x, double y) {
    this.text = text;
    this.x = x;
    this.y = y;
  }

  /**
   * ラベルを設定します。
   * 
   * @param text テキスト
   * @param x 表示位置のX座標
   * @param y 表示位置のY座標
   * @param attribute テキスト描画に関する属性
   */
  public void setLabel(String text, double x, double y, String attribute) {
    this.text = text;
    this.x = x;
    this.y = y;
    this.attribute = attribute;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((this.attribute == null) ? 0 : this.attribute.hashCode());
    result = prime * result + ((this.text == null) ? 0 : this.text.hashCode());
    long temp;
    temp = Double.doubleToLongBits(this.x);
    result = prime * result + (int)(temp ^ (temp >>> 32));
    temp = Double.doubleToLongBits(this.y);
    result = prime * result + (int)(temp ^ (temp >>> 32));
    return result;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null) return false;
    if (getClass() != obj.getClass()) return false;
    TextLabel other = (TextLabel)obj;
    if (this.attribute == null) {
      if (other.attribute != null) return false;
    } else if (!this.attribute.equals(other.attribute)) return false;
    if (this.text == null) {
      if (other.text != null) return false;
    } else if (!this.text.equals(other.text)) return false;
    if (Double.doubleToLongBits(this.x) != Double.doubleToLongBits(other.x)) return false;
    if (Double.doubleToLongBits(this.y) != Double.doubleToLongBits(other.y)) return false;
    return true;
  }
}