Example usage for org.apache.poi.ss.usermodel Workbook getNumberOfSheets

List of usage examples for org.apache.poi.ss.usermodel Workbook getNumberOfSheets

Introduction

In this page you can find the example usage for org.apache.poi.ss.usermodel Workbook getNumberOfSheets.

Prototype

int getNumberOfSheets();

Source Link

Document

Get the number of spreadsheets in the workbook

Usage

From source file:org.interpss.util.reader.ExcelFileReader.java

License:Open Source License

/**
 * Load the spreadsheet and process the row, one row at a time,
 * using the File processor //ww w  .  j a  v a  2s.c  o m
 * 
 * @param procer
 * @return sheet name
 */
public String processFile(IExcelFileProcessor<Row> procer) throws InterpssException {
    final File file = new File(this.filepath);
    Workbook wb;
    try {
        final InputStream stream = new FileInputStream(file);
        wb = WorkbookFactory.create(stream);
    } catch (Exception e) {
        ipssLogger.severe(e.toString());
        throw new InterpssException(e.toString());
    }
    if (wb.getNumberOfSheets() <= this.indexSheet) // index starts from 0
        throw new InterpssException(this.sheetname + " does not exit in " + this.filepath);
    Sheet sheet = wb.getSheetAt(this.indexSheet);
    Iterator<Row> rowIter = sheet.rowIterator();
    while (rowIter.hasNext()) {
        procer.processRow(rowIter.next());
    }
    return sheet.getSheetName();
}

From source file:org.joeffice.spreadsheet.SpreadsheetComponent.java

License:Apache License

public void load(Workbook workbook) {
    this.workbook = workbook;
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        String sheetName = workbook.getSheetName(i);
        JPanel sheetPanel = new SheetComponent(sheet, this);
        addTab(sheetName, sheetPanel);//w  w w  .ja v  a  2  s  .  c  o  m
    }
    setSelectedIndex(workbook.getActiveSheetIndex());
    formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
}

From source file:org.jplus.compare.excel.service.CompareService.java

public static List<String> getSheetNames(String excelPath) {
    List<String> names = new ArrayList<String>();
    InputStream inputStream = null;
    try {//from  w  ww  .j a  v  a  2s  .com
        File file = new File(excelPath);
        inputStream = new FileInputStream(file);
        Workbook workbook = new HSSFWorkbook(inputStream);
        int numberOfSheets = workbook.getNumberOfSheets();
        for (int i = 0; i < numberOfSheets; i++) {
            names.add(workbook.getSheetName(i));
        }
    } catch (IOException ex) {
        Logger.getLogger(CompareService.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException ex) {
                Logger.getLogger(CompareService.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    return names;
}

From source file:org.mifos.dmt.excel.CreateExcel.java

License:Open Source License

public Workbook generate(String baseTemplate, DMTMigrationParams params)
        throws InvalidFormatException, IOException, DMTException {
    InputStream inp = new FileInputStream(baseTemplate);

    Workbook wb = WorkbookFactory.create(inp);
    ArrayList<String> sheetSpec = readSheetSpec(params);
    for (int i = wb.getNumberOfSheets(); i > 0; i--) {
        String sheetName = wb.getSheetName(i - 1);
        if (sheetSpec.contains(sheetName)) {
            wb.removeSheetAt(i - 1);/*from w w  w .jav  a2 s.c  o  m*/
        } else {
            logger.info("Adding sheet : " + sheetName);
        }

    }
    Sheet configSheet = wb.getSheetAt(0);
    editConfigSheet(configSheet);

    return wb;
}

From source file:org.netxilia.impexp.impl.ExcelImportService.java

License:Open Source License

@Override
public List<SheetFullName> importSheets(INetxiliaSystem workbookProcessor, WorkbookId workbookName,
        InputStream is, IProcessingConsole console) throws ImportException {
    List<SheetFullName> sheetNames = new ArrayList<SheetFullName>();
    try {// ww  w. ja  v  a 2s  .c o  m
        log.info("Starting import:" + workbookName);
        Workbook poiWorkbook = new HSSFWorkbook(is);
        IWorkbook nxWorkbook = workbookProcessor.getWorkbook(workbookName);
        log.info("Read POI");

        NetxiliaStyleResolver styleResolver = new NetxiliaStyleResolver(
                styleService.getStyleDefinitions(workbookName));

        HSSFPalette palette = ((HSSFWorkbook) poiWorkbook).getCustomPalette();

        for (int s = 0; s < poiWorkbook.getNumberOfSheets(); ++s) {
            Sheet poiSheet = poiWorkbook.getSheetAt(s);

            SheetFullName sheetName = new SheetFullName(workbookName,
                    getNextFreeSheetName(nxWorkbook, poiSheet.getSheetName()));
            ISheet nxSheet = null;
            BlockCellCommandBuilder cellCommandBuilder = new BlockCellCommandBuilder();
            try {
                List<CellReference> refreshCells = new ArrayList<CellReference>();

                for (Row poiRow : poiSheet) {
                    if (poiRow.getRowNum() % 100 == 0) {
                        log.info("importing row #" + poiRow.getRowNum());
                    }
                    for (Cell poiCell : poiRow) {
                        if (nxSheet == null) {
                            // lazy creation
                            while (true) {
                                try {
                                    nxSheet = nxWorkbook.addNewSheet(sheetName.getSheetName(),
                                            SheetType.normal);
                                    nxSheet.setRefreshEnabled(false);
                                    break;
                                } catch (AlreadyExistsException e) {
                                    // may happen is simultaneous imports take place
                                    sheetName = new SheetFullName(workbookName,
                                            getNextFreeSheetName(nxWorkbook, poiSheet.getSheetName()));
                                }
                            }
                        }

                        CellReference ref = new CellReference(sheetName.getSheetName(), poiRow.getRowNum(),
                                poiCell.getColumnIndex());
                        try {
                            ICellCommand cmd = copyCell(poiCell, ref, palette, styleResolver);
                            if (cmd != null) {
                                cellCommandBuilder.command(cmd);
                            }
                            if (poiCell.getCellType() == Cell.CELL_TYPE_FORMULA) {
                                refreshCells.add(ref);
                            }

                        } catch (Exception e) {
                            if (console != null) {
                                console.println("Could import cell " + ref + ":" + poiCell + ":" + e);
                            }
                            log.error("Could import cell " + ref + ":" + poiCell + ":" + e, e);
                        }
                    }

                    if (poiRow.getRowNum() % 100 == 0 && !cellCommandBuilder.isEmpty()) {
                        nxSheet.sendCommandNoUndo(cellCommandBuilder.build());
                        cellCommandBuilder = new BlockCellCommandBuilder();
                    }
                }

                if (nxSheet == null) {
                    // empty sheet
                    continue;
                }
                if (!cellCommandBuilder.isEmpty()) {
                    nxSheet.sendCommandNoUndo(cellCommandBuilder.build());
                }
                // add the columns after as is not very clear how to get the number of cols in poi
                for (int c = 0; c < nxSheet.getDimensions().getNonBlocking().getColumnCount(); ++c) {
                    int width = 50;
                    try {
                        width = PoiUtils.widthUnits2Pixel(poiSheet.getColumnWidth(c));
                        nxSheet.sendCommand(ColumnCommands.width(Range.range(c), width));
                    } catch (NullPointerException ex) {
                        // ignore it
                        // NPE in at org.apache.poi.hssf.model.Sheet.getColumnWidth(Sheet.java:998)
                        // defaultColumnWidth can be null !?
                    }

                    CellStyle poiStyle = poiSheet.getColumnStyle(c);
                    if (poiStyle == null) {
                        continue;
                    }
                    Styles styles = PoiUtils.poiStyle2Netxilia(poiStyle,
                            poiSheet.getWorkbook().getFontAt(poiStyle.getFontIndex()), palette, styleResolver);
                    if (styles != null) {
                        nxSheet.sendCommand(ColumnCommands.styles(Range.range(c), styles));
                    }
                }

                // merge
                List<AreaReference> spans = new ArrayList<AreaReference>(poiSheet.getNumMergedRegions());
                for (int i = 0; i < poiSheet.getNumMergedRegions(); ++i) {
                    CellRangeAddress poiSpan = poiSheet.getMergedRegion(i);
                    spans.add(new AreaReference(sheetName.getSheetName(), poiSpan.getFirstRow(),
                            poiSpan.getFirstColumn(), poiSpan.getLastRow(), poiSpan.getLastColumn()));
                }
                nxSheet.sendCommand(SheetCommands.spans(spans));

                // refresh all the cells now
                nxSheet.setRefreshEnabled(true);
                nxSheet.sendCommandNoUndo(moreCellCommands.refresh(refreshCells, false));

            } finally {
                if (nxSheet != null) {
                    sheetNames.add(sheetName);
                }
            }
        }
    } catch (IOException e) {
        throw new ImportException(null, "Cannot open workbook:" + e, e);
    } catch (StorageException e) {
        throw new ImportException(null, "Error storing sheet:" + e, e);
    } catch (NotFoundException e) {
        throw new ImportException(null, "Cannot find workbook:" + e, e);
    } catch (NetxiliaResourceException e) {
        throw new ImportException(null, e.getMessage(), e);
    } catch (NetxiliaBusinessException e) {
        throw new ImportException(null, e.getMessage(), e);
    }

    return sheetNames;
}

From source file:org.nuclos.server.report.export.ExcelExport.java

License:Open Source License

private NuclosFile export(Workbook wb, String sheetname, ResultVO result, List<ReportFieldDefinition> fields,
        String name) throws NuclosReportException {
    sheetname = sheetname != null ? sheetname
            : SpringLocaleDelegate.getInstance().getMessage("XLSExport.2", "Daten aus Nucleus");
    Sheet s = wb.getSheet(sheetname);//from   w  ww.j  av a2  s .c om
    if (s == null) {
        s = wb.createSheet(sheetname);
    }

    int iRowNum = 0;
    int iColumnNum = 0;
    CreationHelper createHelper = wb.getCreationHelper();

    Row row = getRow(s, 0);

    Map<Integer, CellStyle> styles = new HashMap<Integer, CellStyle>();

    for (Iterator<ResultColumnVO> i = result.getColumns().iterator(); i.hasNext(); iColumnNum++) {
        i.next();
        Cell cell = getCell(row, iColumnNum);
        cell.setCellValue(fields.get(iColumnNum).getLabel());

        CellStyle style = wb.createCellStyle();
        String f = getFormat(fields.get(iColumnNum));
        if (f != null) {
            style.setDataFormat(createHelper.createDataFormat().getFormat(f));
        }
        styles.put(iColumnNum, style);
    }
    iRowNum++;

    // export data
    for (int i = 0; i < result.getRows().size(); i++, iRowNum++) {
        iColumnNum = 0;
        Object[] dataRow = result.getRows().get(i);
        row = getRow(s, iRowNum);
        for (int j = 0; j < result.getColumns().size(); j++, iColumnNum++) {
            Object value = dataRow[j];
            Cell c = getCell(row, iColumnNum);
            ReportFieldDefinition def = fields.get(j);

            if (value != null) {
                if (value instanceof List) {
                    final StringBuilder sb = new StringBuilder();
                    for (Iterator<?> it = ((List<?>) value).iterator(); it.hasNext();) {
                        final Object v = it.next();
                        sb.append(CollectableFieldFormat.getInstance(def.getJavaClass())
                                .format(def.getOutputformat(), v));
                        if (it.hasNext()) {
                            sb.append(", ");
                        }
                    }
                    c.setCellValue(sb.toString());
                } else {
                    if (Date.class.isAssignableFrom(def.getJavaClass())) {
                        c.setCellStyle(styles.get(iColumnNum));
                        c.setCellValue((Date) value);
                    } else if (Integer.class.isAssignableFrom(def.getJavaClass())) {
                        c.setCellStyle(styles.get(iColumnNum));
                        c.setCellValue((Integer) value);
                    } else if (Double.class.isAssignableFrom(def.getJavaClass())) {
                        c.setCellStyle(styles.get(iColumnNum));
                        c.setCellValue((Double) value);
                    } else {
                        c.setCellValue(String.valueOf(value));
                    }
                }
            } else {
                c.setCellValue("");
            }
        }
    }

    try {
        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
        for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
            Sheet sheet = wb.getSheetAt(sheetNum);
            for (Row r : sheet) {
                for (Cell c : r) {
                    if (c.getCellType() == Cell.CELL_TYPE_FORMULA) {
                        evaluator.evaluateFormulaCell(c);
                    }
                }
            }
        }
    } catch (Exception e) {
    } // ignore any Exception

    ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
    try {
        wb.write(baos);
        return new NuclosFile(name + format.getExtension(), baos.toByteArray());
    } catch (IOException e) {
        throw new NuclosReportException(e);
    } finally {
        try {
            baos.close();
        } catch (IOException e) {
        }
    }
}

From source file:org.ojbc.adapters.analyticsstaging.custody.service.DescriptionCodeLookupFromExcelService.java

License:RPL License

private void loadMapOfCodeMaps(String codeTableExcelFilePath) throws FileNotFoundException, IOException {
    log.info("Recache code table maps.");

    mapOfCodeMaps = new HashMap<String, Map<String, Integer>>();

    FileInputStream inputStream = new FileInputStream(new File(codeTableExcelFilePath));

    Workbook workbook = new XSSFWorkbook(inputStream);

    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
        Sheet sheet = workbook.getSheetAt(i);

        Map<String, Integer> codePkMap = new HashMap<String, Integer>();
        for (int j = 1; j <= sheet.getLastRowNum(); j++) {
            Row row = sheet.getRow(j);/*  www .j  a v a 2 s .co m*/

            if (row.getCell(row.getLastCellNum() - 1).getCellType() == Cell.CELL_TYPE_NUMERIC) {
                row.getCell(row.getLastCellNum() - 1).setCellType(Cell.CELL_TYPE_STRING);
            }

            String codeOrDescription = StringUtils
                    .upperCase(row.getCell(row.getLastCellNum() - 1).getStringCellValue());
            Integer pkId = Double.valueOf(row.getCell(0).getNumericCellValue()).intValue();
            codePkMap.put(codeOrDescription, pkId);
        }

        mapOfCodeMaps.put(sheet.getSheetName(), codePkMap);

    }

    workbook.close();
    inputStream.close();
}

From source file:org.ojbc.adapters.analyticsstaging.custody.service.SimpleExcelReaderExample.java

License:RPL License

public static void main(String[] args) throws IOException {
    Map<String, Map<String, Integer>> mapOfCodeMaps = new HashMap<String, Map<String, Integer>>();

    String excelFilePath = "src/test/resources/codeSpreadSheets/PimaCountyAnalyticsCodeTables.xlsx";
    FileInputStream inputStream = new FileInputStream(new File(excelFilePath));

    Workbook workbook = new XSSFWorkbook(inputStream);

    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
        Sheet sheet = workbook.getSheetAt(i);
        System.out.println("Sheet Name: " + sheet.getSheetName());

        Map<String, Integer> codePkMap = new HashMap<String, Integer>();
        for (int j = 1; j <= sheet.getLastRowNum(); j++) {
            Row row = sheet.getRow(j);/*w w w .j a  v a 2s.c o m*/

            if (row.getCell(row.getLastCellNum() - 1).getCellType() == Cell.CELL_TYPE_NUMERIC) {
                row.getCell(row.getLastCellNum() - 1).setCellType(Cell.CELL_TYPE_STRING);
            }

            String codeOrDescription = row.getCell(row.getLastCellNum() - 1).getStringCellValue();

            Integer pkId = Double.valueOf(row.getCell(0).getNumericCellValue()).intValue();
            codePkMap.put(codeOrDescription, pkId);
        }

        mapOfCodeMaps.put(sheet.getSheetName(), codePkMap);

    }

    workbook.close();
    inputStream.close();
}

From source file:org.ojbc.adapters.analyticsstaging.custody.service.SqlScriptFromExcelGenerator.java

License:RPL License

private static void generatePolulateCodeTableScript(String sqlScriptPath, String excelFilePath,
        boolean isSqlServerInsert) throws FileNotFoundException, IOException {
    Path adamsSqlPath = Paths.get(sqlScriptPath);

    FileInputStream inputStream = new FileInputStream(new File(excelFilePath));

    Workbook workbook = new XSSFWorkbook(inputStream);
    StringBuilder sb = new StringBuilder();
    sb.append("/*\n "/*  w  w  w. j a va2 s. c o  m*/
            + "* Unless explicitly acquired and licensed from Licensor under another license, the contents of\n "
            + "* this file are subject to the Reciprocal Public License (\"RPL\") Version 1.5, or subsequent\n "
            + "* versions as allowed by the RPL, and You may not copy or use this file in either source code\n "
            + "* or executable form, except in compliance with the terms and conditions of the RPL\n " + "* \n "
            + "* All software distributed under the RPL is provided strictly on an \"AS IS\" basis, WITHOUT\n "
            + "* WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND LICENSOR HEREBY DISCLAIMS ALL SUCH\n "
            + "* WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n "
            + "* PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific language\n "
            + "* governing rights and limitations under the RPL.\n " + "*\n "
            + "* http://opensource.org/licenses/RPL-1.5\n " + "*\n "
            + "* Copyright 2012-2015 Open Justice Broker Consortium\n " + "*/\n");

    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
        Sheet sheet = workbook.getSheetAt(i);

        if (isSqlServerInsert) {
            sb.append("SET IDENTITY_INSERT dbo." + sheet.getSheetName() + " ON;\n");
        }
        String idColumnName = sheet.getRow(0).getCell(0).getStringCellValue();
        String descriptionColumnName = sheet.getRow(0).getCell(1).getStringCellValue();

        System.out.println("descriptionColumnName: " + descriptionColumnName);
        String baseString = "insert into " + sheet.getSheetName() + " (" + idColumnName + ", "
                + descriptionColumnName + ") values (";
        for (int j = 1; j <= sheet.getLastRowNum(); j++) {
            Row row = sheet.getRow(j);

            String description = row.getCell(1).getStringCellValue();
            Integer pkId = Double.valueOf(row.getCell(0).getNumericCellValue()).intValue();

            String insertString = baseString + "'" + pkId + "', " + "'" + description.replace("'", "''")
                    + "');\n";
            sb.append(insertString);
        }

        if (isSqlServerInsert) {
            sb.append("SET IDENTITY_INSERT dbo." + sheet.getSheetName() + " OFF;\n");
        }
    }

    workbook.close();
    inputStream.close();

    try (BufferedWriter writer = Files.newBufferedWriter(adamsSqlPath)) {
        writer.write(sb.toString());
    }

    System.out.println("Sql script " + sqlScriptPath + " generated. ");
}

From source file:org.openmrs.module.kenyaemr.fragment.controller.patient.ImportPatientsListFragmentController.java

License:Open Source License

@SuppressWarnings("deprecation")
public Object submit(HttpServletRequest request) throws Exception {
    // Constant values used across all the code

    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    MultipartFile multipartModuleFile = multipartRequest.getFile("upload");
    InputStream inputStream = multipartModuleFile.getInputStream();
    Workbook workbook = new XSSFWorkbook(inputStream);

    Sheet firstSheet = workbook.getSheetAt(0);
    Iterator<Row> iterator = firstSheet.iterator();
    int rowCount = 0;

    while (iterator.hasNext()) {
        Row nextRow = iterator.next();/*from   w w  w  . jav a  2 s .  com*/
        Iterator<Cell> cellIterator = nextRow.cellIterator();
        try {
            if (rowCount > 0) {

                ArrayList<String> legacyData = new ArrayList<String>();
                int columnCount = 0;

                while (cellIterator.hasNext() && columnCount < 31) {
                    Cell cell = cellIterator.next();
                    switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_STRING:
                        legacyData.add(cell.getColumnIndex(), cell.getStringCellValue().trim());
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        if (HSSFDateUtil.isCellDateFormatted(cell)) {
                            legacyData.add(cell.getColumnIndex(), String.valueOf(cell.getDateCellValue()));

                        } else {

                            legacyData.add(cell.getColumnIndex(),
                                    NumberToTextConverter.toText(cell.getNumericCellValue()));
                        }
                        break;
                    case Cell.CELL_TYPE_BLANK:
                        legacyData.add(cell.getColumnIndex(), null);
                        break;
                    }
                    columnCount++;
                }
                int i = 0;
                for (String s : legacyData) {
                    i++;
                }
                /*
                 * Start Patient Creation
                 */
                try {
                    if (legacyData.get(0) != null) {
                        Patient toSave = new Patient(); // Creating a new
                        // patient
                        // and
                        // person
                        PersonName personName = new PersonName();
                        PersonAddress personAddress = new PersonAddress();
                        Location location;

                        SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
                        Date dateBith = new Date();
                        try {
                            dateBith = (Date) formatter.parse(legacyData.get(2));

                        } catch (ParseException e) {
                            e.printStackTrace();
                        }

                        toSave.setGender(legacyData.get(3));
                        toSave.setBirthdate(dateBith);
                        toSave.setBirthdateEstimated(false);
                        toSave.setDead(false);
                        /*
                         * toSave.setDeathDate(deathDate);
                         * toSave.setCauseOfDeath(dead ? Dictionary
                         * .getConcept(CAUSE_OF_DEATH_PLACEHOLDER) : null);
                         */

                        if (legacyData.get(1) != "") {
                            personName.setGivenName(legacyData.get(1));

                            personName.setFamilyName("(NULL)");
                            toSave.addName(personName);
                        }

                        // toSave.
                        personAddress.setAddress1(legacyData.get(9));
                        personAddress.setCountyDistrict(legacyData.get(10));
                        toSave.addAddress(personAddress);

                        PatientWrapper wrapper = new PatientWrapper(toSave);

                        wrapper.getPerson().setTelephoneContact(legacyData.get(8));

                        location = Context.getService(KenyaEmrService.class).getDefaultLocation();

                        if (legacyData.get(4) != null) {
                            wrapper.setPreArtRegistrationNumber(legacyData.get(4), location);
                        }

                        if (legacyData.get(6) != null) {
                            wrapper.setArtRegistrationNumber(legacyData.get(6), location);
                        }

                        if (legacyData.get(5) != null) {
                            wrapper.setNapArtRegistrationNumber(legacyData.get(5), location);
                        }

                        // Algorithm to generate system generated patient
                        // Identifier
                        Calendar now = Calendar.getInstance();
                        String shortName = Context.getAdministrationService()
                                .getGlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_PATIENT_IDENTIFIER_PREFIX);

                        String noCheck = shortName + String.valueOf(now.get(Calendar.YEAR)).substring(2, 4)
                                + String.valueOf(now.get(Calendar.MONTH) + 1)
                                + String.valueOf(now.get(Calendar.DATE))

                                + String.valueOf(now.get(Calendar.HOUR))
                                + String.valueOf(now.get(Calendar.MINUTE))
                                + String.valueOf(now.get(Calendar.SECOND))
                                + String.valueOf(new Random().nextInt(9999 - 999 + 1));

                        wrapper.setSystemPatientId(noCheck + "-" + generateCheckdigit(noCheck), location);

                        wrapper.setNextOfKinName(legacyData.get(11));
                        wrapper.setNextOfKinContact(legacyData.get(12));

                        if (legacyData.get(13) != null) {
                            wrapper.setPreviousHivTestStatus("Yes");
                            wrapper.setPreviousHivTestPlace(legacyData.get(14));

                            Date capturedTestDate = new Date();
                            try {
                                capturedTestDate = formatter.parse(legacyData.get(13));

                            } catch (ParseException e) {
                                e.printStackTrace();
                            }

                            DateFormat testDate = new SimpleDateFormat("dd-MMMM-yyyy");
                            wrapper.setPreviousHivTestDate(testDate.format(capturedTestDate));
                        } else {
                            wrapper.setPreviousHivTestStatus("No");
                        }

                        wrapper.setPreviousClinicName(legacyData.get(16));

                        // Make sure everyone gets an OpenMRS ID
                        PatientIdentifierType openmrsIdType = MetadataUtils.existing(
                                PatientIdentifierType.class, CommonMetadata._PatientIdentifierType.OPENMRS_ID);
                        PatientIdentifier openmrsId = toSave.getPatientIdentifier(openmrsIdType);

                        if (openmrsId == null) {
                            String generated = Context.getService(IdentifierSourceService.class)
                                    .generateIdentifier(openmrsIdType, "Registration");
                            openmrsId = new PatientIdentifier(generated, openmrsIdType, location);
                            toSave.addIdentifier(openmrsId);

                            if (!toSave.getPatientIdentifier().isPreferred()) {
                                openmrsId.setPreferred(true);
                            }
                        }

                        Patient ret = Context.getPatientService().savePatient(toSave);

                        // Explicitly save all identifier objects including
                        // voided
                        for (PatientIdentifier identifier : toSave.getIdentifiers()) {
                            Context.getPatientService().savePatientIdentifier(identifier);
                        }

                        /*
                         * End Patient Creation
                         */

                        /**
                         ** Start : Visit, Encounter and Program creation for
                         * Patient entered as Legacy Data Visit start date
                         **/
                        Date curDate = new Date();
                        Date dateVisit = null;
                        try {
                            dateVisit = formatter.parse(legacyData.get(18));

                        } catch (ParseException e) {
                            e.printStackTrace();
                        }

                        DateFormat visitDateInExcel = new SimpleDateFormat("dd-MMM-yyyy");
                        String dateCheck = visitDateInExcel.format(dateVisit);
                        SimpleDateFormat mysqlDateTimeFormatter = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");

                        if (legacyData.get(18) != null) {
                            try {
                                dateVisit = mysqlDateTimeFormatter.parse(dateCheck + " " + curDate.getHours()
                                        + ":" + curDate.getMinutes() + ":" + curDate.getSeconds());
                            } catch (ParseException e) {
                                dateVisit = curDate;
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }

                        Visit visit = new Visit();
                        visit.setPatient(ret);
                        visit.setStartDatetime(dateVisit);
                        visit.setVisitType(
                                MetadataUtils.existing(VisitType.class, CommonMetadata._VisitType.OUTPATIENT));
                        visit.setLocation(Context.getService(KenyaEmrService.class).getDefaultLocation());

                        VisitAttributeType attrType = Context.getService(VisitService.class)
                                .getVisitAttributeTypeByUuid(CommonMetadata._VisitAttributeType.NEW_PATIENT);
                        if (attrType != null) {
                            VisitAttribute attr = new VisitAttribute();
                            attr.setAttributeType(attrType);
                            attr.setVisit(visit);
                            attr.setDateCreated(curDate);
                            attr.setValue(true);
                            visit.addAttribute(attr);
                        }

                        Visit visitSave = Context.getVisitService().saveVisit(visit);

                        // With value text and Date
                        if (legacyData.get(15) != null) {

                            Date dateTransfer = null;
                            if (legacyData.get(17) != null) {
                                try {
                                    dateTransfer = formatter.parse(legacyData.get(17));

                                } catch (ParseException e) {
                                    e.printStackTrace();
                                }
                            }

                            Concept enrollementConcept = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(15)));

                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.METHOD_OF_ENROLLMENT),
                                    enrollementConcept, "", dateTransfer, null, visitSave);
                        }

                        if (legacyData.get(7) != null) {
                            Concept ingoConcept = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(7)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.INGO_NAME),
                                    ingoConcept, "", null, null, visitSave);
                        }

                        EncounterType hivEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                HivMetadata._EncounterType.HIV_ENROLLMENT);

                        EncounterType registrationEncType = MetadataUtils.existing(EncounterType.class,
                                CommonMetadata._EncounterType.REGISTRATION);

                        Encounter hivEnrollmentEncounter = new Encounter();

                        hivEnrollmentEncounter.setEncounterType(hivEnrollEncType);
                        hivEnrollmentEncounter.setPatient(ret);
                        hivEnrollmentEncounter
                                .setLocation(Context.getService(KenyaEmrService.class).getDefaultLocation());

                        hivEnrollmentEncounter.setDateCreated(curDate);
                        hivEnrollmentEncounter.setEncounterDatetime(dateVisit);

                        hivEnrollmentEncounter
                                .setForm(MetadataUtils.existing(Form.class, HivMetadata._Form.HIV_ENROLLMENT));
                        hivEnrollmentEncounter.setVisit(visitSave);
                        hivEnrollmentEncounter.setVoided(false);
                        Encounter enHivNew = Context.getEncounterService()
                                .saveEncounter(hivEnrollmentEncounter);

                        PatientProgram patientProgram = new PatientProgram();
                        patientProgram.setPatient(ret);
                        patientProgram
                                .setProgram(MetadataUtils.existing(Program.class, HivMetadata._Program.HIV));
                        patientProgram.setDateEnrolled(enHivNew.getEncounterDatetime());
                        patientProgram.setDateCreated(curDate);
                        Context.getProgramWorkflowService().savePatientProgram(patientProgram);

                        Encounter personalEncounter = new Encounter();

                        personalEncounter.setEncounterType(hivEnrollEncType);
                        personalEncounter.setPatient(ret);

                        personalEncounter.setDateCreated(curDate);
                        personalEncounter.setEncounterDatetime(dateVisit);
                        personalEncounter
                                .setLocation(Context.getService(KenyaEmrService.class).getDefaultLocation());

                        personalEncounter.setForm(
                                MetadataUtils.existing(Form.class, Metadata.Form.HIV_PERSONAL_HISTORY));
                        personalEncounter.setVisit(visitSave);
                        personalEncounter.setVoided(false);
                        Encounter enpersonalrecordresultNew = Context.getEncounterService()
                                .saveEncounter(personalEncounter);
                        if (legacyData.get(19) != null) {

                            Concept literate = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(19)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.LITERATE), literate,
                                    "", null, null, enpersonalrecordresultNew, null, visitSave);

                        }
                        if (legacyData.get(21) != null) {

                            String value = legacyData.get(21);

                            String[] valueList = value.split("\\s*,\\s*");

                            for (String riskname : valueList) {

                                Concept riskConcept = Context.getConceptService().getConcept(riskname);

                                handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.HIV_RISK_FACTOR),
                                        riskConcept, "", null, null, enpersonalrecordresultNew, null,
                                        visitSave);

                            }

                        }
                        if (legacyData.get(22) != null) {

                            Concept idssubstituion = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(22)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.IDU_PERSONAL_HISTORY),
                                    idssubstituion, "", null, null, enpersonalrecordresultNew, null, visitSave);

                        }

                        if (legacyData.get(23) != null) {

                            Concept idssubstituionvalue = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(23)));
                            handleOncePerPatientObs(ret,
                                    Dictionary.getConcept(Dictionary.IDU_NAME_PERSONAL_HISTORY),
                                    idssubstituionvalue, "", null, null, enpersonalrecordresultNew, null,
                                    visitSave);

                        }
                        if (legacyData.get(29) != null) {

                            Concept employedvalue = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(29)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.EMPLOYED),
                                    employedvalue, "", null, null, enpersonalrecordresultNew, null, visitSave);
                        }

                        if (legacyData.get(30) != null) {

                            Concept alcoholicvalue = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(30)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.ALCOHOLIC_TYPE),
                                    alcoholicvalue, "", null, null, enpersonalrecordresultNew, null, visitSave);
                        }

                        Encounter familyEncounter = new Encounter();

                        familyEncounter.setEncounterType(registrationEncType);
                        familyEncounter.setPatient(ret);

                        familyEncounter.setDateCreated(curDate);
                        familyEncounter.setEncounterDatetime(dateVisit);
                        familyEncounter
                                .setLocation(Context.getService(KenyaEmrService.class).getDefaultLocation());

                        familyEncounter
                                .setForm(MetadataUtils.existing(Form.class, Metadata.Form.HIV_FAMILY_HISTORY));
                        familyEncounter.setVisit(visitSave);
                        familyEncounter.setVoided(false);
                        Encounter enfamilyrecordresultNew = Context.getEncounterService()
                                .saveEncounter(familyEncounter);
                        if (legacyData.get(20) != null) {

                            Concept martalstatus = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(20)));
                            handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.CIVIL_STATUS),
                                    martalstatus, "", null, null, enfamilyrecordresultNew, null, visitSave);
                        }

                        Encounter drugEncounter = new Encounter();

                        drugEncounter.setEncounterType(hivEnrollEncType);
                        drugEncounter.setPatient(ret);

                        drugEncounter.setDateCreated(curDate);
                        drugEncounter.setEncounterDatetime(dateVisit);
                        drugEncounter
                                .setLocation(Context.getService(KenyaEmrService.class).getDefaultLocation());

                        drugEncounter
                                .setForm(MetadataUtils.existing(Form.class, Metadata.Form.HIV_DRUG_HISTORY));
                        drugEncounter.setVisit(visitSave);
                        drugEncounter.setVoided(false);
                        Encounter endrugrecordresultNew = Context.getEncounterService()
                                .saveEncounter(drugEncounter);

                        if (legacyData.get(24) != null) {

                            Concept drughistoryart = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(24)));

                            handleOncePerPatientObs(ret,
                                    Dictionary.getConcept(Dictionary.DRUG_HISTORY_ART_RECEIVED), drughistoryart,
                                    "", null, null, endrugrecordresultNew, null, visitSave);

                        }

                        if (legacyData.get(25) != null) {

                            Concept drughistoryarttype = Context.getConceptService()
                                    .getConcept(Integer.parseInt(legacyData.get(25)));

                            handleOncePerPatientObs(ret,
                                    Dictionary.getConcept(Dictionary.DRUG_HISTORY_ART_RECEIVED_TYPE),
                                    drughistoryarttype, "", null, null, endrugrecordresultNew, null, visitSave);

                        }

                        if (legacyData.get(26) != null && legacyData.get(27) != null
                                && legacyData.get(28) != null) {

                            boolean value = false;
                            Obs drugtreatmentGroup = new Obs();
                            drugtreatmentGroup.setPerson(ret);
                            drugtreatmentGroup.setConcept(Dictionary.getConcept(Dictionary.DRUG_HISTORY_GROUP));

                            drugtreatmentGroup.setObsDatetime(endrugrecordresultNew.getEncounterDatetime());

                            // Added value coded as per default obs object
                            // format.
                            //drugtreatmentGroup.setValueCoded(null);
                            // drugtreatmentGroup.setValueText(text);
                            drugtreatmentGroup.setLocation(
                                    Context.getService(KenyaEmrService.class).getDefaultLocation());

                            drugtreatmentGroup.setEncounter(endrugrecordresultNew);

                            drugtreatmentGroup.setValueBoolean(value);
                            Obs drugtreat = Context.getObsService().saveObs(drugtreatmentGroup,
                                    "KenyaEMR History Details");
                            if (legacyData.get(26) != null) {

                                Concept place = Context.getConceptService()
                                        .getConcept(Integer.parseInt(legacyData.get(26)));
                                handleOncePerPatientObs(ret,
                                        Dictionary.getConcept(Dictionary.DRUG_HISTORY_ART_RECEIVED_PLACE),
                                        place, "", null, null, endrugrecordresultNew, drugtreat, visitSave);
                            }

                            if (legacyData.get(27) != null) {

                                Concept drugarv = Context.getConceptService()
                                        .getConcept(Integer.parseInt(legacyData.get(27)));
                                handleOncePerPatientObs(ret,
                                        Dictionary.getConcept(Dictionary.DRUG_REGIMEN_DRUG_HISTORY), drugarv,
                                        "", null, null, endrugrecordresultNew, drugtreat, visitSave);
                            }

                            if (legacyData.get(28) != null) {

                                Double dur = 0.0;
                                Integer durationreslt = 0;

                                durationreslt = Integer.parseInt(legacyData.get(28));
                                dur = durationreslt.doubleValue();
                                handleOncePerPatientObs(ret, Dictionary.getConcept(Dictionary.DRUG_DURATION),
                                        null, null, null, dur, endrugrecordresultNew, drugtreat, visitSave);

                            }

                        }

                        /*
                         * End : Visit, Encounter and Program creation for
                         * Patient entered as Legacy Data
                         */

                    }
                } catch (IndexOutOfBoundsException e) {
                    break;
                }
            }
        } catch (IndexOutOfBoundsException e) {
            break;
        }

        rowCount++;
    }

    int noOfSheets = workbook.getNumberOfSheets();

    if (noOfSheets > 1) {
        Sheet secondSheet = workbook.getSheetAt(1);
        Iterator<Row> iteratorSecond = secondSheet.iterator();
        int rowCountVisit = 0;
        while (iteratorSecond.hasNext()) {
            Row nextRow = iteratorSecond.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();
            try {

                if (rowCountVisit > 0) {
                    ArrayList<String> legacyData = new ArrayList<String>();
                    int columnCount = 0;
                    while (cellIterator.hasNext() && columnCount < 44) {
                        Cell cell = cellIterator.next();

                        switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_STRING:
                            legacyData.add(cell.getColumnIndex(), cell.getStringCellValue().trim());
                            break;
                        case Cell.CELL_TYPE_NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                legacyData.add(cell.getColumnIndex(), String.valueOf(cell.getDateCellValue()));

                            } else {

                                legacyData.add(cell.getColumnIndex(),
                                        NumberToTextConverter.toText(cell.getNumericCellValue()));

                            }
                            break;
                        case Cell.CELL_TYPE_BLANK:
                            legacyData.add(cell.getColumnIndex(), "");
                            break;
                        }
                        columnCount++;
                    }

                    int i = 0;
                    for (String s : legacyData) {
                        i++;
                    }
                    Person person = null;
                    Patient patient = null;
                    PatientWrapper wrapper = null;
                    int count = 0;
                    Location location;
                    location = Context.getService(KenyaEmrService.class).getDefaultLocation();

                    if (legacyData.get(3) != null && legacyData.get(3) != "") {
                        try {

                            if (!legacyData.get(0).isEmpty()) {
                                PatientIdentifierType pt = Context.getPatientService()
                                        .getPatientIdentifierTypeByUuid("d59d0f67-4a05-4e41-bfad-342da68feb6f");

                                List<PatientIdentifier> patList = Context.getPatientService()
                                        .getPatientIdentifiers(legacyData.get(0).toString(), pt);

                                for (PatientIdentifier p : patList) {
                                    patient = Context.getPatientService()
                                            .getPatient(p.getPatient().getPatientId());
                                    wrapper = new PatientWrapper(patient);
                                    person = Context.getPersonService().getPerson(patient);
                                }
                            }

                            else if (!legacyData.get(1).isEmpty()) {
                                PatientIdentifierType pt = Context.getPatientService()
                                        .getPatientIdentifierTypeByUuid("3e5493e8-e76e-4d3f-a166-9a88b40747fa");

                                List<PatientIdentifier> patList = Context.getPatientService()
                                        .getPatientIdentifiers(legacyData.get(1).toString(), pt);

                                for (PatientIdentifier p : patList) {

                                    patient = Context.getPatientService()
                                            .getPatient(p.getPatient().getPatientId());
                                    wrapper = new PatientWrapper(patient);
                                    person = Context.getPersonService().getPerson(patient);
                                }

                            } else if (!legacyData.get(2).isEmpty()) {
                                PatientIdentifierType pt = Context.getPatientService()
                                        .getPatientIdentifierTypeByUuid("9e10c5d6-a58c-4236-8b65-b6b932beff1a");
                                List<PatientIdentifier> patList = Context.getPatientService()
                                        .getPatientIdentifiers(legacyData.get(2).toString(), pt);
                                for (PatientIdentifier p : patList) {
                                    patient = Context.getPatientService()
                                            .getPatient(p.getPatient().getPatientId());
                                    wrapper = new PatientWrapper(patient);
                                    person = Context.getPersonService().getPerson(patient);
                                }
                            } else {
                                break;
                            }

                            SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
                            Date curDate = new Date();
                            Date dateVisit = null;
                            try {
                                if (legacyData.get(3) != null && legacyData.get(3) != "") {
                                    dateVisit = formatter.parse(legacyData.get(3));
                                }

                            } catch (ParseException e) {

                                e.printStackTrace();
                            }
                            DateFormat visitDateInExcel = new SimpleDateFormat("dd-MMM-yyyy");
                            String dateCheck = "";
                            SimpleDateFormat mysqlDateTimeFormatter = new SimpleDateFormat(
                                    "dd-MMM-yy HH:mm:ss");
                            if (legacyData.get(3) != null && legacyData.get(3) != "") {
                                Date curDatenew = new Date();
                                dateCheck = visitDateInExcel.format(dateVisit);
                                try {
                                    dateVisit = mysqlDateTimeFormatter
                                            .parse(dateCheck + " " + curDatenew.getHours() + ":"
                                                    + curDatenew.getMinutes() + ":" + curDatenew.getSeconds());

                                } catch (ParseException e) {
                                    dateVisit = curDatenew;
                                    e.printStackTrace();
                                }
                            }

                            List<Visit> visits = Context.getVisitService().getActiveVisitsByPatient(patient);

                            Visit v = new Visit();
                            if (visits.isEmpty()) {
                                Visit visit = new Visit();
                                visit.setPatient(patient);
                                visit.setStartDatetime(dateVisit);
                                visit.setVisitType(MetadataUtils.existing(VisitType.class,
                                        CommonMetadata._VisitType.OUTPATIENT));
                                visit.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());
                                if (person.getDead() == false) {
                                    v = Context.getVisitService().saveVisit(visit);
                                }

                            } else {
                                for (Visit vLoop : visits) {
                                    v = vLoop;

                                }
                            }

                            if (v.getId() != null) {
                                EncounterType artEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                        ArtMetadata._EncounterType.INITIATE_ART);
                                Encounter artEncounter = new Encounter();

                                artEncounter.setEncounterType(artEnrollEncType);
                                artEncounter.setPatient(patient);
                                artEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                artEncounter.setDateCreated(curDate);
                                artEncounter.setEncounterDatetime(dateVisit);

                                artEncounter.setForm(
                                        MetadataUtils.existing(Form.class, ArtMetadata._Form.INITIATE_ART));
                                artEncounter.setVisit(v);

                                artEncounter.setVoided(false);
                                if (!legacyData.get(9).isEmpty()) {

                                    Encounter enartNew = Context.getEncounterService()
                                            .saveEncounter(artEncounter);
                                }
                                PatientProgram pp = new PatientProgram();
                                if (!legacyData.get(9).isEmpty()) {

                                    pp.setPatient(patient);
                                    pp.setProgram(
                                            MetadataUtils.existing(Program.class, ArtMetadata._Program.ART));

                                    Date artStartDate = null;
                                    Date curDatenew = new Date();

                                    try {
                                        artStartDate = (Date) formatter.parse(legacyData.get(9));
                                        dateCheck = visitDateInExcel.format(artStartDate);
                                        artStartDate = mysqlDateTimeFormatter.parse(dateCheck + " "
                                                + curDatenew.getHours() + ":" + curDatenew.getMinutes() + ":"
                                                + curDatenew.getSeconds());
                                        pp.setDateEnrolled(artStartDate);
                                    } catch (ParseException e) {
                                        e.printStackTrace();
                                    }

                                    if (pp.getDateEnrolled() != null && pp.getDateCompleted() == null) {
                                        PatientProgram program = Context.getProgramWorkflowService()
                                                .savePatientProgram(pp);
                                    }

                                }

                                /*
                                 * Changes code
                                 */
                                String reg = "";

                                if (!legacyData.get(4).isEmpty()) {

                                    Concept regimenConcept = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(4)));
                                    reg = reg.concat(regimenConcept.getName().toString());

                                    KenyaEmrService kes = (KenyaEmrService) Context
                                            .getService(KenyaEmrService.class);

                                    List<DrugOrderProcessed> dopp = kes.getDrugOrderProcessedByPatient(patient);

                                    // Created drug order processed
                                    DrugOrderProcessed orderprocess = new DrugOrderProcessed();

                                    orderprocess.setPatient(patient);
                                    orderprocess.setDrugRegimen(reg);
                                    orderprocess.setCreatedDate(dateVisit);
                                    orderprocess.setStartDate(dateVisit);
                                    orderprocess.setVisit(v);
                                    orderprocess.setRoute(Context.getConceptService()
                                            .getConceptByUuid("160240AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
                                    Integer tablet = 0;

                                    if (legacyData.get(4).equals("163494") || legacyData.get(4).equals("163495")
                                            || legacyData.get(4).equals("163496")
                                            || legacyData.get(4).equals("162959")
                                            || legacyData.get(4).equals("163503")
                                            || legacyData.get(4).equals("163505")
                                            || legacyData.get(4).equals("163506")
                                            || legacyData.get(4).equals(" 163507")
                                            || legacyData.get(4).equals("163508")
                                            || legacyData.get(4).equals("163510")) {

                                        orderprocess.setNoOfTablet(1);
                                        tablet = Integer.parseInt(legacyData.get(6));
                                    } else {
                                        tablet = Integer.parseInt(legacyData.get(6)) * 2;
                                        orderprocess.setNoOfTablet(2);
                                    }

                                    if (!legacyData.get(6).isEmpty()) {
                                        orderprocess.setDurationPreProcess(Integer.parseInt(legacyData.get(6)));

                                        orderprocess.setQuantityPostProcess(tablet);

                                        orderprocess.setProcessedStatus(true);
                                        try {
                                            Date curDat = new Date();

                                            dateVisit = mysqlDateTimeFormatter
                                                    .parse(dateCheck + " " + curDat.getHours() + ":"
                                                            + curDat.getMinutes() + ":" + curDat.getSeconds());

                                            orderprocess.setProcessedDate(dateVisit);

                                        } catch (ParseException e) {
                                            e.printStackTrace();
                                        }
                                    }

                                    if (!legacyData.get(5).isEmpty()) {
                                        orderprocess.setDose(legacyData.get(5));
                                        orderprocess.setDoseRegimen(legacyData.get(5));
                                    }
                                    String cahngeRegimenType = "";
                                    if (patient.getAge() > 14) {
                                        for (String firstline : firstlineConcept) {
                                            if (legacyData.get(4).equals(firstline)) {
                                                orderprocess
                                                        .setTypeOfRegimen("First line Anti-retoviral drugs");
                                                cahngeRegimenType = "First line Anti-retoviral drugs";
                                            }
                                        }
                                        for (String secndline : secondlineConcept) {
                                            if (legacyData.get(4).equals(secndline)) {
                                                orderprocess.setTypeOfRegimen("Second line ART");
                                                cahngeRegimenType = "Second line ART";
                                            }
                                        }
                                        for (String thirdline : thirdlineConcept) {
                                            if (legacyData.get(4).equals(thirdline)) {
                                                orderprocess.setTypeOfRegimen("HIV/HBV co-infection");
                                                cahngeRegimenType = "HIV/HBV co-infection";
                                            }
                                        }
                                    } else {
                                        for (String child : childArvConcept) {
                                            if (legacyData.get(4).equals(child)) {
                                                orderprocess.setTypeOfRegimen("ARV drugs for child");
                                                cahngeRegimenType = "ARV drugs for child";

                                            }
                                        }
                                    }

                                    if (dopp.size() == 0) {
                                        orderprocess.setRegimenChangeType("Start");
                                        // Encounter Created
                                        EncounterType regEnrollEncType = MetadataUtils.existing(
                                                EncounterType.class,
                                                CommonMetadata._EncounterType.REGIMEN_ORDER);

                                        Encounter regEncounter = new Encounter();
                                        regEncounter.setEncounterType(regEnrollEncType);
                                        regEncounter.setPatient(patient);
                                        regEncounter.setLocation(Context.getLocationService()
                                                .getLocationByUuid("8d6c993e-c2cc-11de-8d13-0010c6dffd0f"));

                                        regEncounter.setDateCreated(curDate);
                                        regEncounter.setEncounterDatetime(dateVisit);
                                        regEncounter.setVisit(v);

                                        regEncounter.setVoided(false);

                                        // Save encounter
                                        Encounter enregNew = Context.getEncounterService()
                                                .saveEncounter(regEncounter);

                                        // Create order
                                        Order ordersave = new Order();

                                        // Create Drug order
                                        DrugOrder dod = new DrugOrder();

                                        dod.setOrderType(Context.getOrderService().getOrderType(2));
                                        dod.setConcept(Context.getConceptService()
                                                .getConcept(Integer.parseInt(legacyData.get(4))));
                                        dod.setEncounter(enregNew);

                                        dod.setStartDate(dateVisit);
                                        dod.setDateCreated(curDate);
                                        dod.setPatient(patient);
                                        dod.setUnits("tab");
                                        if (legacyData.get(4).equals("163494")
                                                || legacyData.get(4).equals("163495")
                                                || legacyData.get(4).equals("163496")
                                                || legacyData.get(4).equals("162959")
                                                || legacyData.get(4).equals("163503")
                                                || legacyData.get(4).equals("163505")
                                                || legacyData.get(4).equals("163506")
                                                || legacyData.get(4).equals(" 163507")
                                                || legacyData.get(4).equals("163508")
                                                || legacyData.get(4).equals("163510")) {

                                            dod.setFrequency("od");
                                        } else {
                                            dod.setFrequency("bd");
                                        }

                                        // /Save drug order
                                        ordersave = Context.getOrderService().saveOrder(dod);

                                        orderprocess.setDrugOrder(dod);

                                    }

                                    if (dopp.size() > 0) {
                                        DrugOrderProcessed dd = dopp.get(dopp.size() - 1);
                                        // for (DrugOrderProcessed dd :
                                        // dopp) {
                                        if (dd.getDrugRegimen().equals(reg) && !legacyData.get(5).isEmpty()
                                                && dd.getDoseRegimen().equals(legacyData.get(5))
                                                && dd.getTypeOfRegimen().equals(cahngeRegimenType)) {
                                            orderprocess.setRegimenChangeType("Continue");
                                            orderprocess.setDrugOrder(dd.getDrugOrder());

                                        } else {
                                            if (dd.getTypeOfRegimen().equals(cahngeRegimenType)) {
                                                orderprocess.setRegimenChangeType("Substitue");
                                            } else if (dd.getTypeOfRegimen().equals(cahngeRegimenType)) {
                                                orderprocess.setRegimenChangeType("Switch");
                                            }
                                            // Encounter Created
                                            EncounterType regEnrollEncType = MetadataUtils.existing(
                                                    EncounterType.class,
                                                    CommonMetadata._EncounterType.REGIMEN_ORDER);

                                            Encounter regEncounter = new Encounter();
                                            regEncounter.setEncounterType(regEnrollEncType);
                                            regEncounter.setPatient(patient);
                                            regEncounter.setLocation(Context.getLocationService()
                                                    .getLocationByUuid("8d6c993e-c2cc-11de-8d13-0010c6dffd0f"));

                                            regEncounter.setDateCreated(curDate);
                                            regEncounter.setEncounterDatetime(dateVisit);
                                            regEncounter.setVisit(v);

                                            regEncounter.setVoided(false);

                                            // Save encounter
                                            Encounter enregNew = Context.getEncounterService()
                                                    .saveEncounter(regEncounter);

                                            // Create order
                                            Order ordersave = new Order();

                                            // Create Drug order
                                            DrugOrder dod = new DrugOrder();

                                            dod.setOrderType(Context.getOrderService().getOrderType(2));
                                            dod.setConcept(Context.getConceptService()
                                                    .getConcept(Integer.parseInt(legacyData.get(4))));
                                            dod.setEncounter(enregNew);

                                            dod.setStartDate(dateVisit);
                                            dod.setDateCreated(curDate);
                                            dod.setPatient(patient);
                                            dod.setUnits("tab");
                                            if (legacyData.get(4).equals("163494")
                                                    || legacyData.get(4).equals("163495")
                                                    || legacyData.get(4).equals("163496")
                                                    || legacyData.get(4).equals("162959")
                                                    || legacyData.get(4).equals("163503")
                                                    || legacyData.get(4).equals("163505")
                                                    || legacyData.get(4).equals("163506")
                                                    || legacyData.get(4).equals(" 163507")
                                                    || legacyData.get(4).equals("163508")
                                                    || legacyData.get(4).equals("163510")) {

                                                dod.setFrequency("od");
                                            } else {
                                                dod.setFrequency("bd");
                                            }

                                            // /Save drug order
                                            ordersave = Context.getOrderService().saveOrder(dod);

                                            orderprocess.setDrugOrder(dod);

                                        }

                                    }

                                    kes.saveDrugOrderProcessed(orderprocess);

                                    Order oo = new Order();
                                    DrugOrderProcessed drugoo = new DrugOrderProcessed();
                                    for (DrugOrderProcessed ooo : dopp) {
                                        if (!legacyData.get(36).isEmpty()) {
                                            Date discontinuedDate = new Date();
                                            discontinuedDate = (Date) formatter.parse(legacyData.get(36));
                                            String dtechk = visitDateInExcel.format(discontinuedDate);
                                            try {
                                                Date curDat = new Date();
                                                List<Visit> visitdrug = Context.getVisitService()
                                                        .getVisitsByPatient(patient);

                                                for (Visit visdr : visitdrug) {
                                                    if (visdr.getStopDatetime() != null) {
                                                        if (drugoo.getDiscontinuedDate() == null) {
                                                            discontinuedDate = mysqlDateTimeFormatter
                                                                    .parse(dtechk + " " + curDat.getHours()
                                                                            + ":" + curDat.getMinutes() + ":"
                                                                            + curDat.getSeconds());

                                                            drugoo.setDiscontinuedDate(dateVisit);
                                                            break;
                                                        }
                                                    }
                                                }

                                            } catch (ParseException e) {
                                                e.printStackTrace();
                                            }

                                        }
                                        if (!legacyData.get(35).isEmpty()) {
                                            List<Visit> visitdrug = Context.getVisitService()
                                                    .getVisitsByPatient(patient);
                                            Concept discontinuedReason = Context.getConceptService()
                                                    .getConcept(Integer.parseInt(legacyData.get(35)));

                                            for (Visit visdr : visitdrug) {
                                                Order orderPrevious = Context.getOrderService()
                                                        .getOrder(ooo.getDrugOrder().getOrderId());
                                                if (visdr.getStopDatetime() != null) {
                                                    if (orderPrevious.getDiscontinuedReason() == null) {
                                                        if (!ooo.getDrugRegimen()
                                                                .equals(drugoo.getDrugRegimen())) {
                                                            drugoo.setDiscontinuedReason(discontinuedReason);
                                                            orderPrevious.setDiscontinued(true);
                                                            orderPrevious
                                                                    .setDiscontinuedBy(Context.getUserService()
                                                                            .getUserByUsername("admin"));
                                                            orderPrevious
                                                                    .setDiscontinuedReason(discontinuedReason);
                                                            orderPrevious.setDiscontinuedDate(dateVisit);
                                                            Context.getOrderService().saveOrder(orderPrevious);
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        drugoo = ooo;

                                        kes.saveDrugOrderProcessed(drugoo);
                                    }
                                }

                                EncounterType labEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.LAB_ORDERS);
                                Encounter labEncounter = new Encounter();

                                labEncounter.setEncounterType(labEnrollEncType);
                                labEncounter.setPatient(patient);
                                labEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                labEncounter.setDateCreated(curDate);
                                labEncounter.setEncounterDatetime(dateVisit);

                                labEncounter.setForm(
                                        MetadataUtils.existing(Form.class, CommonMetadata._Form.LAB_ORDERS));
                                labEncounter.setVisit(v);

                                labEncounter.setVoided(false);

                                Encounter enlabNew = Context.getEncounterService().saveEncounter(labEncounter);

                                if (!legacyData.get(7).isEmpty()) {
                                    Concept labOrder = Dictionary.getConcept(Dictionary.CD4_COUNT);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER), labOrder, "",
                                            null, null, enlabNew, null, v);

                                }
                                if (!legacyData.get(39).isEmpty()) {
                                    Concept labOrder = Context.getConceptService()
                                            .getConceptByUuid("122858AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER), labOrder, "",
                                            null, null, enlabNew, null, v);

                                }
                                if (!legacyData.get(38).isEmpty()) {
                                    Concept labOrder = Context.getConceptService()
                                            .getConceptByUuid("654AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER), labOrder, "",
                                            null, null, enlabNew, null, v);

                                }
                                if (!legacyData.get(8).isEmpty()) {

                                    Concept labviralOrder = Dictionary.getConcept(Dictionary.HIV_VIRAL_LOAD);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER), labviralOrder,
                                            "", null, null, enlabNew, null, v);

                                }

                                if (!legacyData.get(37).isEmpty()) {

                                    Concept labhaemoOrder = Context.getConceptService()
                                            .getConceptByUuid("1019AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER), labhaemoOrder,
                                            "", null, null, enlabNew, null, v);

                                }
                                if (!legacyData.get(40).isEmpty()) {

                                    Concept labcreatinineOrder = Context.getConceptService()
                                            .getConceptByUuid("790AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.lABORATORY_ORDER),
                                            labcreatinineOrder, "", null, null, enlabNew, null, v);

                                }
                                EncounterType labresultEnrollEncType = MetadataUtils.existing(
                                        EncounterType.class, CommonMetadata._EncounterType.LAB_RESULTS);
                                Encounter labresultEncounter = new Encounter();

                                labresultEncounter.setEncounterType(labresultEnrollEncType);
                                labresultEncounter.setPatient(patient);

                                labresultEncounter.setDateCreated(curDate);
                                labresultEncounter.setEncounterDatetime(dateVisit);
                                labresultEncounter.setVisit(v);

                                labresultEncounter.setVoided(false);
                                Encounter enlabresultNew = Context.getEncounterService()
                                        .saveEncounter(labresultEncounter);

                                if (!legacyData.get(7).isEmpty()) {

                                    String cd4Result = legacyData.get(7);
                                    Double cd4Count = Double.parseDouble(cd4Result);
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.CD4_COUNT), null,
                                            legacyData.get(7), null, cd4Count, enlabresultNew, null, v);

                                }
                                if (!legacyData.get(37).isEmpty()) {

                                    String labResult = legacyData.get(37);

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("1019AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            null, labResult, null, null, enlabresultNew, null, v);

                                }
                                if (!legacyData.get(38).isEmpty()) {

                                    String labResult = legacyData.get(38);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("122858AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            null, labResult, null, lab, enlabresultNew, null, v);

                                }
                                if (!legacyData.get(39).isEmpty()) {

                                    String labResult = legacyData.get(39);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("654AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            null, labResult, null, lab, enlabresultNew, null, v);

                                }
                                if (!legacyData.get(8).isEmpty()) {

                                    String labResult = legacyData.get(8);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.HIV_VIRAL_LOAD), null, labResult,
                                            null, lab, enlabresultNew, null, v);

                                }
                                if (!legacyData.get(40).isEmpty()) {

                                    String labResult = legacyData.get(40);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("790AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            null, labResult, null, lab, enlabresultNew, null, v);

                                }
                                EncounterType tbOIEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.CONSULTATION);
                                Encounter tbOIEncounter = new Encounter();

                                tbOIEncounter.setEncounterType(tbOIEnrollEncType);
                                tbOIEncounter.setPatient(patient);

                                tbOIEncounter.setDateCreated(curDate);
                                tbOIEncounter.setEncounterDatetime(dateVisit);
                                tbOIEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                tbOIEncounter.setForm(
                                        MetadataUtils.existing(Form.class, CommonMetadata._Form.TB_SCREENING));
                                tbOIEncounter.setVisit(v);
                                tbOIEncounter.setVoided(false);
                                Encounter entbOIresultNew = Context.getEncounterService()
                                        .saveEncounter(tbOIEncounter);
                                Obs o = null;
                                if (!legacyData.get(27).isEmpty()) {
                                    String text = "";
                                    Obs OIGroup = new Obs();
                                    OIGroup.setPerson(patient);
                                    OIGroup.setConcept(Dictionary.getConcept(Dictionary.OI_GROUP_TB_FORM));

                                    OIGroup.setObsDatetime(entbOIresultNew.getEncounterDatetime());
                                    // Added value coded as per default obs
                                    // object
                                    // format.
                                    OIGroup.setValueCoded(null);
                                    OIGroup.setValueText(text);
                                    OIGroup.setLocation(
                                            Context.getService(KenyaEmrService.class).getDefaultLocation());

                                    OIGroup.setEncounter(entbOIresultNew);

                                    if (!legacyData.get(27).isEmpty()) {
                                        o = Context.getObsService().saveObs(OIGroup,
                                                "KenyaEMR History Details");
                                    }

                                    if (!legacyData.get(27).isEmpty()) {
                                        String oivalue = legacyData.get(27);
                                        String[] valueList = oivalue.split("\\s*,\\s*");

                                        for (String oiname : valueList) {

                                            Concept oiConcept = Context.getConceptService().getConcept(oiname);

                                            handleOncePerPatientObs(patient,
                                                    Dictionary.getConcept(Dictionary.HIV_CARE_DIAGNOSIS),
                                                    oiConcept, "", null, null, entbOIresultNew, o, v);

                                        }

                                    }

                                }

                                if (!legacyData.get(10).isEmpty()) {

                                    Concept tbStatus = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(10)));

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TB_PATIENT), tbStatus, "", null,
                                            null, entbOIresultNew, null, v);

                                }
                                if (!legacyData.get(11).isEmpty()) {

                                    Concept tbDiseaseClassification = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(11)));
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.SITE_OF_TUBERCULOSIS_DISEASE),
                                            tbDiseaseClassification, "", null, null, entbOIresultNew, null, v);
                                    if (!legacyData.get(12).isEmpty()) {
                                        if (!tbDiseaseClassification.equals("42")) {
                                            Concept tbsiteClassification = Context.getConceptService()
                                                    .getConcept(Integer.parseInt(legacyData.get(12)));
                                            handleOncePerPatientObs(patient,
                                                    Dictionary.getConcept(Dictionary.TB_SITE),
                                                    tbsiteClassification, "", null, null, entbOIresultNew, null,
                                                    v);
                                        }
                                    }
                                }

                                if (!legacyData.get(13).isEmpty()) {

                                    SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
                                    Date tbStartDate = new Date();
                                    try {
                                        tbStartDate = (Date) formatter.parse(legacyData.get(13));

                                    } catch (ParseException e) {
                                        e.printStackTrace();
                                    }

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(
                                                    Dictionary.TUBERCULOSIS_DRUG_TREATMENT_START_DATE),
                                            null, null, tbStartDate, null, entbOIresultNew, null, v);
                                }
                                if (!legacyData.get(14).isEmpty()) {

                                    Concept tbTownship = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(14)));
                                    handleOncePerPatientObs(patient, Dictionary.getConcept(Dictionary.TOWNSHIP),
                                            tbTownship, "", null, null, entbOIresultNew, null, v);
                                }
                                if (!legacyData.get(15).isEmpty()) {

                                    String tbclinicName = "";
                                    tbclinicName = legacyData.get(15);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TB_CLINIC_NAME), null,
                                            tbclinicName, null, null, entbOIresultNew, null, v);
                                }
                                if (!legacyData.get(16).isEmpty()) {

                                    String tbregistrationNumber = "";
                                    tbregistrationNumber = legacyData.get(16);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TUBERCULOSIS_TREATMENT_NUMBER),
                                            null, tbregistrationNumber, null, null, entbOIresultNew, null, v);
                                }
                                if (!legacyData.get(17).isEmpty()) {
                                    Concept tbRegimen = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(17)));
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TB_FORM_REGIMEN), tbRegimen, "",
                                            null, null, entbOIresultNew, null, v);

                                }
                                if (!legacyData.get(18).isEmpty()) {

                                    Concept tbOutcome = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(18)));

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TUBERCULOSIS_TREATMENT_OUTCOME),
                                            tbOutcome, null, null, null, entbOIresultNew, null, v);
                                }

                                if (!legacyData.get(19).isEmpty()) {

                                    Date tbOutcomeDate = null;
                                    Date curDatenew = new Date();
                                    try {
                                        tbOutcomeDate = (Date) formatter.parse(legacyData.get(19));
                                        dateCheck = visitDateInExcel.format(tbOutcomeDate);
                                        tbOutcomeDate = mysqlDateTimeFormatter.parse(dateCheck + " "
                                                + curDatenew.getHours() + ":" + curDatenew.getMinutes() + ":"
                                                + curDatenew.getSeconds());
                                    } catch (ParseException e) {
                                        e.printStackTrace();
                                    }

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.TB_OUTCOME_DATE), null, null,
                                            tbOutcomeDate, null, entbOIresultNew, null, v);
                                }
                                int flag = 0;

                                if (!legacyData.get(20).isEmpty()) {

                                    EncounterType HivdiscontEnrollEncType = MetadataUtils.existing(
                                            EncounterType.class,
                                            HivMetadata._EncounterType.HIV_DISCONTINUATION);
                                    Encounter hivDiscontEncounter = new Encounter();

                                    hivDiscontEncounter.setEncounterType(HivdiscontEnrollEncType);
                                    hivDiscontEncounter.setPatient(patient);

                                    hivDiscontEncounter.setDateCreated(curDate);
                                    hivDiscontEncounter.setEncounterDatetime(dateVisit);
                                    hivDiscontEncounter.setLocation(
                                            Context.getService(KenyaEmrService.class).getDefaultLocation());

                                    hivDiscontEncounter.setForm(MetadataUtils.existing(Form.class,
                                            HivMetadata._Form.HIV_DISCONTINUATION));
                                    hivDiscontEncounter.setVisit(v);
                                    hivDiscontEncounter.setVoided(false);
                                    Encounter enhivDiscontresultNew = Context.getEncounterService()
                                            .saveEncounter(hivDiscontEncounter);

                                    Concept endOfFollowup = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(20)));
                                    if (legacyData.get(20).equals("160034")) {
                                        handleOncePerPatientObs(patient,
                                                Dictionary.getConcept(
                                                        Dictionary.REASON_FOR_PROGRAM_DISCONTINUATION),
                                                endOfFollowup, null, null, null, enhivDiscontresultNew, null,
                                                v);
                                        handleOncePerPatientObs(patient,
                                                Dictionary.getConcept(Dictionary.DEATH_DATE), null, null,
                                                dateVisit, null, enhivDiscontresultNew, null, v);
                                        flag = 1;

                                    } else if (legacyData.get(20).equals("159492")) {
                                        handleOncePerPatientObs(patient,
                                                Dictionary.getConcept(
                                                        Dictionary.REASON_FOR_PROGRAM_DISCONTINUATION),
                                                endOfFollowup, null, null, null, enhivDiscontresultNew, null,
                                                v);
                                        if (!legacyData.get(22).isEmpty()) {
                                            String transferdto = legacyData.get(22);

                                            handleOncePerPatientObs(patient,
                                                    Dictionary.getConcept(Dictionary.TRANSFERRED_OUT_TO), null,
                                                    transferdto, null, null, enhivDiscontresultNew, null, v);

                                        }
                                        handleOncePerPatientObs(patient,
                                                Dictionary.getConcept(Dictionary.DATE_TRANSFERRED_OUT), null,
                                                null, dateVisit, null, enhivDiscontresultNew, null, v);

                                    } else {
                                        handleOncePerPatientObs(patient,
                                                Dictionary.getConcept(
                                                        Dictionary.REASON_FOR_PROGRAM_DISCONTINUATION),
                                                endOfFollowup, null, null, null, enhivDiscontresultNew, null,
                                                v);

                                    }

                                    if (!legacyData.get(21).isEmpty()) {
                                        Date programcmpleteDate = null;
                                        Date curDatenew = new Date();
                                        try {
                                            programcmpleteDate = (Date) formatter.parse(legacyData.get(21));
                                            dateCheck = visitDateInExcel.format(programcmpleteDate);
                                            programcmpleteDate = mysqlDateTimeFormatter.parse(dateCheck + " "
                                                    + curDatenew.getHours() + ":" + curDatenew.getMinutes()
                                                    + ":" + curDatenew.getSeconds());
                                            Collection<PatientProgram> hivprogram = Context
                                                    .getProgramWorkflowService().getPatientPrograms(patient);
                                            for (PatientProgram prog : hivprogram) {
                                                if (prog.getPatient().equals(patient)) {
                                                    if (prog.getProgram().getUuid()
                                                            .equals("dfdc6d40-2f2f-463d-ba90-cc97350441a8")
                                                            && prog.getDateCompleted() == null) {
                                                        prog.setDateCompleted(programcmpleteDate);
                                                        Context.getProgramWorkflowService()
                                                                .savePatientProgram(prog);
                                                    }

                                                }
                                            }
                                        } catch (ParseException e) {
                                            e.printStackTrace();
                                        }

                                    }

                                }

                                if (!legacyData.get(23).isEmpty() && !legacyData.get(24).isEmpty()) {
                                    PatientProgram activeArtProgram = null;
                                    Collection<PatientProgram> artProgram = Context.getProgramWorkflowService()
                                            .getPatientPrograms(patient);
                                    for (PatientProgram artProg : artProgram) {
                                        if (artProg.getProgram().getUuid()
                                                .equals("96ec813f-aaf0-45b2-add6-e661d5bf79d6")
                                                && artProg.getDateCompleted() == null) {
                                            activeArtProgram = artProg;
                                        }
                                    }

                                    EncounterType ArtdiscontEnrollEncType = MetadataUtils
                                            .existing(EncounterType.class, ArtMetadata._EncounterType.STOP_ART);
                                    Encounter artDiscontEncounter = new Encounter();

                                    artDiscontEncounter.setEncounterType(ArtdiscontEnrollEncType);
                                    artDiscontEncounter.setPatient(patient);

                                    artDiscontEncounter.setDateCreated(curDate);
                                    artDiscontEncounter.setEncounterDatetime(dateVisit);
                                    artDiscontEncounter.setLocation(
                                            Context.getService(KenyaEmrService.class).getDefaultLocation());

                                    artDiscontEncounter.setForm(
                                            MetadataUtils.existing(Form.class, ArtMetadata._Form.STOP_ART));
                                    artDiscontEncounter.setVisit(v);
                                    artDiscontEncounter.setVoided(false);
                                    Encounter enartDiscontresultNew = Context.getEncounterService()
                                            .saveEncounter(artDiscontEncounter);
                                    Date programcmpleteDate = null;
                                    Date curDatenew = new Date();
                                    try {
                                        programcmpleteDate = (Date) formatter.parse(legacyData.get(23));
                                        dateCheck = visitDateInExcel.format(programcmpleteDate);
                                        programcmpleteDate = mysqlDateTimeFormatter.parse(dateCheck + " "
                                                + curDatenew.getHours() + ":" + curDatenew.getMinutes() + ":"
                                                + curDatenew.getSeconds());
                                        if (activeArtProgram != null) {
                                            activeArtProgram.setDateCompleted(programcmpleteDate);
                                        }
                                    } catch (ParseException e) {
                                        e.printStackTrace();
                                    }

                                    Context.getProgramWorkflowService().savePatientProgram(activeArtProgram);

                                    if (!legacyData.get(24).isEmpty()) {
                                        Concept endOfArt = Context.getConceptService()
                                                .getConcept(Integer.parseInt(legacyData.get(24)));

                                        handleOncePerPatientObs(patient,
                                                Context.getConceptService().getConceptByUuid(
                                                        "1252AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                                endOfArt, null, null, null, enartDiscontresultNew, null, v);

                                    }
                                }

                                EncounterType consultEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.CONSULTATION);
                                Encounter consultEncounter = new Encounter();

                                consultEncounter.setEncounterType(consultEnrollEncType);
                                consultEncounter.setPatient(patient);

                                consultEncounter.setDateCreated(curDate);
                                consultEncounter.setEncounterDatetime(dateVisit);
                                consultEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                consultEncounter.setForm(MetadataUtils.existing(Form.class,
                                        CommonMetadata._Form.CONSULTATION_ENCOUNTER));
                                consultEncounter.setVisit(v);
                                consultEncounter.setVoided(false);
                                Encounter enconsultresultNew = Context.getEncounterService()
                                        .saveEncounter(consultEncounter);
                                if (!legacyData.get(30).isEmpty()) {

                                    Concept sideffectsOfArt = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(30)));

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("159935AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            Dictionary.getConcept(Dictionary.YES), null, null, null,
                                            enconsultresultNew, null, v);
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.ART_SIDE_EFFECTS_VALUES),
                                            sideffectsOfArt, null, null, null, enconsultresultNew, null, v);

                                }
                                if (!legacyData.get(31).isEmpty()) {

                                    String levelOfAdherence = legacyData.get(31);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.ART_ADHERENCE), null,
                                            levelOfAdherence, null, null, enconsultresultNew, null, v);

                                }
                                if (!legacyData.get(41).isEmpty()) {

                                    Concept temporaryreferal = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(41)));

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("5e05d243-e039-4f04-9988-18d5a499329e"),
                                            Dictionary.getConcept(Dictionary.YES), null, null, null,
                                            enconsultresultNew, null, v);
                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("c648f69b-7065-4255-9af2-6076348c87dc"),
                                            temporaryreferal, null, null, null, enconsultresultNew, null, v);

                                }
                                if (!legacyData.get(28).isEmpty()) {

                                    Concept tbOutcome = new Concept();
                                    String performance = legacyData.get(28);
                                    if (performance.equals("A")) {
                                        tbOutcome = Dictionary.getConcept(Dictionary.PERFSCALE_A);
                                    } else if (performance.equals("B")) {
                                        tbOutcome = Dictionary.getConcept(Dictionary.PERFSCALE_B);
                                    } else {
                                        tbOutcome = Dictionary.getConcept(Dictionary.PERFSCALE_C);
                                    }
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.PERFORMANCE), tbOutcome, null,
                                            null, null, entbOIresultNew, null, v);
                                }

                                if (!legacyData.get(29).isEmpty()) {

                                    Concept tbOutcome = new Concept();
                                    String stage = legacyData.get(29);
                                    if (stage.equals("IV")) {
                                        tbOutcome = Dictionary.getConcept(Dictionary.WHO_STAGE_4_ADULT);
                                    } else if (stage.equals("III")) {
                                        tbOutcome = Dictionary.getConcept(Dictionary.WHO_STAGE_3_ADULT);
                                    } else if (stage.equals("II")) {
                                        tbOutcome = Dictionary.getConcept(Dictionary.WHO_STAGE_2_ADULT);
                                    } else {
                                        tbOutcome = Dictionary.getConcept(Dictionary.WHO_STAGE_1_ADULT);
                                    }
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.CURRENT_WHO_STAGE), tbOutcome,
                                            null, null, null, entbOIresultNew, null, v);

                                }
                                EncounterType nextAppointEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.CONSULTATION);
                                Encounter nextAppointEncounter = new Encounter();

                                nextAppointEncounter.setEncounterType(nextAppointEncType);
                                nextAppointEncounter.setPatient(patient);

                                nextAppointEncounter.setDateCreated(curDate);
                                nextAppointEncounter.setEncounterDatetime(dateVisit);
                                nextAppointEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());
                                nextAppointEncounter.setVisit(v);
                                nextAppointEncounter.setVoided(false);
                                Encounter ennextAppointresultNew = new Encounter();
                                if (!legacyData.get(32).isEmpty()) {
                                    ennextAppointresultNew = Context.getEncounterService()
                                            .saveEncounter(nextAppointEncounter);
                                }
                                if (!legacyData.get(32).isEmpty()) {
                                    SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
                                    Date nextAppointDate = new Date();
                                    try {
                                        nextAppointDate = (Date) formatter.parse(legacyData.get(32));

                                    } catch (ParseException e) {
                                        e.printStackTrace();
                                    }

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.RETURN_VISIT_DATE), null, null,
                                            nextAppointDate, null, ennextAppointresultNew, null, v);
                                }

                                // For OI or PROPHYLAXIS
                                if (!legacyData.get(33).isEmpty() || !legacyData.get(34).isEmpty()) {

                                    // For Duration of Medication
                                    if (!legacyData.get(6).isEmpty()) {

                                        EncounterType otherMedicationEnrollEncType = MetadataUtils.existing(
                                                EncounterType.class,
                                                CommonMetadata._EncounterType.CONSULTATION);
                                        Encounter otherMedEncounter = new Encounter();

                                        otherMedEncounter.setEncounterType(otherMedicationEnrollEncType);
                                        otherMedEncounter.setPatient(patient);

                                        otherMedEncounter.setDateCreated(curDate);
                                        otherMedEncounter.setEncounterDatetime(dateVisit);
                                        otherMedEncounter.setLocation(
                                                Context.getService(KenyaEmrService.class).getDefaultLocation());

                                        otherMedEncounter.setForm(MetadataUtils.existing(Form.class,
                                                CommonMetadata._Form.OTHER_MEDICATIONS));
                                        otherMedEncounter.setVisit(v);
                                        otherMedEncounter.setVoided(false);
                                        Encounter enotherresultNew = Context.getEncounterService()
                                                .saveEncounter(otherMedEncounter);

                                        String duration = legacyData.get(6);
                                        Double durationDouble = Double.parseDouble(duration);
                                        int durationInteger = Integer.parseInt(legacyData.get(6));

                                        /*
                                         * PROPHYLAXIS start
                                         */

                                        if (!legacyData.get(33).isEmpty()) {

                                            String value = legacyData.get(33);

                                            String[] valueList = value.split("\\s*,\\s*");

                                            for (String prop : valueList) {
                                                // Group for each Drug
                                                String text = "";
                                                Obs prophylGroup = new Obs();
                                                prophylGroup.setPerson(patient);
                                                prophylGroup.setConcept(
                                                        Context.getConceptService().getConceptByUuid(
                                                                "163022AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
                                                prophylGroup.setObsDatetime(
                                                        enotherresultNew.getEncounterDatetime());
                                                prophylGroup.setValueCoded(null);
                                                prophylGroup.setValueText(text);
                                                prophylGroup
                                                        .setLocation(Context.getService(KenyaEmrService.class)
                                                                .getDefaultLocation());

                                                prophylGroup.setEncounter(enotherresultNew);
                                                prophylGroup.setComment("1");
                                                Obs prophyl = Context.getObsService().saveObs(prophylGroup,
                                                        "KenyaEMR History Details");

                                                Concept oivalue = Context.getConceptService().getConcept(prop);

                                                // CPT for CTX
                                                if (oivalue.getUuid().toString()
                                                        .equals("105281AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) {
                                                    handleOncePerPatientObs(patient,
                                                            Dictionary.getConcept(Dictionary.CPT_VALUE),
                                                            Context.getConceptService().getConcept(1065), "",
                                                            null, null, enotherresultNew, null, v);
                                                }

                                                // IPT for Isoniazid
                                                if (oivalue.getUuid().toString()
                                                        .equals("78280AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")) {
                                                    handleOncePerPatientObs(patient,
                                                            Dictionary.getConcept(Dictionary.IPT_VALUE),
                                                            Context.getConceptService().getConcept(1065), "",
                                                            null, null, enotherresultNew, null, v);
                                                }

                                                handleOncePerPatientObs(patient,
                                                        Dictionary.getConcept(Dictionary.PROPHYLAXIS), oivalue,
                                                        "", null, null, enotherresultNew, prophyl, v);

                                                handleOncePerPatientObs(patient,
                                                        Dictionary.getConcept(Dictionary.MEDICATION_DURATION),
                                                        null, "", null, durationDouble, enotherresultNew,
                                                        prophyl, v);

                                                // Capture Drug in Drug obs
                                                // processed
                                                DrugObsProcessed dop = new DrugObsProcessed();
                                                dop.setObs(prophyl);
                                                dop.setCreatedDate(curDate);
                                                dop.setPatient(patient);
                                                dop.setProcessedDate(dateVisit);
                                                dop.setQuantityPostProcess(durationInteger);

                                                KenyaEmrService kes = (KenyaEmrService) Context
                                                        .getService(KenyaEmrService.class);
                                                kes.saveDrugObsProcessed(dop);
                                            }

                                        }

                                        /*
                                         * PROPHYLAXIS End
                                         */

                                        if (!legacyData.get(34).isEmpty()) {

                                            String value = legacyData.get(34);

                                            String[] valueList = value.split("\\s*,\\s*");

                                            for (String oil : valueList) {
                                                // Group for each Drug
                                                String text = "";
                                                Obs oitreatmentGroup = new Obs();
                                                oitreatmentGroup.setPerson(patient);
                                                oitreatmentGroup.setConcept(
                                                        Context.getConceptService().getConceptByUuid(
                                                                "163021AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));

                                                oitreatmentGroup.setObsDatetime(
                                                        enotherresultNew.getEncounterDatetime());

                                                oitreatmentGroup.setValueCoded(null);
                                                oitreatmentGroup.setValueText(text);
                                                oitreatmentGroup
                                                        .setLocation(Context.getService(KenyaEmrService.class)
                                                                .getDefaultLocation());

                                                oitreatmentGroup.setEncounter(enotherresultNew);
                                                oitreatmentGroup.setComment("1");
                                                Obs oitreat = Context.getObsService().saveObs(oitreatmentGroup,
                                                        "KenyaEMR History Details");

                                                Concept oivalue = Context.getConceptService().getConcept(oil);

                                                handleOncePerPatientObs(patient,
                                                        Dictionary.getConcept(Dictionary.OI_TREATMENT_DRUG),
                                                        oivalue, "", null, null, enotherresultNew, oitreat, v);

                                                handleOncePerPatientObs(patient,
                                                        Dictionary.getConcept(Dictionary.MEDICATION_DURATION),
                                                        null, "", null, durationDouble, enotherresultNew,
                                                        oitreat, v);

                                                // Capture Drug in Drug obs
                                                // processed
                                                DrugObsProcessed dop = new DrugObsProcessed();
                                                dop.setObs(oitreat);
                                                dop.setCreatedDate(curDate);
                                                dop.setPatient(patient);
                                                dop.setProcessedDate(dateVisit);
                                                dop.setQuantityPostProcess(durationInteger);

                                                KenyaEmrService kes = (KenyaEmrService) Context
                                                        .getService(KenyaEmrService.class);
                                                kes.saveDrugObsProcessed(dop);
                                            }
                                        }
                                    }
                                }

                                EncounterType recordEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.CONSULTATION);
                                Encounter recordEncounter = new Encounter();

                                recordEncounter.setEncounterType(recordEncType);
                                recordEncounter.setPatient(patient);

                                recordEncounter.setDateCreated(curDate);
                                recordEncounter.setEncounterDatetime(dateVisit);
                                recordEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                recordEncounter.setForm(
                                        MetadataUtils.existing(Form.class, CommonMetadata._Form.TRIAGE));
                                recordEncounter.setVisit(v);
                                recordEncounter.setVoided(false);
                                Encounter enrecordvitalresultNew = Context.getEncounterService()
                                        .saveEncounter(recordEncounter);
                                if (!legacyData.get(25).isEmpty()) {

                                    String labResult = legacyData.get(25);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.WEIGHT_KG), null, null, null, lab,
                                            enrecordvitalresultNew, null, v);

                                }

                                if (!legacyData.get(26).isEmpty()) {

                                    String labResult = legacyData.get(26);
                                    Double lab = Double.parseDouble(labResult);

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.HEIGHT_CM), null, null, null, lab,
                                            enrecordvitalresultNew, null, v);

                                }

                                EncounterType hivEnrollEncType = MetadataUtils.existing(EncounterType.class,
                                        HivMetadata._EncounterType.HIV_ENROLLMENT);
                                EncounterType registrationEncType = MetadataUtils.existing(EncounterType.class,
                                        CommonMetadata._EncounterType.REGISTRATION);
                                Encounter obstericEncounter = new Encounter();

                                obstericEncounter.setEncounterType(registrationEncType);
                                obstericEncounter.setPatient(patient);

                                obstericEncounter.setDateCreated(curDate);
                                obstericEncounter.setEncounterDatetime(dateVisit);
                                obstericEncounter.setLocation(
                                        Context.getService(KenyaEmrService.class).getDefaultLocation());

                                obstericEncounter.setForm(
                                        MetadataUtils.existing(Form.class, Metadata.Form.OBSTETRIC_HISTORY));
                                obstericEncounter.setVisit(v);
                                obstericEncounter.setVoided(false);
                                Encounter enobstericrecordresultNew = Context.getEncounterService()
                                        .saveEncounter(obstericEncounter);
                                if (!legacyData.get(42).isEmpty()) {

                                    Concept pregstatus = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(42)));
                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.PREGNANCY_STATUS), pregstatus, "",
                                            null, null, enobstericrecordresultNew, null, v);

                                }
                                if (!legacyData.get(43).isEmpty()) {

                                    Concept familyplanningstatus = Dictionary.getConcept(Dictionary.YES);

                                    handleOncePerPatientObs(patient,
                                            Context.getConceptService()
                                                    .getConceptByUuid("5271AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
                                            familyplanningstatus, "", null, null, enobstericrecordresultNew,
                                            null, v);

                                }
                                if (!legacyData.get(43).isEmpty()) {

                                    Concept familyplanningvalue = Context.getConceptService()
                                            .getConcept(Integer.parseInt(legacyData.get(43)));

                                    handleOncePerPatientObs(patient,
                                            Dictionary.getConcept(Dictionary.METHOD_OF_FAMILY_PLANNING),
                                            familyplanningvalue, "", null, null, enobstericrecordresultNew,
                                            null, v);

                                }

                                DateFormat visitDatesInExcel = new SimpleDateFormat("dd-MMM-yyyy");
                                String dateChecks = visitDatesInExcel.format(dateVisit);
                                if (legacyData.get(3) != null) {
                                    Date Datenew = new Date();
                                    try {
                                        dateVisit = mysqlDateTimeFormatter
                                                .parse(dateChecks + " " + Datenew.getHours() + ":"
                                                        + Datenew.getMinutes() + ":" + Datenew.getSeconds());

                                    } catch (ParseException e) {
                                        dateVisit = Datenew;

                                        e.printStackTrace();
                                    }
                                }

                                v.setStopDatetime(dateVisit);

                                Context.getVisitService().saveVisit(v);

                                if (flag == 1) {
                                    person.setDead(true);
                                    person.setDeathDate(dateVisit);
                                    person.setCauseOfDeath(Dictionary.getConcept(Dictionary.UNKNOWN));
                                    Context.getPersonService().savePerson(person);
                                }
                            }

                        }

                        catch (IndexOutOfBoundsException e) {
                            e.printStackTrace();
                        }
                    } else {
                        break;
                    }
                }
            } catch (IndexOutOfBoundsException e) {
                break;
            }

            rowCountVisit++;
        }
    }

    inputStream.close();
    // workbook.close();
    return new SuccessResult("Saved Patient Data");
}