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}