Package er.grouping

Source Code of er.grouping.DRGroup

package er.grouping;

import java.util.Enumeration;

import com.webobjects.eocontrol.EOSortOrdering;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableDictionary;

public class DRGroup {

    protected DRReportModel _reportModel;
    protected DRMasterCriteria _masterCriteria;
    protected NSArray _masterCriteriaDrillDownList;
    protected NSMutableDictionary _recordGroupDict;
    protected NSArray _ordering;
    protected NSArray _sortedArray;
    protected NSArray _sortedArrayBase;
    protected boolean _useGroupTotal;

    public void resetDefaults() {
    }

    // This is the only the top-level grouping algorithm
    // It returns a dict with two values
    // an array of DRRecordGroups and a list of all the DRCriteria found
    // keys: 'groups', 'criteriaList':
    //
    public NSMutableDictionary childrenFromGroupCriteriaList() {
        DRCriteria crit;
        NSArray crits = _masterCriteria.criteriaLookupDict().allValues();
        Enumeration anEnum = crits.objectEnumerator();
        NSMutableDictionary recGrpDict = new NSMutableDictionary();

        while (anEnum.hasMoreElements()) {
            crit = (DRCriteria)anEnum.nextElement();
            DRRecordGroup recGrp = DRRecordGroup.withCriteriaGroupParent(crit, this, null);
            recGrpDict.setObjectForKey(recGrp, crit.keyDesc());
        }

        return recGrpDict;
    }

    public NSMutableDictionary groupBy(NSArray recs, DRMasterCriteria amc) {
        DRRecord rec;
        NSMutableDictionary recGrpDict;
        Enumeration anEnum = recs.objectEnumerator();

        if (amc.isPreset()) {
            recGrpDict = childrenFromGroupCriteriaList();
        } else {
            recGrpDict = new NSMutableDictionary();
        }

        while (anEnum.hasMoreElements()) {
            rec = (DRRecord)anEnum.nextElement();
            amc.groupRecordRecordGroupsDictGroupParent(rec, recGrpDict, this, null);
        }

        return recGrpDict;
    }

    static public NSArray drillDownListForMasterCriteriaList(DRMasterCriteria mc, NSArray mcList) {
        int i;
        NSMutableArray arr = new NSMutableArray();
        int mcCount = mcList.count();
        int startIndex = mcList.indexOfObject(mc);

        for (i = 0; i < mcCount; i++) {
            int atIndex = i+startIndex;
            if (atIndex == mcCount) {
                atIndex = 0;
                startIndex = -1;
            }

            DRMasterCriteria aMc = (DRMasterCriteria)mcList.objectAtIndex(atIndex);
            arr.addObject(aMc);
        }

        return arr;
    }

    static public DRGroup withReportModelMasterCriteria(DRReportModel aMod, DRMasterCriteria amc) {
        DRGroup grp = new DRGroup(aMod, amc);
        return grp;
    }

    public DRGroup(DRReportModel aMod, DRMasterCriteria amc) {
        super();
        _reportModel = aMod;
        _masterCriteria = amc;
        _useGroupTotal = _masterCriteria.shouldTotal();
        resetDefaults();
        _recordGroupDict = groupBy(_reportModel.records(), _masterCriteria);
        _masterCriteriaDrillDownList = DRGroup.drillDownListForMasterCriteriaList(_masterCriteria, _reportModel.criteriaList());
        _ordering = new NSArray(new EOSortOrdering("score", EOSortOrdering.CompareAscending));
    }

    public NSArray recordGroupList() {
        return _recordGroupDict.allValues();
    }

    public NSDictionary recordGroupDict() {
        return _recordGroupDict;
    }

    public DRReportModel reportModel() {
        return _reportModel;
    }

    public NSArray criteriaList() {
        //OWDebug.println(1, "_recordGroupDict.allKeys(): "+_recordGroupDict.allKeys());
        //return _recordGroupDict.allKeys();
        return _masterCriteria.criteriaLookupDict().allValues();
    }

    public DRMasterCriteria masterCriteria() {
        return _masterCriteria;
    }

    public NSArray masterCriteriaDrillDownList() {
        return _masterCriteriaDrillDownList;
    }

    /** Loops over each RecordGroup and group it. Init each new sub RecordGroup with empty record groups for each record group in the parent */
   
    public void groupSubRecordGroupsWithMasterCriteriaLookupDict(NSDictionary groupLookUpDict) {
        Enumeration anEnum = recordGroupList().objectEnumerator();

        while (anEnum.hasMoreElements()) {
            DRRecordGroup recGrp = (DRRecordGroup)anEnum.nextElement();
            NSMutableArray arr = new NSMutableArray(masterCriteriaDrillDownList());
            arr.removeObjectAtIndex(0);
            recGrp.groupSubRecordGroupGroupLookUpDict(arr, groupLookUpDict);
        }

    }

    public NSArray sortedCriteriaList() {
        if (_sortedArray == null) {
            _sortedArrayBase = EOSortOrdering.sortedArrayUsingKeyOrderArray(criteriaList(), _ordering);
            NSMutableArray sortedArray2 = new NSMutableArray(_sortedArrayBase);
            sortedArray2.addObject(DRCriteria.asTotalWithMasterCriteria(_masterCriteria));
            _sortedArray = new NSArray(sortedArray2);
        }

        if (_useGroupTotal) {
            return _sortedArray;
        }

        return _sortedArrayBase;
    }

    public NSArray sortedCriteriaListBase() {
        sortedCriteriaList();
        return _sortedArrayBase;
    }

    public boolean useGroupTotal() {
        return _useGroupTotal;
    }
    public void setUseGroupTotal(boolean v) {
        _useGroupTotal = v;
    }

    private String _keyDesc = null;
    public String keyDesc(){
        if(_keyDesc == null){
            _keyDesc = super.toString();
        }
        return _keyDesc;
    }
    @Override
    public String toString() {
        return "<DRGroup masterCriteria: " + masterCriteria() + "; >";
    }
}
TOP

Related Classes of er.grouping.DRGroup

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.