CLValueTuple2.java
package com.syntifi.casper.sdk.model.clvalue;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.syntifi.casper.sdk.exception.CLValueDecodeException;
import com.syntifi.casper.sdk.exception.CLValueEncodeException;
import com.syntifi.casper.sdk.exception.DynamicInstanceException;
import com.syntifi.casper.sdk.exception.NoSuchTypeException;
import com.syntifi.casper.sdk.model.clvalue.cltype.AbstractCLTypeWithChildren;
import com.syntifi.casper.sdk.model.clvalue.cltype.CLTypeData;
import com.syntifi.casper.sdk.model.clvalue.cltype.CLTypeTuple2;
import com.syntifi.casper.sdk.model.clvalue.encdec.CLValueDecoder;
import com.syntifi.casper.sdk.model.clvalue.encdec.CLValueEncoder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.javatuples.Pair;
import java.io.IOException;
import java.util.Arrays;
/**
* Casper Tuple2 CLValue implementation
*
* @author Alexandre Carvalho
* @author Andre Bertolace
* @see AbstractCLValue
* @since 0.0.1
*/
@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class CLValueTuple2
extends AbstractCLValueWithChildren<Pair<? extends AbstractCLValue<?, ?>, ? extends AbstractCLValue<?, ?>>, CLTypeTuple2> {
@JsonProperty("cl_type")
private CLTypeTuple2 clType = new CLTypeTuple2();
public CLValueTuple2(Pair<? extends AbstractCLValue<?, ?>, ? extends AbstractCLValue<?, ?>> value) {
this.setValue(value);
setChildTypes();
}
@Override
public void encode(CLValueEncoder clve, boolean encodeType) throws IOException, NoSuchTypeException, CLValueEncodeException {
setChildTypes();
getValue().getValue0().encode(clve, false);
getValue().getValue1().encode(clve, false);
setBytes(getValue().getValue0().getBytes() + getValue().getValue1().getBytes());
if (encodeType) {
this.encodeType(clve);
}
}
@Override
public void decode(CLValueDecoder clvd)
throws IOException, CLValueDecodeException, DynamicInstanceException, NoSuchTypeException {
CLTypeData childTypeData1 = clType.getChildClTypeData(0);
CLTypeData childTypeData2 = clType.getChildClTypeData(1);
AbstractCLValue<?, ?> child1 = CLTypeData.createCLValueFromCLTypeData(childTypeData1);
if (child1.getClType() instanceof AbstractCLTypeWithChildren) {
((AbstractCLTypeWithChildren) child1.getClType())
.setChildTypes(((AbstractCLTypeWithChildren) clType.getChildTypes().get(0)).getChildTypes());
}
child1.decode(clvd);
AbstractCLValue<?, ?> child2 = CLTypeData.createCLValueFromCLTypeData(childTypeData2);
if (child2.getClType() instanceof AbstractCLTypeWithChildren) {
((AbstractCLTypeWithChildren) child2.getClType())
.setChildTypes(((AbstractCLTypeWithChildren) clType.getChildTypes().get(1)).getChildTypes());
}
child2.decode(clvd);
setValue(new Pair<>(child1, child2));
setBytes(getValue().getValue0().getBytes() + getValue().getValue1().getBytes());
}
@Override
protected void setChildTypes() {
clType.setChildTypes(Arrays.asList(getValue().getValue0().getClType(), getValue().getValue1().getClType()));
}
}