package com.yoghurt.crypto.transactions.client.place; import com.google.gwt.place.shared.Prefix; public class AddressPlace extends ApplicationPlace { private static final String PREFIX = "addr"; public enum AddressDataType { HASH160("hash160"), ID("id"); private final String token; private AddressDataType(final String token) { this.token = token; } public String getToken() { return token; } public static AddressDataType fromToken(final String token) { for (final AddressDataType type : values()) { if (type.getToken().equals(token)) { return type; } } return null; } } private final AddressDataType type; private final String payload; @Prefix(PREFIX) public static class Tokenizer extends DelimitedTokenizer<AddressPlace> { @Override protected AddressPlace createPlace(final String[] tokens) { final AddressDataType type = AddressDataType.fromToken(tokens[0]); return tokens.length == 1 ? new AddressPlace(type) : new AddressPlace(type, tokens[1]); } @Override protected String[] getTokens(final AddressPlace place) { return place.payload == null ? new String[] { place.getType().getToken() } : new String[] { place.getType().getToken(), place.getPayload() }; } } public AddressPlace(final AddressDataType type) { this(type, null); } public AddressPlace(final AddressDataType type, final String payload) { this.type = type; this.payload = payload; } public AddressDataType getType() { return type; } public String getPayload() { return payload; } }