package topasin.describer;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import topasin.calculate.AsinDetailAnalysisFields;
import topasin.compare.AsinComparable;
import topasin.util.AsinDetail;
import topasin.util.TopAsinContext;
import topasin.util.TopAsinUtil;
/**
* output key fields seted in TopAsinFileBasedTransformer.Describer.KeyFields
*
* @author mengzang
*
*/
public class TopAsinKeyFieldsDescriber implements TopAsinDescriber {
AsinDetailAnalysisFields analysisFields;
private static int[] KEY_FIELDS_INDEX;
private static String KEY_FIELDS_TITLE;
private String[] origKeyFieldValues;
private String[] newKeyFieldValues;
public static void initKeyFieldNames(Map<String, Object> rtOptions) {
@SuppressWarnings("unchecked")
List<String> keyFieldsList = (List<String>) rtOptions.get(TopAsinContext.DESCRIBER_KEY_FIELD_NAMES);
String[] keyFieldsNames = keyFieldsList.toArray(new String[0]);
AsinDetail.addNeededFields(keyFieldsNames);
KEY_FIELDS_INDEX = new int[keyFieldsNames.length];
StringBuilder titleLine = new StringBuilder("Asin,Compare Val Diff,Compare Val Orig,Compare Val New");
for (int i = 0; i < keyFieldsNames.length; i++) {
KEY_FIELDS_INDEX[i] = AsinDetail.getIndexFromFieldName(keyFieldsNames[i]);
String title = AsinDetail.getFieldDisplayNameFromIndex(KEY_FIELDS_INDEX[i]);
titleLine.append(",");
titleLine.append(title);
titleLine.append(" Orig");
titleLine.append(",");
titleLine.append(title);
titleLine.append(" New");
}
KEY_FIELDS_TITLE = titleLine.toString();
}
@Override
public void fillDataForOutput(int source, String asinDetailLine, AsinDetail asinDetail,
AsinDetailAnalysisFields analysisFields) {
if (this.analysisFields == null) {
this.analysisFields = analysisFields;
}
fillKeyFields(source, asinDetail);
}
private void fillKeyFields(int source, AsinDetail asinDetail) {
if (KEY_FIELDS_INDEX != null) {
String[] value2Fill = null;
if (source == TopAsinContext.ORIG_SOURCE) {
if (origKeyFieldValues != null) {
return;
}
value2Fill = origKeyFieldValues = new String[KEY_FIELDS_INDEX.length];
} else if (source == TopAsinContext.NEW_SOURCE) {
if (newKeyFieldValues != null) {
return;
}
value2Fill = newKeyFieldValues = new String[KEY_FIELDS_INDEX.length];
} else {
throw new IllegalArgumentException("Unknown source when fill data to asin describer: " + source);
}
for (int i = 0; i < KEY_FIELDS_INDEX.length; i++) {
value2Fill[i] = asinDetail.getStringFieldValue(KEY_FIELDS_INDEX[i]);
}
}
}
@Override
public String getTopAsinDescription() {
StringBuilder topAsinDesc = new StringBuilder();
AsinComparable cmp = analysisFields.getComparable();
topAsinDesc.append("\"" + analysisFields.getAsin() + "\",");
topAsinDesc.append("\"" + cmp.getCompareDiffDisplayValue() + "\",");
topAsinDesc.append("\"" + cmp.getCompareOrigDisplayValue() + "\",");
topAsinDesc.append("\"" + cmp.getCompareNewDisplayValue() + "\"");
if (KEY_FIELDS_INDEX.length > 0) {
for (int i = 0; i < KEY_FIELDS_INDEX.length; i++) {
topAsinDesc.append(",\"" + (origKeyFieldValues != null ? origKeyFieldValues[i] + "\"" : "N/A\""));
topAsinDesc.append(",\"" + (newKeyFieldValues != null ? newKeyFieldValues[i] + "\"" : "N/A\""));
}
}
return topAsinDesc.toString();
}
@Override
public String getTopAsinGroupStartDescription() {
StringBuilder groupTitle = new StringBuilder();
TopAsinUtil.appendLine(groupTitle, "Top Asin key fileds Details for group:" + analysisFields.getGroupKey());
if (StringUtils.isNotBlank(KEY_FIELDS_TITLE) == true) {
groupTitle.append(KEY_FIELDS_TITLE);
}
return groupTitle.toString();
}
}