/* * (non-Javadoc) * * @see WorkflowStep#invoke(WorkflowContext) */ @Override public WorkflowContext invoke(WorkflowContext context) { LOGGER.info("AgrFlexOfferStub: started"); List<FlexOfferDto> outputFlexOffers = new ArrayList<>(); @SuppressWarnings("unchecked") List<FlexRequestDto> inputFlexRequests = (List<FlexRequestDto>) context.getValue( FlexOfferDetermineFlexibilityStepParameter.IN.FLEX_REQUEST_DTO_LIST.name()); /* * For each give flex request, choose to: - create an offer, - do not create offer at all, - do not create offer now. */ int decision; for (FlexRequestDto flexRequestDto : inputFlexRequests) { decision = 1; // original: RANDOM.nextInt(3); // 0,1 or 2 FlexOfferDto flexOfferDto = new FlexOfferDto(); flexOfferDto.setFlexRequestSequenceNumber(flexRequestDto.getSequenceNumber()); flexOfferDto.setExpirationDateTime( now.plusDays(FLEX_OFFER_EXPIRATION_DAYS).withTime(0, 0, 0, 0)); if (decision == 0) { // create a flex offer for the flex request: put a populated flex offer. LOGGER.debug( "A new FlexOffer will be created for FlexRequest with sequence [{}]", flexRequestDto.getSequenceNumber()); populateFlexOfferDto(flexOfferDto, flexRequestDto, true); outputFlexOffers.add(flexOfferDto); } else if (decision == 1) { // refuse to create an offer for the flex request: put an empty flex offer. LOGGER.debug( "An empty FlexOffer will be created for FlexRequest with sequence [{}]", flexRequestDto.getSequenceNumber()); populateFlexOfferDto(flexOfferDto, flexRequestDto, false); outputFlexOffers.add(flexOfferDto); } else { // do not create a flex offer now: don't put anything new in the output list. LOGGER.debug( "No FlexOffer will be created now for FlexRequest with sequence [{}]", flexRequestDto.getSequenceNumber()); } } context.setValue( FlexOfferDetermineFlexibilityStepParameter.OUT.FLEX_OFFER_DTO_LIST.name(), outputFlexOffers); LOGGER.info("AgrFlexOfferStub: complete"); return context; }
private void populateFlexOfferDto( FlexOfferDto flexOfferDto, FlexRequestDto flexRequestDto, boolean populatePtus) { flexOfferDto.setPeriod(flexRequestDto.getPeriod()); flexOfferDto.setConnectionGroupEntityAddress(flexRequestDto.getConnectionGroupEntityAddress()); flexOfferDto.setParticipantDomain(flexRequestDto.getParticipantDomain()); if (populatePtus) { flexRequestDto .getPtus() .stream() .forEach( ptuFlexRequestDto -> { PtuFlexOfferDto ptuFlexOfferDto = new PtuFlexOfferDto(); ptuFlexOfferDto.setPtuIndex(ptuFlexRequestDto.getPtuIndex()); if (ptuFlexRequestDto.getDisposition() == DispositionTypeDto.AVAILABLE) { ptuFlexOfferDto.setPrice(BigDecimal.ZERO); ptuFlexOfferDto.setPower(BigInteger.ZERO); } else { max100PercentOfOriginalPower(ptuFlexRequestDto, ptuFlexOfferDto); } flexOfferDto.getPtus().add(ptuFlexOfferDto); }); } }