Example usage for org.joda.time Duration minus

List of usage examples for org.joda.time Duration minus

Introduction

In this page you can find the example usage for org.joda.time Duration minus.

Prototype

public Duration minus(ReadableDuration amount) 

Source Link

Document

Returns a new duration with this length minus that specified.

Usage

From source file:com.vaushell.superpipes.nodes.test.N_ReceiveBlocking.java

License:Open Source License

/**
 * Get the actual processing message, or wait it.
 *
 * @param timeout a timeout/*from   w  w  w. java 2s. c  o  m*/
 * @return the Message
 * @throws InterruptedException
 */
public Message getProcessingMessageOrWait(final Duration timeout) throws InterruptedException {
    if (timeout == null) {
        throw new IllegalArgumentException();
    }

    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("[" + getNodeID() + "] getProcessingMessageOrWait() : timeout=" + timeout);
    }

    synchronized (messages) {
        DateTime start = new DateTime();
        Duration remaining = timeout;
        while (messages.isEmpty() && remaining.getMillis() > 0L) {
            messages.wait(remaining.getMillis());

            final DateTime now = new DateTime();

            final Duration elapsed = new Duration(start, now);

            remaining = remaining.minus(elapsed);

            start = now;
        }

        return messages.pollFirst();
    }
}

From source file:google.registry.model.server.Lock.java

License:Open Source License

/**
 * Acquire one or more locks and execute a Void {@link Callable} on a thread that will be
 * killed if it doesn't complete before the lease expires.
 *
 * <p>If the requester isn't null, this will join each lock's queue before attempting to acquire
 * that lock. Clients that are concerned with starvation should specify a requester and those that
 * aren't shouldn't./*  ww  w  .j a va2 s . c om*/
 *
 * <p>Note that locks are specific either to a given tld or to the entire system (in which case
 * tld should be passed as null).
 *
 * @return whether all locks were acquired and the callable was run.
 */
public static boolean executeWithLocks(final Callable<Void> callable, @Nullable Class<?> requester,
        @Nullable String tld, Duration leaseLength, String... lockNames) {
    try {
        return AppEngineTimeLimiter.create().callWithTimeout(
                new LockingCallable(callable, requester, Strings.emptyToNull(tld), leaseLength, lockNames),
                leaseLength.minus(LOCK_TIMEOUT_FUDGE).getMillis(), TimeUnit.MILLISECONDS, true);
    } catch (Exception e) {
        throw Throwables.propagate(e);
    }
}

From source file:kr.debop4j.timeperiod.calendars.DateAdd.java

License:Apache License

/**
 *  ? offset ?  ?? ./*from   w  w  w  . j a  v a2 s  . c om*/
 *
 * @param start         ?
 * @param offset       
 * @param seekDir      ? 
 * @param seekBoundary   ? 
 * @return ? ?,  
 */
protected Pair<DateTime, Duration> calculateEnd(DateTime start, Duration offset, SeekDirection seekDir,
        SeekBoundaryMode seekBoundary) {
    if (isTraceEnable)
        log.trace(
                "? ?  ?? ... start=[{}], offset=[{}], seekDir=[{}], seekBoundary=[{}]",
                start, offset, seekDir, seekBoundary);
    shouldBe(offset.compareTo(Duration.ZERO) >= 0, "offset? 0 ??? . offset=[%d]",
            offset.getMillis());

    Duration remaining = offset;
    DateTime end;

    // search periods
    ITimePeriodCollection searchPeriods = new TimePeriodCollection(this.includePeriods);
    if (searchPeriods.size() == 0)
        searchPeriods.add(TimeRange.Anytime);

    // available periods
    ITimePeriodCollection availablePeriods = new TimePeriodCollection();
    if (excludePeriods.size() == 0) {
        availablePeriods.addAll(searchPeriods);
    } else {
        if (isTraceEnable)
            log.trace(" ? .");
        TimeGapCalculator<TimeRange> gapCalculator = new TimeGapCalculator<>();
        for (ITimePeriod p : searchPeriods) {
            if (excludePeriods.hasOverlapPeriods(p)) {
                if (isTraceEnable)
                    log.trace(" ? ?  ? ");
                for (ITimePeriod gap : gapCalculator.getGaps(excludePeriods, p))
                    availablePeriods.add(gap);
            } else {
                availablePeriods.add(p);
            }
        }
    }

    if (availablePeriods.size() == 0) {
        if (isTraceEnable)
            log.trace(" period   .");
        return Pair.create(null, remaining);
    }

    if (isTraceEnable)
        log.trace("  ? ?   ? ...");
    TimePeriodCombiner periodCombiner = new TimePeriodCombiner<TimeRange>();
    availablePeriods = periodCombiner.combinePeriods(availablePeriods);

    if (isTraceEnable)
        log.trace(" ? .");

    Pair<ITimePeriod, DateTime> result = (seekDir == SeekDirection.Forward)
            ? findNextPeriod(start, availablePeriods)
            : findPrevPeriod(start, availablePeriods);

    ITimePeriod startPeriod = result.getV1();
    DateTime seekMoment = result.getV2();

    //   ?  .
    if (startPeriod == null) {
        if (isTraceEnable)
            log.trace("  ?  .");
        return Pair.create(null, remaining);
    }

    // offset ? 0 ??,  ? ? seekMoment  .
    if (offset.isEqual(Duration.ZERO)) {
        if (isTraceEnable)
            log.trace("offset ? 0?,  ? ? seekMoment .");
        return Pair.create(seekMoment, remaining);
    }

    if (seekDir == SeekDirection.Forward) {

        for (int i = availablePeriods.indexOf(startPeriod); i < availablePeriods.size(); i++) {
            ITimePeriod gap = availablePeriods.get(i);
            Duration gapRemaining = new Duration(seekMoment, gap.getEnd());

            if (isTraceEnable)
                log.trace("Seek forward. gap=[{}], gapRemaining=[{}], remaining=[{}], seekMoment=[{}]", gap,
                        gapRemaining, remaining, seekMoment);

            boolean isTargetPeriod = (seekBoundary == SeekBoundaryMode.Fill)
                    ? gapRemaining.compareTo(remaining) >= 0
                    : gapRemaining.compareTo(remaining) > 0;

            if (isTargetPeriod) {
                end = seekMoment.plus(remaining);
                remaining = null;
                return Pair.create(end, remaining);
            }

            remaining = remaining.minus(gapRemaining);
            if (i == availablePeriods.size() - 1)
                return Pair.create(null, remaining);

            seekMoment = availablePeriods.get(i + 1).getStart(); // next period
        }
    } else {
        for (int i = availablePeriods.indexOf(startPeriod); i >= 0; i--) {
            ITimePeriod gap = availablePeriods.get(i);
            Duration gapRemaining = new Duration(gap.getStart(), seekMoment);

            if (isTraceEnable)
                log.trace("Seek backward. gap=[{}], gapRemaining=[{}], remaining=[{}], seekMoment=[{}]", gap,
                        gapRemaining, remaining, seekMoment);

            boolean isTargetPeriod = (seekBoundary == SeekBoundaryMode.Fill)
                    ? gapRemaining.compareTo(remaining) >= 0
                    : gapRemaining.compareTo(remaining) > 0;

            if (isTargetPeriod) {
                end = seekMoment.minus(remaining);
                remaining = null;
                return Pair.create(end, remaining);
            }
            remaining = remaining.minus(gapRemaining);
            if (i == 0)
                return Pair.create(null, remaining);

            seekMoment = availablePeriods.get(i - 1).getEnd();
        }
    }

    if (isTraceEnable)
        log.trace(" ??  .");
    return Pair.create(null, remaining);
}

From source file:net.link.util.ws.security.x509.WSSecurityX509TokenHandler.java

License:Open Source License

private boolean handleInboundDocument(SOAPPart document, SOAPMessageContext soapMessageContext) {

    logger.dbg("In: WS-Security header validation");
    List<WSSecurityEngineResult> wsSecurityEngineResults;
    try {/*from   ww w  .j  ava2 s.  c  om*/
        //noinspection unchecked
        wsSecurityEngineResults = new WSSecurityEngine().processSecurityHeader(document, null, null,
                new ServerCrypto());
    } catch (WSSecurityException e) {
        throw SOAPUtils.createSOAPFaultException("The signature or decryption was invalid", "FailedCheck", e);
    }
    logger.dbg("results: %s", wsSecurityEngineResults);
    if (null == wsSecurityEngineResults) {
        if (!getWSSecConfiguration().isInboundSignatureOptional())
            throw SOAPUtils.createSOAPFaultException("No WS-Security header was found but is required.",
                    "InvalidSecurity");

        logger.dbg("Allowing inbound message without signature: it's set to optional");
        return true;
    }

    Timestamp timestamp = null;
    List<WSDataRef> signedElements = null;
    for (WSSecurityEngineResult result : wsSecurityEngineResults) {

        @SuppressWarnings("unchecked")
        List<WSDataRef> resultSignedElements = (List<WSDataRef>) result
                .get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
        //            Set<String> resultSignedElements = (Set<String>) result.get( WSSecurityEngineResult.TAG_SIGNED_ELEMENT_IDS );
        if (null != resultSignedElements)
            signedElements = resultSignedElements;

        X509Certificate[] certificateChain = (X509Certificate[]) result
                .get(WSSecurityEngineResult.TAG_X509_CERTIFICATES);
        X509Certificate certificate = (X509Certificate) result.get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
        if (null != certificateChain)
            setCertificateChain(soapMessageContext, certificateChain);
        else if (null != certificate)
            setCertificateChain(soapMessageContext, certificate);

        Timestamp resultTimestamp = (Timestamp) result.get(WSSecurityEngineResult.TAG_TIMESTAMP);
        if (null != resultTimestamp)
            timestamp = resultTimestamp;
    }

    if (null == signedElements)
        throw SOAPUtils.createSOAPFaultException("No signed elements found.", "FailedCheck");
    logger.dbg("# signed elements: %d", signedElements.size());
    soapMessageContext.put(SIGNED_ELEMENTS_CONTEXT_KEY, signedElements);

    // Check whether the SOAP Body has been signed.
    try {
        String bodyId = document.getEnvelope().getBody().getAttributeNS(WSConstants.WSU_NS, "Id");

        if (null == bodyId || bodyId.isEmpty())
            throw SOAPUtils.createSOAPFaultException("SOAP Body should have a wsu:Id attribute", "FailedCheck");
        if (!isElementSigned(soapMessageContext, bodyId))
            throw SOAPUtils.createSOAPFaultException("SOAP Body was not signed", "FailedCheck");
    } catch (SOAPException e) {
        throw SOAPUtils.createSOAPFaultException("error retrieving SOAP Body", "FailedCheck", e);
    }

    /*
    * Validate certificate.
    */
    CertificateChain certificateChain = findCertificateChain(soapMessageContext);
    if (null == certificateChain)
        throw SOAPUtils.createSOAPFaultException("missing X509Certificate chain in WS-Security header",
                "InvalidSecurity");
    if (!getWSSecConfiguration().isCertificateChainTrusted(certificateChain))
        throw SOAPUtils.createSOAPFaultException("can't trust X509Certificate chain in WS-Security header",
                "InvalidSecurity");

    /*
     * Check timestamp.
     */
    if (null == timestamp)
        throw SOAPUtils.createSOAPFaultException("missing Timestamp in WS-Security header", "InvalidSecurity");
    String timestampId = timestamp.getID();
    if (!isElementSigned(soapMessageContext, timestampId))
        throw SOAPUtils.createSOAPFaultException("Timestamp not signed", "FailedCheck");
    Duration age = new Duration(timestamp.getCreated().getTime(), System.currentTimeMillis());
    Duration maximumAge = getWSSecConfiguration().getMaximumAge();
    if (age.isLongerThan(maximumAge)) {
        logger.dbg("Maximum age exceeded by %s (since %s)", maximumAge.minus(age),
                timestamp.getCreated().getTime());
        throw SOAPUtils.createSOAPFaultException("Message too old", "FailedCheck");
    }

    return true;
}

From source file:org.apache.beam.runners.dataflow.DataflowPipelineJob.java

License:Apache License

/**
 * Reset backoff. If duration is limited, calculate time remaining, otherwise just reset retry
 * count.//  w  w w .  j  a  v a  2 s  . co m
 *
 * <p>If a total duration for all backoff has been set, update the new cumulative sleep time to be
 * the remaining total backoff duration, stopping if we have already exceeded the allotted time.
 */
private static BackOff resetBackoff(Duration duration, NanoClock nanoClock, long startNanos) {
    BackOff backoff;
    if (duration.isLongerThan(Duration.ZERO)) {
        long nanosConsumed = nanoClock.nanoTime() - startNanos;
        Duration consumed = Duration.millis((nanosConsumed + 999999) / 1000000);
        Duration remaining = duration.minus(consumed);
        if (remaining.isLongerThan(Duration.ZERO)) {
            backoff = getMessagesBackoff(remaining);
        } else {
            backoff = BackOff.STOP_BACKOFF;
        }
    } else {
        backoff = getMessagesBackoff(duration);
    }
    return backoff;
}

From source file:org.openehr.rm.datatypes.quantity.datetime.DvDuration.java

License:LGPL

/**
 * Difference of this quantity and another whose formal type must be the
 * difference type of this quantity type.
 * //from   w  w w .  ja v  a  2  s  . c o  m
 * @param q
 * @return product of substraction
 * @throws ClassCastException
 */
@Override
public DvQuantified<DvDuration> subtract(DvQuantified q) {
    final DvDuration d = (DvDuration) q;

    DateTime dt = new DateTime(0);
    Duration duration = period.toDurationFrom(dt);
    Duration result = duration.minus(d.period.toDurationFrom(dt));
    Period p = result.toPeriodFrom(dt);

    return new DvDuration(d.getOtherReferenceRanges(), d.getNormalRange(), d.getNormalStatus(), d.getAccuracy(),
            d.isAccuracyPercent(), d.getMagnitudeStatus(), p);
}

From source file:org.thiesen.jiffs.jobs.fetcher.SubscriptionFetcher.java

License:Open Source License

private DateTime decrease(Duration duration) {
    if (duration.getMillis() <= MIN_CHECK_TIME_MILLIS) {
        return new DateTime().plus(MIN_CHECK_TIME_MILLIS);
    }/*from w w  w  . j  av  a  2 s  .  c o  m*/

    return new DateTime().plus(duration.minus(CHECK_TIME_STEPPING_MILLIS));
}

From source file:pt.ist.fenixedu.teacher.evaluation.ui.struts.action.credits.ViewDepartmentTeacherServiceDA.java

License:Open Source License

public ActionForward exportDepartmentTeacherService(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) throws FenixServiceException, IOException {
    DepartmentCreditsBean departmentCreditsBean = getRenderedObject();
    List<Department> departments = new ArrayList<Department>();
    if (departmentCreditsBean.getDepartment() != null) {
        departments.add(departmentCreditsBean.getDepartment());
    } else {/*from w  w  w.  j  a va  2s  . c  om*/
        departments.addAll(departmentCreditsBean.getAvailableDepartments());
    }
    StyledExcelSpreadsheet spreadsheet = new StyledExcelSpreadsheet();
    PeriodFormatter periodFormatter = new PeriodFormatterBuilder().printZeroAlways().minimumPrintedDigits(2)
            .appendHours().appendSuffix(":").appendMinutes().toFormatter();
    for (Department department : departments) {
        spreadsheet.getSheet(department.getAcronym());
        spreadsheet.newHeaderRow();
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.name"), 10000);
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.degrees"));
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.semester"));

        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.firstTimeEnrolledStudentsNumber"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.secondTimeEnrolledStudentsNumber"));

        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.totalStudentsNumber"));

        org.fenixedu.academic.domain.ShiftType[] values = org.fenixedu.academic.domain.ShiftType.values();
        for (ShiftType shiftType : values) {
            spreadsheet.addHeader(
                    BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherServiceDistribution.hours")
                            + " " + shiftType.getFullNameTipoAula());
            //    spreadsheet.addHeader("# Alunos / # Turnos " + shiftType.getFullNameTipoAula());
        }

        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.totalHours"));
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.availability"));

        for (ExecutionSemester executionSemester : departmentCreditsBean.getExecutionYear()
                .getExecutionPeriodsSet()) {
            for (ExecutionCourse executionCourse : departmentCreditsBean.getDepartment().getDepartmentUnit()
                    .getAllExecutionCoursesByExecutionPeriod(executionSemester)) {

                spreadsheet.newRow();
                spreadsheet.addCell(executionCourse.getNome());
                spreadsheet.addCell(getDegreeSiglas(executionCourse));
                spreadsheet.addCell(executionCourse.getExecutionPeriod().getSemester());

                int executionCourseFirstTimeEnrollementStudentNumber = executionCourse
                        .getFirstTimeEnrolmentStudentNumber();
                int totalStudentsNumber = executionCourse.getTotalEnrolmentStudentNumber();
                int executionCourseSecondTimeEnrollementStudentNumber = totalStudentsNumber
                        - executionCourseFirstTimeEnrollementStudentNumber;
                spreadsheet.addCell(executionCourseFirstTimeEnrollementStudentNumber);
                spreadsheet.addCell(executionCourseSecondTimeEnrollementStudentNumber);
                spreadsheet.addCell(totalStudentsNumber);

                Double totalHours = 0.0;
                for (ShiftType shiftType : values) {
                    Double shiftHours = executionCourse.getAllShiftUnitHours(shiftType).doubleValue();
                    totalHours += shiftHours;
                    spreadsheet.addCell(shiftHours);
                }

                Duration totalShiftsDuration = new Duration(
                        new Double(executionCourse.getAssociatedShifts().stream()
                                .mapToDouble(s -> s.getCourseLoadWeeklyAverage().doubleValue()).sum() * 3600000)
                                        .longValue());
                spreadsheet.addCell(periodFormatter.print(totalShiftsDuration.toPeriod()));
                int colNum = spreadsheet.getNextWritableCell();
                spreadsheet.addCell("");

                Duration totalLecturedDuration = Duration.ZERO;
                for (Professorship professorship : executionCourse.getProfessorshipsSet()) {
                    Teacher teacher = professorship.getTeacher();
                    if (teacher != null) {
                        Duration teacherLecturedTime = TeacherService
                                .getLecturedDurationOnExecutionCourse(teacher, executionCourse);
                        totalLecturedDuration = totalLecturedDuration.plus(teacherLecturedTime);
                        spreadsheet.addCell(teacher.getPerson().getUsername());
                        spreadsheet.addCell(teacher.getPerson().getName());
                        spreadsheet.addCell(periodFormatter.print(teacherLecturedTime.toPeriod()));
                    }

                }

                spreadsheet.addCell(
                        periodFormatter.print(totalShiftsDuration.minus(totalLecturedDuration).toPeriod()),
                        colNum);
            }
        }
        spreadsheet.getSheet(department.getAcronym() + "_docentes");
        spreadsheet.newHeaderRow();
        spreadsheet
                .addHeader(BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.teacher.id"));
        spreadsheet.addHeader(
                BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.teacher.name"), 10000);
        spreadsheet.addHeader(BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.category"));
        spreadsheet.addHeader(BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.course"),
                10000);
        spreadsheet.addHeader(BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.degrees"));
        spreadsheet.addHeader(
                BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.execution-period"));
        spreadsheet.addHeader(BundleUtil.getString("resources.TeacherCreditsSheetResources", "label.hours"));

        Set<Teacher> allTeachers = Sets
                .newHashSet(department.getAllTeachers(departmentCreditsBean.getExecutionYear()));
        for (Teacher teacher : allTeachers) {
            spreadsheet.newRow();
            spreadsheet.addCell(teacher.getPerson().getUsername());
            spreadsheet.addCell(teacher.getPerson().getProfile().getDisplayName());
            TeacherAuthorization teacherAuthorization = teacher
                    .getTeacherAuthorization(departmentCreditsBean.getExecutionYear().getAcademicInterval())
                    .orElse(null);
            if (teacherAuthorization != null) {
                spreadsheet.addCell(teacherAuthorization.getTeacherCategory().getName().getContent());
            }
            for (Professorship professorship : teacher
                    .getProfessorships(departmentCreditsBean.getExecutionYear())) {
                spreadsheet.newRow();
                spreadsheet.addCell(professorship.getExecutionCourse().getNome(), 3);
                spreadsheet.addCell(getDegreeSiglas(professorship.getExecutionCourse()));
                spreadsheet.addCell(professorship.getExecutionCourse().getExecutionPeriod().getSemester());
                Duration teacherLecturedTime = TeacherService.getLecturedDurationOnExecutionCourse(
                        professorship.getTeacher(), professorship.getExecutionCourse());
                spreadsheet.addCell(periodFormatter.print(teacherLecturedTime.toPeriod()));
            }
        }
    }

    response.setContentType("text/plain");
    StringBuilder filename = new StringBuilder("servicoDocencia");
    filename.append((departments.size() == 1 ? departments.iterator().next().getAcronym() : "Departamentos"));
    filename.append("_")
            .append(departmentCreditsBean.getExecutionYear().getQualifiedName().replaceAll("/", "_"))
            .append(".xls");
    response.setHeader("Content-disposition", "attachment; filename=" + filename.toString());
    final ServletOutputStream writer = response.getOutputStream();
    spreadsheet.getWorkbook().write(writer);
    writer.flush();
    response.flushBuffer();
    return null;
}

From source file:pt.ist.fenixedu.teacher.ui.struts.action.credits.ViewDepartmentTeacherServiceDA.java

License:Open Source License

public ActionForward exportDepartmentTeacherService(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) throws FenixServiceException, IOException {
    DepartmentCreditsBean departmentCreditsBean = getRenderedObject();
    List<Department> departments = new ArrayList<Department>();
    if (departmentCreditsBean.getDepartment() != null) {
        departments.add(departmentCreditsBean.getDepartment());
    } else {//  w  ww .j a  v  a  2  s . c  om
        departments.addAll(departmentCreditsBean.getAvailableDepartments());
    }
    StyledExcelSpreadsheet spreadsheet = new StyledExcelSpreadsheet();
    PeriodFormatter periodFormatter = new PeriodFormatterBuilder().printZeroAlways().minimumPrintedDigits(2)
            .appendHours().appendSuffix(":").appendMinutes().toFormatter();
    for (Department department : departments) {
        spreadsheet.getSheet(department.getAcronym());
        spreadsheet.newHeaderRow();
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.name"), 10000);
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.degrees"));
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.semester"));

        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.firstTimeEnrolledStudentsNumber"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.secondTimeEnrolledStudentsNumber"));

        spreadsheet.addHeader(BundleUtil.getString(Bundle.DEPARTMENT_MEMBER,
                "label.teacherService.course.totalStudentsNumber"));

        org.fenixedu.academic.domain.ShiftType[] values = org.fenixedu.academic.domain.ShiftType.values();
        for (ShiftType shiftType : values) {
            spreadsheet.addHeader(
                    BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherServiceDistribution.hours")
                            + " " + shiftType.getFullNameTipoAula());
            //    spreadsheet.addHeader("# Alunos / # Turnos " + shiftType.getFullNameTipoAula());
        }

        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.totalHours"));
        spreadsheet.addHeader(
                BundleUtil.getString(Bundle.DEPARTMENT_MEMBER, "label.teacherService.course.availability"));

        for (ExecutionSemester executionSemester : departmentCreditsBean.getExecutionYear()
                .getExecutionPeriodsSet()) {
            for (ExecutionCourse executionCourse : departmentCreditsBean.getDepartment().getDepartmentUnit()
                    .getAllExecutionCoursesByExecutionPeriod(executionSemester)) {

                spreadsheet.newRow();
                spreadsheet.addCell(executionCourse.getNome());
                spreadsheet.addCell(getDegreeSiglas(executionCourse));
                spreadsheet.addCell(executionCourse.getExecutionPeriod().getSemester());

                int executionCourseFirstTimeEnrollementStudentNumber = executionCourse
                        .getFirstTimeEnrolmentStudentNumber();
                int totalStudentsNumber = executionCourse.getTotalEnrolmentStudentNumber();
                int executionCourseSecondTimeEnrollementStudentNumber = totalStudentsNumber
                        - executionCourseFirstTimeEnrollementStudentNumber;
                spreadsheet.addCell(executionCourseFirstTimeEnrollementStudentNumber);
                spreadsheet.addCell(executionCourseSecondTimeEnrollementStudentNumber);
                spreadsheet.addCell(totalStudentsNumber);

                Double totalHours = 0.0;
                for (ShiftType shiftType : values) {
                    Double shiftHours = executionCourse.getAllShiftUnitHours(shiftType).doubleValue();
                    totalHours += shiftHours;
                    spreadsheet.addCell(shiftHours);

                    //                        Integer numberOfShifts = executionCourse.getNumberOfShifts(shiftType);
                    //                        spreadsheet.addCell(numberOfShifts == 0 ? 0 : (double) totalStudentsNumber / numberOfShifts);

                }

                Duration totalShiftsDuration = executionCourse.getTotalShiftsDuration();
                spreadsheet.addCell(periodFormatter.print(totalShiftsDuration.toPeriod()));
                int colNum = spreadsheet.getNextWritableCell();
                spreadsheet.addCell("");

                Duration totalLecturedDuration = Duration.ZERO;
                for (Professorship professorship : executionCourse.getProfessorshipsSet()) {
                    Teacher teacher = professorship.getTeacher();
                    if (teacher != null) {
                        Duration teacherLecturedTime = TeacherService
                                .getLecturedDurationOnExecutionCourse(teacher, executionCourse);
                        totalLecturedDuration = totalLecturedDuration.plus(teacherLecturedTime);
                        spreadsheet.addCell(teacher.getPerson().getUsername());
                        spreadsheet.addCell(teacher.getPerson().getName());
                        spreadsheet.addCell(periodFormatter.print(teacherLecturedTime.toPeriod()));
                    }

                }

                spreadsheet.addCell(
                        periodFormatter.print(totalShiftsDuration.minus(totalLecturedDuration).toPeriod()),
                        colNum);
            }
        }
        spreadsheet.getSheet(department.getAcronym() + "_docentes");
        spreadsheet.newHeaderRow();
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.teacher.id"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.teacher.name"), 10000);
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.category"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.course"), 10000);
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.degrees"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.execution-period"));
        spreadsheet.addHeader(BundleUtil.getString(Bundle.TEACHER_CREDITS, "label.hours"));

        Set<Teacher> allTeachers = Sets
                .newHashSet(department.getAllTeachers(departmentCreditsBean.getExecutionYear()));
        for (Teacher teacher : allTeachers) {
            spreadsheet.newRow();
            spreadsheet.addCell(teacher.getPerson().getUsername());
            spreadsheet.addCell(teacher.getPerson().getProfile().getDisplayName());
            TeacherAuthorization teacherAuthorization = teacher
                    .getTeacherAuthorization(departmentCreditsBean.getExecutionYear().getAcademicInterval())
                    .orElse(null);
            if (teacherAuthorization != null) {
                spreadsheet.addCell(teacherAuthorization.getTeacherCategory().getName().getContent());
            }
            for (Professorship professorship : teacher
                    .getProfessorships(departmentCreditsBean.getExecutionYear())) {
                spreadsheet.newRow();
                spreadsheet.addCell(professorship.getExecutionCourse().getNome(), 3);
                spreadsheet.addCell(getDegreeSiglas(professorship.getExecutionCourse()));
                spreadsheet.addCell(professorship.getExecutionCourse().getExecutionPeriod().getSemester());
                Duration teacherLecturedTime = TeacherService.getLecturedDurationOnExecutionCourse(
                        professorship.getTeacher(), professorship.getExecutionCourse());
                spreadsheet.addCell(periodFormatter.print(teacherLecturedTime.toPeriod()));
            }
        }
    }

    response.setContentType("text/plain");
    StringBuilder filename = new StringBuilder("servicoDocencia");
    filename.append((departments.size() == 1 ? departments.iterator().next().getAcronym() : "Departamentos"));
    filename.append("_")
            .append(departmentCreditsBean.getExecutionYear().getQualifiedName().replaceAll("/", "_"))
            .append(".xls");
    response.setHeader("Content-disposition", "attachment; filename=" + filename.toString());
    final ServletOutputStream writer = response.getOutputStream();
    spreadsheet.getWorkbook().write(writer);
    writer.flush();
    response.flushBuffer();
    return null;
}

From source file:rcrr.reversi.Clock.java

License:Open Source License

/**
 * Returns a new clock object generated subtracting the delta value from
 * the specified player remaining clock time.
 * <p>/*from   w  w w  .  ja  v  a  2  s.c  o m*/
 * When the delta parameter is greather than the player's actual time
 * the updated value is set to zero.
 * <p>
 * Parameter {@code player} must be not {@code null}.
 * Parameter {@code delta} must be not {@code null}, and must be not negative.
 *
 * @param  player the player from which to take away the specified time
 * @param  delta  the amount of time in milliseconds to subtract from the
 *                player's clock time
 * @return        a new updated clock
 * @throws NullPointerException     if the player or delta parameter is null
 * @throws IllegalArgumentException if the delta parameter is negative.
 */
public Clock decrement(final Player player, final Duration delta) {
    if (player == null) {
        throw new NullPointerException("Parameter player connot be null");
    }
    if (delta == null) {
        throw new NullPointerException("Parameter delta connot be null.");
    }
    if (delta.isShorterThan(Duration.ZERO)) {
        throw new IllegalArgumentException("Parameter delta cannot be negative.");
    }
    final Duration actual = this.durations.get(player);
    final Duration updated = (actual.isLongerThan(delta)) ? actual.minus(delta) : Duration.ZERO;
    return valueOf(set(player, updated));
}