package org.apereo.cas.ticket.registry.support.kryo.serial; import org.apereo.cas.authentication.principal.AbstractWebApplicationService; import org.apereo.cas.ticket.registry.support.kryo.FieldHelper; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.Serializer; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; /** * Serializer for classes that extend {@link AbstractWebApplicationService}. * * @author Marvin S. Addison * @since 3.0.0 */ public abstract class AbstractWebApplicationServiceSerializer<T extends AbstractWebApplicationService> extends Serializer<T> { /** FieldHelper instance. **/ protected FieldHelper fieldHelper; /** * Instantiates a new abstract web application service serializer. * * @param helper the helper */ public AbstractWebApplicationServiceSerializer(final FieldHelper helper) { this.fieldHelper = helper; } @Override public void write(final Kryo kryo, final Output output, final T service) { kryo.writeObject(output, service.getId()); kryo.writeObject(output, this.fieldHelper.getFieldValue(service, "originalUrl")); kryo.writeObject(output, service.getArtifactId()); } @Override public T read(final Kryo kryo, final Input input, final Class<T> type) { return createService(kryo, input, kryo.readObject(input, String.class), kryo.readObject(input, String.class), kryo.readObject(input, String.class)); } /** * Creates the service. * * @param kryo the Kryo instance * @param input the input stream representing the serialized object * @param id the id * @param originalUrl the original url * @param artifactId the artifact id * @return the created service instance. */ protected abstract T createService(Kryo kryo, Input input, String id, String originalUrl, String artifactId); }