Saber-Factions/src/main/java/com/massivecraft/factions/util/PermissionsMapTypeAdapter.java

73 lines
2.5 KiB
Java
Raw Normal View History

package com.massivecraft.factions.util;
import com.google.gson.*;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Relation;
2018-02-06 04:46:43 +01:00
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.fperms.Access;
2018-02-06 04:46:43 +01:00
import com.massivecraft.factions.zcore.fperms.Permissable;
2018-02-03 21:49:04 +01:00
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
2018-02-06 04:46:43 +01:00
public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Permissable, Map<PermissableAction, Access>>> {
@Override
2018-02-06 04:46:43 +01:00
public Map<Permissable, Map<PermissableAction, Access>> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
try {
JsonObject obj = json.getAsJsonObject();
if (obj == null) {
return null;
}
2018-02-06 04:46:43 +01:00
Map<Permissable, Map<PermissableAction, Access>> permissionsMap = new ConcurrentHashMap<>();
// Top level is Relation
for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
2018-02-06 04:46:43 +01:00
Permissable permissable = getPermissable(entry.getKey());
if (permissable == null) {
continue;
}
2018-03-02 08:32:17 +01:00
// Second level is the map between action -> access
2018-03-02 08:32:17 +01:00
Map<PermissableAction, Access> accessMap = new HashMap<>();
for (Map.Entry<String, JsonElement> entry2 : entry.getValue().getAsJsonObject().entrySet()) {
2018-02-03 21:49:04 +01:00
PermissableAction permissableAction = PermissableAction.fromString(entry2.getKey());
Access access = Access.fromString(entry2.getValue().getAsString());
2018-02-03 21:49:04 +01:00
accessMap.put(permissableAction, access);
}
2018-03-02 08:32:17 +01:00
permissionsMap.put(permissable, accessMap);
}
return permissionsMap;
} catch (Exception ex) {
2018-01-05 00:45:33 +01:00
P.p.log(Level.WARNING, "Error encountered while deserializing a PermissionsMap.");
2018-02-06 04:46:43 +01:00
ex.printStackTrace();
return null;
}
}
2018-02-06 04:46:43 +01:00
private Permissable getPermissable(String s) {
try {
return Relation.fromString(s);
} catch (Exception e) {
e.printStackTrace();
}
try {
return Role.fromString(s);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}