Search in sources :

Example 1 with PERSON

use of org.finos.waltz.schema.tables.Person.PERSON in project waltz by khartec.

the class ChangeLogGenerator method create.

@Override
public Map<String, Integer> create(ApplicationContext ctx) {
    DSLContext dsl = ctx.getBean(DSLContext.class);
    // get applications and emails
    List<Long> appIds = dsl.select(APPLICATION.ID).from(APPLICATION).fetch(APPLICATION.ID);
    List<String> emails = dsl.select(PERSON.EMAIL).from(PERSON).fetch(PERSON.EMAIL);
    Set<ChangeLogRecord> records = emails.stream().flatMap(email -> {
        Long appId = randomPick(appIds);
        LocalDateTime when = now().minus(randomIntBetween(0, 365), ChronoUnit.DAYS);
        return Stream.of(mkChangeLog(appId, email, when), mkChangeLog(appId, email, when), mkChangeLog(randomPick(appIds), email, when), mkChangeLog(appId, randomPick(emails), when));
    }).collect(toSet());
    dsl.batchInsert(records).execute();
    log("Inserted " + records.size() + " change log entries");
    return null;
}
Also used : APPLICATION(org.finos.waltz.schema.tables.Application.APPLICATION) EntityKind(org.finos.waltz.model.EntityKind) ChangeLogRecord(org.finos.waltz.schema.tables.records.ChangeLogRecord) Timestamp(java.sql.Timestamp) RandomUtilities.randomIntBetween(org.finos.waltz.common.RandomUtilities.randomIntBetween) LocalDateTime(java.time.LocalDateTime) Set(java.util.Set) Severity(org.finos.waltz.model.Severity) ApplicationContext(org.springframework.context.ApplicationContext) CHANGE_LOG(org.finos.waltz.schema.tables.ChangeLog.CHANGE_LOG) Tuple2(org.jooq.lambda.tuple.Tuple2) List(java.util.List) ChronoUnit(java.time.temporal.ChronoUnit) Stream(java.util.stream.Stream) Tuple.tuple(org.jooq.lambda.tuple.Tuple.tuple) Map(java.util.Map) RandomUtilities.randomPick(org.finos.waltz.common.RandomUtilities.randomPick) SetUtilities(org.finos.waltz.common.SetUtilities) DSLContext(org.jooq.DSLContext) LocalDateTime.now(java.time.LocalDateTime.now) Collectors.toSet(java.util.stream.Collectors.toSet) PERSON(org.finos.waltz.schema.tables.Person.PERSON) LocalDateTime(java.time.LocalDateTime) DSLContext(org.jooq.DSLContext) ChangeLogRecord(org.finos.waltz.schema.tables.records.ChangeLogRecord)

Example 2 with PERSON

use of org.finos.waltz.schema.tables.Person.PERSON in project waltz by khartec.

the class SurveyRunGenerator method create.

@Override
public Map<String, Integer> create(ApplicationContext ctx) {
    final DSLContext dsl = ctx.getBean(DSLContext.class);
    List<Person> owners = dsl.selectFrom(PERSON).limit(NUMBER_OF_RUNS).fetch().map(PersonDao.personMapper);
    checkFalse(isEmpty(owners), "No person found, please generate person data first");
    final SurveyTemplateDao surveyTemplateDao = ctx.getBean(SurveyTemplateDao.class);
    List<SurveyTemplate> surveyTemplates = surveyTemplateDao.findAllActive();
    checkFalse(isEmpty(surveyTemplates), "No template found, please generate templates first");
    final AppGroupDao appGroupDao = ctx.getBean(AppGroupDao.class);
    List<AppGroup> appGroups = appGroupDao.findPublicGroups();
    checkFalse(isEmpty(appGroups), "No public app group found, please generate app groups first");
    final InvolvementKindDao involvementKindDao = ctx.getBean(InvolvementKindDao.class);
    List<InvolvementKind> involvementKinds = involvementKindDao.findAll();
    final SurveyRunService surveyRunService = ctx.getBean(SurveyRunService.class);
    final SurveyInstanceService surveyInstanceService = ctx.getBean(SurveyInstanceService.class);
    final SurveyQuestionService surveyQuestionService = ctx.getBean(SurveyQuestionService.class);
    AtomicInteger surveyCompletedCount = new AtomicInteger(0);
    IntStream.range(0, NUMBER_OF_RUNS).forEach(idx -> {
        SurveyTemplate surveyTemplate = surveyTemplates.get(random.nextInt(surveyTemplates.size()));
        Person owner = owners.get(random.nextInt(owners.size()));
        SurveyRunRecord surveyRunRecord = mkRandomSurveyRunRecord(dsl, appGroups, involvementKinds, surveyTemplate, owner);
        surveyRunRecord.store();
        long surveyRunId = surveyRunRecord.getId();
        LOG.debug("Survey Run: {} / {} / {}", surveyRunRecord.getStatus(), surveyRunId, surveyRunRecord.getName());
        ImmutableInstancesAndRecipientsCreateCommand createCmd = ImmutableInstancesAndRecipientsCreateCommand.builder().surveyRunId(surveyRunId).dueDate(toLocalDate(nowUtcTimestamp())).approvalDueDate(toLocalDate(nowUtcTimestamp())).excludedRecipients(emptySet()).build();
        surveyRunService.createSurveyInstancesAndRecipients(createCmd);
        List<SurveyInstanceQuestionResponse> surveyInstanceQuestionResponses = mkRandomSurveyRunResponses(surveyRunId, surveyInstanceService, surveyQuestionService);
        Map<SurveyInstanceStatus, Set<Long>> surveyInstanceStatusMap = surveyInstanceQuestionResponses.stream().mapToLong(response -> response.surveyInstanceId()).distinct().mapToObj(id -> tuple(randomPick(SurveyInstanceStatus.NOT_STARTED, SurveyInstanceStatus.IN_PROGRESS, SurveyInstanceStatus.COMPLETED), id)).collect(groupingBy(t -> t.v1, mapping(t -> t.v2, toSet())));
        dsl.batchInsert(surveyInstanceQuestionResponses.stream().map(r -> {
            if (surveyInstanceStatusMap.containsKey(SurveyInstanceStatus.NOT_STARTED) && surveyInstanceStatusMap.get(SurveyInstanceStatus.NOT_STARTED).contains(r.surveyInstanceId())) {
                // don't create response for NOT_STARTED
                return null;
            }
            SurveyQuestionResponse questionResponse = r.questionResponse();
            SurveyQuestionResponseRecord record = new SurveyQuestionResponseRecord();
            record.setSurveyInstanceId(r.surveyInstanceId());
            record.setPersonId(r.personId());
            record.setQuestionId(questionResponse.questionId());
            record.setBooleanResponse(questionResponse.booleanResponse().orElse(null));
            record.setNumberResponse(questionResponse.numberResponse().map(BigDecimal::valueOf).orElse(null));
            record.setStringResponse(questionResponse.stringResponse().orElse(null));
            record.setComment(r.questionResponse().comment().orElse(null));
            record.setLastUpdatedAt(DateTimeUtilities.nowUtcTimestamp());
            return record;
        }).filter(Objects::nonNull).collect(toList())).execute();
        if (SurveyRunStatus.valueOf(surveyRunRecord.getStatus()) == SurveyRunStatus.COMPLETED) {
            surveyRunRecord.setStatus(SurveyRunStatus.COMPLETED.name());
            surveyRunRecord.store();
            surveyCompletedCount.incrementAndGet();
            // update instances to COMPLETED
            if (surveyInstanceStatusMap.containsKey(SurveyInstanceStatus.COMPLETED)) {
                Set<Long> completedInstanceIds = surveyInstanceStatusMap.get(SurveyInstanceStatus.COMPLETED);
                dsl.update(SURVEY_INSTANCE).set(SURVEY_INSTANCE.STATUS, SurveyInstanceStatus.COMPLETED.name()).where(SURVEY_INSTANCE.ID.in(completedInstanceIds)).execute();
                LOG.debug(" --- {} instances: {}", SurveyInstanceStatus.COMPLETED, completedInstanceIds);
            }
        } else {
            surveyInstanceStatusMap.forEach(((status, instanceIds) -> {
                dsl.update(SURVEY_INSTANCE).set(SURVEY_INSTANCE.STATUS, status.name()).where(SURVEY_INSTANCE.ID.in(instanceIds)).execute();
                LOG.debug(" --- {} instances: {}", status.name(), instanceIds);
            }));
        }
    });
    LOG.debug("Generated: {} survey runs, in which {} are completed", NUMBER_OF_RUNS, surveyCompletedCount.get());
    return null;
}
Also used : SurveyQuestionService(org.finos.waltz.service.survey.SurveyQuestionService) IntStream(java.util.stream.IntStream) SurveyRunService(org.finos.waltz.service.survey.SurveyRunService) java.util(java.util) DSL(org.jooq.impl.DSL) SURVEY_INSTANCE_RECIPIENT(org.finos.waltz.schema.tables.SurveyInstanceRecipient.SURVEY_INSTANCE_RECIPIENT) EntityKind(org.finos.waltz.model.EntityKind) InvolvementKindDao(org.finos.waltz.data.involvement_kind.InvolvementKindDao) LoggerFactory(org.slf4j.LoggerFactory) AppGroup(org.finos.waltz.model.app_group.AppGroup) SurveyQuestionService(org.finos.waltz.service.survey.SurveyQuestionService) AppGroupDao(org.finos.waltz.data.app_group.AppGroupDao) Person(org.finos.waltz.model.person.Person) Condition(org.jooq.Condition) SurveyRunRecord(org.finos.waltz.schema.tables.records.SurveyRunRecord) BigDecimal(java.math.BigDecimal) Tuple2(org.jooq.lambda.tuple.Tuple2) Checks.checkFalse(org.finos.waltz.common.Checks.checkFalse) Record1(org.jooq.Record1) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) InvolvementKind(org.finos.waltz.model.involvement_kind.InvolvementKind) DSLContext(org.jooq.DSLContext) SURVEY_QUESTION_RESPONSE(org.finos.waltz.schema.tables.SurveyQuestionResponse.SURVEY_QUESTION_RESPONSE) Select(org.jooq.Select) SurveyTemplateDao(org.finos.waltz.data.survey.SurveyTemplateDao) Logger(org.slf4j.Logger) Collections.emptySet(java.util.Collections.emptySet) CollectionUtilities.isEmpty(org.finos.waltz.common.CollectionUtilities.isEmpty) org.finos.waltz.model.survey(org.finos.waltz.model.survey) SURVEY_INSTANCE(org.finos.waltz.schema.Tables.SURVEY_INSTANCE) PersonDao(org.finos.waltz.data.person.PersonDao) ApplicationContext(org.springframework.context.ApplicationContext) Collectors(java.util.stream.Collectors) SURVEY_RUN(org.finos.waltz.schema.Tables.SURVEY_RUN) RandomUtilities(org.finos.waltz.common.RandomUtilities) ListUtilities.map(org.finos.waltz.common.ListUtilities.map) SurveyQuestionResponseRecord(org.finos.waltz.schema.tables.records.SurveyQuestionResponseRecord) Tuple.tuple(org.jooq.lambda.tuple.Tuple.tuple) DateTimeUtilities(org.finos.waltz.common.DateTimeUtilities) LocalDate(java.time.LocalDate) RandomUtilities.randomPick(org.finos.waltz.common.RandomUtilities.randomPick) SurveyInstanceService(org.finos.waltz.service.survey.SurveyInstanceService) PERSON(org.finos.waltz.schema.tables.Person.PERSON) HierarchyQueryScope(org.finos.waltz.model.HierarchyQueryScope) SurveyQuestionResponseRecord(org.finos.waltz.schema.tables.records.SurveyQuestionResponseRecord) Collections.emptySet(java.util.Collections.emptySet) InvolvementKindDao(org.finos.waltz.data.involvement_kind.InvolvementKindDao) AppGroup(org.finos.waltz.model.app_group.AppGroup) SurveyInstanceService(org.finos.waltz.service.survey.SurveyInstanceService) AppGroupDao(org.finos.waltz.data.app_group.AppGroupDao) InvolvementKind(org.finos.waltz.model.involvement_kind.InvolvementKind) SurveyTemplateDao(org.finos.waltz.data.survey.SurveyTemplateDao) DSLContext(org.jooq.DSLContext) BigDecimal(java.math.BigDecimal) SurveyRunService(org.finos.waltz.service.survey.SurveyRunService) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) SurveyRunRecord(org.finos.waltz.schema.tables.records.SurveyRunRecord) Person(org.finos.waltz.model.person.Person)

Aggregations

RandomUtilities.randomPick (org.finos.waltz.common.RandomUtilities.randomPick)2 EntityKind (org.finos.waltz.model.EntityKind)2 PERSON (org.finos.waltz.schema.tables.Person.PERSON)2 DSLContext (org.jooq.DSLContext)2 Tuple.tuple (org.jooq.lambda.tuple.Tuple.tuple)2 Tuple2 (org.jooq.lambda.tuple.Tuple2)2 ApplicationContext (org.springframework.context.ApplicationContext)2 BigDecimal (java.math.BigDecimal)1 Timestamp (java.sql.Timestamp)1 LocalDate (java.time.LocalDate)1 LocalDateTime (java.time.LocalDateTime)1 LocalDateTime.now (java.time.LocalDateTime.now)1 ChronoUnit (java.time.temporal.ChronoUnit)1 java.util (java.util)1 Collections.emptySet (java.util.Collections.emptySet)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Collectors (java.util.stream.Collectors)1