added text replacement option to logger xml

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@630 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2007-04-19 03:22:13 +00:00
parent 28fdbecded
commit d737f76b92
4 changed files with 62 additions and 25 deletions

View File

@ -13,7 +13,11 @@
<!ELEMENT depends ( ref+ ) > <!ELEMENT depends ( ref+ ) >
<!ELEMENT conversion EMPTY > <!ELEMENT replace EMPTY >
<!ATTLIST replace value CDATA #REQUIRED >
<!ATTLIST replace with CDATA #REQUIRED >
<!ELEMENT conversion ( replace* ) >
<!ATTLIST conversion expr CDATA #REQUIRED > <!ATTLIST conversion expr CDATA #REQUIRED >
<!ATTLIST conversion format ( 0 | 0.0 | 0.00 ) #REQUIRED > <!ATTLIST conversion format ( 0 | 0.0 | 0.00 ) #REQUIRED >
<!ATTLIST conversion storagetype ( uint8 | uint16 | float ) #IMPLIED > <!ATTLIST conversion storagetype ( uint8 | uint16 | float ) #IMPLIED >

View File

@ -35,15 +35,18 @@ public final class EcuDerivedParameterConvertorImpl implements EcuDerivedParamet
private final String units; private final String units;
private final String expression; private final String expression;
private final DecimalFormat format; private final DecimalFormat format;
private final Map<String, String> replaceMap;
private final Map<String, ExpressionInfo> expressionInfoMap = synchronizedMap(new HashMap<String, ExpressionInfo>()); private final Map<String, ExpressionInfo> expressionInfoMap = synchronizedMap(new HashMap<String, ExpressionInfo>());
public EcuDerivedParameterConvertorImpl(String units, String expression, String format) { public EcuDerivedParameterConvertorImpl(String units, String expression, String format, Map<String, String> replaceMap) {
checkNotNullOrEmpty(units, "units"); checkNotNullOrEmpty(units, "units");
checkNotNullOrEmpty(expression, "expression"); checkNotNullOrEmpty(expression, "expression");
checkNotNullOrEmpty(format, "format"); checkNotNullOrEmpty(format, "format");
checkNotNull(replaceMap, "replaceMap");
this.units = units; this.units = units;
this.expression = expression; this.expression = expression;
this.format = new DecimalFormat(format); this.format = new DecimalFormat(format);
this.replaceMap = replaceMap;
} }
public double convert(byte[] bytes) { public double convert(byte[] bytes) {
@ -68,7 +71,12 @@ public final class EcuDerivedParameterConvertorImpl implements EcuDerivedParamet
} }
public String format(double value) { public String format(double value) {
return format.format(value); String formattedValue = format.format(value);
if (replaceMap.containsKey(formattedValue)) {
return replaceMap.get(formattedValue);
} else {
return formattedValue;
}
} }
public void setEcuDatas(EcuData[] ecuDatas) { public void setEcuDatas(EcuData[] ecuDatas) {

View File

@ -23,33 +23,35 @@ package enginuity.logger.ecu.definition;
import static enginuity.util.ByteUtil.asUnsignedInt; import static enginuity.util.ByteUtil.asUnsignedInt;
import static enginuity.util.JEPUtil.evaluate; import static enginuity.util.JEPUtil.evaluate;
import static enginuity.util.ParamChecker.checkNotNull;
import static enginuity.util.ParamChecker.checkNotNullOrEmpty; import static enginuity.util.ParamChecker.checkNotNullOrEmpty;
import static java.lang.Float.intBitsToFloat; import static java.lang.Float.intBitsToFloat;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
public final class EcuParameterConvertorImpl implements EcuDataConvertor { public final class EcuParameterConvertorImpl implements EcuDataConvertor {
private final String units; private final String units;
private final String expression; private final String expression;
private final DecimalFormat format; private final DecimalFormat format;
private final boolean isFloat; private final boolean isFloat;
private final Map<String, String> replaceMap;
public EcuParameterConvertorImpl() { public EcuParameterConvertorImpl() {
this("Raw data", "x", "0", false); this("Raw data", "x", "0", false, new HashMap<String, String>());
} }
public EcuParameterConvertorImpl(String units, String expression, String format) { public EcuParameterConvertorImpl(String units, String expression, String format, boolean isFloat, Map<String, String> replaceMap) {
this(units, expression, format, false);
}
public EcuParameterConvertorImpl(String units, String expression, String format, boolean isFloat) {
checkNotNullOrEmpty(units, "units"); checkNotNullOrEmpty(units, "units");
checkNotNullOrEmpty(expression, "expression"); checkNotNullOrEmpty(expression, "expression");
checkNotNullOrEmpty(format, "format"); checkNotNullOrEmpty(format, "format");
checkNotNull(replaceMap, "replaceMap");
this.units = units; this.units = units;
this.expression = expression; this.expression = expression;
this.format = new DecimalFormat(format); this.format = new DecimalFormat(format);
this.isFloat = isFloat; this.isFloat = isFloat;
this.replaceMap = replaceMap;
} }
public double convert(byte[] bytes) { public double convert(byte[] bytes) {
@ -63,7 +65,12 @@ public final class EcuParameterConvertorImpl implements EcuDataConvertor {
} }
public String format(double value) { public String format(double value) {
return format.format(value); String formattedValue = format.format(value);
if (replaceMap.containsKey(formattedValue)) {
return replaceMap.get(formattedValue);
} else {
return formattedValue;
}
} }
public String toString() { public String toString() {

View File

@ -38,7 +38,6 @@ import enginuity.logger.ecu.definition.EcuSwitch;
import enginuity.logger.ecu.definition.EcuSwitchConvertorImpl; import enginuity.logger.ecu.definition.EcuSwitchConvertorImpl;
import enginuity.logger.ecu.definition.EcuSwitchImpl; import enginuity.logger.ecu.definition.EcuSwitchImpl;
import static enginuity.util.ParamChecker.checkNotNullOrEmpty; import static enginuity.util.ParamChecker.checkNotNullOrEmpty;
import static enginuity.util.ParamChecker.isValidBit;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.DefaultHandler;
@ -57,6 +56,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private static final String TAG_ADDRESS = "address"; private static final String TAG_ADDRESS = "address";
private static final String TAG_DEPENDS = "depends"; private static final String TAG_DEPENDS = "depends";
private static final String TAG_CONVERSION = "conversion"; private static final String TAG_CONVERSION = "conversion";
private static final String TAG_REPLACE = "replace";
private static final String TAG_REF = "ref"; private static final String TAG_REF = "ref";
private static final String TAG_SWITCH = "switch"; private static final String TAG_SWITCH = "switch";
private static final String TAG_ECUPARAM = "ecuparam"; private static final String TAG_ECUPARAM = "ecuparam";
@ -80,6 +80,8 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private static final String ATTR_PARITY = "parity"; private static final String ATTR_PARITY = "parity";
private static final String ATTR_CONNECT_TIMEOUT = "connect_timeout"; private static final String ATTR_CONNECT_TIMEOUT = "connect_timeout";
private static final String ATTR_SEND_TIMEOUT = "send_timeout"; private static final String ATTR_SEND_TIMEOUT = "send_timeout";
private static final String ATTR_VALUE = "value";
private static final String ATTR_WITH = "with";
private final String protocol; private final String protocol;
private final String fileLoggingControllerSwitchId; private final String fileLoggingControllerSwitchId;
private final EcuInit ecuInit; private final EcuInit ecuInit;
@ -88,6 +90,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private EcuSwitch fileLoggingControllerSwitch; private EcuSwitch fileLoggingControllerSwitch;
private ConnectionProperties connectionProperties; private ConnectionProperties connectionProperties;
private Map<String, EcuData> ecuDataMap; private Map<String, EcuData> ecuDataMap;
private Map<String, String> replaceMap;
private String id; private String id;
private String name; private String name;
private String desc; private String desc;
@ -97,6 +100,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private EcuAddress address; private EcuAddress address;
private Set<String> dependsList; private Set<String> dependsList;
private Map<String, EcuAddress> ecuAddressMap; private Map<String, EcuAddress> ecuAddressMap;
private boolean isSwitch;
private boolean derived; private boolean derived;
private int addressBit; private int addressBit;
private int addressLength; private int addressLength;
@ -104,6 +108,10 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private Set<EcuDerivedParameterConvertor> derivedConvertorList; private Set<EcuDerivedParameterConvertor> derivedConvertorList;
private StringBuilder charBuffer; private StringBuilder charBuffer;
private boolean parseProtocol; private boolean parseProtocol;
private String conversionUnits;
private String conversionExpression;
private String conversionFormat;
private String conversionStorageType;
public LoggerDefinitionHandler(String protocol, String fileLoggingControllerSwitchId, EcuInit ecuInit) { public LoggerDefinitionHandler(String protocol, String fileLoggingControllerSwitchId, EcuInit ecuInit) {
checkNotNullOrEmpty(protocol, "protocol"); checkNotNullOrEmpty(protocol, "protocol");
@ -136,6 +144,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
ecuByteIndex = attributes.getValue(ATTR_ECUBYTEINDEX); ecuByteIndex = attributes.getValue(ATTR_ECUBYTEINDEX);
ecuBit = attributes.getValue(ATTR_ECUBIT); ecuBit = attributes.getValue(ATTR_ECUBIT);
resetConvertorLists(); resetConvertorLists();
isSwitch = false;
} else if (TAG_ADDRESS.equals(qName)) { } else if (TAG_ADDRESS.equals(qName)) {
String length = attributes.getValue(ATTR_LENGTH); String length = attributes.getValue(ATTR_LENGTH);
addressLength = length == null ? 1 : Integer.valueOf(length); addressLength = length == null ? 1 : Integer.valueOf(length);
@ -148,25 +157,20 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
} else if (TAG_REF.equals(qName)) { } else if (TAG_REF.equals(qName)) {
dependsList.add(attributes.getValue(ATTR_PARAMETER)); dependsList.add(attributes.getValue(ATTR_PARAMETER));
} else if (TAG_CONVERSION.equals(qName)) { } else if (TAG_CONVERSION.equals(qName)) {
if (derived) { conversionUnits = attributes.getValue(ATTR_UNITS);
derivedConvertorList.add(new EcuDerivedParameterConvertorImpl(attributes.getValue(ATTR_UNITS), conversionExpression = attributes.getValue(ATTR_EXPRESSION);
attributes.getValue(ATTR_EXPRESSION), attributes.getValue(ATTR_FORMAT))); conversionFormat = attributes.getValue(ATTR_FORMAT);
} else { conversionStorageType = attributes.getValue(ATTR_STORAGETYPE);
if (isValidBit(address.getBit())) { replaceMap = new HashMap<String, String>();
convertorList.add(new EcuSwitchConvertorImpl(address.getBit())); } else if (TAG_REPLACE.equals(qName)) {
} else { replaceMap.put(attributes.getValue(ATTR_VALUE), attributes.getValue(ATTR_WITH));
convertorList.add(new EcuParameterConvertorImpl(attributes.getValue(ATTR_UNITS),
attributes.getValue(ATTR_EXPRESSION), attributes.getValue(ATTR_FORMAT),
FLOAT.equalsIgnoreCase(attributes.getValue(ATTR_STORAGETYPE))));
}
}
} else if (TAG_SWITCH.equals(qName)) { } else if (TAG_SWITCH.equals(qName)) {
id = attributes.getValue(ATTR_ID); id = attributes.getValue(ATTR_ID);
name = attributes.getValue(ATTR_NAME); name = attributes.getValue(ATTR_NAME);
desc = attributes.getValue(ATTR_DESC); desc = attributes.getValue(ATTR_DESC);
address = new EcuAddressImpl(attributes.getValue(ATTR_BYTE), 1, address = new EcuAddressImpl(attributes.getValue(ATTR_BYTE), 1, Integer.valueOf(attributes.getValue(ATTR_BIT)));
Integer.valueOf(attributes.getValue(ATTR_BIT)));
derived = false; derived = false;
isSwitch = true;
} else if (TAG_ECUPARAM.equals(qName)) { } else if (TAG_ECUPARAM.equals(qName)) {
id = attributes.getValue(ATTR_ID); id = attributes.getValue(ATTR_ID);
name = attributes.getValue(ATTR_NAME); name = attributes.getValue(ATTR_NAME);
@ -174,6 +178,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
resetConvertorLists(); resetConvertorLists();
ecuAddressMap = new HashMap<String, EcuAddress>(); ecuAddressMap = new HashMap<String, EcuAddress>();
derived = false; derived = false;
isSwitch = false;
} else if (TAG_ECU.equals(qName)) { } else if (TAG_ECU.equals(qName)) {
ecuIds = attributes.getValue(ATTR_ID); ecuIds = attributes.getValue(ATTR_ID);
} }
@ -220,6 +225,19 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
ecuDataMap.put(param.getId(), param); ecuDataMap.put(param.getId(), param);
} }
} }
} else if (TAG_CONVERSION.equals(qName)) {
if (derived) {
derivedConvertorList.add(new EcuDerivedParameterConvertorImpl(conversionUnits,
conversionExpression, conversionFormat, replaceMap));
} else {
if (isSwitch) {
convertorList.add(new EcuSwitchConvertorImpl(address.getBit()));
} else {
convertorList.add(new EcuParameterConvertorImpl(conversionUnits,
conversionExpression, conversionFormat,
FLOAT.equalsIgnoreCase(conversionStorageType), replaceMap));
}
}
} else if (TAG_SWITCH.equals(qName)) { } else if (TAG_SWITCH.equals(qName)) {
EcuSwitch ecuSwitch = new EcuSwitchImpl(id, name, desc, address, EcuSwitch ecuSwitch = new EcuSwitchImpl(id, name, desc, address,
new EcuDataConvertor[]{new EcuSwitchConvertorImpl(address.getBit())}); new EcuDataConvertor[]{new EcuSwitchConvertorImpl(address.getBit())});