From 2a22efc0d86b8835867a5c54b96c2ddcc9bd70ae Mon Sep 17 00:00:00 2001 From: lfrenot <lfrenot@LAPTOP-2HO88BUG.localdomain> Date: Thu, 23 Jun 2022 17:50:04 +0200 Subject: [PATCH] premier commit branche mutation --- .../mutation/AddAttributeMutation.java | 36 +++++++++++ .../mutation/AddMutation.java | 9 +++ .../mutation/AttributeMutation.java | 54 ++++++++++++++++ .../mutation/AvatarMutation.java | 8 +++ .../mutation/BlockStructMutation.java | 16 +++++ .../mutation/MdAttributeMutation.java | 23 +++++++ .../avatartranslator/mutation/MdMutation.java | 9 +++ .../mutation/RmAttributeMutation.java | 25 ++++++++ .../avatartranslator/mutation/RmMutation.java | 9 +++ .../avatartranslator/AvatarMutationTests.java | 62 +++++++++++++++++++ 10 files changed, 251 insertions(+) create mode 100644 src/main/java/avatartranslator/mutation/AddAttributeMutation.java create mode 100644 src/main/java/avatartranslator/mutation/AddMutation.java create mode 100644 src/main/java/avatartranslator/mutation/AttributeMutation.java create mode 100644 src/main/java/avatartranslator/mutation/AvatarMutation.java create mode 100644 src/main/java/avatartranslator/mutation/BlockStructMutation.java create mode 100644 src/main/java/avatartranslator/mutation/MdAttributeMutation.java create mode 100644 src/main/java/avatartranslator/mutation/MdMutation.java create mode 100644 src/main/java/avatartranslator/mutation/RmAttributeMutation.java create mode 100644 src/main/java/avatartranslator/mutation/RmMutation.java create mode 100644 ttool/src/test/java/avatartranslator/AvatarMutationTests.java diff --git a/src/main/java/avatartranslator/mutation/AddAttributeMutation.java b/src/main/java/avatartranslator/mutation/AddAttributeMutation.java new file mode 100644 index 0000000000..0d5214e4e4 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/AddAttributeMutation.java @@ -0,0 +1,36 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + + +/** + * Class AddAttributeMutation + * Mutation that adds an attribute to a block + * Creation: 23/06/2022 + * + * @author Léon FRENOT + * @version 1.0 23/06/2022 + */ +public class AddAttributeMutation extends AttributeMutation implements AddMutation { + + public AddAttributeMutation(String _name, String _type, String _blockName) { + setType(_type); + setName(_name); + setBlockName(_blockName); + } + + public AvatarAttribute createElement(AvatarSpecification _avspec) { + AvatarType type = getType(); + AvatarBlock block = getBlock(_avspec); + AvatarAttribute aa = new AvatarAttribute(getName(), type, block, null); + if(hasInitialValue()) aa.setInitialValue(getInitialValue()); + return aa; + } + + public void apply(AvatarSpecification _avspec) { + AvatarAttribute aa = createElement(_avspec); + AvatarBlock block = getBlock(_avspec); + block.addAttribute(aa); + } + +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/AddMutation.java b/src/main/java/avatartranslator/mutation/AddMutation.java new file mode 100644 index 0000000000..93af5b2009 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/AddMutation.java @@ -0,0 +1,9 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +public interface AddMutation { + + AvatarElement createElement(AvatarSpecification _avspec); + +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/AttributeMutation.java b/src/main/java/avatartranslator/mutation/AttributeMutation.java new file mode 100644 index 0000000000..7a6516e81c --- /dev/null +++ b/src/main/java/avatartranslator/mutation/AttributeMutation.java @@ -0,0 +1,54 @@ +package avatartranslator.mutation; + +import avatartranslator.*; +import java.util.List; + +public abstract class AttributeMutation extends BlockStructMutation { + + private String type; + + private String name; + + private String initialValue; + + private Boolean hasInitialValue = false; + + public void setName(String _name) { + name = _name; + } + + public String getName() { + return name; + } + + public void setType(String _type) { + type = _type; + } + + public AvatarType getType() { + return AvatarType.getType(type); + } + + public void setInitialValue(String _initialValue) { + hasInitialValue = true; + initialValue = _initialValue; + } + + public Boolean hasInitialValue() { + return hasInitialValue; + } + + public String getInitialValue() { + if(hasInitialValue()) return initialValue; + return null; + } + + public AvatarAttribute findElement(AvatarSpecification _avspec) { + AvatarBlock block = getBlock(_avspec); + List<AvatarAttribute> attr = block.getAttributes(); + for(AvatarAttribute aa : attr) { + if(aa.getName().equals(this.getName())) return aa; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/AvatarMutation.java b/src/main/java/avatartranslator/mutation/AvatarMutation.java new file mode 100644 index 0000000000..d77b2360e1 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/AvatarMutation.java @@ -0,0 +1,8 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +public abstract class AvatarMutation { + + public abstract void apply(AvatarSpecification _avspec); +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/BlockStructMutation.java b/src/main/java/avatartranslator/mutation/BlockStructMutation.java new file mode 100644 index 0000000000..3afb66c96c --- /dev/null +++ b/src/main/java/avatartranslator/mutation/BlockStructMutation.java @@ -0,0 +1,16 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +public abstract class BlockStructMutation extends AvatarMutation { + + private String blockName; + + public void setBlockName(String _blockName) { + blockName = _blockName; + } + + public AvatarBlock getBlock(AvatarSpecification _avspec) { + return _avspec.getBlockWithName(blockName); + } +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/MdAttributeMutation.java b/src/main/java/avatartranslator/mutation/MdAttributeMutation.java new file mode 100644 index 0000000000..eb157a4db7 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/MdAttributeMutation.java @@ -0,0 +1,23 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +import myutil.TraceManager; + +public class MdAttributeMutation extends AttributeMutation implements MdMutation { + + public MdAttributeMutation(String _name, String _initialValue, String _blockName) { + setName(_name); + setInitialValue(_initialValue); + setBlockName(_blockName); + } + + public void apply(AvatarSpecification _avspec) { + AvatarAttribute aa = findElement(_avspec); + if(aa == null) { + TraceManager.addDev("Attribut inexistant"); + return; + } + aa.setInitialValue(this.getInitialValue()); + } +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/MdMutation.java b/src/main/java/avatartranslator/mutation/MdMutation.java new file mode 100644 index 0000000000..bb61796c94 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/MdMutation.java @@ -0,0 +1,9 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +public interface MdMutation { + + AvatarElement findElement(AvatarSpecification _avspec); + +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/RmAttributeMutation.java b/src/main/java/avatartranslator/mutation/RmAttributeMutation.java new file mode 100644 index 0000000000..703b42a905 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/RmAttributeMutation.java @@ -0,0 +1,25 @@ +package avatartranslator.mutation; + +import avatartranslator.*; +import java.util.List; + +import myutil.TraceManager; + +public class RmAttributeMutation extends AttributeMutation implements RmMutation { + + public RmAttributeMutation(String _name, String _blockName) { + setName(_name); + setBlockName(_blockName); + } + + public void apply(AvatarSpecification _avspec) { + AvatarBlock block = getBlock(_avspec); + List<AvatarAttribute> attr = block.getAttributes(); + AvatarAttribute aa = findElement(_avspec); + if(aa == null) { + TraceManager.addDev("Attribut inexistant"); + return; + } + attr.remove(aa); + } +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/mutation/RmMutation.java b/src/main/java/avatartranslator/mutation/RmMutation.java new file mode 100644 index 0000000000..9f647ec4b6 --- /dev/null +++ b/src/main/java/avatartranslator/mutation/RmMutation.java @@ -0,0 +1,9 @@ +package avatartranslator.mutation; + +import avatartranslator.*; + +public interface RmMutation { + + AvatarElement findElement(AvatarSpecification _avspec); + +} \ No newline at end of file diff --git a/ttool/src/test/java/avatartranslator/AvatarMutationTests.java b/ttool/src/test/java/avatartranslator/AvatarMutationTests.java new file mode 100644 index 0000000000..75e30f0efe --- /dev/null +++ b/ttool/src/test/java/avatartranslator/AvatarMutationTests.java @@ -0,0 +1,62 @@ +package avatartranslator; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; + +import myutil.TraceManager; +import org.junit.Before; +import org.junit.Test; + +import avatartranslator.*; +import avatartranslator.mutation.*; +import java.util.List; + +public class AvatarMutationTests { + + private AvatarSpecification as; + private AvatarBlock block; + + @Before + public void test() { + as = new AvatarSpecification("avatarspecification", null); + block = new AvatarBlock("block", as, null); + as.addBlock(block); + AvatarAttribute x1 = new AvatarAttribute("x", AvatarType.INTEGER, block, null); + block.addAttribute(x1); + x1.setInitialValue("10"); + } + + @Test + public void testAddAttribute() { + AddAttributeMutation mutation = new AddAttributeMutation("y", "bool", "block"); + assertTrue(mutation.getType() == AvatarType.BOOLEAN); + assertTrue(mutation.getName().equals("y")); + assertTrue(mutation.getBlock(as) == block); + + AttributeMutation mutation2 = new AddAttributeMutation("z", "int", "block"); + mutation2.setInitialValue("5"); + mutation.apply(as); + mutation2.apply(as); + assertTrue(block.getAttributes().size() == 3); + AvatarAttribute attr1 = block.getAttribute(1); + AvatarAttribute attr2 = block.getAttribute(2); + assertTrue(attr2.getInitialValueInInt() == 5); + } + + @Test + public void testRmAttribute() { + AttributeMutation mutation = new RmAttributeMutation("x", "block"); + mutation.apply(as); + assertTrue(block.getAttributes().size() == 0); + AttributeMutation mutation2 = new RmAttributeMutation("x", "block"); + mutation.apply(as); + } + + @Test + public void testMdAttribute() { + assertTrue(block.getAttribute(0).getInitialValue().equals("10")); + AttributeMutation mutation = new MdAttributeMutation("x", "42", "block"); + mutation.apply(as); + assertTrue(block.getAttribute(0).getInitialValue().equals("42")); + } +} \ No newline at end of file -- GitLab