package co.codewizards.cloudstore.ls.client.handler;
import java.lang.reflect.ParameterizedType;
import co.codewizards.cloudstore.ls.client.LocalServerClient;
import co.codewizards.cloudstore.ls.core.dto.InverseServiceRequest;
import co.codewizards.cloudstore.ls.core.dto.InverseServiceResponse;
public abstract class AbstractInverseServiceRequestHandler<Q extends InverseServiceRequest, A extends InverseServiceResponse> implements InverseServiceRequestHandler<Q, A> {
private final Class<Q> requestClass;
{
// TODO implement proper resolution as the actual type arguments can be different ones through a large inheritance hierarchy!
// ...put this code then into the ReflectionUtil class.
@SuppressWarnings("unchecked")
Class<Q> c = (Class<Q>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
requestClass = c;
}
private LocalServerClient localServerClient;
@Override
public int getPriority() {
return 0;
}
@Override
public Class<? super Q> getInverseServiceRequestType() {
return requestClass;
}
@Override
public LocalServerClient getLocalServerClient() {
return localServerClient;
}
@Override
public void setLocalServerClient(LocalServerClient localServerClient) {
this.localServerClient = localServerClient;
}
}