/**
  * Sets up the paragraph from css attributes instead of the values found in StyleConstants (i.e.
  * which are used by the superclass). Since
  */
 protected void setPropertiesFromAttributes() {
   StyleSheet sheet = getStyleSheet();
   attr = sheet.getViewAttributes(this);
   painter = sheet.getBoxPainter(attr);
   if (attr != null) {
     super.setPropertiesFromAttributes();
     setInsets(
         (short) painter.getInset(TOP, this),
         (short) painter.getInset(LEFT, this),
         (short) painter.getInset(BOTTOM, this),
         (short) painter.getInset(RIGHT, this));
     Object o = attr.getAttribute(CSS.Attribute.TEXT_ALIGN);
     if (o != null) {
       // set horizontal alignment
       String ta = o.toString();
       if (ta.equals("left")) {
         setJustification(StyleConstants.ALIGN_LEFT);
       } else if (ta.equals("center")) {
         setJustification(StyleConstants.ALIGN_CENTER);
       } else if (ta.equals("right")) {
         setJustification(StyleConstants.ALIGN_RIGHT);
       } else if (ta.equals("justify")) {
         setJustification(StyleConstants.ALIGN_JUSTIFIED);
       }
     }
     // Get the width/height
     cssWidth = (CSS.LengthValue) attr.getAttribute(CSS.Attribute.WIDTH);
     cssHeight = (CSS.LengthValue) attr.getAttribute(CSS.Attribute.HEIGHT);
   }
 }
  /**
   * Renders using the given rendering surface and area on that surface. This is implemented to
   * delgate to the superclass after stashing the base coordinate for tab calculations.
   *
   * @param g the rendering surface to use
   * @param a the allocated region to render into
   * @see View#paint
   */
  public void paint(Graphics g, Shape a) {
    if (a == null) {
      return;
    }

    Rectangle r;
    if (a instanceof Rectangle) {
      r = (Rectangle) a;
    } else {
      r = a.getBounds();
    }
    painter.paint(g, r.x, r.y, r.width, r.height, this);
    super.paint(g, a);
  }
 /**
  * Establishes the parent view for this view. This is guaranteed to be called before any other
  * methods if the parent view is functioning properly.
  *
  * <p>This is implemented to forward to the superclass as well as call the {@link
  * #setPropertiesFromAttributes setPropertiesFromAttributes} method to set the paragraph
  * properties from the css attributes. The call is made at this time to ensure the ability to
  * resolve upward through the parents view attributes.
  *
  * @param parent the new parent, or null if the view is being removed from a parent it was
  *     previously added to
  */
 public void setParent(View parent) {
   super.setParent(parent);
   if (parent != null) {
     setPropertiesFromAttributes();
   }
 }