package com.openMap1.mapper.core;
import java.util.Vector;
/**
* Data item that gives one row of the Translation Summary View
* after running a translation test.
*
* @author robert
*
*/
public class TranslationSummaryItem implements SortableRow{
/**
* Make a new TranslationSummaryItem , before recording anything in it
* @param resultCode
*/
public TranslationSummaryItem(String resultCode)
{
this.resultCode = resultCode;
translationIssues = new Vector<TranslationIssue>();
sourceItemCount = 0;
resultItemCount = 0;
}
/**
* column titles for the Translation Summary View
*/
static public String[] columnTitle = {
"Code",
"Steps",
"Source items",
"Percent",
"Issues"
};
/**
* column widths for the Translation Summary View
*/
static public int[] columnWidth = {50,50,80,60,60};
static int CODE = 0;
static int STEPS = 1;
static int SOURCE_ITEMS = 2;
static int PERCENT_FIT = 3;
static int ISSUES = 4;
/**
* int constants STRING, NUMBER defined in RowSorter which define how
* each column is to be sorted
*/
public static int[] sortType()
{
int len = columnTitle.length;
int[] sType = new int[len];
sType[CODE] = STRING;
sType[STEPS] = NUMBER;
sType[SOURCE_ITEMS] = NUMBER;
sType[PERCENT_FIT] = NUMBER;
sType[ISSUES] = NUMBER;
return sType;
}
/**
* @param col column index
* @return column contents for the Translation Summary View
*/
public String cellContents(int col)
{
String cell = "";
if (col == CODE) cell = resultCode();
if (col == STEPS) cell = new Integer(resultCode().length() -1).toString();
if (col == SOURCE_ITEMS) cell = new Integer(sourceItemCount).toString();
if (col == PERCENT_FIT) cell = new Integer(percentFit()).toString();
if (col == ISSUES) cell = new Integer(translationIssues.size()).toString();
return cell;
}
/**
* for an object to serve as a sortable row for class RowSorter,
* it must be able to present the cell contents as a Vector.
* @return
*/
public Vector<?> rowVector()
{
Vector<String> row = new Vector<String>();
for (int i = 0; i < columnTitle.length;i++) row.add(cellContents(i));
return row;
}
/**
* @return coded name of the translation test result that this summarises,
* such as 'AB'
*/
public String resultCode() {return resultCode;}
private String resultCode;
/**
* @return number of information items (objects, links, or attribute values)
* in the first source of the translation chain giving the result
*/
public int sourceItemCount() {return sourceItemCount;}
public void setSourceItemCount(int sourceItemCount) {this.sourceItemCount = sourceItemCount;}
private int sourceItemCount;
/**
* @return number of information items (objects, links, or attribute values)
* in the final result of the translation chain, which exactly match the
* corresponding information items in the source
*/
public int resultItemCount() {return resultItemCount;}
public void setResultItemCount(int resultItemCount) {this.resultItemCount = resultItemCount;}
private int resultItemCount;
/**
* @return the matching result item count as a percentage of the source item count
*/
public int percentFit()
{
if (sourceItemCount == 0) return 0;
double numerator = 100*resultItemCount;
double denominator = sourceItemCount;
return (new Double(numerator/denominator).intValue());
}
/**
* @return the distinct translation issues detected
*/
public Vector<TranslationIssue> translationIssues() {return translationIssues;}
private Vector<TranslationIssue> translationIssues;
/** record a validation issue */
public void addValidationIssue(ValidationIssue vi) {translationIssues.add(vi);}
/** record a compilation issue */
public void addCompilationIssue(CompilationIssue ci) {translationIssues.add(ci);}
/** record a runtime issue */
public void addRunIssue(RunIssue ri) {translationIssues.add(ri);}
/** record a schema mismatch in a result */
public void addSchemaMismatch(SchemaMismatch sm) {translationIssues.add(sm);}
/** record a structure mismatch in a result */
public void addStructureMismatch(StructureMismatch sm) {translationIssues.add(sm);}
/** record a semantic mismatch in a result */
public void addSemanticMismatch(SemanticMismatch sm) {translationIssues.add(sm);}
}