Package reportgen.math.reference.subreport

Source Code of reportgen.math.reference.subreport.MathExpressionSubReportColumnRef

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reportgen.math.reference.subreport;

import reportgen.prototype.utils.RowCount;
import java.util.ArrayList;
import java.util.Collection;
import reportgen.prototype.stream.SQLStream;
import reportgen.utils.ReportException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.jdom.Element;
import reportgen.prototype.context.group.ContextGroup;
import reportgen.prototype.context.Context;
import reportgen.ren.executer.QueryExecuterSub;
import reportgen.ren.executer.SubReportColumn;
import reportgen.math.MathExpressionOperand;
import reportgen.prototype.UsedReportableType;
import reportgen.utils.Atom;

/**
*
* @author axe
*/

public class MathExpressionSubReportColumnRef extends MathExpressionOperand {

    public static final ContextGroup GROUP = new SubreportContextGroup();
    public static final String TAG = "subrepref";
    private static final String QUERYID = "reportid";

    private SubReportColumn column;

    public MathExpressionSubReportColumnRef(SubReportColumn column, Context context) {
        super(context);
        this.column = column;
    }

    public MathExpressionSubReportColumnRef(Element element, Context context) throws ReportException {
        super(element, context);
        QueryExecuterSub query = context.getSubreport(new Atom(getStringAttribute(element, QUERYID)));
        int index = query.getColumnIndex(element.getText());
        column = new SubReportColumn(query, index);
    }

    @Override
    protected void toXML(Element root) {
        root.setAttribute(QUERYID, String.valueOf(column.getReport().getAtom()));
        root.addContent(column.getColumnTitle());
    }

    @Override
    public MathExpressionSubReportColumnRef makeClone() throws ReportException {
        return new MathExpressionSubReportColumnRef(toXML(), getParentContext());
    }

    @Override
    public ContextGroup getContextGroup() {
        return GROUP;
    }

    @Override
    protected String getRootTag() {
        return TAG;
    }

    public SubReportColumn getValue() {
        return column;
    }

    public void setValue(SubReportColumn column) {
        this.column = column;
    }

    @Override
    public Class getCls() throws ReportException {
        return column.getCls();
    }

    @Override
    public String toString() {
        return column.toString();
    }

    @Override
    public void appendToQuery(SQLStream sql, Map model) throws ReportException {
        Object value = getValue(null);
        RowCount rowCount = column.getReport().getActiveRows();
        if (!rowCount.isSingle()) {
            Collection set = null;
            if(value instanceof Collection) {
                set = (Collection) value;
            } else {
                set = new ArrayList();
                set.add(value);
            }
            Iterator it = set.iterator();
            if (!it.hasNext()) {
                throw new ReportException("Ошибка при выполнении подотчета '"
                        + column.getReport().getReportTitle() + "' - подотчет вернул 0 строк");
            }
            sql.append("(");
            while (it.hasNext()) {
                sql.appendParam(it.next());
                if (it.hasNext()) {
                    sql.append(",");
                }
            }
            sql.append(")");
        } else {
            sql.appendParam(value);
        }
    }

    @Override
    public Object getValue(Map constants) throws ReportException {
        return column.getReport().getColValue(column.getCol());
    }

    @Override
    public void buildUsedSet(UsedReportableType cls, Set set) {
        if(cls == UsedReportableType.subreport_column) {
            set.add(this);
        }
    }

    @Override
    public boolean containsMissingVariables() {
        //if omitted while cannot be, then permit error happend later
        return column.getReport().isCanBeOmitted()
                && column.getReport().isOmitted();
    }


    @Override
    public boolean isContain(Object entity) {
        if (column.getReport() == entity) {
            return true;
        }
        return super.isContain(entity);
    }

}
TOP

Related Classes of reportgen.math.reference.subreport.MathExpressionSubReportColumnRef

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.