fr.inria.teap.dcnsacfgeneration.tools.XLSInjector.java Source code

Java tutorial

Introduction

Here is the source code for fr.inria.teap.dcnsacfgeneration.tools.XLSInjector.java

Source

/********************************************************************************
 * Copyright (c) 2013 INRIA. 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *  
 * Contributors: 
 *    INRIA - Initial implementation
 *********************************************************************************/

package fr.inria.teap.dcnsacfgeneration.tools;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;

import fr.obeo.smartea.injector.xls.BooleanValue;
import fr.obeo.smartea.injector.xls.Cell;
import fr.obeo.smartea.injector.xls.Data;
import fr.obeo.smartea.injector.xls.NumberValue;
import fr.obeo.smartea.injector.xls.Row;
import fr.obeo.smartea.injector.xls.StringValue;
import fr.obeo.smartea.injector.xls.Table;
import fr.obeo.smartea.injector.xls.ValueType;
import fr.obeo.smartea.injector.xls.Workbook;
import fr.obeo.smartea.injector.xls.Worksheet;
import fr.obeo.smartea.injector.xls.XlsFactory;

/**
 * XLS file to XLS model injector.
 * 
 * @author <a href="mailto:william.piers@obeo.fr">William Piers</a>
 * @author <a href="mailto:matthieu.allon@gmail.com">Matthieu Allon</a>
 */
public class XLSInjector {

    private int maxNumberCell = 0;

    public Workbook inject(HSSFWorkbook xlsWorkbook) {
        Workbook workbook = XlsFactory.eINSTANCE.createWorkbook();
        for (int i = 0; i < xlsWorkbook.getNumberOfSheets(); i++) {
            Sheet xlsSheet = xlsWorkbook.getSheetAt(i);
            workbook.getWb_worksheets().add(inject(xlsSheet));
        }
        return workbook;
    }

    public Worksheet inject(Sheet xlsSheet) {
        Worksheet sheet = XlsFactory.eINSTANCE.createWorksheet();
        sheet.setName(xlsSheet.getSheetName());
        Table table = XlsFactory.eINSTANCE.createTable();
        sheet.setWs_table(table);
        for (org.apache.poi.ss.usermodel.Row xlsRow : xlsSheet) {
            //Management of the rows just inserted by user (and so with empty cells)
            if (xlsRow.getCell(0) != null) {
                if (!StringUtils.isBlank(xlsRow.getCell(0).getStringCellValue())) {
                    table.getT_rows().add(inject(xlsRow));
                }
            }
        }
        return sheet;
    }

    public Row inject(org.apache.poi.ss.usermodel.Row xlsRow) {
        Row row = XlsFactory.eINSTANCE.createRow();

        //Iterator ignore null object, but it is necessary to consider
        //cells with null value (this cells are null objects in the Apache POI API)
        for (int i = 0; i < xlsRow.getLastCellNum(); i++) {
            row.getR_cells().add(inject(xlsRow.getCell(i)));
        }
        return row;
    }

    public Cell inject(org.apache.poi.ss.usermodel.Cell xlsCell) {
        Cell cell = XlsFactory.eINSTANCE.createCell();
        Data data = XlsFactory.eINSTANCE.createData();
        ValueType value = null;
        if (xlsCell == null) {
            value = XlsFactory.eINSTANCE.createStringValue();
            ((StringValue) value).setValue("");
        } else {
            switch (xlsCell.getCellType()) {
            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_BOOLEAN:
                value = XlsFactory.eINSTANCE.createBooleanValue();
                ((BooleanValue) value).setValue(xlsCell.getBooleanCellValue());
                break;

            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:
            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_BLANK:
            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_FORMULA:
                value = XlsFactory.eINSTANCE.createStringValue();
                ((StringValue) value).setValue(xlsCell.getStringCellValue());
                break;

            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC:
                value = XlsFactory.eINSTANCE.createNumberValue();
                ((NumberValue) value).setValue(xlsCell.getNumericCellValue());
                break;

            case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_ERROR:
                value = XlsFactory.eINSTANCE.createErrorValue();
                break;

            default:
                break;
            }
        }
        data.setValue(value);
        cell.setC_data(data);
        return cell;
    }

    public static HSSFWorkbook readWorkbook(String xlsFileName) throws IOException {
        InputStream input = new FileInputStream(xlsFileName);
        HSSFWorkbook xlsWorkbook = new HSSFWorkbook(input);
        input.close();
        return xlsWorkbook;
    }
}