Skip to content

Commit 7bdf4ea

Browse files
Serialization fixed
Also, new workflow to specify an interactive modification. Again, this is probably something that should be discussed; my idea of a sensible compromise might differ from yours.
1 parent 70193d3 commit 7bdf4ea

File tree

4 files changed

+49
-29
lines changed

4 files changed

+49
-29
lines changed

src/main/java/de/rub/nds/modifiablevariable/VariableModification.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import de.rub.nds.modifiablevariable.biginteger.BigIntegerAddModification;
1212
import de.rub.nds.modifiablevariable.biginteger.BigIntegerExplicitValueModification;
13+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerInteractiveModification;
1314
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftLeftModification;
1415
import de.rub.nds.modifiablevariable.biginteger.BigIntegerShiftRightModification;
1516
import de.rub.nds.modifiablevariable.biginteger.BigIntegerSubtractModification;
@@ -46,7 +47,7 @@
4647
*/
4748
@XmlRootElement
4849
@XmlTransient
49-
@XmlSeeAlso({ AccessModificationFilter.class, BigIntegerAddModification.class,
50+
@XmlSeeAlso({ AccessModificationFilter.class, BigIntegerAddModification.class, BigIntegerInteractiveModification.class,
5051
BigIntegerExplicitValueModification.class, BigIntegerSubtractModification.class,
5152
BigIntegerXorModification.class, BigIntegerShiftLeftModification.class, BigIntegerShiftRightModification.class,
5253
IntegerAddModification.class, IntegerExplicitValueModification.class, IntegerSubtractModification.class,

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerInteractiveModification.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,13 @@
1717
* @author Janis Fliegenschmidt - janis.fliegenschmidt@rub.de
1818
*/
1919
@XmlRootElement
20-
@XmlType(propOrder = { "interactive", "modificationFilter", "postModification" })
20+
@XmlType(propOrder = { "modificationFilter", "postModification" })
2121
public class BigIntegerInteractiveModification extends VariableModification<BigInteger> {
2222

2323
private InteractiveBigIntegerModification modification;
2424

2525
protected BigIntegerInteractiveModification() {
26-
this(new InteractiveBigIntegerModification() {
27-
@Override
28-
public BigInteger modify(BigInteger oldVal) {
29-
// Fail fast
30-
throw new UnsupportedOperationException("No interactive modifi" + "cation specified.");
31-
}
32-
});
26+
this.modification = BigIntegerModificationFactory.getStandardInteractiveModification();
3327
}
3428

3529
protected BigIntegerInteractiveModification(InteractiveBigIntegerModification modification) {

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerModificationFactory.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -89,29 +89,29 @@ public static VariableModification<BigInteger> explicitValueFromFile(int value)
8989
return modifications.get(pos);
9090
}
9191

92-
public static VariableModification<BigInteger> interactive(final String variableName) {
93-
return interactive(new BigIntegerInteractiveModification.InteractiveBigIntegerModification() {
94-
@Override
95-
public BigInteger modify(BigInteger oldVal) {
96-
BigInteger result = null;
97-
98-
System.out.println("Enter new value for " + variableName + " (Old value is " + oldVal.toString()
99-
+ "): ");
100-
101-
result = new Scanner(System.in).nextBigInteger();
102-
103-
return result;
104-
}
105-
});
92+
/*
93+
* Interactive modification
94+
*/
95+
96+
private static BigIntegerInteractiveModification.InteractiveBigIntegerModification standardInteractiveModification = new BigIntegerInteractiveModification.InteractiveBigIntegerModification() {
97+
@Override
98+
public BigInteger modify(BigInteger oldVal) {
99+
System.out.println("Enter new value for BigInt: ");
100+
return new Scanner(System.in).nextBigInteger();
101+
}
102+
};
103+
104+
public static void setStandardInteractiveModification(
105+
BigIntegerInteractiveModification.InteractiveBigIntegerModification modification) {
106+
standardInteractiveModification = modification;
106107
}
107108

108-
public static VariableModification<BigInteger> interactive() {
109-
return interactive("BigInt");
109+
protected static BigIntegerInteractiveModification.InteractiveBigIntegerModification getStandardInteractiveModification() {
110+
return standardInteractiveModification;
110111
}
111112

112-
public static VariableModification<BigInteger> interactive(
113-
BigIntegerInteractiveModification.InteractiveBigIntegerModification modification) {
114-
return new BigIntegerInteractiveModification(modification);
113+
public static VariableModification<BigInteger> interactive() {
114+
return new BigIntegerInteractiveModification();
115115
}
116116

117117
public static synchronized List<VariableModification<BigInteger>> modificationsFromFile() {

src/test/java/de/rub/nds/modifiablevariable/serialization/BigIntegerSerializationTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import de.rub.nds.modifiablevariable.biginteger.BigIntegerAddModification;
13+
import de.rub.nds.modifiablevariable.biginteger.BigIntegerInteractiveModification;
1314
import de.rub.nds.modifiablevariable.biginteger.BigIntegerModificationFactory;
1415
import de.rub.nds.modifiablevariable.biginteger.ModifiableBigInteger;
1516
import de.rub.nds.modifiablevariable.bytearray.ByteArrayModificationFactory;
@@ -61,10 +62,17 @@ public void setUp() throws JAXBException {
6162

6263
writer = new StringWriter();
6364
context = JAXBContext.newInstance(ModifiableBigInteger.class, BigIntegerAddModification.class,
64-
ByteArrayModificationFactory.class);
65+
ByteArrayModificationFactory.class, BigIntegerInteractiveModification.class);
6566
m = context.createMarshaller();
6667
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
6768
um = context.createUnmarshaller();
69+
70+
BigIntegerModificationFactory
71+
.setStandardInteractiveModification(new BigIntegerInteractiveModification.InteractiveBigIntegerModification() {
72+
public BigInteger modify(BigInteger oldVal) {
73+
return new BigInteger("12");
74+
}
75+
});
6876
}
6977

7078
@Test
@@ -102,7 +110,24 @@ public void testSerializeDeserializeWithDoubleModification() throws Exception {
102110
result = mv.getValue();
103111
assertEquals(expectedResult, result);
104112
assertNotSame(expectedResult, result);
113+
}
114+
115+
@Test
116+
public void testSerializationWithInteractiveMod() throws Exception {
117+
VariableModification<BigInteger> mod = BigIntegerModificationFactory.interactive();
118+
start.setModification(mod);
119+
m.marshal(start, writer);
120+
121+
String xmlString = writer.toString();
122+
LOGGER.debug(xmlString);
105123

124+
um = context.createUnmarshaller();
125+
ModifiableBigInteger mv = (ModifiableBigInteger) um.unmarshal(new StringReader(xmlString));
126+
127+
expectedResult = new BigInteger("12");
128+
result = mv.getValue();
129+
assertEquals(expectedResult, result);
130+
assertNotSame(expectedResult, result);
106131
}
107132

108133
@Test

0 commit comments

Comments
 (0)