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; } }