package com.github.ryhmrt.mssqldiff.convertor; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import com.github.ryhmrt.mssqldiff.csv.SchemaCsv; import com.github.ryhmrt.mssqldiff.data.Column; import com.github.ryhmrt.mssqldiff.data.Permission; import com.github.ryhmrt.mssqldiff.data.Table; public class TableConvertor { private ColumnConvertor columnConvertor = new ColumnConvertor(); private PermissionConvertor permissionConvertor = new PermissionConvertor(); private Map<String, Table> tableCache = new HashMap<String, Table>(); public Table convert(SchemaCsv csv) { Table table = csvToTable(csv); addColumnToTable(csv, table); addPermissionToTable(csv, table); return table; } private void addColumnToTable(SchemaCsv csv, Table table) { Column column = columnConvertor.convert(csv); if (!table.getColumns().contains(column)) { table.getColumns().add(column); } } private void addPermissionToTable(SchemaCsv csv, Table table) { Permission permission = permissionConvertor.convert(csv); if (permission != null && !table.getPermissions().contains(permission)) { table.getPermissions().add(permission); } } private Table csvToTable(SchemaCsv csv) { Table table = tableCache.get(csv.getTableName()); if (table == null) { table = new Table(); table.setName(csv.getTableName()); table.setType(csv.getObjectType()); table.setDescription(csv.getTableDescription()); table.setColumns(new ArrayList<Column>()); table.setPermissions(new ArrayList<Permission>()); tableCache.put(csv.getTableName(), table); } return table; } }