diff --git a/profile.dtd b/profile.dtd
index 3fcecefc..7b4a25e5 100644
--- a/profile.dtd
+++ b/profile.dtd
@@ -5,6 +5,7 @@
+
diff --git a/profile.xml b/profile.xml
index b0722383..eb8568b6 100644
--- a/profile.xml
+++ b/profile.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/src/enginuity/logger/EcuLogger.java b/src/enginuity/logger/EcuLogger.java
index 88290a17..3fbbe137 100644
--- a/src/enginuity/logger/EcuLogger.java
+++ b/src/enginuity/logger/EcuLogger.java
@@ -205,6 +205,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
sort(ecuParams, new EcuDataComparator());
for (EcuParameter ecuParam : ecuParams) {
if (profile == null || profile.contains(ecuParam)) {
+ setDefaultUnits(profile, ecuParam);
dataTabParamListTableModel.addParam(ecuParam, isSelectedOnLiveDataTab(profile, ecuParam));
graphTabParamListTableModel.addParam(ecuParam, isSelectedOnGraphTab(profile, ecuParam));
dashboardTabParamListTableModel.addParam(ecuParam, isSelectedOnDashTab(profile, ecuParam));
@@ -223,6 +224,16 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
}
+ private void setDefaultUnits(UserProfile profile, EcuParameter ecuParam) {
+ if (profile != null) {
+ try {
+ ecuParam.selectConvertor(profile.getSelectedConvertor(ecuParam));
+ } catch (Exception e) {
+ reportError(e);
+ }
+ }
+ }
+
private boolean isSelectedOnLiveDataTab(UserProfile profile, EcuData ecuData) {
return profile != null && profile.isSelectedOnLiveDataTab(ecuData);
}
diff --git a/src/enginuity/logger/ui/UserProfile.java b/src/enginuity/logger/ui/UserProfile.java
index 594af8f6..c8d4b478 100644
--- a/src/enginuity/logger/ui/UserProfile.java
+++ b/src/enginuity/logger/ui/UserProfile.java
@@ -1,6 +1,7 @@
package enginuity.logger.ui;
import enginuity.logger.definition.EcuData;
+import enginuity.logger.definition.EcuDataConvertor;
public interface UserProfile {
@@ -12,4 +13,5 @@ public interface UserProfile {
boolean isSelectedOnDashTab(EcuData ecuData);
+ EcuDataConvertor getSelectedConvertor(EcuData ecuData);
}
diff --git a/src/enginuity/logger/ui/UserProfileHandler.java b/src/enginuity/logger/ui/UserProfileHandler.java
index 49dd4c8a..2d71c338 100644
--- a/src/enginuity/logger/ui/UserProfileHandler.java
+++ b/src/enginuity/logger/ui/UserProfileHandler.java
@@ -10,24 +10,25 @@ public final class UserProfileHandler extends DefaultHandler {
private static final String TAG_PARAMETER = "parameter";
private static final String TAG_SWITCH = "switch";
private static final String ATTR_ID = "id";
+ private static final String ATTR_UNITS = "units";
private static final String ATTR_LIVE_DATA = "livedata";
private static final String ATTR_GRAPH = "graph";
private static final String ATTR_DASH = "dash";
private UserProfile profile;
- private HashMap params;
- private HashMap switches;
+ private HashMap params;
+ private HashMap switches;
public void startDocument() {
- params = new HashMap();
- switches = new HashMap();
+ params = new HashMap();
+ switches = new HashMap();
profile = new UserProfileImpl(params, switches);
}
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (TAG_PARAMETER.equals(qName)) {
- params.put(attributes.getValue(ATTR_ID), getSelectedValues(attributes));
+ params.put(attributes.getValue(ATTR_ID), getUserProfileItem(attributes));
} else if (TAG_SWITCH.equals(qName)) {
- switches.put(attributes.getValue(ATTR_ID), getSelectedValues(attributes));
+ switches.put(attributes.getValue(ATTR_ID), getUserProfileItem(attributes));
}
}
@@ -35,12 +36,13 @@ public final class UserProfileHandler extends DefaultHandler {
return profile;
}
- private Boolean[] getSelectedValues(Attributes attributes) {
- return new Boolean[]{
+ private UserProfileItem getUserProfileItem(Attributes attributes) {
+ return new UserProfileItemImpl(
+ attributes.getValue(ATTR_UNITS),
SELECTED.equalsIgnoreCase(attributes.getValue(ATTR_LIVE_DATA)),
SELECTED.equalsIgnoreCase(attributes.getValue(ATTR_GRAPH)),
SELECTED.equalsIgnoreCase(attributes.getValue(ATTR_DASH))
- };
+ );
}
}
diff --git a/src/enginuity/logger/ui/UserProfileImpl.java b/src/enginuity/logger/ui/UserProfileImpl.java
index 746d97e8..ef17e028 100644
--- a/src/enginuity/logger/ui/UserProfileImpl.java
+++ b/src/enginuity/logger/ui/UserProfileImpl.java
@@ -1,18 +1,20 @@
package enginuity.logger.ui;
import enginuity.logger.definition.EcuData;
+import enginuity.logger.definition.EcuDataConvertor;
import enginuity.logger.definition.EcuParameter;
import enginuity.logger.definition.EcuSwitch;
+import enginuity.logger.exception.ConfigurationException;
import static enginuity.util.ParamChecker.checkNotNull;
import java.util.HashMap;
import java.util.Map;
public final class UserProfileImpl implements UserProfile {
- private final HashMap params;
- private final HashMap switches;
+ private final HashMap params;
+ private final HashMap switches;
- public UserProfileImpl(HashMap params, HashMap switches) {
+ public UserProfileImpl(HashMap params, HashMap switches) {
checkNotNull(params, "params");
checkNotNull(switches, "switches");
this.params = params;
@@ -20,26 +22,45 @@ public final class UserProfileImpl implements UserProfile {
}
public boolean contains(EcuData ecuData) {
+ checkNotNull(ecuData, "ecuData");
return getMap(ecuData).keySet().contains(ecuData.getId());
}
public boolean isSelectedOnLiveDataTab(EcuData ecuData) {
- return getSelectedArray(ecuData)[0];
+ checkNotNull(ecuData, "ecuData");
+ return getUserProfileItem(ecuData).isLiveDataSelected();
}
public boolean isSelectedOnGraphTab(EcuData ecuData) {
- return getSelectedArray(ecuData)[1];
+ checkNotNull(ecuData, "ecuData");
+ return getUserProfileItem(ecuData).isGraphSelected();
}
public boolean isSelectedOnDashTab(EcuData ecuData) {
- return getSelectedArray(ecuData)[2];
+ checkNotNull(ecuData, "ecuData");
+ return getUserProfileItem(ecuData).isDashSelected();
}
- private Boolean[] getSelectedArray(EcuData ecuData) {
+ public EcuDataConvertor getSelectedConvertor(EcuData ecuData) {
+ checkNotNull(ecuData, "ecuData");
+ String defaultUnits = getUserProfileItem(ecuData).getUnits();
+ if (defaultUnits != null && ecuData.getConvertors().length > 1) {
+ for (EcuDataConvertor convertor : ecuData.getConvertors()) {
+ if (defaultUnits.equals(convertor.getUnits())) {
+ return convertor;
+ }
+ }
+ throw new ConfigurationException("Unknown default units, '" + defaultUnits + "', specified for " + ecuData.getName());
+ } else {
+ return ecuData.getSelectedConvertor();
+ }
+ }
+
+ private UserProfileItem getUserProfileItem(EcuData ecuData) {
return getMap(ecuData).get(ecuData.getId());
}
- private Map getMap(EcuData ecuData) {
+ private Map getMap(EcuData ecuData) {
if (ecuData instanceof EcuParameter) {
return params;
} else if (ecuData instanceof EcuSwitch) {
diff --git a/src/enginuity/logger/ui/UserProfileItem.java b/src/enginuity/logger/ui/UserProfileItem.java
new file mode 100644
index 00000000..7222b4b3
--- /dev/null
+++ b/src/enginuity/logger/ui/UserProfileItem.java
@@ -0,0 +1,13 @@
+package enginuity.logger.ui;
+
+public interface UserProfileItem {
+
+ boolean isDashSelected();
+
+ boolean isGraphSelected();
+
+ boolean isLiveDataSelected();
+
+ String getUnits();
+
+}
diff --git a/src/enginuity/logger/ui/UserProfileItemImpl.java b/src/enginuity/logger/ui/UserProfileItemImpl.java
new file mode 100644
index 00000000..2e5c00fd
--- /dev/null
+++ b/src/enginuity/logger/ui/UserProfileItemImpl.java
@@ -0,0 +1,32 @@
+package enginuity.logger.ui;
+
+public final class UserProfileItemImpl implements UserProfileItem {
+ private final String units;
+ private final boolean liveDataSelected;
+ private final boolean graphSelected;
+ private final boolean dashSelected;
+
+ public UserProfileItemImpl(String units, boolean liveDataSelected, boolean graphSelected, boolean dashSelected) {
+ this.units = units;
+ this.liveDataSelected = liveDataSelected;
+ this.graphSelected = graphSelected;
+ this.dashSelected = dashSelected;
+ }
+
+ public boolean isDashSelected() {
+ return dashSelected;
+ }
+
+ public boolean isGraphSelected() {
+ return graphSelected;
+ }
+
+ public boolean isLiveDataSelected() {
+ return liveDataSelected;
+ }
+
+ public String getUnits() {
+ return units;
+ }
+
+}