use of com.fasterxml.jackson.dataformat.csv.CsvMapper in project perun by CESNET.
the class MembersManagerBlImpl method createSponsoredMembersFromCSV.
@Override
public List<Map<String, String>> createSponsoredMembersFromCSV(PerunSession sess, Vo vo, String namespace, List<String> data, String header, User sponsor, LocalDate validityTo, boolean sendActivationLink, String url, Validation validation, List<Group> groups) {
List<Map<String, String>> totalResult = new ArrayList<>();
Set<Member> createdMembers = new HashSet<>();
List<String> dataWithHeader = new ArrayList<>();
dataWithHeader.add(header);
dataWithHeader.addAll(data);
MappingIterator<Map<String, String>> dataIterator;
try {
byte[] bytes = String.join("\n", dataWithHeader).getBytes(StandardCharsets.UTF_8);
dataIterator = new CsvMapper().readerFor(Map.class).with(CsvSchema.emptySchema().withHeader().withColumnSeparator(';')).readValues(bytes);
} catch (IOException e) {
log.error("Failed to parse received CSV data.", e);
throw new InternalErrorException("Failed to parse received CSV data.", e);
}
int processedCounter = 0;
while (dataIterator.hasNext()) {
Map<String, String> singleRow = dataIterator.next();
// async validation must be performed at the end, not directly during member creation
Validation localValidation = (Objects.equals(Validation.ASYNC, validation)) ? Validation.NONE : validation;
Map<String, Object> originalResult = createSingleSponsoredMemberFromCSV(sess, vo, namespace, singleRow, sponsor, validityTo, sendActivationLink, url, localValidation, groups);
// convert result to expected "type" for outer API
Map<String, String> newResult = new HashMap<>();
if (OK.equals(originalResult.get(STATUS))) {
newResult.put(STATUS, (String) originalResult.get(STATUS));
newResult.put(LOGIN, (String) originalResult.get(LOGIN));
newResult.put(PASSWORD, (String) originalResult.get(PASSWORD));
createdMembers.add((Member) originalResult.get(MEMBER));
} else {
// error when creating
newResult.put(STATUS, (String) originalResult.get(STATUS));
}
newResult.put(NAME, data.get(processedCounter++));
totalResult.add(newResult);
}
// perform async validation if necessary
if (Objects.equals(Validation.ASYNC, validation)) {
for (Member member : createdMembers) {
getPerunBl().getMembersManagerBl().validateMemberAsync(sess, member);
}
}
return totalResult;
}
use of com.fasterxml.jackson.dataformat.csv.CsvMapper in project dhis2-core by dhis2.
the class JacksonCsvUtils method toCsv.
/**
* Writes the given response to the given output stream as CSV using
* {@link CsvMapper}. The schema is inferred from the given type using
* {@CsvSchema}. A header line is included.
*
* @param value the value to write.
* @param out the {@link OutputStream} to write to.
* @throws IOException if the write operation fails.
*/
public static void toCsv(Object value, Class<?> type, OutputStream out) throws IOException {
CsvMapper csvMapper = JacksonObjectMapperConfig.csvMapper;
CsvSchema schema = csvMapper.schemaFor(type).withHeader();
ObjectWriter writer = csvMapper.writer(schema);
writer.writeValue(out, value);
}
use of com.fasterxml.jackson.dataformat.csv.CsvMapper in project dhis2-core by dhis2.
the class AbstractFullReadOnlyController method getObjectListCsv.
@GetMapping(produces = "application/csv")
public void getObjectListCsv(@RequestParam Map<String, String> rpParameters, OrderParams orderParams, @CurrentUser User currentUser, @RequestParam(defaultValue = ",") char separator, @RequestParam(defaultValue = "false") boolean skipHeader, HttpServletResponse response) throws IOException {
List<Order> orders = orderParams.getOrders(getSchema());
List<String> fields = Lists.newArrayList(contextService.getParameterValues("fields"));
List<String> filters = Lists.newArrayList(contextService.getParameterValues("filter"));
WebOptions options = new WebOptions(rpParameters);
WebMetadata metadata = new WebMetadata();
if (fields.isEmpty()) {
fields.addAll(Preset.defaultPreset().getFields());
}
// only support metadata
if (!getSchema().isMetadata()) {
throw new HttpClientErrorException(HttpStatus.NOT_FOUND);
}
if (!aclService.canRead(currentUser, getEntityClass())) {
throw new ReadAccessDeniedException("You don't have the proper permissions to read objects of this type.");
}
List<T> entities = getEntityList(metadata, options, filters, orders);
CsvSchema schema;
CsvSchema.Builder schemaBuilder = CsvSchema.builder();
List<Property> properties = new ArrayList<>();
for (String field : fields) {
// then the group[id] part is simply ignored.
for (String splitField : field.split(",")) {
Property property = getSchema().getProperty(splitField);
if (property == null || !property.isSimple()) {
continue;
}
schemaBuilder.addColumn(property.getName());
properties.add(property);
}
}
schema = schemaBuilder.build().withColumnSeparator(separator);
if (!skipHeader) {
schema = schema.withHeader();
}
CsvMapper csvMapper = new CsvMapper();
csvMapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
List<Map<String, Object>> csvObjects = entities.stream().map(e -> {
Map<String, Object> map = new HashMap<>();
for (Property property : properties) {
Object value = ReflectionUtils.invokeMethod(e, property.getGetterMethod());
map.put(property.getName(), value);
}
return map;
}).collect(toList());
csvMapper.writer(schema).writeValue(response.getWriter(), csvObjects);
response.flushBuffer();
}
Aggregations