package net.sf.jasperreports.crosstabs.base;

import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import net.sf.jasperreports.crosstabs.JRCellContents;
import net.sf.jasperreports.engine.JRBox;
import net.sf.jasperreports.engine.JRBoxContainer;
import net.sf.jasperreports.engine.JRDefaultStyleProvider;
import net.sf.jasperreports.engine.JRElementGroup;
import net.sf.jasperreports.engine.JRLineBox;
import net.sf.jasperreports.engine.JRStyle;
import net.sf.jasperreports.engine.base.JRBaseElementGroup;
import net.sf.jasperreports.engine.base.JRBaseLineBox;
import net.sf.jasperreports.engine.base.JRBaseObjectFactory;
import net.sf.jasperreports.engine.util.JRBoxUtil;
import net.sf.jasperreports.engine.util.LineBoxWrapper;

public class JRBaseCellContents extends JRBaseElementGroup implements JRCellContents, Serializable {
  private static final long serialVersionUID = 10200L;
  
  protected JRDefaultStyleProvider defaultStyleProvider;
  
  protected JRStyle style;
  
  protected String styleNameReference;
  
  protected Byte mode;
  
  protected Color backcolor;
  
  protected JRLineBox lineBox;
  
  protected int width;
  
  protected int height;
  
  private JRBox box;
  
  public JRBaseCellContents(JRCellContents cell, JRBaseObjectFactory factory) {
    super((JRElementGroup)cell, factory);
    this.box = null;
    this.defaultStyleProvider = factory.getDefaultStyleProvider();
    this.style = factory.getStyle(cell.getStyle());
    this.styleNameReference = cell.getStyleNameReference();
    this.mode = cell.getMode();
    this.backcolor = cell.getBackcolor();
    this.lineBox = cell.getLineBox().clone((JRBoxContainer)this);
    this.width = cell.getWidth();
    this.height = cell.getHeight();
  }
  
  public Color getBackcolor() {
    return this.backcolor;
  }
  
  public JRBox getBox() {
    return (JRBox)new LineBoxWrapper(getLineBox());
  }
  
  public JRLineBox getLineBox() {
    return this.lineBox;
  }
  
  public int getWidth() {
    return this.width;
  }
  
  public int getHeight() {
    return this.height;
  }
  
  public JRDefaultStyleProvider getDefaultStyleProvider() {
    return this.defaultStyleProvider;
  }
  
  public JRStyle getStyle() {
    return this.style;
  }
  
  public Byte getMode() {
    return this.mode;
  }
  
  public String getStyleNameReference() {
    return this.styleNameReference;
  }
  
  public Color getDefaultLineColor() {
    return Color.black;
  }
  
  private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    if (this.lineBox == null) {
      this.lineBox = (JRLineBox)new JRBaseLineBox((JRBoxContainer)this);
      JRBoxUtil.setBoxToLineBox(this.box, this.lineBox);
      this.box = null;
    } 
  }
}
