use of org.finos.waltz.model.person.Person in project waltz by khartec.
the class PermissionGroupService method findPermissions.
public List<Permission> findPermissions(EntityReference parentEntityRef, String username) {
Person person = personService.getPersonByUserId(username);
if (isNull(person)) {
return Collections.emptyList();
}
List<Involvement> involvements = involvementService.findByEmployeeId(person.employeeId()).stream().filter(involvement -> involvement.entityReference().equals(parentEntityRef)).collect(Collectors.toList());
if (involvements.isEmpty()) {
return Collections.emptyList();
}
return permissionGroupDao.getDefaultPermissions();
}
use of org.finos.waltz.model.person.Person in project waltz by khartec.
the class PersonHierarchyService method build.
public int[] build() {
LOG.warn("Building person hierarchy");
List<Person> all = personDao.all();
Forest<Person, String> forest = toForest(all);
List<PersonHierarchyRecord> records = toHierarchyRecords(forest);
return dsl.transactionResult(configuration -> {
DSLContext txDsl = DSL.using(configuration);
txDsl.deleteFrom(PERSON_HIERARCHY).execute();
return txDsl.batchStore(records).execute();
});
}
use of org.finos.waltz.model.person.Person in project waltz by khartec.
the class InvolvementService method mkInvolvement.
private Involvement mkInvolvement(EntityReference entityReference, EntityInvolvementChangeCommand command) {
checkNotNull(entityReference, "entityReference cannot be null");
checkNotNull(command, "command cannot be null");
Person person = personDao.getById(command.personEntityRef().id());
return Involvement.mkInvolvement(entityReference, person.employeeId(), command.involvementKindId(), "waltz", false);
}
use of org.finos.waltz.model.person.Person in project waltz by khartec.
the class InvolvementImporter method main.
public static void main(String[] args) throws IOException {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(DIConfiguration.class);
ApplicationService applicationService = ctx.getBean(ApplicationService.class);
PersonService personService = ctx.getBean(PersonService.class);
Map<String, Application> appsByExtId = indexBy(a -> ExternalIdValue.orElse(a.assetCode(), null), applicationService.findAll());
Map<String, Person> peopleByName = indexBy(p -> toSurnameFirstname(p.displayName()).toLowerCase(), personService.all());
Siphon<String[]> incorrectSizeSiphon = mkSiphon(arr -> arr.length != 3);
Siphon<Tuple2<String, ?>> unknownAppSiphon = mkSiphon(t -> !appsByExtId.containsKey(t.v1));
Siphon<Tuple2<?, String>> unknownPersonSiphon = mkSiphon(t -> !peopleByName.containsKey(t.v2.toLowerCase()));
Siphon<Tuple2<Application, ?>> retiredAppSiphon = mkSiphon(t -> t.v1.lifecyclePhase() == LifecyclePhase.RETIRED);
List<Tuple2<Application, Person>> r = IOUtilities.streamLines(classLoader.getResourceAsStream(fileName)).map(line -> line.split("\t")).filter(d -> incorrectSizeSiphon.test(d)).map(arr -> Tuple.tuple(arr[1], arr[0])).filter(t -> unknownAppSiphon.test(t)).map(t -> t.map1(extId -> appsByExtId.get(extId))).filter(t -> retiredAppSiphon.test(t)).filter(t -> unknownPersonSiphon.test(t)).map(t -> t.map2(n -> peopleByName.get(n.toLowerCase()))).collect(Collectors.toList());
Set<Application> distinctApps = r.stream().map(t -> t.v1).distinct().collect(Collectors.toSet());
Set<Person> distinctPeople = r.stream().map(t -> t.v2).distinct().collect(Collectors.toSet());
System.out.println("----");
System.out.println("Wrong size count: " + incorrectSizeSiphon.getResults().size());
System.out.println("Apps not found count: " + unknownAppSiphon.getResults().size());
System.out.println("Retired app count: " + retiredAppSiphon.getResults().size());
System.out.println("Person not found count: " + unknownPersonSiphon.getResults().size());
System.out.println("----");
System.out.println("Good record count: " + r.size());
System.out.println("Distinct App count: " + distinctApps.size());
System.out.println("Distinct People count: " + distinctPeople.size());
Map<String, Long> unknownPersonCounts = countBy(Tuple2::v2, unknownPersonSiphon.getResults());
DebugUtilities.dump(unknownPersonCounts);
}
use of org.finos.waltz.model.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;
}
Aggregations