/*
* OpenClinica is distributed under the
* GNU Lesser General Public License (GNU LGPL).
* For details see: http://www.openclinica.org/license
* copyright 2003-2011 Akaza Research
*/
package org.akaza.openclinica.control.form.spreadsheet;
import org.akaza.openclinica.i18n.util.ResourceBundleProvider;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
/**
* Error message for SpreadSheet uploading cooperating with existing message handling style.
*/
//ywang (Aug. 2011)
public final class SheetErrors {
List<StringBuffer> errors;
Map<String,String> htmlErrors;
ResourceBundle resPageMsg;
/**
* Locale is "US"
*/
public SheetErrors() {
errors = new ArrayList<StringBuffer>();
htmlErrors = new HashMap<String,String>();
resPageMsg = ResourceBundleProvider.getPageMessagesBundle(Locale.US);
}
public SheetErrors(ResourceBundle resPageMsg) {
this.resPageMsg = resPageMsg;
errors = new ArrayList<StringBuffer>();
htmlErrors = new HashMap<String,String>();
}
/**
* e.g., htmlErrors.put(j + "," + k + ",16", "INVALID FIELD");
*/
public void putHtmlError(int sheetNum, int rowNum, int colNum, String message) {
htmlErrors.put(htmlErrorKey(sheetNum, rowNum, colNum), message);
}
protected String htmlErrorKey(int sheetNum, int rowNum, int colNum) {
StringBuilder s = new StringBuilder();
s.append(sheetNum);
s.append(",");
s.append(rowNum);
s.append(",");
s.append(colNum);
return s.toString();
}
/**
* i18n arguments have to be done before passed in. <br/>
* Returned message will like: colTitle, message for forwhich.
* e.g., colTitle = RESPONSE_LABEL_column, message = is required (message), forWhich = check-box:
* RESPONSE_LABEL_column, is required for check-box <br/>
* @param colTitle
* @param message
* @param forWhich
* @return
*/
protected StringBuffer errorMessage(String colTitle, String message, String forWhich) {
StringBuffer s = new StringBuffer(colTitle);
s.append(",");
s.append(message);
s.append(" ");
s.append(resPageMsg.getString("for"));
s.append(" ");
s.append(forWhich);
return s;
}
/**
* error added will like: <message> at row <rowNum> items worksheet.
*
* @param rowNum
* @param message
*/
protected void addError(int rowNum, StringBuffer message) {
/*
* errors.add(resPageMsg.getString("expression_not_start_with_func_at") + " " + k + ", "
+ resPageMsg.getString("items_worksheet") + ".");
*/
StringBuffer s = new StringBuffer(message);
s.append(" ");
s.append(resPageMsg.getString("at_row"));
s.append(" ");
s.append(rowNum);
s.append(", ");
s.append(resPageMsg.getString("items_worksheet"));
s.append(".");
errors.add(s);
}
public Map<String,String> putHtmlErrorsToSheet(Map<String, String> htmlErrorsFromSheet) {
htmlErrorsFromSheet.putAll(htmlErrors);
return htmlErrorsFromSheet == null ? new HashMap<String,String>() : htmlErrorsFromSheet;
}
public List<String> addErrorsToSheet(List<String> errorsFromSheet) {
if(errors.size()>0) {
for(StringBuffer s : errors) {
errorsFromSheet.add(s.toString());
}
}
return errorsFromSheet == null ? new ArrayList<String>() : errorsFromSheet;
}
public List<StringBuffer> getErrors() {
return errors;
}
public void setErrors(List<StringBuffer> errors) {
this.errors = errors;
}
public Map<String, String> getHtmlErrors() {
return htmlErrors;
}
public void setHtmlErrors(Map<String, String> htmlErrors) {
this.htmlErrors = htmlErrors;
}
public ResourceBundle getResPageMsg() {
return resPageMsg;
}
public void setResPageMsg(ResourceBundle resPageMsg) {
this.resPageMsg = resPageMsg;
}
}