Search in sources :

Example 16 with CsvMapReader

use of org.supercsv.io.CsvMapReader in project mots by motech-implementations.

the class InchargeService method processInchageCsv.

/**
 *.
 * Processes CSV file which contains Incharge list and returns list of errors
 * @param inchargeCsvFile CSV file with Incharge list
 * @return map with row numbers as keys and errors as values.
 * @throws IOException in case of file issues
 */
@SuppressWarnings("PMD.CyclomaticComplexity")
@PreAuthorize(RoleNames.HAS_UPLOAD_CSV_ROLE)
public Map<Integer, String> processInchageCsv(MultipartFile inchargeCsvFile, Boolean selected) throws IOException {
    ICsvMapReader csvMapReader;
    csvMapReader = new CsvMapReader(new InputStreamReader(inchargeCsvFile.getInputStream()), CsvPreference.STANDARD_PREFERENCE);
    final String[] header = csvMapReader.getHeader(true);
    final CellProcessor[] processors = getProcessors();
    Map<String, Object> csvRow;
    Set<String> phoneNumberSet = new HashSet<>();
    Map<Integer, String> errorMap = new HashMap<>();
    while ((csvRow = csvMapReader.read(header, processors)) != null) {
        LOGGER.debug(String.format("lineNo=%s, rowNo=%s, chw=%s", csvMapReader.getLineNumber(), csvMapReader.getRowNumber(), csvRow));
        String facilityId = Objects.toString(csvRow.get("FACILITY_ID"), null);
        Optional<Facility> existingFacility = facilityRepository.findByFacilityId(facilityId);
        if (!existingFacility.isPresent()) {
            errorMap.put(csvMapReader.getLineNumber(), "Facility with this Facility Id does not exist");
            continue;
        }
        String phoneNumber = Objects.toString(csvRow.get("PHU in-charge number"), null);
        if (phoneNumberSet.contains(phoneNumber)) {
            errorMap.put(csvMapReader.getLineNumber(), "Phone number is duplicated in CSV");
            continue;
        }
        if (phoneNumber != null) {
            phoneNumberSet.add(phoneNumber);
        }
        String name = Objects.toString(csvRow.get("PHU in-charge name"), null);
        if (StringUtils.isBlank(name)) {
            errorMap.put(csvMapReader.getLineNumber(), "Incharge name is empty");
            continue;
        }
        String[] nameParts = name.split("([. ])");
        List<String> names = Arrays.stream(nameParts).map(part -> part.length() == 1 ? part + "." : part).collect(Collectors.toList());
        if (names.size() < MIN_NAME_PARTS_NUMBER) {
            errorMap.put(csvMapReader.getLineNumber(), "Incharge second name is empty");
            continue;
        }
        Facility facility = existingFacility.get();
        Optional<Incharge> existingIncharge = inchargeRepository.findByFacilityId(facility.getId());
        String otherName = null;
        if (names.size() > MIN_NAME_PARTS_NUMBER) {
            otherName = StringUtils.join(names.subList(1, names.size() - 1), " ");
        }
        String firstName = names.get(0);
        String secondName = names.get(names.size() - 1);
        if (existingIncharge.isPresent()) {
            Incharge incharge = existingIncharge.get();
            incharge.setFirstName(firstName);
            incharge.setSecondName(secondName);
            incharge.setOtherName(otherName);
            incharge.setPhoneNumber(phoneNumber);
            if (selected) {
                incharge.setSelected(true);
            }
            inchargeRepository.save(incharge);
            continue;
        }
        inchargeRepository.save(new Incharge(firstName, secondName, otherName, phoneNumber, null, facility, selected));
    }
    return errorMap;
}
Also used : ICsvMapReader(org.supercsv.io.ICsvMapReader) Arrays(java.util.Arrays) StringUtils(org.apache.commons.lang.StringUtils) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) Autowired(org.springframework.beans.factory.annotation.Autowired) HashMap(java.util.HashMap) RoleNames(org.motechproject.mots.domain.security.UserPermission.RoleNames) CellProcessor(org.supercsv.cellprocessor.ift.CellProcessor) Facility(org.motechproject.mots.domain.Facility) CsvPreference(org.supercsv.prefs.CsvPreference) FacilityRepository(org.motechproject.mots.repository.FacilityRepository) HashSet(java.util.HashSet) Logger(org.apache.log4j.Logger) InchargeRepository(org.motechproject.mots.repository.InchargeRepository) Incharge(org.motechproject.mots.domain.Incharge) Service(org.springframework.stereotype.Service) Map(java.util.Map) EntityNotFoundException(org.motechproject.mots.exception.EntityNotFoundException) Pageable(org.springframework.data.domain.Pageable) Set(java.util.Set) IOException(java.io.IOException) UUID(java.util.UUID) Page(org.springframework.data.domain.Page) InputStreamReader(java.io.InputStreamReader) Collectors(java.util.stream.Collectors) CsvMapReader(org.supercsv.io.CsvMapReader) Objects(java.util.Objects) List(java.util.List) Optional(java.util.Optional) MultipartFile(org.springframework.web.multipart.MultipartFile) Incharge(org.motechproject.mots.domain.Incharge) InputStreamReader(java.io.InputStreamReader) HashMap(java.util.HashMap) ICsvMapReader(org.supercsv.io.ICsvMapReader) CsvMapReader(org.supercsv.io.CsvMapReader) CellProcessor(org.supercsv.cellprocessor.ift.CellProcessor) Facility(org.motechproject.mots.domain.Facility) ICsvMapReader(org.supercsv.io.ICsvMapReader) HashSet(java.util.HashSet) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 17 with CsvMapReader

use of org.supercsv.io.CsvMapReader in project motech by motech.

the class CsvImporterExporter method importCsv.

private CsvImportResults importCsv(final EntityInfo entityInfo, final Reader reader, CsvImportCustomizer importCustomizer, boolean continueOnError, boolean clearData) {
    final MotechDataService dataService = DataServiceHelper.getDataService(getBundleContext(), entityInfo.getClassName());
    Map<String, FieldDto> fieldCacheMap = new HashMap<>();
    if (clearData) {
        dataService.deleteAll();
    }
    try (CsvMapReader csvMapReader = new CsvMapReader(reader, CsvPreference.STANDARD_PREFERENCE)) {
        List<Long> newInstanceIDs = new ArrayList<>();
        List<Long> updatedInstanceIDs = new ArrayList<>();
        Map<Integer, String> exceptions = new HashMap<>();
        Map<String, String> row;
        int rowNum = 0;
        final String[] headers = csvMapReader.getHeader(true);
        while ((row = csvMapReader.read(headers)) != null) {
            rowNum++;
            try {
                // import a row
                RowImportResult rowImportResult = importInstanceFromRow(entityInfo.getEntity(), row, headers, fieldCacheMap, entityInfo.getFieldDtos(), dataService, importCustomizer);
                Long id = rowImportResult.getId();
                // put its ID in the correct list
                if (rowImportResult.isNewInstance()) {
                    newInstanceIDs.add(id);
                } else {
                    updatedInstanceIDs.add(id);
                }
            } catch (RuntimeException e) {
                if (continueOnError) {
                    exceptions.put(rowNum, e.getMessage());
                } else {
                    throw e;
                }
            }
        }
        return new CsvImportResults(entityInfo.getEntity(), newInstanceIDs, updatedInstanceIDs, exceptions);
    } catch (IOException e) {
        throw new CsvImportException("IO Error when importing CSV", e);
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) MotechDataService(org.motechproject.mds.service.MotechDataService) CsvImportResults(org.motechproject.mds.dto.CsvImportResults) CsvImportException(org.motechproject.mds.exception.csv.CsvImportException) CsvMapReader(org.supercsv.io.CsvMapReader) FieldDto(org.motechproject.mds.dto.FieldDto)

Aggregations

CsvMapReader (org.supercsv.io.CsvMapReader)17 InputStreamReader (java.io.InputStreamReader)11 IOException (java.io.IOException)8 Reader (java.io.Reader)5 ArrayList (java.util.ArrayList)5 ICsvMapReader (org.supercsv.io.ICsvMapReader)5 HashMap (java.util.HashMap)4 CellProcessor (org.supercsv.cellprocessor.ift.CellProcessor)4 HashSet (java.util.HashSet)3 CsvPreference (org.supercsv.prefs.CsvPreference)3 BufferedReader (java.io.BufferedReader)2 InputStream (java.io.InputStream)2 Map (java.util.Map)2 ReusableStringReader (org.apache.apex.malhar.lib.util.ReusableStringReader)2 Country (org.opensextant.data.Country)2 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)2 Optional (org.supercsv.cellprocessor.Optional)2 CommentStartsWith (org.supercsv.comment.CommentStartsWith)2 AmazonEC2ClientBuilder (com.amazonaws.services.ec2.AmazonEC2ClientBuilder)1 AwsAccountDetailDto (com.vmware.photon.controller.model.adapters.aws.dto.AwsAccountDetailDto)1