package foundation.state;
|
|
import foundation.dao.DataPackage;
|
import foundation.data.entity.Entity;
|
import foundation.variant.expression.VariantExpression;
|
import foundation.variant.expression.VariantList;
|
import foundation.variant.expression.VariantSegment;
|
|
public class StateMessage {
|
|
private String dataName;
|
private String errorCode;
|
private String template;
|
private VariantExpression expression;
|
|
public StateMessage() {
|
|
}
|
|
public StateMessage(String defaultValue) {
|
this.template = defaultValue;
|
}
|
|
public static StateMessage getInstance(String targetId, String errorCode, String defaultValue) {
|
String key = StateMessage.createKey(targetId, errorCode);
|
|
StateMessageBucket bucket = StateMessageBucket.getInstance();
|
StateMessage result = bucket.get(key);
|
|
if (result == null) {
|
result = new StateMessage(defaultValue);
|
}
|
|
return result;
|
}
|
|
public void load(Entity entity) throws Exception {
|
dataName = entity.getString("data_name");
|
errorCode = entity.getString("error_code");
|
template = entity.getString("error_message");
|
|
expression = new VariantExpression(template);
|
}
|
|
public String getContent(DataPackage... datas) {
|
if (datas.length == 0) {
|
return template;
|
}
|
|
//@{package.item.field}
|
if(expression == null) {
|
return template;
|
}
|
|
VariantList variants = expression.getVariantList();
|
|
for (DataPackage data: datas) {
|
String dataName = data.getName() + ".";
|
dataName = dataName.toLowerCase();
|
|
for (VariantSegment variant: variants) {
|
String name = variant.getName();
|
name = name.toLowerCase();
|
|
if (!name.startsWith(dataName)) {
|
continue;
|
}
|
|
String segment = name.substring(dataName.length());
|
String value = data.getItemValue(segment);
|
variant.setValue(value);
|
}
|
}
|
|
return expression.toString();
|
}
|
|
public StateMessage newInstance() {
|
StateMessage result = new StateMessage(template);
|
|
try {
|
result.expression = this.expression.newInstance();
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return result;
|
}
|
|
public static String createKey(String targetId, String errorCode) {
|
String result = targetId + "_" + errorCode;
|
result = result.toLowerCase();
|
return result;
|
}
|
|
public String createKey() {
|
String result = dataName + "_" + errorCode;
|
result = result.toLowerCase();
|
return result;
|
}
|
|
}
|