package com.uwsoft.editor.controller.commands; import com.badlogic.ashley.core.Entity; import com.uwsoft.editor.renderer.components.MainItemComponent; import com.uwsoft.editor.renderer.utils.ComponentRetriever; import com.uwsoft.editor.renderer.utils.CustomVariables; import com.uwsoft.editor.utils.runtime.EntityUtils; /** * Created by CyberJoe on 11/6/2015. */ public class CustomVariableModifyCommand extends EntityModifyRevertableCommand { private static final String CLASS_NAME = "com.uwsoft.editor.controller.commands.CustomVariableModifyCommand"; public static final String DONE = CLASS_NAME + "DONE"; private Integer entityId; private boolean isAdding; private String key; private String value; @Override public void doAction() { process(); if(isAdding) { addVariable(key, value); } else { removeVariable(key); } sendNotification(DONE); } @Override public void undoAction() { if(isAdding) { removeVariable(key); } else { addVariable(key, value); } sendNotification(DONE); } private void addVariable(String key, String value) { Entity entity = EntityUtils.getByUniqueId(entityId); MainItemComponent mainItemComponent = ComponentRetriever.get(entity, MainItemComponent.class); CustomVariables vars = new CustomVariables(); vars.loadFromString(mainItemComponent.customVars); vars.setVariable(key, value); mainItemComponent.customVars = vars.saveAsString(); } private void removeVariable(String key) { Entity entity = EntityUtils.getByUniqueId(entityId); MainItemComponent mainItemComponent = ComponentRetriever.get(entity, MainItemComponent.class); CustomVariables vars = new CustomVariables(); vars.loadFromString(mainItemComponent.customVars); value = vars.getStringVariable(key); //storing the backup vars.removeVariable(key); mainItemComponent.customVars = vars.saveAsString(); } private void process() { if(entityId == null) { // First time call, need to prepare the data and fetch payload Object[] payload = getNotification().getBody(); Entity item = (Entity) payload[0]; entityId = EntityUtils.getEntityId(item); key = (String) payload[2]; isAdding = false; if(((boolean) payload[1])) { value = (String) payload[3]; isAdding = true; } } } public static Object addCustomVariable(Entity entity, String key, String value) { Object[] payload = new Object[4]; payload[0] = entity; payload[1] = true; // is adding type payload[2] = key; payload[3] = value; return payload; } public static Object removeCustomVariable(Entity entity, String key) { Object[] payload = new Object[3]; payload[0] = entity; payload[1] = true; payload[1] = false; // is adding type (removing) payload[2] = key; return payload; } }