mirror of
https://github.com/TimeCrafters/FTC_2022
synced 2025-12-15 14:22:34 +00:00
Added TimeCraftersConfigurationTool library, changed servos to init to the center.
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Settings;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.TAC;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ActionDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ActionSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ConfigDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ConfigSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ConfigurationDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.ConfigurationSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.GroupDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.GroupSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.PresetsDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.PresetsSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.SettingsDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.SettingsSerializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.VariableDeserializer;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.serializers.VariableSerializer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
|
||||
public class TimeCraftersConfiguration {
|
||||
private static final String TAG = "TCT|TCConfig";
|
||||
private Config config;
|
||||
|
||||
public TimeCraftersConfiguration() {
|
||||
Settings settings = loadSettings();
|
||||
this.config = loadConfig(settings.config);
|
||||
}
|
||||
|
||||
public TimeCraftersConfiguration(String configName) {
|
||||
this.config = loadConfig(configName);
|
||||
}
|
||||
|
||||
public Config getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public Group group(String groupName) {
|
||||
for (final Group group : config.getGroups()) {
|
||||
if (group.name.trim().equals(groupName.trim())) {
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
||||
throw(new RuntimeException("Failed to find a group named:\"" + groupName.trim() + "\" in config \"" + config.getName() + "\""));
|
||||
}
|
||||
|
||||
public Action action(String groupName, String actionName) {
|
||||
final Group group = group(groupName);
|
||||
|
||||
for (Action action : group.getActions()) {
|
||||
if (action.name.trim().equals(actionName.trim())) {
|
||||
return action;
|
||||
}
|
||||
}
|
||||
|
||||
throw(new RuntimeException("Failed to find an action named:\"" + actionName.trim() + "\" in group \"" + groupName.trim() + "\" in config \"" + config.getName() + "\""));
|
||||
}
|
||||
|
||||
public Variable variable(String groupName, String actionName, String variableName) {
|
||||
final Action action = action(groupName, actionName);
|
||||
|
||||
for (Variable variable : action.getVariables()) {
|
||||
if (variable.name.trim().equals(variableName.trim())) {
|
||||
return variable;
|
||||
}
|
||||
}
|
||||
|
||||
throw(new RuntimeException("Failed to find a variable named \"" + variableName.trim() + "\" in action:\"" + actionName.trim() +
|
||||
"\" in group \"" + groupName.trim() + "\" in config \"" + config.getName() + "\""));
|
||||
}
|
||||
|
||||
private Settings loadSettings() {
|
||||
File settingsFile = new File(TAC.SETTINGS_PATH);
|
||||
|
||||
if (!settingsFile.exists()) {
|
||||
throw( new RuntimeException("Unable to load settings.json, file does not exist!") );
|
||||
}
|
||||
|
||||
try {
|
||||
return gsonForSettings().fromJson(new FileReader(settingsFile), Settings.class);
|
||||
} catch (FileNotFoundException e) {
|
||||
throw( new RuntimeException("Unable to load settings.json") );
|
||||
}
|
||||
}
|
||||
|
||||
private Config loadConfig(String name) {
|
||||
if (name.equals("")) {
|
||||
throw(new RuntimeException("Cannot load a config with an empty name!"));
|
||||
}
|
||||
|
||||
String path = TAC.CONFIGS_PATH + File.separator + name + ".json";
|
||||
File configFile = new File(path);
|
||||
|
||||
if (configFile.exists() && configFile.isFile()) {
|
||||
try {
|
||||
Config config = gsonForConfig().fromJson(new FileReader(configFile), Config.class);
|
||||
config.setName(name);
|
||||
|
||||
return config;
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
throw(new RuntimeException("Unable to find a config file named \"" + name + "\""));
|
||||
}
|
||||
} else {
|
||||
throw(new RuntimeException("Unable to find a config file named \"" + name + "\""));
|
||||
}
|
||||
}
|
||||
|
||||
private Gson gsonForSettings() {
|
||||
return new GsonBuilder()
|
||||
.registerTypeAdapter(Settings.class, new SettingsSerializer())
|
||||
.registerTypeAdapter(Settings.class, new SettingsDeserializer())
|
||||
.create();
|
||||
}
|
||||
|
||||
public Gson gsonForConfig() {
|
||||
return new GsonBuilder()
|
||||
.registerTypeAdapter(Config.class, new ConfigSerializer())
|
||||
.registerTypeAdapter(Config.class, new ConfigDeserializer())
|
||||
|
||||
.registerTypeAdapter(Configuration.class, new ConfigurationSerializer())
|
||||
.registerTypeAdapter(Configuration.class, new ConfigurationDeserializer())
|
||||
|
||||
.registerTypeAdapter(Group.class, new GroupSerializer())
|
||||
.registerTypeAdapter(Group.class, new GroupDeserializer())
|
||||
|
||||
.registerTypeAdapter(Action.class, new ActionSerializer())
|
||||
.registerTypeAdapter(Action.class, new ActionDeserializer())
|
||||
|
||||
.registerTypeAdapter(Variable.class, new VariableSerializer())
|
||||
.registerTypeAdapter(Variable.class, new VariableDeserializer())
|
||||
|
||||
.registerTypeAdapter(Presets.class, new PresetsSerializer())
|
||||
.registerTypeAdapter(Presets.class, new PresetsDeserializer())
|
||||
.create();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
public class Config {
|
||||
private String name;
|
||||
private Configuration configuration;
|
||||
private ArrayList<Group> groups;
|
||||
private Presets presets;
|
||||
|
||||
public Config(String name) {
|
||||
this.name = name;
|
||||
this.configuration = new Configuration(new Date(), new Date(), TAC.CONFIG_SPEC_VERSION, 0);
|
||||
groups = new ArrayList<>();
|
||||
presets = new Presets(new ArrayList<Group>(), new ArrayList<Action>());
|
||||
}
|
||||
|
||||
public Config(Configuration configuration, ArrayList<Group> groups, Presets presets) {
|
||||
this.configuration = configuration;
|
||||
this.groups = groups;
|
||||
this.presets = presets;
|
||||
}
|
||||
|
||||
public String getName() { return name; }
|
||||
public void setName(String name) { this.name = name; }
|
||||
|
||||
public Configuration getConfiguration() {
|
||||
return configuration;
|
||||
}
|
||||
|
||||
public Presets getPresets() {
|
||||
return presets;
|
||||
}
|
||||
|
||||
public ArrayList<Group> getGroups() {
|
||||
return groups;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend;
|
||||
|
||||
public class Settings {
|
||||
public String hostname, config;
|
||||
public int port;
|
||||
|
||||
public Settings(String hostname, int port, String config) {
|
||||
this.hostname = hostname;
|
||||
this.port = port;
|
||||
this.config = config;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend;
|
||||
|
||||
import android.os.Environment;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class TAC {
|
||||
// TODO: Update filesystem handling
|
||||
public static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "TimeCrafters_Configuration_Tool",
|
||||
CONFIGS_PATH = ROOT_PATH + File.separator + "/configs",
|
||||
SETTINGS_PATH = ROOT_PATH + File.separator + "settings.json";
|
||||
|
||||
public static final int CONFIG_SPEC_VERSION = 2;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Action {
|
||||
public String name, comment;
|
||||
public boolean enabled;
|
||||
private ArrayList<Variable> variables;
|
||||
|
||||
public Action(String name, String comment, boolean enabled, ArrayList<Variable> variables) {
|
||||
this.name = name;
|
||||
this.comment = comment;
|
||||
this.enabled = enabled;
|
||||
this.variables = variables;
|
||||
}
|
||||
|
||||
public ArrayList<Variable> getVariables() { return variables; }
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend.config;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class Configuration {
|
||||
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss Z";
|
||||
|
||||
public Date createdAt, updatedAt;
|
||||
private int specVersion;
|
||||
public int revision;
|
||||
|
||||
public Configuration(Date createdAt, Date updatedAt, int specVersion, int revision) {
|
||||
this.createdAt = createdAt;
|
||||
this.updatedAt = updatedAt;
|
||||
this.specVersion = specVersion;
|
||||
this.revision = revision;
|
||||
}
|
||||
|
||||
public int getSpecVersion() { return specVersion; }
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Group {
|
||||
public String name;
|
||||
private ArrayList<Action> actions;
|
||||
|
||||
public Group(String name, ArrayList<Action> actions) {
|
||||
this.name = name;
|
||||
this.actions = actions;
|
||||
}
|
||||
|
||||
public static boolean nameIsUnique(ArrayList<Group> groups, String name) {
|
||||
for (Group group: groups) {
|
||||
if (group.name.equals(name)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public ArrayList<Action> getActions() {
|
||||
return actions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend.config;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Presets {
|
||||
private ArrayList<Group> groups;
|
||||
private ArrayList<Action> actions;
|
||||
|
||||
public Presets(ArrayList<Group> groups, ArrayList<Action> actions) {
|
||||
this.groups = groups;
|
||||
this.actions = actions;
|
||||
}
|
||||
|
||||
public ArrayList<Group> getGroups() {
|
||||
return groups;
|
||||
}
|
||||
|
||||
public ArrayList<Action> getActions() {
|
||||
return actions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.backend.config;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Variable {
|
||||
public String name;
|
||||
private String value;
|
||||
|
||||
public Variable(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String rawValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public <T> T value() {
|
||||
return valueOf(value);
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
static public <T> T valueOf(String value) {
|
||||
String[] split = value.split("x", 2);
|
||||
// Log.d("Variable", "valueOf split: " + Arrays.toString(split));
|
||||
|
||||
switch (split[0]) {
|
||||
case "B": {
|
||||
return (T) Boolean.valueOf(split[(split.length-1)]);
|
||||
}
|
||||
case "D": {
|
||||
return (T) Double.valueOf(split[(split.length-1)]);
|
||||
}
|
||||
case "F": {
|
||||
return (T) Float.valueOf(split[(split.length-1)]);
|
||||
}
|
||||
case "I": {
|
||||
return (T) Integer.valueOf(split[(split.length-1)]);
|
||||
}
|
||||
case "L": {
|
||||
return (T) Long.valueOf(split[(split.length-1)]);
|
||||
}
|
||||
case "S": {
|
||||
String string = "";
|
||||
int i = 0;
|
||||
for(String str : split) {
|
||||
if (i == 0) { i++; continue; }
|
||||
|
||||
string += str;
|
||||
}
|
||||
return (T) string;
|
||||
}
|
||||
default: {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static public String typeOf(String value) {
|
||||
String[] split = value.split("x");
|
||||
|
||||
switch (split[0]) {
|
||||
case "B": {
|
||||
return "Boolean";
|
||||
}
|
||||
case "D": {
|
||||
return "Double";
|
||||
}
|
||||
case "F": {
|
||||
return "Float";
|
||||
}
|
||||
case "I": {
|
||||
return "Integer";
|
||||
}
|
||||
case "L": {
|
||||
return "Long";
|
||||
}
|
||||
case "S": {
|
||||
return "String";
|
||||
}
|
||||
default: {
|
||||
return "=!UNKNOWN!=";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ActionDeserializer implements JsonDeserializer<Action> {
|
||||
@Override
|
||||
public Action deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
|
||||
final String name = jsonObject.get("name").getAsString();
|
||||
final String comment = jsonObject.get("comment").getAsString();
|
||||
final boolean enabled = jsonObject.get("enabled").getAsBoolean();
|
||||
Variable[] variablesArray = context.deserialize(jsonObject.get("variables"), Variable[].class);
|
||||
|
||||
List<Variable> variablesList = Arrays.asList(variablesArray);
|
||||
ArrayList<Variable> variables = new ArrayList<>(variablesList);
|
||||
|
||||
return new Action(name, comment, enabled, variables);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class ActionSerializer implements JsonSerializer<Action> {
|
||||
@Override
|
||||
public JsonElement serialize(Action action, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
|
||||
container.add("name", new JsonPrimitive(action.name));
|
||||
container.add("comment", new JsonPrimitive(action.comment));
|
||||
container.add("enabled", new JsonPrimitive(action.enabled));
|
||||
container.add("variables", context.serialize(action.getVariables().toArray(), Variable[].class));
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ConfigDeserializer implements JsonDeserializer<Config> {
|
||||
@Override
|
||||
public Config deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
JsonObject data = jsonObject.get("data").getAsJsonObject();
|
||||
|
||||
Configuration configuration = context.deserialize(jsonObject.get("config"), Configuration.class);
|
||||
Group[] groupsArray = context.deserialize(data.get("groups"), Group[].class);
|
||||
List<Group> groupsList = Arrays.asList(groupsArray);
|
||||
ArrayList<Group> groups = new ArrayList<>(groupsList);
|
||||
|
||||
Presets presets = context.deserialize(data.get("presets"), Presets.class);
|
||||
|
||||
return new Config(configuration, groups, presets);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class ConfigSerializer implements JsonSerializer<Config> {
|
||||
@Override
|
||||
public JsonElement serialize(Config config, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
JsonObject result = new JsonObject();
|
||||
JsonObject presets = new JsonObject();
|
||||
container.add("config", context.serialize(config.getConfiguration(), Configuration.class));
|
||||
result.add("groups", context.serialize(config.getGroups().toArray(), Group[].class));
|
||||
|
||||
presets.add("groups", context.serialize(config.getPresets().getGroups().toArray(), Group[].class));
|
||||
presets.add("actions", context.serialize(config.getPresets().getActions().toArray(), Action[].class));
|
||||
|
||||
result.add("presets", presets);
|
||||
container.add("data", result);
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class ConfigurationDeserializer implements JsonDeserializer<Configuration> {
|
||||
@Override
|
||||
public Configuration deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject config = json.getAsJsonObject();
|
||||
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(Configuration.DATE_FORMAT);
|
||||
Date createdAt = new Date();
|
||||
Date updatedAt = new Date();
|
||||
try {
|
||||
createdAt = dateFormat.parse(config.get("created_at").getAsString());
|
||||
updatedAt = dateFormat.parse(config.get("updated_at").getAsString());
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
final int spec_version = config.get("spec_version").getAsInt();
|
||||
final int revision = config.get("revision").getAsInt();
|
||||
|
||||
return new Configuration(createdAt, updatedAt, spec_version, revision);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
public class ConfigurationSerializer implements JsonSerializer<Configuration> {
|
||||
@Override
|
||||
public JsonElement serialize(Configuration configuration, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(Configuration.DATE_FORMAT);
|
||||
|
||||
container.add("created_at", new JsonPrimitive(dateFormat.format(configuration.createdAt)));
|
||||
container.add("updated_at", new JsonPrimitive(dateFormat.format(configuration.updatedAt)));
|
||||
container.add("spec_version", new JsonPrimitive(configuration.getSpecVersion()));
|
||||
container.add("revision", new JsonPrimitive(configuration.revision));
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class GroupDeserializer implements JsonDeserializer<Group> {
|
||||
@Override
|
||||
public Group deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
|
||||
final String name = jsonObject.get("name").getAsString();
|
||||
Action[] actionsArray = context.deserialize(jsonObject.get("actions"), Action[].class);
|
||||
|
||||
List<Action> actionsList = Arrays.asList(actionsArray);
|
||||
ArrayList<Action> actions = new ArrayList<>(actionsList);
|
||||
|
||||
return new Group(name, actions);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class GroupSerializer implements JsonSerializer<Group> {
|
||||
@Override
|
||||
public JsonElement serialize(Group group, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
|
||||
container.add("name", new JsonPrimitive(group.name));
|
||||
container.add("actions", context.serialize(group.getActions().toArray(), Action[].class));
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class PresetsDeserializer implements JsonDeserializer<Presets> {
|
||||
@Override
|
||||
public Presets deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
|
||||
Group[] GroupsArray = context.deserialize(jsonObject.get("groups"), Group[].class);
|
||||
Action[] actionsArray = context.deserialize(jsonObject.get("actions"), Action[].class);
|
||||
|
||||
List<Group> groupsList = Arrays.asList(GroupsArray);
|
||||
ArrayList<Group> groups = new ArrayList<>(groupsList);
|
||||
List<Action> actionsList = Arrays.asList(actionsArray);
|
||||
ArrayList<Action> actions = new ArrayList<>(actionsList);
|
||||
|
||||
return new Presets(groups, actions);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Presets;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class PresetsSerializer implements JsonSerializer<Presets> {
|
||||
@Override
|
||||
public JsonElement serialize(Presets presets, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
|
||||
container.add("groups", context.serialize(presets.getGroups().toArray(), Group[].class));
|
||||
container.add("actions", context.serialize(presets.getActions().toArray(), Action[].class));
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Settings;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class SettingsDeserializer implements JsonDeserializer<Settings> {
|
||||
@Override
|
||||
public Settings deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
JsonObject data = jsonObject.get("data").getAsJsonObject();
|
||||
|
||||
return new Settings(
|
||||
data.get("hostname").getAsString(),
|
||||
data.get("port").getAsInt(),
|
||||
data.get("config").getAsString()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.Settings;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class SettingsSerializer implements JsonSerializer<Settings> {
|
||||
@Override
|
||||
public JsonElement serialize(Settings settings, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
JsonObject result = new JsonObject();
|
||||
result.add("hostname", new JsonPrimitive(settings.hostname));
|
||||
result.add("port", new JsonPrimitive(settings.port));
|
||||
result.add("config", new JsonPrimitive(settings.config));
|
||||
|
||||
container.add("data", result);
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class VariableDeserializer implements JsonDeserializer<Variable> {
|
||||
@Override
|
||||
public Variable deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
|
||||
final String name = jsonObject.get("name").getAsString();
|
||||
final String value = jsonObject.get("value").getAsString();
|
||||
|
||||
return new Variable(name, value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.library.serializers;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Variable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class VariableSerializer implements JsonSerializer<Variable> {
|
||||
@Override
|
||||
public JsonElement serialize(Variable variable, Type type, JsonSerializationContext context) {
|
||||
JsonObject container = new JsonObject();
|
||||
|
||||
container.add("name", new JsonPrimitive(variable.name));
|
||||
container.add("value", new JsonPrimitive(variable.rawValue()));
|
||||
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import com.qualcomm.robotcore.hardware.DcMotorSimple;
|
||||
import com.qualcomm.robotcore.hardware.Servo;
|
||||
|
||||
import org.cyberarm.engine.V2.CyberarmEngine;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersConfiguration;
|
||||
|
||||
public class PrototypeBot1 {
|
||||
|
||||
@@ -18,6 +19,8 @@ public class PrototypeBot1 {
|
||||
|
||||
public Servo collectorWrist;
|
||||
|
||||
public TimeCraftersConfiguration configuration;
|
||||
|
||||
public PrototypeBot1(CyberarmEngine engine) {
|
||||
this.engine = engine;
|
||||
|
||||
@@ -25,6 +28,8 @@ public class PrototypeBot1 {
|
||||
}
|
||||
|
||||
private void setupRobot () {
|
||||
// TACNET configuration
|
||||
configuration = new TimeCraftersConfiguration("POWERPLAY");
|
||||
|
||||
//motors configuration
|
||||
frontLeftDrive = engine.hardwareMap.dcMotor.get("front left");
|
||||
|
||||
@@ -29,6 +29,8 @@ public class PrototypeTeleOPState extends CyberarmState {
|
||||
engine.telemetry.addData("Arm Target Position", robot.armMotor.getTargetPosition());
|
||||
engine.telemetry.addData("Arm Current Position", robot.armMotor.getCurrentPosition());
|
||||
engine.telemetry.addData("Wrist Current Position", robot.collectorWrist.getPosition());
|
||||
|
||||
engine.telemetry.addData("TACNET Setting", (double)robot.configuration.variable("settings", "common", "rack_riser_left_max").value());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,10 +40,10 @@ public class PrototypeTeleOPState extends CyberarmState {
|
||||
robot.armMotor.setTargetPosition(armTargetPosition);
|
||||
robot.armMotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
|
||||
robot.collectorWrist.setPosition(1);
|
||||
robot.RackRiserLeft.setPosition(0);
|
||||
robot.RackRiserRight.setPosition(1);
|
||||
robot.FrontRiserLeft.setPosition(1);
|
||||
robot.FrontRiserRight.setPosition(0);
|
||||
robot.RackRiserLeft.setPosition(0.5);
|
||||
robot.RackRiserRight.setPosition(0.5);
|
||||
robot.FrontRiserLeft.setPosition(0.5);
|
||||
robot.FrontRiserRight.setPosition(0.5);
|
||||
// ~RightRiser's always are setPosition'ed(1), ~LeftRisers always are setPosition'ed(0) or vice versa if wrong.
|
||||
|
||||
}
|
||||
@@ -201,13 +203,13 @@ public class PrototypeTeleOPState extends CyberarmState {
|
||||
}
|
||||
|
||||
if (engine.gamepad2.right_bumper) {
|
||||
robot.RackRiserRight.setPosition(1);
|
||||
robot.RackRiserLeft.setPosition(0);
|
||||
robot.RackRiserRight.setPosition(0.5);
|
||||
robot.RackRiserLeft.setPosition(0.5);
|
||||
}
|
||||
|
||||
if (engine.gamepad2.left_bumper) {
|
||||
robot.FrontRiserRight.setPosition(0);
|
||||
robot.FrontRiserLeft.setPosition(1);
|
||||
robot.FrontRiserRight.setPosition(0.5);
|
||||
robot.FrontRiserLeft.setPosition(0.5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user