package com.yoghurt.crypto.transactions.client.place;
import com.google.gwt.place.shared.Prefix;
public class ScriptPlace extends ApplicationPlace {
private static final String PREFIX = "script";
public enum ScriptDataType {
RAW("raw"),
ID("id");
private final String token;
private ScriptDataType(final String token) {
this.token = token;
}
public String getToken() {
return token;
}
public static ScriptDataType fromToken(final String token) {
for (final ScriptDataType type : values()) {
if (type.getToken().equals(token)) {
return type;
}
}
return null;
}
}
private final ScriptDataType type;
private String outpointTransaction;
private int outpointIndex;
private String scriptSig;
private String pubKeySig;
@Prefix(PREFIX)
public static class Tokenizer extends DelimitedTokenizer<ScriptPlace> {
@Override
protected ScriptPlace createPlace(final String[] tokens) {
final ScriptDataType type = ScriptDataType.fromToken(tokens[0]);
final ScriptPlace place = new ScriptPlace(type);
switch (type) {
case ID:
place.setOutpointTransaction(tokens[1]);
place.setOutpointIndex(Integer.parseInt(tokens[2]));
place.setScriptSig(tokens[3]);
break;
case RAW:
// Outpoint script
place.setPubKeySig(tokens[2]);
// Input script
place.setScriptSig(tokens[1]);
break;
default:
return null;
}
return place;
}
@Override
protected String[] getTokens(final ScriptPlace place) {
switch (place.getType()) {
case ID:
return new String[] {
place.getType().getToken(),
place.getOutpointTransaction(),
String.valueOf(place.getOutpointIndex()),
place.getScriptSig()
};
case RAW:
return new String[] {
place.getType().getToken(),
place.getPubKeySig(),
place.getScriptSig()
};
default:
return null;
}
}
}
public ScriptPlace(final ScriptDataType type) {
this.type = type;
}
public ScriptPlace(final String outpointTransaction, final int outpointIndex, final String scriptSig) {
this.type = ScriptDataType.ID;
this.outpointTransaction = outpointTransaction;
this.outpointIndex = outpointIndex;
this.scriptSig = scriptSig;
}
public ScriptPlace(final String outpointTransaction, final String pubKeySig, final String scriptSig) {
this.type = ScriptDataType.RAW;
this.scriptSig = scriptSig;
this.pubKeySig = pubKeySig;
}
public void setPubKeySig(final String pubKeySig) {
this.pubKeySig = pubKeySig;
}
public void setOutpointIndex(final int outpointIndex) {
this.outpointIndex = outpointIndex;
}
public void setOutpointTransaction(final String outpointTransaction) {
this.outpointTransaction = outpointTransaction;
}
public void setScriptSig(final String scriptSig) {
this.scriptSig = scriptSig;
}
public ScriptDataType getType() {
return type;
}
public String getScriptSig() {
return scriptSig;
}
public String getOutpointTransaction() {
return outpointTransaction;
}
public int getOutpointIndex() {
return outpointIndex;
}
public String getPubKeySig() {
return pubKeySig;
}
}