/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingspectator.csvtotransactions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
*
* @author Mohsen Vakilian
*
*/
public class Transaction {
private static final String TRANSACTION_IDENTIFIER_COLUMN_NAME= "TRANSACTION_IDENTIFIER";
private List<CSVRow> rows;
private TransactionPatterns transactionPatterns;
private int transactionIdentifier;
private int transactionPatternIdentifier;
public Transaction(int transactionIdentifier, TransactionPatterns transactionPatterns) {
this.transactionIdentifier= transactionIdentifier;
this.rows= new ArrayList<CSVRow>();
this.transactionPatterns= transactionPatterns;
}
public void add(CSVRow item) {
rows.add(item);
}
private List<CSVRow> getNormalizedRows() {
Set<CSVRow> itemsSet= new HashSet<CSVRow>();
itemsSet.addAll(rows);
List<CSVRow> sortedItems= Arrays.asList(itemsSet.toArray(new CSVRow[] {}));
Collections.sort(sortedItems);
return sortedItems;
}
private Set<String> getItemsSet() {
Set<String> itemsSet= new HashSet<String>();
for (CSVRow row : rows) {
itemsSet.add(row.getItem());
}
return itemsSet;
}
public void setTransactionPatternIdentifier() {
Set<String> itemsSet= getItemsSet();
transactionPatternIdentifier= transactionPatterns.findTransactionPattern(itemsSet);
if (transactionPatternIdentifier == -1) {
transactionPatternIdentifier= transactionPatterns.addTransactionPattern(itemsSet);
}
}
public String getDetailedStringHeader() {
String header= String.format("%s,%s", TRANSACTION_IDENTIFIER_COLUMN_NAME, TransactionPattern.TRANSACTION_PATTERN_IDENTIFIER_COLUMN_NAME);
if (!rows.isEmpty()) {
header+= "," + rows.get(0).getDetailedStringHeader();
}
return header;
}
public String getDetailedString() {
StringBuilder sb= new StringBuilder();
Iterator<CSVRow> iterator= rows.iterator();
boolean isFirstRow= true;
while (iterator.hasNext()) {
String nextRowString= String.format("%s,%s,%s", transactionIdentifier, transactionPatternIdentifier, iterator.next().getDetailedString());
if (!isFirstRow) {
sb.append("\n");
}
sb.append(nextRowString);
isFirstRow= false;
}
return sb.toString();
}
@Override
public String toString() {
StringBuilder sb= new StringBuilder();
Iterator<CSVRow> iterator= getNormalizedRows().iterator();
boolean isFirstRow= true;
while (iterator.hasNext()) {
if (!isFirstRow) {
sb.append(",");
}
sb.append(iterator.next().toString());
isFirstRow= false;
}
return sb.toString();
}
}