Example usage for java.util Calendar WEEK_OF_YEAR

List of usage examples for java.util Calendar WEEK_OF_YEAR

Introduction

In this page you can find the example usage for java.util Calendar WEEK_OF_YEAR.

Prototype

int WEEK_OF_YEAR

To view the source code for java.util Calendar WEEK_OF_YEAR.

Click Source Link

Document

Field number for get and set indicating the week number within the current year.

Usage

From source file:edu.jhuapl.openessence.controller.ReportController.java

/**
 * Extracts AccumPoint from a Collection of <code>records</code> where
 *
 * @param principal, used for logging//from  ww  w  . ja  va2  s . co  m
 */
private List<AccumPoint> extractAccumulationPoints(String principal, DataSeriesSource ds,
        final Collection<Record> records, Date startDate, Date endDate, List<Dimension> accumulations,
        final GroupingImpl group, Map<String, ResolutionHandler> resolutionHandlers) {
    log.info(LogStatements.TIME_SERIES.getLoggingStmt() + principal);
    int startDayCal = getCalWeekStartDay(resolutionHandlers);
    int startDay = getWeekStartDay(resolutionHandlers);

    String resolution = group.getResolution();
    final String groupId = group.getId();
    int zeroFillInterval = intervalMap.keySet().contains(resolution) ? intervalMap.get(resolution) : -1;

    GroupingDimension grpdim = ds.getGroupingDimension(group.getId());
    if (zeroFillInterval != -1
            && (grpdim.getSqlType() == FieldType.DATE || grpdim.getSqlType() == FieldType.DATE_TIME)) {
        ArrayList<AccumPoint> fullVector = new ArrayList<AccumPoint>(records.size());
        //create zero points for each accumulation
        Map<String, Number> zeroes = new HashMap<String, Number>();
        for (Dimension accumulation : accumulations) {
            zeroes.put(accumulation.getId(), 0);
        }
        if (records.size() > 0) {
            final Calendar cal = new GregorianCalendar();
            cal.setTime(startDate);
            Iterator<Record> recordsIterator = records.iterator();
            Record currRecord = (recordsIterator.hasNext()) ? recordsIterator.next() : null;

            //currently iterates over data incrementing cal by the resolution (weekly, daily etc)
            for (int i = 1; !cal.getTime().after(endDate); i++) {
                // if (DAILY.equalsIgnoreCase(resolution)) {
                boolean addRecord = false;
                if (currRecord != null) {
                    // 2013/03/25, SCC, GGF, There are some weird edge cases with selecting data ranges that span
                    // the EDT/EST cross-overs.  Sometimes the "filter" will have the "23:00" and the data will have
                    // "00:00".  So, since we only care about the "date" anyway, clear out any subordinate fields.

                    // Database record date (set hour, minute, second, millisec to 0)
                    final Calendar rowValue = Calendar.getInstance();
                    rowValue.setTime((Date) currRecord.getValue(groupId));
                    rowValue.set(Calendar.HOUR_OF_DAY, 0);
                    rowValue.set(Calendar.MINUTE, 0);
                    rowValue.set(Calendar.SECOND, 0);
                    rowValue.set(Calendar.MILLISECOND, 0);

                    // looping variable date (set hour, minute, second, millisec to 0)
                    final Calendar calValue = Calendar.getInstance();
                    calValue.setTime(cal.getTime());
                    calValue.set(Calendar.HOUR_OF_DAY, 0);
                    calValue.set(Calendar.MINUTE, 0);
                    calValue.set(Calendar.SECOND, 0);
                    calValue.set(Calendar.MILLISECOND, 0);

                    if (resolution.equalsIgnoreCase(DAILY) && rowValue.equals(calValue)) {
                        addRecord = true;
                    } else {
                        Calendar currRecCalendar = new GregorianCalendar();
                        currRecCalendar.setTime((Date) currRecord.getValue(groupId));
                        if (resolution.equalsIgnoreCase(WEEKLY)) {
                            if (PgSqlDateHelper.getYear(startDay, cal) == PgSqlDateHelper.getYear(startDay,
                                    currRecCalendar)
                                    && PgSqlDateHelper.getWeekOfYear(startDay, cal) == PgSqlDateHelper
                                            .getWeekOfYear(startDay, currRecCalendar)) {
                                addRecord = true;
                            }
                        } else if (resolution.equalsIgnoreCase(MONTHLY)) {
                            if (cal.get(Calendar.YEAR) == currRecCalendar.get(Calendar.YEAR)
                                    && cal.get(Calendar.MONTH) == currRecCalendar.get(Calendar.MONTH)) {
                                addRecord = true;
                            }
                        }
                    }
                    if (addRecord) {
                        //if the current record matches the date put it in
                        fullVector.add(createAccumulationPoint(currRecord, accumulations));
                        currRecord = (recordsIterator.hasNext()) ? recordsIterator.next() : null;
                    }
                }
                if (!addRecord) {
                    //add a zero fill
                    Map<String, Dimension> m = new HashMap<String, Dimension>();
                    m.put(groupId, ds.getResultDimension(groupId));
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    map.put(groupId, cal.getTime());
                    Record r = new QueryRecord(m, map);
                    fullVector.add(new AccumPointImpl(zeroes, r));
                }
                if (resolution.equalsIgnoreCase(WEEKLY)) {
                    // add 7 days if current date falls on week start date
                    if (i != 1) {
                        cal.add(Calendar.WEEK_OF_YEAR, 1);
                    } else {
                        cal.add(Calendar.DAY_OF_YEAR, 1);
                        while (cal.get(Calendar.DAY_OF_WEEK) != startDayCal) {
                            cal.add(Calendar.DAY_OF_YEAR, 1);
                        }
                    }
                } else {
                    // reset the date each time to account for +month oddness
                    cal.setTime(startDate);
                    // increment the interval
                    cal.add(zeroFillInterval, 1 * i);
                }
            }

        }
        return fullVector;
    } else {
        //pretty sure this is raw non filled
        List<AccumPoint> rawVector = new ArrayList<AccumPoint>(records.size());
        for (Record record : records) {
            rawVector.add(createAccumulationPoint(record, accumulations));
        }
        return rawVector;
    }
}

From source file:com.ut.healthelink.service.impl.transactionOutManagerImpl.java

/**
 * The 'generateSystemOutboundSummary' function will return the summary object for outbound system batches
 *
 * @return This function will return a systemSummary object
 *///  w  ww.j  av a2  s  . c  o m
@Override
public systemSummary generateSystemOutboundSummary() {

    systemSummary systemSummary = new systemSummary();

    try {

        /* Get batches submitted this hour */
        Calendar thishour = new GregorianCalendar();
        thishour.set(Calendar.MINUTE, 0);
        thishour.set(Calendar.SECOND, 0);
        thishour.set(Calendar.MILLISECOND, 0);

        Calendar nexthour = new GregorianCalendar();
        nexthour.set(Calendar.MINUTE, 0);
        nexthour.set(Calendar.SECOND, 0);
        nexthour.set(Calendar.MILLISECOND, 0);
        nexthour.add(Calendar.HOUR_OF_DAY, 1);

        Integer batchesThisHour = transactionOutDAO.getAllBatches(thishour.getTime(), nexthour.getTime())
                .size();

        /* Get batches submitted today */
        Calendar starttoday = new GregorianCalendar();
        starttoday.set(Calendar.HOUR_OF_DAY, 0);
        starttoday.set(Calendar.MINUTE, 0);
        starttoday.set(Calendar.SECOND, 0);
        starttoday.set(Calendar.MILLISECOND, 0);

        Calendar starttomorrow = new GregorianCalendar();
        starttomorrow.set(Calendar.HOUR_OF_DAY, 0);
        starttomorrow.set(Calendar.MINUTE, 0);
        starttomorrow.set(Calendar.SECOND, 0);
        starttomorrow.set(Calendar.MILLISECOND, 0);
        starttomorrow.add(Calendar.DAY_OF_MONTH, 1);

        Integer batchesToday = transactionOutDAO.getAllBatches(starttoday.getTime(), starttomorrow.getTime())
                .size();

        /* Get batches submitted this week */
        Calendar thisweek = new GregorianCalendar();
        thisweek.set(Calendar.HOUR_OF_DAY, 0);
        thisweek.set(Calendar.MINUTE, 0);
        thisweek.set(Calendar.SECOND, 0);
        thisweek.set(Calendar.MILLISECOND, 0);
        thisweek.set(Calendar.DAY_OF_WEEK, thisweek.getFirstDayOfWeek());

        Calendar nextweek = new GregorianCalendar();
        nextweek.set(Calendar.HOUR_OF_DAY, 0);
        nextweek.set(Calendar.MINUTE, 0);
        nextweek.set(Calendar.SECOND, 0);
        nextweek.set(Calendar.MILLISECOND, 0);
        nextweek.set(Calendar.DAY_OF_WEEK, thisweek.getFirstDayOfWeek());
        nextweek.add(Calendar.WEEK_OF_YEAR, 1);

        Integer batchesThisWeek = transactionOutDAO.getAllBatches(thisweek.getTime(), nextweek.getTime())
                .size();

        systemSummary.setBatchesPastHour(batchesThisHour);
        systemSummary.setBatchesToday(batchesToday);
        systemSummary.setBatchesThisWeek(batchesThisWeek);

        /* Get batches submitted yesterday */
    } catch (Exception ex) {
        Logger.getLogger(transactionInManagerImpl.class.getName()).log(Level.SEVERE, null, ex);
    }

    return systemSummary;

}

From source file:com.ut.healthelink.service.impl.transactionInManagerImpl.java

@Override
public systemSummary generateSystemInboundSummary() {

    systemSummary systemSummary = new systemSummary();

    try {//from   w  w  w.ja va  2s .c o m

        /* Get batches submitted this hour */
        Calendar thishour = new GregorianCalendar();
        thishour.set(Calendar.MINUTE, 0);
        thishour.set(Calendar.SECOND, 0);
        thishour.set(Calendar.MILLISECOND, 0);

        Calendar nexthour = new GregorianCalendar();
        nexthour.set(Calendar.MINUTE, 0);
        nexthour.set(Calendar.SECOND, 0);
        nexthour.set(Calendar.MILLISECOND, 0);
        nexthour.add(Calendar.HOUR_OF_DAY, 1);

        //System.out.println("This Hour: " + thishour.getTime() + " Next Hour: " + nexthour.getTime());
        Integer batchesThisHour = transactionInDAO.getAllUploadedBatches(thishour.getTime(), nexthour.getTime())
                .size();

        /* Get batches submitted today */
        Calendar starttoday = new GregorianCalendar();
        starttoday.set(Calendar.HOUR_OF_DAY, 0);
        starttoday.set(Calendar.MINUTE, 0);
        starttoday.set(Calendar.SECOND, 0);
        starttoday.set(Calendar.MILLISECOND, 0);

        Calendar starttomorrow = new GregorianCalendar();
        starttomorrow.set(Calendar.HOUR_OF_DAY, 0);
        starttomorrow.set(Calendar.MINUTE, 0);
        starttomorrow.set(Calendar.SECOND, 0);
        starttomorrow.set(Calendar.MILLISECOND, 0);
        starttomorrow.add(Calendar.DAY_OF_MONTH, 1);

        //System.out.println("Today: " + starttoday.getTime() + " Tomorrow: " + starttomorrow.getTime());
        Integer batchesToday = transactionInDAO
                .getAllUploadedBatches(starttoday.getTime(), starttomorrow.getTime()).size();

        /* Get batches submitted this week */
        Calendar thisweek = new GregorianCalendar();
        thisweek.set(Calendar.HOUR_OF_DAY, 0);
        thisweek.set(Calendar.MINUTE, 0);
        thisweek.set(Calendar.SECOND, 0);
        thisweek.set(Calendar.MILLISECOND, 0);
        thisweek.set(Calendar.DAY_OF_WEEK, thisweek.getFirstDayOfWeek());

        Calendar nextweek = new GregorianCalendar();
        nextweek.set(Calendar.HOUR_OF_DAY, 0);
        nextweek.set(Calendar.MINUTE, 0);
        nextweek.set(Calendar.SECOND, 0);
        nextweek.set(Calendar.MILLISECOND, 0);
        nextweek.set(Calendar.DAY_OF_WEEK, thisweek.getFirstDayOfWeek());
        nextweek.add(Calendar.WEEK_OF_YEAR, 1);

        //System.out.println("This Week: " + thisweek.getTime() + " Next Week: " + nextweek.getTime());
        Integer batchesThisWeek = transactionInDAO.getAllUploadedBatches(thisweek.getTime(), nextweek.getTime())
                .size();

        systemSummary.setBatchesPastHour(batchesThisHour);
        systemSummary.setBatchesToday(batchesToday);
        systemSummary.setBatchesThisWeek(batchesThisWeek);

        /* Get batches submitted yesterday */
    } catch (Exception ex) {
        Logger.getLogger(transactionInManagerImpl.class.getName()).log(Level.SEVERE, null, ex);
    }

    return systemSummary;

}

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

@TransactionAttribute(TransactionAttributeType.NEVER)
public KapazitaetsvorschauDto getKapazitaetsvorschau(TheClientDto theClientDto) throws EJBExceptionLP {
    KapazitaetsvorschauDto kapDto = null;
    Session session = null;//  w  w w.  j  av a 2s .c om
    try {

        // ------------------------------------------------------------------
        // -----
        // Benoetigte Parameter holen
        // ------------------------------------------------------------------
        // -----
        // Default Sicht nach Wochen
        // final int iSicht = FertigungFac.KAPAZITAETSVORSCHAU_NACH_WOCHEN;
        // Anzahl der angezeigten Vatergruppen. Alles andere wird nach
        // "Sonstige" verdichtet
        final ParametermandantDto parameterAnzahlGruppen = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ANZAHL_GRUPPEN);
        final int iParamAnzahlGruppen = (Integer) parameterAnzahlGruppen.getCWertAsObject();
        // Angezeigter Zeitraum = Anzahl der Spalten
        final ParametermandantDto parameterZeitraum = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ZEITRAUM);
        final int iParamZeitraum = (Integer) parameterZeitraum.getCWertAsObject();

        // ------------------------------------------------------------------
        // -----
        // Hibernate-Session erstellen
        // ------------------------------------------------------------------
        // -----
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        // ------------------------------------------------------------------
        // -----
        // Artikel- / Maschinen-Vatergruppen holen
        // ------------------------------------------------------------------
        // -----
        // Alle Artikel-Vatergruppen
        Criteria cArtikelVatergruppen = session.createCriteria(FLRArtikelgruppe.class);
        cArtikelVatergruppen.add(Restrictions.isNull(ArtikelFac.FLR_ARTIKELGRUPPE_FLRARTIKELGRUPPE));
        List<?> listArtikelgruppen = cArtikelVatergruppen.list();
        // Alle Maschinen-Vatergruppen
        Criteria cMaschinengruppen = session.createCriteria(FLRMaschinengruppe.class);
        List<?> listMaschinengruppen = cMaschinengruppen.list();
        // ------------------------------------------------------------------
        // -----
        // Anzahl der sub-Diagramme bestimmen
        // das ist grundsaetzlich (iParamAnzahlGruppen + 1) x 2 ...
        // (Anzahl d. anzuzeigenden Vatergruppen + Sonstige) f. AZ und
        // Maschinen
        // wenn es weniger Vatergruppen als anzuzeigende gibt, reduziert
        // sich das aber
        // Gibt es keine Vatergruppe, wird daher alles nach "Sonstige"
        // verdichtet
        // ------------------------------------------------------------------
        // -----
        final int iAnzuzeigendeArtikelgruppen = Math.min(iParamAnzahlGruppen, listArtikelgruppen.size());

        final int iAnzuzeigendeMaschinengruppen = Math.min(iParamAnzahlGruppen, listMaschinengruppen.size());

        final int iAnzahlZeilen = iAnzuzeigendeArtikelgruppen + 1 + iAnzuzeigendeMaschinengruppen + 1;

        // ------------------------------------------------------------------
        // -----
        // Dto initialisieren
        // ------------------------------------------------------------------
        // -----
        kapDto = new KapazitaetsvorschauDto(iAnzahlZeilen, iParamZeitraum);
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der x-Achse ermitteln. das sind die Kalenderwochen
        // ------------------------------------------------------------------
        // -----
        HashMap<Integer, Integer> hmKWIndizes = new HashMap<Integer, Integer>();

        String[] kw = new String[iParamZeitraum];
        GregorianCalendar gc = new GregorianCalendar();
        for (int i = 0; i < kw.length; i++) {
            int iKw = gc.get(GregorianCalendar.WEEK_OF_YEAR);
            kw[i] = "" + iKw;
            kapDto.setISpaltenueberschrift(i, kw[i]);
            hmKWIndizes.put(gc.get(GregorianCalendar.WEEK_OF_YEAR), i);
            gc.setTimeInMillis(gc.getTimeInMillis() + 7 * 24 * 60 * 60 * 1000); // 1 Woche dazu
        }
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der y-Achse ermitteln. das sind die Namen der
        // Vatergruppen bzw. 2 x "Sonstige".
        // Weiters werden die Indizes im Daten-Array fuer die jeweiligen
        // Gruppen festgelegt.
        // ------------------------------------------------------------------
        // -----
        String sSonstige = getTextRespectUISpr("lp.sonstige", theClientDto.getMandant(),
                theClientDto.getLocUi());

        HashMap<Integer, Integer> hmArtikelGruppenIndizes = new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> hmMaschinenGruppenIndizes = new HashMap<Integer, Integer>();

        // zuerst die Artikelvatergruppen
        for (int i = 0; i < iAnzuzeigendeArtikelgruppen; i++) {
            FLRArtikelgruppe item = (FLRArtikelgruppe) listArtikelgruppen.get(i);
            kapDto.setIZeilenueberschrift(i, item.getC_nr());
            hmArtikelGruppenIndizes.put(item.getI_id(), i);
        }
        // Dann Sonstige Artikelgruppen
        final int indexSonstigeArtikelGruppen = iAnzuzeigendeArtikelgruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeArtikelGruppen, sSonstige);
        // Maschinengruppen
        for (int i = 0; i < iAnzuzeigendeMaschinengruppen; i++) {
            FLRMaschinengruppe item = (FLRMaschinengruppe) listMaschinengruppen.get(i);
            int index = iAnzuzeigendeArtikelgruppen + 1 + i;
            kapDto.setIZeilenueberschrift(index, item.getC_bez());
            hmMaschinenGruppenIndizes.put(item.getI_id(), index);
        }
        // zuletzt Sonstige Maschinengruppen
        final int indexSonstigeMaschinenGruppen = iAnzuzeigendeArtikelgruppen + 1
                + iAnzuzeigendeMaschinengruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeMaschinenGruppen, sSonstige);

        // ------------------------------------------------------------------
        // -----
        // Lose holen
        // ------------------------------------------------------------------
        // -----
        Criteria cLose = session.createCriteria(FLRLos.class);
        // Filter nach Mandant
        cLose.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // Alle Stati ausser Erledigt, Gestoppt, Storniert
        Collection<String> cLoseStati = new LinkedList<String>();
        cLoseStati.add(FertigungFac.STATUS_ERLEDIGT);
        cLoseStati.add(FertigungFac.STATUS_GESTOPPT);
        cLoseStati.add(FertigungFac.STATUS_STORNIERT);
        cLose.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, cLoseStati)));
        List<?> listLose = cLose.list();
        // ------------------------------------------------------------------
        // -----
        // Auswertungszeitraum und verfuegbare Kapazitaeten ermitteln
        // ------------------------------------------------------------------
        // -----

        // 3 Monate in die zukunft
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());
        c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 3);
        java.util.Date dMax = Helper.cutDate(new java.sql.Date(c.getTimeInMillis()));

        java.sql.Timestamp tVon = Helper.cutTimestamp(new java.sql.Timestamp(System.currentTimeMillis()));
        java.sql.Timestamp tBis = Helper.cutTimestamp(new java.sql.Timestamp(dMax.getTime()));
        // Verfuegbare Zeiten holen
        SollverfuegbarkeitDto[] oVerfuegbar = getZeiterfassungFac().getVerfuegbareSollzeit(tVon, tBis,
                theClientDto);
        // diese nun aufteilen
        for (int i = 0; i < oVerfuegbar.length; i++) {
            SollverfuegbarkeitDto svDto = oVerfuegbar[i];
            // "normale" AZ
            if (svDto.isBMannarbeitszeit()) {
                // die sind einer Artikelgruppe zugeordnet
                if (svDto.getIGruppeid() != null) {
                    Integer iZeile = hmArtikelGruppenIndizes.get(svDto.getIGruppeid());
                    // ist das eine sichtbare Gruppe
                    if (iZeile != null) {
                        for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                    // wenn nicht, dann zu den sonstigen
                    else {
                        for (int iSpalte = 0; iSpalte < kapDto
                                .getDetails()[indexSonstigeArtikelGruppen].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                }
                // Rest = Sonstige Artikelgruppen
                else {
                    if (svDto.getTDatum() != null) {
                        // Die KW dieses Datums ermitteln, damit das
                        // zugeordnet werden kann
                        GregorianCalendar gcSV = new GregorianCalendar();
                        gcSV.setTime(svDto.getTDatum());
                        int kwSV = gcSV.get(Calendar.WEEK_OF_YEAR);
                        Integer iIndexDerKW = hmKWIndizes.get(kwSV);
                        if (iIndexDerKW != null) {
                            // Hier nicht mit 5 multiplizieren, da es fuer
                            // jeden Tag einen eigenen Eintrag gibt
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iIndexDerKW,
                                    svDto.getNSollstunden());
                        } else {
                            // diese KW wird nicht mehr angezeigt - brauch
                            // ich nicht einrechnen
                        }
                    }
                }
            }
            // Maschinenzeit - die Verfuegbarkeit ist jeden Tag gleich
            else {
                Integer iZeile = hmMaschinenGruppenIndizes.get(svDto.getIGruppeid());
                // ist das eine sichtbare Gruppe
                if (iZeile != null) {
                    for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
                // wenn nicht, dann zu den sonstigen
                else {
                    for (int iSpalte = 0; iSpalte < kapDto
                            .getDetails()[indexSonstigeMaschinenGruppen].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(indexSonstigeMaschinenGruppen, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
            }
        }
        // ------------------------------------------------------------------
        // -----
        // Offene Zeiten ermitteln
        // ------------------------------------------------------------------
        // -----
        for (Iterator<?> iter = listLose.iterator(); iter.hasNext();) {
            FLRLos los = (FLRLos) iter.next();
            // Offene Menge ermitteln
            BigDecimal bdOffen = los.getN_losgroesse();
            for (Iterator<?> iterAblieferung = los.getAblieferungset().iterator(); iterAblieferung.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iterAblieferung.next();
                bdOffen = bdOffen.subtract(item.getN_menge());
            }
            // nur Lose mit tatsaechlich offener Menge>0
            if (bdOffen.compareTo(new BigDecimal(0)) > 0) {
                // Faktor zur Berechnung der offenen Zeiten = offene Menge /
                // Losgroesse. 2 Nachkommastellen sollten reichen.
                BigDecimal bdFaktor = bdOffen.divide(los.getN_losgroesse(), 2, BigDecimal.ROUND_HALF_EVEN);
                // Arbeitsplan holen
                Criteria cLosAZ = session.createCriteria(FLRLossollarbeitsplan.class);
                cLosAZ.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, los.getI_id()));
                List<?> listLosAZ = cLosAZ.list();
                // fuer alle Taetigkeiten
                for (Iterator<?> iterAZ = listLosAZ.iterator(); iterAZ.hasNext();) {
                    FLRLossollarbeitsplan losAZ = (FLRLossollarbeitsplan) iterAZ.next();
                    BigDecimal bdOffeneStunden = losAZ.getN_gesamtzeit().multiply(bdFaktor);
                    // ------------------------------------------------------
                    // -----------------
                    // Index der Gruppe bestimmen, der ich das zuordnen muss
                    // ------------------------------------------------------
                    // -----------------
                    int iZeilenIndex;
                    // 1. nach Maschinengruppe
                    // 2. nach Artikelgruppe der Taetigkeit
                    FLRMaschine flrMaschine = losAZ.getFlrmaschine();
                    Integer iMaschinengruppeIId = null;
                    Integer iArtikelgruppeIId = null;
                    if (flrMaschine != null) {
                        FLRMaschinengruppe flrMaschinengruppe = flrMaschine.getFlrmaschinengruppe();
                        if (flrMaschinengruppe != null) {
                            // Wenn diese Maschinengruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmMaschinenGruppenIndizes.get(flrMaschinengruppe.getI_id());
                            iMaschinengruppeIId = flrMaschinengruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeMaschinenGruppen;
                            }
                        }
                        // Maschinen ohne Maschinengruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeMaschinenGruppen;
                        }
                    } else {
                        FLRArtikel flrArtikel = losAZ.getFlrartikel();
                        FLRArtikelgruppe flrArtikelgruppe = flrArtikel.getFlrartikelgruppe();
                        if (flrArtikelgruppe != null) {
                            // Wenn diese Artikelgruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmArtikelGruppenIndizes.get(flrArtikelgruppe.getI_id());
                            iArtikelgruppeIId = flrArtikelgruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeArtikelGruppen;
                            }
                        }
                        // Taetigkeiten ohne Artikelgruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeArtikelGruppen;
                        }
                    }
                    // ------------------------------------------------------
                    // -----------------
                    // Jetzt hab ich die Gruppe, der ich das zuordnen muss
                    // nun muss die Zeit aufgeteilt werden
                    // ------------------------------------------------------
                    // -----------------
                    java.util.Date tLosStarttermin = los.getT_produktionsbeginn();
                    java.util.Date tLosEndetermin = los.getT_produktionsende();
                    // beide Termine duerfen nicht vor heute liegen
                    if (tLosStarttermin.before(getDate())) {
                        tLosStarttermin = getDate();
                    }
                    if (tLosEndetermin.before(getDate())) {
                        tLosEndetermin = getDate();
                    }
                    // Anzahl der betroffenen Kalenderwochen bestimmen
                    GregorianCalendar gcStart = new GregorianCalendar();
                    gcStart.setTime(tLosStarttermin);
                    GregorianCalendar gcEnde = new GregorianCalendar();
                    gcEnde.setTime(tLosEndetermin);
                    int iStartKW = gcStart.get(Calendar.WEEK_OF_YEAR);
                    int iEndeKW = gcEnde.get(Calendar.WEEK_OF_YEAR);
                    int iAnzahlKW = 1 + iEndeKW - iStartKW;
                    // nun auf die Wochen aufteilen
                    BigDecimal bdOffeneStundenJeWoche = bdOffeneStunden;

                    if (iAnzahlKW > 0) {
                        bdOffeneStundenJeWoche = bdOffeneStunden.divide(new BigDecimal(iAnzahlKW), 2,
                                RoundingMode.HALF_UP);
                    }

                    for (int iAktuelleKW = iStartKW; iAktuelleKW <= iEndeKW; iAktuelleKW++) {
                        Integer indexDerKW = hmKWIndizes.get(iAktuelleKW);
                        // wird diese Woche auch angezeigt?
                        if (indexDerKW != null) {
                            KapazitaetsvorschauDetailDto detailDto = new KapazitaetsvorschauDetailDto();
                            detailDto.setArtikelgruppeIId(iArtikelgruppeIId);
                            detailDto.setArtikelIIdTaetigkeit(losAZ.getFlrartikel().getI_id());
                            detailDto.setBdDauer(bdOffeneStundenJeWoche);
                            detailDto.setLosIId(los.getI_id());
                            detailDto.setLossollarbeitsplanIId(losAZ.getI_id());
                            detailDto.setMaschinengruppeIId(iMaschinengruppeIId);
                            kapDto.addDetail(iZeilenIndex, indexDerKW, detailDto);
                        }
                    }
                }
            }
        }

        // ------------------------------------------------------------------
        // -----
        // Diagramm aus den Daten erstellen
        // ------------------------------------------------------------------
        // -----
        SymbolAxis xAchse = new SymbolAxis("KW", kw);
        CombinedDomainXYPlot plot = new CombinedDomainXYPlot(xAchse);
        for (int iZeile = 0; iZeile < kapDto.getDetails().length; iZeile++) {
            XYSeries datenZeile = new XYSeries(kapDto.getIZeilenueberschrift(iZeile));
            // Balkenfarben festlegen ( >100% = rot, sonst hellgrau)
            // fuer jede zeile und jede spalte
            Paint[][] paints = new Paint[1][kapDto.getDetails()[iZeile].length];
            for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                BigDecimal bdVerfuegbar = kapDto.getBdVerfuegbareStunden()[iZeile][iSpalte];
                BigDecimal bdBenoetigt = new BigDecimal(0);
                // Benoetigte Zeit jet Gruppe je Woche ermitteln
                for (Iterator<?> iter = kapDto.getDetails()[iZeile][iSpalte].iterator(); iter.hasNext();) {
                    KapazitaetsvorschauDetailDto item = (KapazitaetsvorschauDetailDto) iter.next();
                    bdBenoetigt = bdBenoetigt.add(item.getBdDauer());
                }
                BigDecimal value = new BigDecimal(0);
                if (bdVerfuegbar.compareTo(new BigDecimal(0)) > 0) {
                    value = (bdBenoetigt.multiply(new BigDecimal(100))).divide(bdVerfuegbar, 4,
                            BigDecimal.ROUND_HALF_EVEN);
                    if (value.doubleValue() > 100.0) {
                        paints[0][iSpalte] = Color.red;
                    } else {
                        paints[0][iSpalte] = Color.lightGray;
                    }
                }
                // tage ohne Verfuegbarkeit mach ich 100% und weisz
                else {
                    value = new BigDecimal(100.0);
                    // Wochen ohne Kapazitaet aber mit geplanter Zeit
                    if (bdBenoetigt.compareTo(new BigDecimal(0)) > 0) {
                        paints[0][iSpalte] = Color.MAGENTA;
                    }
                    // Wenn nichts verfuegbar aber auch nichts benoetigt ->
                    // weiss
                    else {
                        paints[0][iSpalte] = Color.white;
                    }
                }
                XYDataItem data = new XYDataItem(iSpalte, value.doubleValue());
                datenZeile.add(data);
            }
            // Zur Collection
            XYSeriesCollection xyDataset = new XYSeriesCollection();
            xyDataset.addSeries(datenZeile);

            // subplot erstellen
            XYItemRenderer renderer1 = new CustomXYBarRenderer(paints);

            // renderer1.setItemLabelsVisible(true);
            // Legende nicht anzeigen
            renderer1.setBaseSeriesVisibleInLegend(false);
            NumberAxis zeilenAchse = new NumberAxis(kapDto.getIZeilenueberschrift(iZeile));
            // Beschriftung der Y-Achse um 90 grad drehen
            zeilenAchse.setLabelAngle(Math.PI / 2.0);
            zeilenAchse.setAutoRange(true);
            XYPlot subplot1 = new XYPlot(xyDataset, null, zeilenAchse, renderer1);
            subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
            // Markierung bei 100%
            final Marker target = new ValueMarker(100.0);
            target.setPaint(Color.darkGray);
            // target.setLabel("100 %"); // Label
            // target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
            // target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
            subplot1.addRangeMarker(target);

            plot.add(subplot1); // plot.add(subplot1, 1);
        }
        JFreeChart lStackedBarChart = new JFreeChart(plot);

        kapDto.setJfcKapazitaetsvorschau(lStackedBarChart);
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        if (session != null) {
            session.close();
        }
    }
    return kapDto;
}

From source file:com.clark.func.Functions.java

/**
 * Adds a number of weeks to a date returning a new object. The original
 * date object is unchanged.//from  w  w  w.  j  av a2 s  . c o  m
 * 
 * @param date
 *            the date, not null
 * @param amount
 *            the amount to add, may be negative
 * @return the new date object with the amount added
 * @throws IllegalArgumentException
 *             if the date is null
 */
public static Date addWeeks(Date date, int amount) {
    return addDate(date, Calendar.WEEK_OF_YEAR, amount);
}