Using flat keys instead of '_' for perspective own settings

This commit is contained in:
Steffen Schaefer
2017-02-14 17:57:56 +01:00
parent 238cb5bce4
commit bcdcd85d62
4 changed files with 59 additions and 20 deletions
@@ -80,32 +80,49 @@ public abstract class AbstractSettingsToJsonSerializer<OBJECT, ARRAY> {
public OBJECT serialize(SettingsMap settingsMap) {
final OBJECT jsonObject = newOBJECT();
serializeToObject(settingsMap, jsonObject);
return jsonObject;
}
private void serializeToObject(SettingsMap settingsMap, final OBJECT jsonObject) {
for (Map.Entry<String, Settings> entry : settingsMap.getSettingsPerComponentId().entrySet()) {
String key = entry.getKey();
Settings settings = entry.getValue();
final Object serializedObject;
if(settings instanceof SettingsMap) {
serializedObject = serialize((SettingsMap)settings);
} else if(settings instanceof GenericSerializableSettings) {
serializedObject = serialize((GenericSerializableSettings)settings);
if(key == null) {
if(settings instanceof SettingsMap) {
serializeToObject((SettingsMap)settings, jsonObject);
} else if(settings instanceof GenericSerializableSettings) {
serializeToObject((GenericSerializableSettings)settings, jsonObject);
}
} else {
serializedObject = null;
}
if(serializedObject != null) {
set(jsonObject, entry.getKey().toString(), serializedObject);
final OBJECT serializedObject;
if(settings instanceof SettingsMap) {
serializedObject = serialize((SettingsMap)settings);
} else if(settings instanceof GenericSerializableSettings) {
serializedObject = serialize((GenericSerializableSettings)settings);
} else {
serializedObject = null;
}
if(serializedObject != null) {
set(jsonObject, key.toString(), serializedObject);
}
}
}
return jsonObject;
}
public OBJECT serialize(GenericSerializableSettings settings) {
final OBJECT jsonObject = newOBJECT();
serializeToObject(settings, jsonObject);
return jsonObject;
}
private void serializeToObject(GenericSerializableSettings settings, final OBJECT jsonObject) {
for (Map.Entry<String, Setting> entry : settings.getChildSettings().entrySet()) {
Setting setting = entry.getValue();
if (!setting.isDefaultValue()) {
set(jsonObject, entry.getKey(), serialize(setting));
}
}
return jsonObject;
}
private Object serialize(Setting setting) {
@@ -146,9 +163,15 @@ public abstract class AbstractSettingsToJsonSerializer<OBJECT, ARRAY> {
public <T extends SettingsMap> T deserialize(T settingsMap, OBJECT json) {
if (json != null) {
for (Map.Entry<String, Settings> entry : settingsMap.getSettingsPerComponentId().entrySet()) {
String key = entry.getKey().toString();
if(hasProperty(json, key)) {
Settings settings = entry.getValue();
String key = entry.getKey();
Settings settings = entry.getValue();
if(key == null) {
if(settings instanceof SettingsMap) {
deserialize((SettingsMap)settings, json);
} else if(settings instanceof GenericSerializableSettings) {
deserializeObject((GenericSerializableSettings)settings, json);
}
} else if(hasProperty(json, key)) {
Object serializedObject = get(json, key);
if(settings instanceof SettingsMap) {
@SuppressWarnings("unchecked")
@@ -37,7 +37,8 @@ public class SettingsToStringMapSerializer {
private void serialize(String prefix, SettingsMap settingsMap, Map<String, Iterable<String>> serialized) {
for (Map.Entry<String, Settings> entry : settingsMap.getSettingsPerComponentId().entrySet()) {
String childPrefix = prefix + entry.getKey() + GenericSerializableSettings.PATH_SEPARATOR;
String key = entry.getKey();
String childPrefix = key == null ? prefix : prefix + key + GenericSerializableSettings.PATH_SEPARATOR;
Settings settings = entry.getValue();
if(settings instanceof SettingsMap) {
serialize(childPrefix, (SettingsMap) settings, serialized);
@@ -109,7 +110,7 @@ public class SettingsToStringMapSerializer {
for (Map.Entry<String, Settings> entry : childSettings) {
final String key = entry.getKey();
final Settings settings = entry.getValue();
final Map<String, Iterable<String>> innerValues = mappedInnerValues.get(key.toString());
final Map<String, Iterable<String>> innerValues = key == null ? values : mappedInnerValues.get(key.toString());
if(innerValues != null) {
if(settings instanceof SettingsMap) {
deserializeSettingsMap((SettingsMap) settings, innerValues);
@@ -23,8 +23,6 @@ import com.sap.sse.gwt.client.shared.components.CompositeSettings;
* is assigned to which component, or how the perspective displays itself, such as embedded or not
*/
public class PerspectiveCompositeSettings<PS extends Settings> extends CompositeSettings {
private static final String OWN_SETTINGS_KEY = "_";
private final PS perspectiveOwnSettings;
public PerspectiveCompositeSettings(PS perspectiveOwnSettings, Map<String, Settings> settingsPerComponent) {
@@ -60,7 +58,7 @@ public class PerspectiveCompositeSettings<PS extends Settings> extends Composite
allSettings = super.getSettingsPerComponentId();
} else {
allSettings = new HashMap<>(super.getSettingsPerComponentId());
allSettings.put(OWN_SETTINGS_KEY, perspectiveOwnSettings);
allSettings.put(null, perspectiveOwnSettings);
}
return allSettings;
}
@@ -27,7 +27,6 @@ public abstract class AbstractSettingsSerializationTestWithSettingsMap<SOT> exte
@Test
public void testSettingsMapWithMultipleSerializableSettings() throws Exception {
final GenericSerializableSettings settingsValues1 = createTestSettingsWithValues();
final GenericSerializableSettings settingsValues2 = createTestSettingsWithValues2();
Map<String, Settings> settings = new HashMap<>();
@@ -44,6 +43,24 @@ public abstract class AbstractSettingsSerializationTestWithSettingsMap<SOT> exte
assertEquals(deserializedSettingsMap.getSettingsPerComponentId().size(), 2);
}
@Test
public void testSettingsMapWithNullKey() throws Exception {
final GenericSerializableSettings settingsValues1 = createTestSettingsWithValues();
final GenericSerializableSettings settingsValues2 = createTestSettingsWithValues2();
Map<String, Settings> settings = new HashMap<>();
settings.put("aaa", settingsValues1);
settings.put(null, settingsValues2);
SettingsMap settingsMapToSave = new SettingsMapImpl(settings);
final SettingsMap deserializedSettingsMap = serializeAndDeserialize(settingsMapToSave);
Settings deserializedSettingsValues1 = deserializedSettingsMap.getSettingsPerComponentId().get("aaa");
Settings deserializedSettingsValues2 = deserializedSettingsMap.getSettingsPerComponentId().get(null);
assertEquals(deserializedSettingsValues1, createTestSettingsWithValues());
assertEquals(deserializedSettingsValues2, createTestSettingsWithValues2());
assertEquals(deserializedSettingsMap.getSettingsPerComponentId().size(), 2);
}
@Test
public void testSettingsMapWithNestedSettingsMapWithOneSerializableSettingsChild() throws Exception {
final GenericSerializableSettings childSettingsValues = createTestSettingsWithValues();