Visibility.java

package algorithmen.umleditor;

import java.io.*;

/**
 * Enumeration type for the visibility of a field/method.
 * Possible values: PRIVATE, PROTECTED, PUBLIC, DEFAULT
 */
public class Visibility implements Serializable {
  
  private String name;
  
  /** 
   * Creates a new instance of Visibility with a given String.
   * Since it is private, only the predefined values can be used.
   */
  private Visibility(String s) {
    name = s;
  }
  
  public String toString() {
    return name; 
  }
  
  /**
   * Gibt das UML-Zeichen der Zugriffsklasse zurück.
   */
  public String getUmlSymbol() {
    if (this == PRIVATE) {
      return "-";
    } else if (this == PROTECTED) {
       return "#";     
    } else if (this == PUBLIC) {
       return "+";     
    } else {
      return "";
    }
  }
  
  /**
   * Liefert ein Array mit allen Zugriffswerten
   */
  public static Visibility[] getVisibilities() {
    return list; 
  }
  
  /**
   * list of predefined values
   */
  public static Visibility PRIVATE = new Visibility("private");
  public static Visibility PROTECTED = new Visibility("protected");
  public static Visibility PUBLIC = new Visibility("public");
  public static Visibility DEFAULT = new Visibility("default");
  
  protected static Visibility[] list = {DEFAULT, PRIVATE, PROTECTED, PUBLIC};

  /**
   * Serialisation is not automatic for static objects.
   * It has to be augmented with writeObject and readObject.
   */
  private void writeObject(ObjectOutputStream out) throws IOException {
    out.defaultWriteObject();
    out.writeObject(PRIVATE);
    out.writeObject(PROTECTED);
    out.writeObject(PUBLIC);
    out.writeObject(DEFAULT);
  }
  
  private void readObject(ObjectInputStream in)
  throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    PRIVATE = (Visibility) in.readObject();
    PROTECTED = (Visibility) in.readObject();
    PUBLIC = (Visibility) in.readObject();
    DEFAULT = (Visibility) in.readObject();
  }
}