package com.stratio.connector.commons.ptest.thread; import com.stratio.connector.commons.metadata.TableMetadataBuilder; import com.stratio.connector.commons.ptest.util.EficiencyBean; import com.stratio.connector.commons.ptest.util.TextFileParser; import com.stratio.connector.commons.util.SelectorHelper; import com.stratio.crossdata.common.connector.IConnector; import com.stratio.crossdata.common.connector.IStorageEngine; import com.stratio.crossdata.common.data.Cell; import com.stratio.crossdata.common.data.ClusterName; import com.stratio.crossdata.common.data.Row; import com.stratio.crossdata.common.exceptions.ConnectorException; import com.stratio.crossdata.common.metadata.ColumnType; import com.stratio.crossdata.common.metadata.DataType; import com.stratio.crossdata.common.metadata.TableMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class InsertThread extends Thread { public static final String INSERTER_COLUMN_NAME = "inserter"; /** * The Log. */ static final transient Logger LOGGER = LoggerFactory.getLogger(SelectorHelper.class); private final IConnector connector; private final String catalog; private final String table; private ClusterName targetCluster; private boolean isNotExists; private Integer id; public InsertThread(Integer id, ClusterName targetCluster, IConnector connector, String catalog, String table, boolean isNotExists) { super(InsertThread.class.getName() + "_" + id); this.id = id; this.targetCluster = targetCluster; this.connector = connector; this.isNotExists = isNotExists; this.catalog = catalog; this.table = table; } public void run() { BufferedReader bf = null; try { String line; TableMetadata tableMetadata = createTableMetadata(); bf = new BufferedReader(new FileReader(TextFileParser.getFilePath(id))); IStorageEngine storageEngine = connector.getStorageEngine(); while ((line = bf.readLine()) != null) { EficiencyBean eficiencyBean = new EficiencyBean(line); Row row = createRow(eficiencyBean); storageEngine.insert(targetCluster, tableMetadata, row, isNotExists); } insertDefaultLine(tableMetadata, storageEngine); } catch (IOException | ConnectorException e) { LOGGER.error("Fail insert a row in thread " + id + "." + e); e.printStackTrace(); } finally { closeFile(bf); LOGGER.debug("Finis inserter thread " + id); } } private void insertDefaultLine(TableMetadata tableMetadata, IStorageEngine storageEngine) throws ConnectorException { EficiencyBean eficiencyBean = new EficiencyBean(-id, "Jose", false, "Palencia", "En un lugar de la mancha", 33, "RandomKEy"); storageEngine.insert(targetCluster, tableMetadata, createRow(eficiencyBean), isNotExists); } private void closeFile(BufferedReader bf) { if (bf != null) { try { bf.close(); } catch (IOException e) { LOGGER.error("Fail close file " + TextFileParser.getFilePath(id)); e.printStackTrace(); } } } private Row createRow(EficiencyBean eficiencyBean) { Row row = eficiencyBean.getRow(); row.addCell(INSERTER_COLUMN_NAME, new Cell("inserter_" + id)); return row; } private TableMetadata createTableMetadata() { TableMetadataBuilder tableMetadataBuilder = EficiencyBean.getTableMetadata(catalog, targetCluster .getName()); tableMetadataBuilder.addColumn(INSERTER_COLUMN_NAME, new ColumnType(DataType.TEXT)); return tableMetadataBuilder.build(false); } }