package net.sf.jasperreports.engine.base;

import java.io.Serializable;
import net.sf.jasperreports.engine.JRQuery;
import net.sf.jasperreports.engine.JRQueryChunk;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.util.JRQueryParser;

public class JRBaseQuery implements JRQuery, Serializable {
  private static final long serialVersionUID = 10200L;
  
  private JRQueryChunk[] chunks = null;
  
  protected String language = "sql";
  
  protected JRBaseQuery() {}
  
  protected JRBaseQuery(JRQuery query, JRBaseObjectFactory factory) {
    factory.put(query, this);
    JRQueryChunk[] jrChunks = query.getChunks();
    if (jrChunks != null && jrChunks.length > 0) {
      this.chunks = new JRQueryChunk[jrChunks.length];
      for (int i = 0; i < this.chunks.length; i++)
        this.chunks[i] = factory.getQueryChunk(jrChunks[i]); 
    } 
    this.language = query.getLanguage();
  }
  
  public JRQueryChunk[] getChunks() {
    return this.chunks;
  }
  
  public String getText() {
    return JRQueryParser.instance().asText(getChunks());
  }
  
  public String getLanguage() {
    return this.language;
  }
  
  public Object clone() {
    JRBaseQuery clone = null;
    try {
      clone = (JRBaseQuery)super.clone();
    } catch (CloneNotSupportedException e) {
      throw new JRRuntimeException(e);
    } 
    if (this.chunks != null) {
      clone.chunks = new JRQueryChunk[this.chunks.length];
      for (int i = 0; i < this.chunks.length; i++)
        clone.chunks[i] = (JRQueryChunk)this.chunks[i].clone(); 
    } 
    return clone;
  }
}
