Example usage for org.hibernate Criteria setFetchSize

List of usage examples for org.hibernate Criteria setFetchSize

Introduction

In this page you can find the example usage for org.hibernate Criteria setFetchSize.

Prototype

public Criteria setFetchSize(int fetchSize);

Source Link

Document

Set a fetch size for the underlying JDBC query.

Usage

From source file:com.heliosapm.aa4h.parser.XMLQueryParser.java

License:Apache License

/**
 * Initializes a Criteria Query.//from  ww  w  .jav a  2s . c  o m
 * Mandatory Attributes:<ul>
 * <li><b>name</b>: The unqualified class name driving the criteria query.</li>
 * </ul>
 * Optional Attributes:<ul>
 * <li><b>prefix</b>: The package name of the class driving the criteria query. If null, no package is assumed.</li>
 * <li><b>maxSize</b>: The maximum number of rows to return from the database.</li>
 * <li><b>fetchSize</b>: The number of rows to fetch when rows are requested. Usually not useful for AA4H.</li>
 * <li><b>cacheEnabled</b>: Enables or disables caching for the queried objects.</li>
 * <li><b>cacheMode</b>: The cache options for the queried objects.</li>
 * <li><b>flushMode</b>: The session flush options.</li>
 * <li><b>fetchMode</b>: The collection fetch options for the query.</li>
 * <li><b>lockMode</b>: The row lock options for the queried rows.</li>
 * <li><b>timeOut</b>: The query timeout option.</li>
 * <li><b>rowCountOnly</b>: Returns a count of the query rows only.</li>
 * </ul>
 * @param attrs The attributes of the processed node.
 * @return An appended or new CriteriaSpecification
 * @throws SAXException
 */
protected CriteriaSpecification processCriteria(Attributes attrs) throws SAXException {
    if (inDetached) {
        return criteriaStack.peek();
    }
    String name = attrs.getValue("name");
    String prefix = attrs.getValue("prefix");
    if (prefix != null) {
        className = prefix + "." + name;
    } else {
        className = name;
    }
    String maxSize = attrs.getValue("maxSize");
    String fetchSize = attrs.getValue("fetchSize");
    String firstResult = attrs.getValue("firstResult");
    String cacheEnabled = attrs.getValue("cacheEnabled");
    String cacheMode = attrs.getValue("cacheMode");
    String flushMode = attrs.getValue("flushMode");
    String fetchMode = attrs.getValue("fetchMode");
    String lockMode = attrs.getValue("lockMode");
    String timeOut = attrs.getValue("timeOut");
    String rowCountOnly = attrs.getValue("rowCountOnly");
    Criteria newCriteria = null;
    try {
        if (criteriaStack.size() == 0) {
            newCriteria = session.createCriteria(className);
        } else {
            newCriteria = ((Criteria) criteriaStack.peek()).createCriteria(className);
        }
        criteriaStack.push(newCriteria);
        if ("true".equalsIgnoreCase(rowCountOnly)) {
            newCriteria.setProjection(Projections.projectionList().add(Projections.rowCount())

            );
            setRowCountOnly(true);
        }
        if (maxSize != null && isRowCountOnly() == false) {
            newCriteria.setMaxResults(Integer.parseInt(maxSize));
        }
        if (fetchSize != null && isRowCountOnly() == false) {
            newCriteria.setFetchSize(Integer.parseInt(fetchSize));
        }
        if (firstResult != null && isRowCountOnly() == false) {
            newCriteria.setFirstResult(Integer.parseInt(firstResult));
        }
        if (timeOut != null) {
            newCriteria.setTimeout(Integer.parseInt(timeOut));
        }

        if ("true".equalsIgnoreCase(cacheEnabled)) {
            newCriteria.setCacheable(true);
        } else if ("false".equalsIgnoreCase(cacheEnabled)) {
            newCriteria.setCacheable(false);
        }
        if (fetchMode != null && fetchMode.length() > 0) {
            if ("JOIN".equalsIgnoreCase(fetchMode)) {
                newCriteria.setFetchMode(name, FetchMode.JOIN);
            } else if ("SELECT".equalsIgnoreCase(fetchMode)) {
                newCriteria.setFetchMode(name, FetchMode.SELECT);
            } else {
                newCriteria.setFetchMode(name, FetchMode.DEFAULT);
            }
        } else {
            newCriteria.setFetchMode(name, FetchMode.DEFAULT);
        }
        if (cacheMode != null && cacheMode.length() > 0) {
            if ("GET".equalsIgnoreCase(cacheMode)) {
                newCriteria.setCacheMode(CacheMode.GET);
            } else if ("IGNORE".equalsIgnoreCase(cacheMode)) {
                newCriteria.setCacheMode(CacheMode.IGNORE);
            } else if ("NORMAL".equalsIgnoreCase(cacheMode)) {
                newCriteria.setCacheMode(CacheMode.NORMAL);
            } else if ("PUT".equalsIgnoreCase(cacheMode)) {
                newCriteria.setCacheMode(CacheMode.PUT);
            } else if ("REFRESH".equalsIgnoreCase(cacheMode)) {
                newCriteria.setCacheMode(CacheMode.REFRESH);
            } else {
                newCriteria.setCacheMode(CacheMode.NORMAL);
            }
        }
        if (lockMode != null && lockMode.length() > 0) {
            if ("NONE".equalsIgnoreCase(lockMode)) {
                newCriteria.setLockMode(LockMode.NONE);
            } else if ("READ".equalsIgnoreCase(lockMode)) {
                newCriteria.setLockMode(LockMode.READ);
            } else if ("UPGRADE".equalsIgnoreCase(lockMode)) {
                newCriteria.setLockMode(LockMode.UPGRADE);
            } else if ("UPGRADE_NOWAIT".equalsIgnoreCase(lockMode)) {
                newCriteria.setLockMode(LockMode.UPGRADE_NOWAIT);
            } else if ("WRITE".equalsIgnoreCase(lockMode)) {
                newCriteria.setLockMode(LockMode.WRITE);
            } else {
                throw new SAXException("lockMode[" + lockMode + "] Not Recognized");
            }
        }
        if (flushMode != null && flushMode.length() > 0) {
            if ("ALWAYS".equalsIgnoreCase(flushMode)) {
                newCriteria.setFlushMode(FlushMode.ALWAYS);
            } else if ("AUTO".equalsIgnoreCase(flushMode)) {
                newCriteria.setFlushMode(FlushMode.AUTO);
            } else if ("COMMIT".equalsIgnoreCase(flushMode)) {
                newCriteria.setFlushMode(FlushMode.COMMIT);
            } else if ("NEVER".equalsIgnoreCase(flushMode)) {
                // NEVER is deprecated, so we won't throw an exception but we'll ignore it.
            } else {
                throw new SAXException("flushMode[" + flushMode + "] Not Recognized");
            }
        }
        return newCriteria;

    } catch (Exception e) {
        throw new SAXException("Unable to configure class " + className, e);
    }
}

From source file:com.jdon.persistence.hibernate.HibernateTemplate.java

License:Apache License

/**
 * Prepare the given Criteria object, applying cache settings and/or a
 * transaction timeout.//w  w  w  .  jav  a 2s . c  om
 * 
 * @param criteria
 *            the Criteria object to prepare
 * @see #setCacheQueries
 * @see #setQueryCacheRegion
 * @see SessionProviderHolder#applyTransactionTimeout
 */
protected void prepareCriteria(Criteria criteria) {
    if (isCacheQueries()) {
        criteria.setCacheable(true);
        if (getQueryCacheRegion() != null) {
            criteria.setCacheRegion(getQueryCacheRegion());
        }
    }
    if (getFetchSize() > 0) {
        criteria.setFetchSize(getFetchSize());
    }
    if (getMaxResults() > 0) {
        criteria.setMaxResults(getMaxResults());
    }
}

From source file:com.klistret.cmdb.dao.ElementDAOImpl.java

License:Open Source License

/**
 * Necessary to use the Projections to limit the selected columns to only
 * those defined to the Element tables (otherwise the returned columns
 * contains all columns for all associations).
 * // ww  w . j a va 2s .c o m
 * @see com.klistret.cmdb.dao.ElementDAO.findByCriteria
 * @return Collection
 */
public List<Element> find(List<String> expressions, int start, int limit) {
    try {
        logger.debug("Finding elements by expression from start position [{}] with limit [{}] for session [{}]",
                new Object[] { start, limit, getSession().hashCode() });

        if (expressions == null)
            throw new ApplicationException("Expressions parameter is null", new IllegalArgumentException());

        Criteria criteria = new XPathCriteria(expressions, getSession()).getCriteria();

        criteria.setProjection(Projections.projectionList().add(Projections.property("id"))
                .add(Projections.property("type")).add(Projections.property("name"))
                .add(Projections.property("fromTimeStamp")).add(Projections.property("toTimeStamp"))
                .add(Projections.property("createId")).add(Projections.property("createTimeStamp"))
                .add(Projections.property("updateTimeStamp")).add(Projections.property("version"))
                .add(Projections.property("configuration")));

        criteria.addOrder(Order.asc("name"));

        criteria.setFirstResult(start);
        criteria.setFetchSize(limit);
        criteria.setMaxResults(limit);

        Object[] results = criteria.list().toArray();

        List<Element> elements = new ArrayList<Element>(results.length);
        logger.debug("Results length [{}]", results.length);

        for (int index = 0; index < results.length; index++) {
            Object[] row = (Object[]) results[index];

            Element element = new Element();
            element.setId((Long) row[0]);
            element.setType((ElementType) row[1]);
            element.setName((String) row[2]);
            element.setFromTimeStamp((Date) row[3]);
            element.setToTimeStamp((Date) row[4]);
            element.setCreateId((String) row[5]);
            element.setCreateTimeStamp((Date) row[6]);
            element.setUpdateTimeStamp((Date) row[7]);
            element.setVersion((Long) row[8]);
            element.setConfiguration((com.klistret.cmdb.ci.commons.Element) row[9]);

            elements.add(element);
        }

        results = null;

        return elements;
    } catch (StaleStateException e) {
        throw new ApplicationException("Element(s) found are stale which means newer version exists.");
    } catch (HibernateException e) {
        throw new InfrastructureException(e.getMessage(), e);
    }
}

From source file:com.klistret.cmdb.dao.RelationDAOImpl.java

License:Open Source License

/**
 * Finds relations based on XPath expressions
 * //from  w  ww  .  j  a v  a  2  s. c o m
 */
public List<Relation> find(List<String> expressions, int start, int limit) {
    try {
        logger.debug("Finding relations by expression from start position [{}] with limit [{}]", start, limit);

        if (expressions == null)
            throw new ApplicationException("Expressions parameter is null", new IllegalArgumentException());

        Criteria criteria = new XPathCriteria(expressions, getSession()).getCriteria();
        String alias = criteria.getAlias();

        criteria.setProjection(Projections.projectionList().add(Projections.property(alias + ".id"))
                .add(Projections.property(alias + ".type")).add(Projections.property(alias + ".source"))
                .add(Projections.property(alias + ".destination"))
                .add(Projections.property(alias + ".fromTimeStamp"))
                .add(Projections.property(alias + ".toTimeStamp"))
                .add(Projections.property(alias + ".createId"))
                .add(Projections.property(alias + ".createTimeStamp"))
                .add(Projections.property(alias + ".updateTimeStamp"))
                .add(Projections.property(alias + ".version"))
                .add(Projections.property(alias + ".configuration")));

        criteria.setFirstResult(start);
        criteria.setMaxResults(limit);
        criteria.setFetchSize(limit);

        Object[] results = criteria.list().toArray();

        List<Relation> relations = new ArrayList<Relation>(results.length);
        logger.debug("Results length [{}]", results.length);

        for (int index = 0; index < results.length; index++) {
            Object[] row = (Object[]) results[index];

            Relation relation = new Relation();
            relation.setId((Long) row[0]);
            relation.setType((RelationType) row[1]);
            relation.setSource((Element) row[2]);
            relation.setDestination((Element) row[3]);
            relation.setFromTimeStamp((Date) row[4]);
            relation.setToTimeStamp((Date) row[5]);
            relation.setCreateId((String) row[6]);
            relation.setCreateTimeStamp((Date) row[7]);
            relation.setUpdateTimeStamp((Date) row[8]);
            relation.setVersion((Long) row[9]);
            relation.setConfiguration((com.klistret.cmdb.ci.commons.Relation) row[10]);

            relations.add(relation);
        }

        results = null;

        return relations;
    } catch (StaleStateException e) {
        throw new ApplicationException(
                "Relation(s) found are stale which means newer version exists (Hibernate).");
    } catch (HibernateException e) {
        throw new InfrastructureException(e.getMessage(), e);
    }
}

From source file:com.lp.server.artikel.ejbfac.LagerReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printKundeumsatzstatistik(Timestamp tVon, Timestamp tBis, Integer iOptionKundengruppierung,
        boolean bUmsatz, Integer iOptionGruppierung, Integer iOptionSortierung, Integer iSortierbasisJahre,
        boolean bVerwendeStatistikadresse, boolean bMitNichtLagerbewertetenArtikeln, boolean ohneDBBetrachtung,
        TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {
    List<String> gruppierung = new ArrayList<String>();

    tVon = Helper.cutTimestamp(tVon);/*  w w w.j  av a2  s.c o  m*/
    tBis = Helper.cutTimestamp(tBis);
    String[] monate = new DateFormatSymbols(theClientDto.getLocUi()).getMonths();
    try {
        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {

            ArtklaDto[] artklDtos = getArtikelFac().artklaFindByMandantCNr(theClientDto);
            for (int i = 0; i < artklDtos.length; i++) {
                gruppierung.add(artklDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {

            ArtgruDto[] artgruDtos = getArtikelFac().artgruFindByMandantCNr(theClientDto);
            for (int i = 0; i < artgruDtos.length; i++) {
                gruppierung.add(artgruDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

            FertigungsgruppeDto[] ftgruDtos = getStuecklisteFac()
                    .fertigungsgruppeFindByMandantCNr(theClientDto.getMandant(), theClientDto);
            for (int i = 0; i < ftgruDtos.length; i++) {
                gruppierung.add(ftgruDtos[i].getCBez());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.DAY_OF_YEAR, 1);
            while (c.getTime().before(tBis)) {
                gruppierung.add(c.get(Calendar.YEAR) + "");
                c.set(Calendar.YEAR, c.get(Calendar.YEAR) + 1);

            }

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.MONTH, 1);
            while (c.getTime().before(tBis)) {

                gruppierung.add(monate[c.get(Calendar.MONTH)] + " " + c.get(Calendar.YEAR));
                c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);

            }
        }
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    }

    BigDecimal gesamtUmsatz = new BigDecimal(0);
    BigDecimal gesamtDeckungsbeitrag = new BigDecimal(0);
    Session session = FLRSessionFactory.getFactory().openSession();

    org.hibernate.Criteria crit = session.createCriteria(FLRKunde.class);
    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

    List<?> results = crit.list();
    Iterator<?> resultListIterator = results.iterator();

    ArrayList<Object> gesamtListe = new ArrayList<Object>();

    // Leere Spalten entfernen

    boolean[] bSpalteAndrucken = new boolean[gruppierung.size()];
    int iKunde = 0;
    while (resultListIterator.hasNext()) {
        FLRKunde kunde = (FLRKunde) resultListIterator.next();
        iKunde++;
        System.out.println(iKunde + " von " + results.size());

        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kunde.getI_id(), theClientDto);

        KundeUmsatzstatistikDto kdums = new KundeUmsatzstatistikDto(gruppierung.size() + 1);
        kdums.setSKunde(kunde.getFlrpartner().getC_name1nachnamefirmazeile1());
        kdums.setIZahlungsziel(kundeDto.getZahlungszielIId());
        kdums.setILieferart(kundeDto.getLieferartIId());
        kdums.setISpediteur(kundeDto.getSpediteurIId());
        kdums.setIKundennummer(kundeDto.getIKundennummer());

        if (kundeDto.getPartnerDto().getLandplzortDto() != null) {
            kdums.setSLkz(kundeDto.getPartnerDto().getLandplzortDto().getLandDto().getCLkz());
            kdums.setSPlz(kundeDto.getPartnerDto().getLandplzortDto().getCPlz());
        }

        kdums.setSKundengruppierung("");
        // Branche/Partnerklasse hinzufuegen

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
                && kunde.getFlrpartner().getBranche_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerServicesFac()
                    .brancheFindByPrimaryKey(kunde.getFlrpartner().getBranche_i_id(), theClientDto)
                    .getBezeichnung());
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE
                && kunde.getFlrpartner().getPartnerklasse_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerFac()
                    .partnerklasseFindByPrimaryKey(kunde.getFlrpartner().getPartnerklasse_i_id(), theClientDto)
                    .getBezeichnung());
        }

        Session session2 = FLRSessionFactory.getFactory().openSession();

        org.hibernate.Criteria crit2 = session2.createCriteria(FLRRechnungPosition.class)
                .createAlias("flrrechnung", "r");

        if (bVerwendeStatistikadresse) {
            crit2.createAlias("r.flrstatistikadresse", "k");
        } else {
            crit2.createAlias("r.flrkunde", "k");
        }

        crit2.add(Restrictions.eq("k.i_id", kunde.getI_id())).createAlias("k.flrpartner", "p")
                .createAlias("r." + RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART, "ra");

        // PJ 14808
        crit2.add(Restrictions.or(
                Restrictions.isNotNull(
                        RechnungFac.FLR_RECHNUNGPOSITION_N_NETTOEINZELPREIS_PLUS_AUFSCHLAG_MINUS_RABATT),
                Restrictions.eq(RechnungFac.FLR_RECHNUNGPOSITIONSART_POSITIONSART_C_NR,
                        RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)));

        // projekt 3568
        String[] arten = new String[2];
        arten[0] = RechnungFac.RECHNUNGART_ANZAHLUNG;
        arten[1] = RechnungFac.RECHNUNGART_PROFORMARECHNUNG;

        crit2.add(Restrictions.not(Restrictions.in("ra.c_nr", arten)));

        String[] stati = new String[2];
        stati[0] = RechnungFac.STATUS_ANGELEGT;
        stati[1] = RechnungFac.STATUS_STORNIERT;

        crit2.add(Restrictions.not(Restrictions.in("r." + RechnungFac.FLR_RECHNUNG_STATUS_C_NR, stati)));

        Calendar c = Calendar.getInstance();
        c.setTime(tVon);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        crit2.add(Restrictions.ge("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        c.setTime(tBis);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 999);
        crit2.add(Restrictions.le("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        // SP903
        crit2.add(Restrictions.isNull("position_i_id_artikelset"));

        crit2.addOrder(Order.asc("p.c_name1nachnamefirmazeile1"));

        List<?> results2 = crit2.list();
        Iterator<?> resultListIterator2 = results2.iterator();

        int iPos = 0;
        while (resultListIterator2.hasNext()) {
            FLRRechnungPosition rechpos = (FLRRechnungPosition) resultListIterator2.next();

            iPos++;

            // 16882 Ohne Lagerbewertete Artikel
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                    && rechpos.getFlrartikel() != null
                    && !Helper.short2boolean(rechpos.getFlrartikel().getB_lagerbewertet())) {

                if (bMitNichtLagerbewertetenArtikeln == false) {
                    continue;
                }
            }

            if (iPos % 100 == 0) {
                System.out.println(iPos + " von " + results2.size());
            }

            // Erstumsatz?
            Session sessionEU = FLRSessionFactory.getFactory().openSession();

            org.hibernate.Criteria critEU = session2.createCriteria(FLRRechnung.class)
                    .createAlias("flrkunde", "k").add(Restrictions.eq("k.i_id", kunde.getI_id()));

            critEU.add(Restrictions.lt(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, tVon));

            String[] statiErstumsatz = new String[1];
            statiErstumsatz[0] = RechnungFac.STATUS_STORNIERT;
            critEU.add(
                    Restrictions.not(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, statiErstumsatz)));
            critEU.setFetchSize(1);
            List<?> resultsEU = critEU.list();
            if (resultsEU.size() < 1) {
                kdums.setBErstumsatz(true);
            }
            sessionEU.close();

            // ENDE Erstumsatz

            boolean bGutschrift = false;

            BigDecimal umsatz = rechpos.getN_nettoeinzelpreis_plus_aufschlag_minus_rabatt();
            // Gutschrift oder Wertgutschrift
            if (rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                    .equals(RechnungFac.RECHNUNGART_GUTSCHRIFT)
                    || rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                            .equals(RechnungFac.RECHNUNGART_WERTGUTSCHRIFT)) {
                bGutschrift = true;
                umsatz = new BigDecimal(0).subtract(umsatz);

            }

            // Mit Welchselkurs zu Mandantenwaehrung dividieren
            if (rechpos.getFlrrechnung().getN_kurs() != null
                    && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0
                    && !rechpos.getPositionsart_c_nr().equals(RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)) {
                umsatz = umsatz.divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);

            }

            // Bei Handeingabe ist Umsatz gleich Deckungsbeitrag und kommt
            // in die Kategorie Unbekannt
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                umsatz = umsatz.multiply(rechpos.getN_menge());
                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0].add(umsatz);
                // GESAMTSUMME
                kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));
                kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatz));

            } else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT) || (rechpos
                    .getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                    || (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {

                if (rechpos.getPosition_i_id_artikelset() == null) {

                    umsatz = umsatz.multiply(rechpos.getN_menge());
                    BigDecimal gestwert = new BigDecimal(0);

                    BigDecimal deckungsbeitrag = new BigDecimal(0);
                    if (ohneDBBetrachtung == false) {
                        if (!rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                            if (rechpos.getSetartikel_set().size() == 0) {
                                gestwert = getGestpreisFuerUmsatzStatistik(rechpos, bGutschrift);
                            } else {
                                Iterator it = rechpos.getSetartikel_set().iterator();
                                while (it.hasNext()) {
                                    gestwert = gestwert.add(getGestpreisFuerUmsatzStatistik(
                                            (FLRRechnungPosition) it.next(), bGutschrift));
                                }
                            }
                        }

                        // Mit Welchselkurs zu Mandantenwaehrung dividieren
                        if (rechpos.getFlrrechnung().getN_kurs() != null
                                && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0) {
                            gestwert = gestwert.divide(rechpos.getFlrrechnung().getN_kurs(), 4,
                                    BigDecimal.ROUND_HALF_EVEN);
                        }

                        deckungsbeitrag = umsatz.subtract(gestwert);
                    }

                    // GESAMTSUMME
                    if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                        deckungsbeitrag = umsatz;
                    }

                    kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));

                    // Aufteilen auf Gruppe
                    if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                        if (rechpos.getFlrartikel().getFlrartikelklasse() != null) {
                            // Bei richtiger Artikelklasse einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                        if (rechpos.getFlrartikel().getFlrartikelgruppe() != null) {
                            // Bei richtiger Gruppe einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

                        Session sessionFTGruppe = FLRSessionFactory.getFactory().openSession();

                        String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                + " WHERE stkl.artikel_i_id= " + rechpos.getFlrartikel().getI_id();

                        Query query = sessionFTGruppe.createQuery(queryString);
                        List<?> resultList = query.list();
                        Iterator<?> resultListIteratorFTGruppe = resultList.iterator();
                        if (resultListIteratorFTGruppe.hasNext()) {
                            FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe.next();

                            if (gru != null) {
                                // Bei richtiger Gruppe einfuegen
                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(gru.getC_bez())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatz);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;
                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                            sessionFTGruppe.close();
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahr = cZeile.get(Calendar.YEAR) + "";

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahr)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " " + cZeile.get(Calendar.YEAR);

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahrMonat)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    }
                }
            }
            // Wenn Rechnungsposition ein LS ist, dann dessen Positionen
            // verwenden
            else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_LIEFERSCHEIN)) {
                Integer lieferscheinIId = rechpos.getFlrlieferschein().getI_id();

                Session session3 = FLRSessionFactory.getFactory().openSession();

                org.hibernate.Criteria crit3 = session3.createCriteria(FLRLieferscheinposition.class);
                crit3.createAlias("flrlieferschein", "l");
                crit3.add(Restrictions.eq("l.i_id", lieferscheinIId));
                // SP903
                crit3.add(Restrictions.isNull("position_i_id_artikelset"));
                crit3.add(Restrictions
                        .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_NETTOGESAMTPREIS));
                crit3.add(Restrictions.not(Restrictions
                        .eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE, new BigDecimal(0))));

                List<?> results3 = crit3.list();
                Iterator<?> resultListIterator3 = results3.iterator();
                while (resultListIterator3.hasNext()) {
                    FLRLieferscheinposition lieferscheinpos = (FLRLieferscheinposition) resultListIterator3
                            .next();

                    // 16882 Ohne Lagerbewertete Artikel
                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            && lieferscheinpos.getFlrartikel() != null
                            && !Helper.short2boolean(lieferscheinpos.getFlrartikel().getB_lagerbewertet())) {
                        if (bMitNichtLagerbewertetenArtikeln == false) {
                            continue;
                        }
                    }

                    // PJ 14525
                    BigDecimal umsatzLs = lieferscheinpos
                            .getN_nettogesamtpreisplusversteckteraufschlagminusrabatt()
                            .divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);
                    umsatzLs = umsatzLs.multiply(lieferscheinpos.getN_menge());

                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                        kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                        kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                .add(umsatzLs);
                        // GESAMTSUMME
                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatzLs));

                    } else if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {
                        BigDecimal gestpreis = new BigDecimal(0);
                        BigDecimal deckungsbeitrag = new BigDecimal(0);
                        if (ohneDBBetrachtung == false) {
                            try {

                                /**
                                 * @todo Berechnung fuer negative
                                 *       Lieferscheinpositionen einbauen
                                 */
                                if (lieferscheinpos.getN_menge().doubleValue() < 0) {
                                    if (umsatz != null) {
                                        gestpreis = umsatz;
                                    }
                                } else {

                                    if (!rechpos.getPositionsart_c_nr()
                                            .equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                                        // PJ 16882
                                        if (lieferscheinpos.getFlrartikel() != null
                                                && Helper.short2boolean(lieferscheinpos.getFlrartikel()
                                                        .getB_lagerbewirtschaftet()) == false
                                                && !lieferscheinpos.getFlrartikel().getArtikelart_c_nr()
                                                        .equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) {
                                            gestpreis = new BigDecimal(0);
                                        } else {
                                            gestpreis = getLagerFac()
                                                    .getGemittelterGestehungspreisEinerAbgangsposition(
                                                            LocaleFac.BELEGART_LIEFERSCHEIN,
                                                            lieferscheinpos.getI_id());
                                            gestpreis = gestpreis.multiply(lieferscheinpos.getN_menge());
                                        }

                                    }
                                }
                            } catch (RemoteException ex2) {
                                if (ex2.getCause() instanceof EJBExceptionLP) {
                                    if (((EJBExceptionLP) ex2.getCause())
                                            .getCode() == EJBExceptionLP.ARTIKEL_KEINE_LAGERBUCHUNG_VORHANDEN) {
                                        // DANN ALLES OK
                                    } else {
                                        throwEJBExceptionLPRespectOld(ex2);
                                    }
                                } else {
                                    throwEJBExceptionLPRespectOld(ex2);
                                }
                            }
                            deckungsbeitrag = umsatzLs.subtract(gestpreis);
                        }

                        // GESAMTSUMME

                        if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                            deckungsbeitrag = umsatzLs;
                        }

                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                        if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelklasse() != null) {
                                // Bei richtiger Artikelklasse einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelgruppe() != null) {
                                // Bei richtiger Gruppe einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

                            Session sessionFTGruppe = FLRSessionFactory.getFactory().openSession();

                            String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                    + " WHERE stkl.artikel_i_id= " + lieferscheinpos.getFlrartikel().getI_id();

                            Query query = sessionFTGruppe.createQuery(queryString);
                            List<?> resultList = query.list();
                            Iterator<?> resultListIteratorFTGruppe = resultList.iterator();

                            if (resultListIteratorFTGruppe.hasNext()) {
                                FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe
                                        .next();

                                if (gru != null) {
                                    // Bei richtiger Gruppe einfuegen
                                    for (int j = 0; j < gruppierung.size(); j++) {
                                        if (gruppierung.get(j).equals(gru.getC_bez())) {
                                            kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                    .add(umsatzLs);
                                            kdums.getSubSummeDeckungsbeitrag()[j
                                                    + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                            .add(deckungsbeitrag);
                                            bSpalteAndrucken[j] = true;
                                        }
                                    }
                                } else {
                                    kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[0] = kdums
                                            .getSubSummeDeckungsbeitrag()[0].add(deckungsbeitrag);
                                }
                                sessionFTGruppe.close();
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahr = cZeile.get(Calendar.YEAR) + "";

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahr)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " "
                                    + cZeile.get(Calendar.YEAR);

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahrMonat)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        }
                    }

                }
                session3.close();

            }
        }
        session2.close();
        if (results2.size() > 0) {
            gesamtListe.add(kdums);

            gesamtUmsatz = gesamtUmsatz.add(kdums.getBdUmsatz());
            gesamtDeckungsbeitrag = gesamtDeckungsbeitrag.add(kdums.getBdDeckungsbeitrag());
        }
    }
    session.close();

    JasperPrintLP print = null;

    // NACH UMSATZ SORTIEREN
    int n = gesamtListe.size();
    Object temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {

            if (bUmsatz == true) {

                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdUmsatz().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdUmsatz().doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSubSummeUmsatz().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            } else {
                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdDeckungsbeitrag().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdDeckungsbeitrag()
                        .doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                    .getSubSummeDeckungsbeitrag().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }

            }
        }
    }

    // ABC-Klassifizierung
    // A=80%
    // B=15%
    // C=5%

    double dTempUmsatz = gesamtUmsatz.doubleValue();
    double dTempDeckungsbeitrag = gesamtDeckungsbeitrag.doubleValue();

    ParametermandantDto mandantparameterA = null;
    ParametermandantDto mandantparameterB = null;
    try {
        mandantparameterA = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_A);
        mandantparameterB = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_B);

    } catch (RemoteException ex3) {
        throwEJBExceptionLPRespectOld(ex3);
    }

    BigDecimal paramBUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterB.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramAUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterA.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramBDeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterB.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramADeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterA.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    for (int i = 0; i < gesamtListe.size(); i++) {
        KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(i);

        if (bUmsatz == true) {
            if (dTempUmsatz < gesamtUmsatz.doubleValue()
                    - (paramAUmsatz.doubleValue() + paramBUmsatz.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempUmsatz < paramBUmsatz.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempUmsatz = dTempUmsatz - dto.getBdUmsatz().doubleValue();
        } else {
            if (dTempDeckungsbeitrag < gesamtDeckungsbeitrag.doubleValue()
                    - (paramADeckungsbeitrag.doubleValue() + paramBDeckungsbeitrag.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempDeckungsbeitrag < paramBDeckungsbeitrag.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempDeckungsbeitrag = dTempDeckungsbeitrag - dto.getBdDeckungsbeitrag().doubleValue();

        }
        gesamtListe.set(i, dto);
    }

    // Nach Name sortieren

    // NACH NAME SORTIEREN, Wenn angegeben

    if (iOptionSortierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKunde();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKunde();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }
    }

    else if (iOptionSortierung.intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSLkz();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSLkz();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                } else if (a.compareTo(b) == 0) {
                    String plz1 = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSPlz();
                    String plz2 = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSPlz();

                    if (plz1.compareTo(plz2) > 0) {
                        temp = gesamtListe.get(j);
                        gesamtListe.set(j, gesamtListe.get(j + 1));
                        gesamtListe.set(j + 1, temp);
                    }

                }
            }
        }
    }

    // Nach Branche/Partnerklasse Gruppieren

    if (iOptionKundengruppierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
            || iOptionKundengruppierung
                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKundengruppierung();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKundengruppierung();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }

    }

    // SPALTENHEADER entfernen, wenn Spalte leer
    for (int i = bSpalteAndrucken.length; i > 0; i--) {
        if (bSpalteAndrucken[i - 1] == false) {
            gruppierung.remove(i - 1);
        }
    }

    int[] spaltenDrucken = new int[gruppierung.size() + 1];
    spaltenDrucken[0] = 0;
    int x = 1;
    for (int i = 1; i < bSpalteAndrucken.length + 1; i++) {
        if (bSpalteAndrucken[i - 1] == true) {
            spaltenDrucken[x] = i;
            x++;
        }
    }

    int seiten_breite = (gruppierung.size() / 8) + 1;

    for (int i = 0; i < seiten_breite; i++) {
        index = -1;
        if (bUmsatz == true) {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK;
        } else {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEDBSTATISTIK;
        }
        data = new Object[gesamtListe.size()][28];
        for (int j = 0; j < gesamtListe.size(); j++) {
            KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(j);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENGRUPPIERUNG] = dto.getSKundengruppierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDE] = dto.getSKunde();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_UMSATZ] = dto.getBdUmsatz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_PLZ] = dto.getSPlz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LKZ] = dto.getSLkz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENNUMMER] = dto.getIKundennummer();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_DECKUNGSBEITRAG] = dto.getBdDeckungsbeitrag();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ERSTUMSATZ] = new Boolean(dto.isBErstumsatz());
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ABCKLASSE] = dto.getAbcKlassifizierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ZAHLUNGSZIEL] = getMandantFac()
                    .zahlungszielFindByIIdLocaleOhneExc(dto.getIZahlungsziel(), theClientDto.getLocMandant(),
                            theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LIEFERART] = getLocaleFac().lieferartFindByIIdLocaleOhneExc(
                    dto.getILieferart(), theClientDto.getLocMandant(), theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_SPEDITEUR] = getMandantFac()
                    .spediteurFindByPrimaryKey(dto.getISpediteur()).getCNamedesspediteurs();

            try {
                if (i == 0) {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto.getSubSummeUmsatz()[0];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto.getSubSummeDeckungsbeitrag()[0];
                } else {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto
                            .getSubSummeUmsatz()[spaltenDrucken[0 + (i * 8)]];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto
                            .getSubSummeDeckungsbeitrag()[spaltenDrucken[0 + (i * 8)]];
                }
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[7 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[7 + (i * 8)]];
            } catch (ArrayIndexOutOfBoundsException ex1) {
                // nothing
            }

        }

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        if (bUmsatz == true) {
            parameter.put("P_UMSATZ", new Boolean(true));
        } else {
            parameter.put("P_UMSATZ", new Boolean(false));
        }

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE) {
            parameter.put("P_GRUPPIERUNGKUNDE",
                    getTextRespectUISpr("lp.branche", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
            parameter.put("P_GRUPPIERUNGKUNDE", "Partnerklasse");
        }

        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelklasse", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.fertigungsgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.jahr", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.monat", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
            parameter.put("P_SORTIERUNG", "Firmenname");
        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("er.umsatz", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.lkzplz", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        parameter.put("P_STATISTIKADRESSE", new Boolean(bVerwendeStatistikadresse));

        parameter.put("P_MITNICHTLAGERBEWERTETENARTIKELN", new Boolean(bMitNichtLagerbewertetenArtikeln));
        parameter.put("P_OHNE_DBBETRACHTUNG", new Boolean(ohneDBBetrachtung));

        try {

            parameter.put("P_GRUPPEA", mandantparameterA.getCWertAsObject());
            parameter.put("P_GRUPPEB", mandantparameterB.getCWertAsObject());

            if (i == 0) {
                parameter.put("Spalte1", "Unbekannt");
                parameter.put("Spalte2", gruppierung.get(0 + (i * 8)));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 8)));

            } else {

                parameter.put("Spalte1", gruppierung.get(7 + (i * 8) - 8));
                parameter.put("Spalte2", gruppierung.get(8 + (i * 8) - 8));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 80)));

            }

        } catch (IndexOutOfBoundsException ex1) {
            // nothing
        }
        initJRDS(parameter, LagerReportFac.REPORT_MODUL, sAktuellerReport, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        if (print == null) {
            print = getReportPrint();
        } else {
            print = Helper.addReport2Report(print, getReportPrint().getPrint());
        }
    }

    return print;

}

From source file:com.marc.lastweek.business.entities.classifiedad.repository.ClassifiedAdRepository.java

License:Open Source License

@SuppressWarnings("unchecked")
public List<ClassifiedAd> basicSearch(FilterParameters parameters, Calendar from, int start, int count) {
    Criteria criteriaQuery = advancedSearchQueryConstructor(parameters, from);
    criteriaQuery.setFirstResult(start);
    criteriaQuery.setFetchSize(count);
    criteriaQuery.addOrder(Order.desc("publicationDate"));
    return criteriaQuery.list();
}

From source file:com.tysanclan.site.projectewok.entities.dao.hibernate.JoinApplicationDAOImpl.java

License:Open Source License

/**
 * @see com.tysanclan.site.projectewok.entities.dao.JoinApplicationDAO#getJoinApplicationByThread(com.tysanclan.site.projectewok.entities.ForumThread)
 *//*from ww  w.j  a  v  a  2  s.  c  o  m*/
@Override
public JoinApplication getJoinApplicationByThread(ForumThread thread) {
    Criteria criteria = getSession().createCriteria(JoinApplication.class);
    criteria.add(Restrictions.eq("joinThread", thread));
    criteria.setFetchSize(1);

    return (JoinApplication) criteria.uniqueResult();
}

From source file:com.vmware.bdd.dal.DAL.java

License:Open Source License

/**
 * Fetch and return a list of objects of the given class which
 * is a subset of the all the records that satisfy the given
 * criteria. The subset is specified by parameter firstResult
 * and maxResults./*from   w ww.j  a  va  2s .  co  m*/
 *
 * @param aClass -- the class of the object.
 * @param order -- the result set order.
 * @param firstResult -- the offset in the query result where the returned list starts.
 * @param maxResults -- the maximum records returned.
 * @param queryCriteria -- the criteria to filter the results.
 * @return The list of matching objects.
 * @throws HibernateException -- on Hibernate errors.
 */
private static <T> List<T> findByCriteria(final Class<T> aClass, final Order[] order, final Integer firstResult,
        final Integer maxResults, final Criterion... queryCriteria) {
    return autoTransactionDo(new Saveable<List<T>>() {
        @SuppressWarnings("unchecked")
        public List<T> body() {
            Criteria criteria = getSession().createCriteria(aClass);
            for (Criterion c : queryCriteria) {
                criteria.add(c);
            }

            if (order != null) {
                for (Order o : order) {
                    criteria.addOrder(o);
                }
            }

            if (firstResult != null) {
                criteria.setFirstResult(firstResult);
            }

            if (maxResults != null) {
                criteria.setMaxResults(maxResults);
                criteria.setFetchSize(maxResults); // just a hint
            }

            return criteria.list();
        }
    });
}

From source file:com.vmware.bdd.dal.impl.BaseDAO.java

License:Open Source License

/**
 * Fetch and return a list of objects of the given class which is a subset of
 * the all the records that satisfy the given criteria. The subset is
 * specified by parameter firstResult and maxResults.
 *
 * @param order//from  ww w  . j  a v a2 s  .  co m
 *           -- the result set order.
 * @param firstResult
 *           -- the offset in the query result where the returned list
 *           starts.
 * @param maxResults
 *           -- the maximum records returned.
 * @param queryCriteria
 *           -- the criteria to filter the results.
 * @return The list of matching objects.
 * @throws HibernateException
 *            -- on Hibernate errors.
 */
@SuppressWarnings("unchecked")
protected List<T> findByCriteria(final Order[] order, final Integer firstResult, final Integer maxResults,
        final Criterion... queryCriteria) {
    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(type);
    for (Criterion c : queryCriteria) {
        criteria.add(c);
    }

    if (order != null) {
        for (Order o : order) {
            criteria.addOrder(o);
        }
    }

    if (firstResult != null) {
        criteria.setFirstResult(firstResult);
    }

    if (maxResults != null) {
        criteria.setMaxResults(maxResults);
        criteria.setFetchSize(maxResults); // just a hint
    }

    return criteria.list();
}

From source file:magoffin.matt.dao.hbm.GenericHibernateDao.java

License:Open Source License

/**
 * Execute a batch callback against a StatelessSession using a named query.
 * /*from   www.j av a 2 s.c o m*/
 * <p>The DELETE, UPDATE, and UPDATE_STOP {@link BatchCallbackResult}
 * values are not supported in this operation, and will throw an 
 * <code>UnsupportedOperationException</code> if returned by the 
 * {@link BatchCallback} instance passed to this method.</p>
 * 
 * @param criteriaBuilder the criteria builder
 * @param callback the callback
 * @param options the options
 * @return the number of items processed
 */
@SuppressWarnings("unchecked")
protected Integer executeStatelessCriteriaBatchCallback(final CriteriaBuilder criteriaBuilder,
        final BatchCallback<T> callback, final BatchOptions options) {
    StatelessSession session = getHibernateTemplate().getSessionFactory().openStatelessSession();
    Transaction tx = session.beginTransaction();
    try {
        Criteria criteria = session.createCriteria(getType());
        criteria.setFetchSize(options.getBatchSize());
        criteriaBuilder.buildCriteria(criteria);
        ScrollableResults items = criteria.scroll(ScrollMode.FORWARD_ONLY);
        int count = 0;

        OUTER: while (items.next()) {
            T item = (T) items.get(0);
            BatchCallbackResult action = callback.handle(item);
            switch (action) {
            case DELETE:
            case UPDATE:
            case UPDATE_STOP:
                throw new UnsupportedOperationException("Action " + action + " not possible during "
                        + options.getMode() + " mode batch processing");

            case STOP:
                break OUTER;

            case CONTINUE:
                // nothing to do
                break;
            }
        }
        tx.commit();
        return count;
    } catch (RuntimeException e) {
        tx.rollback();
        throw e;
    } finally {
        if (session != null) {
            session.close();
        }
    }
}