001package co.codewizards.cloudstore.ls.client.handler; 002 003import java.lang.reflect.ParameterizedType; 004 005import co.codewizards.cloudstore.ls.client.LocalServerClient; 006import co.codewizards.cloudstore.ls.core.dto.InverseServiceRequest; 007import co.codewizards.cloudstore.ls.core.dto.InverseServiceResponse; 008 009public abstract class AbstractInverseServiceRequestHandler<Q extends InverseServiceRequest, A extends InverseServiceResponse> implements InverseServiceRequestHandler<Q, A> { 010 011 private final Class<Q> requestClass; 012 { 013 // TODO implement proper resolution as the actual type arguments can be different ones through a large inheritance hierarchy! 014 // ...put this code then into the ReflectionUtil class. 015 @SuppressWarnings("unchecked") 016 Class<Q> c = (Class<Q>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 017 requestClass = c; 018 } 019 020 private LocalServerClient localServerClient; 021 022 @Override 023 public int getPriority() { 024 return 0; 025 } 026 027 @Override 028 public Class<? super Q> getInverseServiceRequestType() { 029 return requestClass; 030 } 031 032 @Override 033 public LocalServerClient getLocalServerClient() { 034 return localServerClient; 035 } 036 @Override 037 public void setLocalServerClient(LocalServerClient localServerClient) { 038 this.localServerClient = localServerClient; 039 } 040}