use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvMapper in project xm-ms-entity by xm-online.
the class EntityToCsvConverterUtils method toCsv.
/**
* Writes entities to csv file.
* @param o the object which serialize to csv
* @param clazz the class from which csv schema based would be
* @return byte array of csv file
*/
public static byte[] toCsv(Object o, Class clazz) {
if (o == null) {
log.warn("Passed empty object for serialize, therefore return empty byte array which represents csv file");
return new byte[0];
}
CsvMapper mapper = createDefaultCsvMapper();
ObjectWriter csvWriter = mapper.writer(clazz == null ? CsvSchema.emptySchema() : createCsvSchemaBasedOnClass(mapper, clazz));
try {
return csvWriter.writeValueAsBytes(o);
} catch (JsonProcessingException e) {
throw new IllegalStateException("Exception while writing data to csv file", e);
}
}
use of org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvMapper in project perun by CESNET.
the class ExtSourceCSV method csvParsing.
/**
* Parse CSV file into list of our standard "subject" (aka candidates)
*
* @param query query to check CSV file content against
* @param maxResults limit results to X row or 0 for unlimited
* @return List of Maps representing subjects for synchronization (perun_attr/constant = value).
* @throws InternalErrorException When implementation fails
* @throws IOException When reading CSV file fails
*/
private List<Map<String, String>> csvParsing(String query, int maxResults) throws IOException {
List<Map<String, String>> subjects = new ArrayList<>();
Map<String, String> attributeMapping = getCsvMapping();
File csvFile = new File(file);
CsvMapper mapper = new CsvMapper();
// use first row as header; otherwise defaults are fine
CsvSchema schema = CsvSchema.emptySchema().withHeader();
MappingIterator<Map<String, String>> it = mapper.readerFor(Map.class).with(schema).readValues(csvFile);
while (it.hasNext()) {
Map<String, String> rowAsMap = it.next();
if (compareRowToQuery(rowAsMap, query)) {
Map<String, String> singleSubject = new HashMap<>();
// translate CSV column names to perun attribute URNs
for (String key : rowAsMap.keySet()) {
singleSubject.put(attributeMapping.get(key), rowAsMap.get(key));
}
subjects.add(singleSubject);
// break if we required limited response
if (maxResults > 0) {
if (subjects.size() >= maxResults) {
break;
}
}
}
}
return subjects;
}
use of org.apache.flink.shaded.jackson2.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 org.apache.flink.shaded.jackson2.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 org.apache.flink.shaded.jackson2.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