
org.n3r.eql.mtcp.utils.StringTable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eql Show documentation
Show all versions of eql Show documentation
a simple wrapper framework for jdbc to seperate sql and java code
The newest version!
package org.n3r.eql.mtcp.utils;
import com.google.common.collect.Maps;
import java.util.Map;
/**
* 处理形如下面的字符串数组组成的表
* 表的第一行为表字段名称,null表示一行结束。
*
* tenantId, dbtype, host, port, dbname, username, password, null,
* dba, mysql, localhost, 3306, dba, dba, dba, null,
* dbb, mysql, localhost, 3306, dbb, dbb, dbb, null,
* dbc, mysql, localhost, 3306, dbc, dbc, dbc, null,
* diamond, mysql, localhost, 3306, diamond, diamond, diamond, null
*/
public class StringTable {
private final String[] table;
private final int columnCount;
public StringTable(String tableString) {
this(convert(tableString));
}
public StringTable(String[] table) {
this.table = convert(table);
this.columnCount = findColumnCount(table);
checkTable();
}
private static String[] convert(String tableString) {
String[] parts = tableString.split(",");
return convert(parts);
}
private static String[] convert(String[] table) {
for (int i = 0, ii = table.length; i < ii; ++i) {
if ("null".equals(table[i])) table[i] = null;
}
return table;
}
private static int findColumnCount(String[] table) {
for (int i = 0, ii = table.length; i < ii; ++i) {
if (table[i] == null) return i + 1;
}
throw new RuntimeException("bad table format: no null to identify rows end");
}
private void checkTable() {
if (table.length % columnCount > 0) {
throw new RuntimeException("bad table format : columns in rows is not consistent");
}
}
public Map findRow(String rowkey) {
Map row = Maps.newHashMap();
int rowIndex = findRow(table, columnCount, rowkey);
for (int j = 1; j < columnCount - 1; ++j) {
String key = table[j];
String value = table[rowIndex * columnCount + j];
row.put(key, value);
}
return row;
}
private int findRow(String[] config, int columnCount, String rowkey) {
int maxRows = config.length / columnCount;
for (int row = 1; row < maxRows; ++row) {
String rowTenantId = config[row * columnCount];
if (rowkey.equals(rowTenantId)) return row;
}
throw new RowNotFoundException("row is not found with rowkey" + rowkey);
}
public static class RowNotFoundException extends RuntimeException {
public RowNotFoundException(String msg) {
super(msg);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy