Initial commit

This commit is contained in:
casim
2025-10-31 23:21:03 +01:00
commit 332f12bca2
238 changed files with 128397 additions and 0 deletions

View File

@@ -0,0 +1,204 @@
package de.lcag.common;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Table holds information for actions to take when integrating changes done in
* Client Table into a Master Table
*/
public class TableComparisonResult {
private Table masterTable;
private Table clientTable;
private Collection<String> commonColumns;
private Collection<String> columnsToAddToMaster;
private Collection<String> columnsToDeleteFromMaster;
private Collection<Integer> rowsToAddFromClient = new ArrayList<>();
private Collection<Integer> rowsToDeleteFromMaster = new ArrayList<>();
public int getTotalNumberOfComparedCells() {
return totalNumberOfComparedCells;
}
public void setTotalNumberOfComparedCells(int totalNumberOfComparedCells) {
this.totalNumberOfComparedCells = totalNumberOfComparedCells;
}
public int getTotalNumberOfDifferentCells() {
return totalNumberOfDifferentCells;
}
public double getPercentEqual() {
double result = 0;
if (totalNumberOfComparedCells > 0) {
result = 1 - totalNumberOfDifferentCells * 1.0 / totalNumberOfComparedCells;
}
return result;
}
public void setTotalNumberOfDifferentCells(int totalNumberOfDifferentCells) {
this.totalNumberOfDifferentCells = totalNumberOfDifferentCells;
}
private int totalNumberOfComparedCells = 0;
private int totalNumberOfDifferentCells = 0;
public class CellPair {
public String key;
public int clientRow;
public String masterColName, clientColName;
public CellPair(String pKey, String pMasterColName, int pClientRowNo, String pClientColName) {
this.key = pKey;
this.clientRow = pClientRowNo;
this.masterColName = pMasterColName;
this.clientColName = pClientColName;
}
}
private LinkedHashMap<String, List<CellPair>> cellsToChangeInMasterPerRow = new LinkedHashMap<>();
public TableComparisonResult(Table pMasterTable, Table pClientTable) {
this.masterTable = pMasterTable;
this.clientTable = pClientTable;
}
public Table getMasterTable() {
return masterTable;
}
public Table getClientTable() {
return clientTable;
}
public Collection<String> getColumnsToAddToMaster() {
return columnsToAddToMaster;
}
public Collection<String> getColumnsToDeleteFromMaster() {
return columnsToDeleteFromMaster;
}
public Collection<Integer> getRowsToAddFromClient() {
return rowsToAddFromClient;
}
public Collection<Integer> getRowsToDeleteFromMaster() {
return rowsToDeleteFromMaster;
}
public Map<String, List<CellPair>> getCellsToChangeInMaster() {
return cellsToChangeInMasterPerRow;
}
public void addCellDifference(String pKey, int pMasterRowNo, String pMasterColName, int pCmpRowNo,
String pClientColName) {
CellPair cellPair = new CellPair(pKey, pMasterColName, pCmpRowNo, pClientColName);
List<CellPair> changesInRow = this.cellsToChangeInMasterPerRow.getOrDefault(pKey, new ArrayList<>());
changesInRow.add(cellPair);
if (changesInRow.size() == 1)
this.cellsToChangeInMasterPerRow.put(pKey, changesInRow);
}
public Collection<String> getCommonColumns() {
return this.commonColumns;
}
public void setCommonColumns(Collection<String> pCommonColNames) {
this.commonColumns = pCommonColNames;
}
public void setColumnsToAdd(Collection<String> pClientsOnlyColNames) {
this.columnsToAddToMaster = pClientsOnlyColNames;
}
public void setColumnsToDelete(Collection<String> pMastersOnlyColNames) {
this.columnsToDeleteFromMaster = pMastersOnlyColNames;
}
public void addRowToAdd(int pFromClientRowNo) {
this.rowsToAddFromClient.add(pFromClientRowNo);
}
public void addRowToDelete(int pFromMasterRowNo) {
this.rowsToDeleteFromMaster.add(pFromMasterRowNo);
}
public void generateMergedExcelFile(String pFilePath) throws IOException {
ExcelWorkbook resultTable = new ExcelWorkbook(pFilePath);
resultTable.saveAs(pFilePath);
}
boolean tablesAreInconsistent() {
boolean result = !cellsToChangeInMasterPerRow.isEmpty();
return result;
}
boolean masterIncludesClientTable() {
boolean result = columnsToAddToMaster.isEmpty() && rowsToAddFromClient.isEmpty()
&& cellsToChangeInMasterPerRow.isEmpty();
return result;
}
boolean tablesAreEqual() {
boolean result = masterIncludesClientTable() && columnsToDeleteFromMaster.isEmpty()
&& rowsToDeleteFromMaster.isEmpty();
return result;
}
public Table integrateDifferencesIntoMaster() throws IOException {
masterTable.integrateDiff(this);
return masterTable;
}
public HashTable getSummary() {
HashTable result = new HashTable("Compare Statistic Subject", "Count");
result.addRow("Rows only in master table", this.rowsToDeleteFromMaster.size());
result.addRow("Rows only in client table", this.rowsToAddFromClient.size());
List<Integer> numberOfRowsWithNumberOfChanges = new ArrayList<>();
for (int i = 1; i < masterTable.getNoColumns(); i++) {
numberOfRowsWithNumberOfChanges.add(0);
}
for (List<CellPair> changeList : this.cellsToChangeInMasterPerRow.values()) {
int n = changeList.size();
int currentCount = numberOfRowsWithNumberOfChanges.get(n) + 1;
numberOfRowsWithNumberOfChanges.set(n, currentCount);
}
int noChanges = 0;
for (int n = 0; n < numberOfRowsWithNumberOfChanges.size(); n++) {
Integer noChangesInRow = numberOfRowsWithNumberOfChanges.get(n);
noChanges += noChangesInRow;
if (noChangesInRow > 0)
result.addRow(String.format("Rows with %d differences", n), noChangesInRow);
}
result.addRow("Total number of compared cells", this.totalNumberOfComparedCells);
result.addRow("Total number of different cells", this.totalNumberOfDifferentCells);
double percentEqual = this.getPercentEqual();
result.addRow("Percent equal", String.format("%.1f%%", percentEqual * 100.0));
return result;
}
}