All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.framework.token.Serializer Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.framework.token;

import java.util.Base64;
import org.opentripplanner.utils.text.CharacterEscapeFormatter;

class Serializer {

  private final TokenDefinition definition;
  private final Object[] values;
  private final StringBuilder buf = new StringBuilder();
  private final CharacterEscapeFormatter tokenFormatter =
    TokenFormatterConfiguration.tokenFormatter();

  private Serializer(TokenDefinition definition, Object[] values) {
    this.definition = definition;
    this.values = values;
  }

  static String serialize(TokenDefinition definition, Object[] values) {
    var s = new Serializer(definition, values);
    s.writeVersion(definition.version());
    for (var fieldName : definition.fieldNames()) {
      s.write(fieldName);
    }
    return s.serialize();
  }

  private String serialize() {
    return Base64.getUrlEncoder().encodeToString(buf.toString().getBytes());
  }

  private void write(String fieldName) {
    write(fieldName, values[definition.index(fieldName)]);
  }

  private void write(String fieldName, Object value) {
    var type = definition.type(fieldName);
    writeString(type.valueToString(value));
  }

  private void writeVersion(int value) {
    writeString(TokenType.INT.valueToString(value));
  }

  private void writeString(String value) {
    if (value != null) {
      buf.append(tokenFormatter.encode(value));
    }
    buf.append(TokenFormatterConfiguration.fieldSeparator());
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy