com.noga.njexl.testing.dataprovider.excel.ExcelDataSource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of njexl.testing Show documentation
Show all versions of njexl.testing Show documentation
The Commons Jexl library is an implementation of the JSTL Expression Language with extensions.
This was customized by nmondal.
The newest version!
/**
* Copyright 2015 Nabarun Mondal
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.noga.njexl.testing.dataprovider.excel;
import com.noga.njexl.testing.dataprovider.DataSource;
import com.noga.njexl.testing.dataprovider.DataSourceTable;
import com.noga.njexl.lang.extension.dataaccess.DataMatrix.DataLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
/**
* Excel Files as data sources,
* While use sheets as tables
*/
public class ExcelDataSource extends DataSource {
public static final Pattern LOADER_PATTERN = Pattern.compile(".+\\.xls[x]?[m]?$",Pattern.CASE_INSENSITIVE);
public static final DataLoader DATA_LOADER = new ExcelDataSource();
/**
* Excel sheet as data table
*/
public static class ExcelDataTable extends DataSourceTable {
DataSource dataSource;
String name;
ArrayList data;
@Override
public String name() {
return name;
}
@Override
public int length() {
return data.size();
}
@Override
public String[] row(int rowIndex) {
if ( rowIndex < data.size() ) {
return data.get(rowIndex);
}
return null;
}
@Override
public DataSource dataSource() {
return dataSource;
}
private void init(ExcelReader reader){
data = new ArrayList<>();
int colSize = reader.columnCount(name);
int rowSize = reader.rowCount(name);
for ( int row = 0 ; row < rowSize; row++ ){
String[] words = new String[colSize];
for ( int col = 0 ; col < colSize; col++ ){
words[col] = reader.value(name, row, col);
}
data.add(words);
}
}
/**
* Creates an data table
* @param reader excel reader
* @param ds the parent data source object
* @param sheetName the sheet to be used as table
*/
public ExcelDataTable(ExcelReader reader, ExcelDataSource ds, String sheetName){
name = sheetName ;
dataSource = ds ;
init(reader);
}
}
@Override
protected Map init(String location) throws Exception {
HashMap tables = new HashMap<>();
String l = location.toLowerCase();
ExcelReader reader ;
if ( l.endsWith(".xls")){
reader = new XlsReader(location);
}
else{
reader = new XlsXReader(location);
}
String[] sheetNames = reader.sheets();
for ( int i = 0 ; i < sheetNames.length;i++ ){
DataSourceTable table = new ExcelDataTable(reader, this, sheetNames[i]);
tables.put(table.name(), table);
}
return tables;
}
public ExcelDataSource(String location) throws Exception {
super(location);
}
public ExcelDataSource(){}
}