Package reportgen.ren.report.extendedformat.range

Source Code of reportgen.ren.report.extendedformat.range.ColRowRangeList

package reportgen.ren.report.extendedformat.range;

import java.util.List;
import reportgen.ren.report.extendedformat.range.generic.ColRowRangeGeneric;
import reportgen.ren.report.extendedformat.range.group.ColRowRangeGroup;
import reportgen.ren.report.extendedformat.cell.CellContainer;
import java.util.ArrayList;
import java.util.LinkedList;
import org.jdom.Element;
import reportgen.prototype.context.Context;
import reportgen.utils.ReportException;
import reportgen.ren.report.extendedformat.range.cross.ColRowRangeCrossReport;
import reportgen.prototype.utils.ItemListSingle;

/**
* Список диапазонов расширенного форматирования.
* Обычный список который умеет сохранять/загружать себя из ХМЛ
*/
public class ColRowRangeList
        extends ItemListSingle<ColRowRange, Context> {

    private CellContainer cellContainer;
    private final ColRowRange parent;
    private final Context context;

    public ColRowRangeList(ColRowRange parent, Context context) {
        this.parent = parent;
        this.context = context;
    }

    public ColRowRangeList(Element element, Context context, ColRowRange parent) throws ReportException {
        super(element, context);
        this.context = context;
        this.parent = parent;
    }

    /**
     * VERY UGLY
     * @param root
     * @param context
     * @throws ReportException
     */
    @Override
    protected void loadChildren(Element root, Context context) throws ReportException {
        //prepare range context
        RangeContext localContext = new RangeContext(context) {
            @Override
            public List<ColRowRange> getRanges() {
                List<ColRowRange> ranges = new LinkedList<ColRowRange>();
                ranges.addAll(getList());
                return ranges;
            }
        };
        //load children
        super.loadChildren(root, localContext);
        //load cross-refrences
        for(ColRowRange item : getList()) {
            Element el = localContext.get(item);
            if(el != null) {
                item.initExtraLinks(el, localContext);
            }
        }
    }


    @Override
    protected ColRowRange loadChild(Element el, Context prototype) throws ReportException {
        if(el.getName().equals(ColRowRangeGeneric.TAG)) {
            return new ColRowRangeGeneric(el, (RangeContext)prototype);

        } else if(el.getName().equals(ColRowRangeGroup.TAG)) {
            return new ColRowRangeGroup(el, (RangeContext)prototype);

        } else if(el.getName().equals(ColRowRangeCrossReport.TAG)) {
            //грязный хак
            return new ColRowRangeCrossReport(el, (RangeContext)prototype);
        }
        return null;
    }

    @Override
    protected String getRootTag() {
        return "inner";
    }


    @Override
    protected boolean isItemContains(ColRowRange item, Object obj) {
        return item.isContain(obj);
    }

    @Override
    protected void validateItem(ColRowRange item) throws ReportException {
        item.validate();
    }


    public void setCellContainer(CellContainer cellContainer) {
        this.cellContainer = cellContainer;
        for (ColRowRange r: getList()) {
            r.setCellContainer(cellContainer);
        }
    }

    protected  CellContainer getCellContainer() {
        return cellContainer;
    }


    public ArrayList<ColRowRange> getFlat(ArrayList<ColRowRange> range) {
        for (ColRowRange r: getList()) {
            r.getFlat(range);
        }
        return range;
    }

    @Override
    protected void onAdd(ColRowRange value) {
        super.onAdd(value);
        value.setCellContainer(cellContainer);
        CellContainer cells = getCellContainer();
        if(cells != null) {
            cells.onAddCol(parent, value);
        }
    }

    @Override
    protected void onRemove(ColRowRange value) throws ReportException {
        super.onRemove(value);
        if(value.getInner().size() > 0) {
            throw new ReportException("Сначала нужно удалить все дочерние диапазоны");
        }
        for (ColRowRange c : getList()) {
            if (c == value) {
                continue;
            }
            c.onRemoveAtom(value.getAtom());
        }
        getCellContainer().removedRange(parent, value);
    }

    public RangeContext getContext() {
        return new RangeContext(context) {
            @Override
            public List<ColRowRange> getRanges() {
                List<ColRowRange> ranges = new LinkedList<ColRowRange>();
                ranges.addAll(getList());
                return ranges;
            }
        };
    }
}
TOP

Related Classes of reportgen.ren.report.extendedformat.range.ColRowRangeList

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.