Link to home
Start Free TrialLog in
Avatar of Rohit Bajaj
Rohit BajajFlag for India

asked on

Avoiding code duplicacy

Hi,
I have the following functions in my code :

 public ListenableFuture<MessagesAroundSidResponse> messagesAroundSid(final MessagesAroundSidRequest request)
    {
        final SettableFuture<MessagesAroundSidResponse> settableFuture = SettableFuture.create();

        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new IResponseCallback()
        {

            @Override
            public void onSuccess(String responseBody, int statusCode)
            {
                if (statusCode >= 200 && statusCode <= 299)
                {
                    System.out.println(responseBody);
                    settableFuture.set(request.consumeResponse(responseBody));
                }
                else
                {
                    settableFuture.setException(request.consumeError(statusCode, responseBody));
                }

            }

            @Override
            public void onFailure(Throwable throwable)
            {
                settableFuture.setException(throwable);
            }
        }));
        return settableFuture;
    }

    public ListenableFuture<PreviousFetchResponse> PreviousChats(final PreviousFetchRequest request)
    {

        final SettableFuture<PreviousFetchResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new IResponseCallback()
        {
            @Override
            public void onSuccess(String responseBody, int statusCode)
            {
                if (statusCode >= 200 && statusCode <= 299)
                {
                    System.out.println("Iniside PreviousChat");
                    settableFuture.set(request.consumeResponse(responseBody));
                }
                else
                {
                    settableFuture.setException(request.consumeError(statusCode, responseBody));
                }
            }

            @Override
            public void onFailure(Throwable throwable)
            {
                settableFuture.setException(throwable);
            }
        }));

        return settableFuture;
    }

Open in new window


The following piece of code is duplicated in it :

 @Override
            public void onSuccess(String responseBody, int statusCode)
            {
                if (statusCode >= 200 && statusCode <= 299)
                {
                    System.out.println("Iniside PreviousChat");
                    settableFuture.set(request.consumeResponse(responseBody));
                }
                else
                {
                    settableFuture.setException(request.consumeError(statusCode, responseBody));
                }
            }

            @Override
            public void onFailure(Throwable throwable)
            {
                settableFuture.setException(throwable);
            }
        }));

        return settableFuture;

Open in new window


what way i can avoid this duplicacy ?

Thanks
SOLUTION
Avatar of dpearson
dpearson

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Rohit Bajaj

ASKER

HI,
Thanks
That removed code duplicacy to a great extent. But now i am left with the following piece of code which also seems like duplicacy
:

package to.talk.history.api;

import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;

import org.jetbrains.annotations.NotNull;
import to.talk.history.requests.*;
import to.talk.history.responses.*;

public class Client
{
    private final HttpClient _httpClient;

    public Client(@NotNull HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public ListenableFuture<FetchMessagesResponse> messagesAroundSid(@NotNull final MessagesAroundSidRequest request)
    {
        final SettableFuture<FetchMessagesResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }

    public ListenableFuture<FetchMessagesResponse> PreviousChats(@NotNull final PreviousFetchRequest request)
    {

        final SettableFuture<FetchMessagesResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }

    public ListenableFuture<SyncChatsResponse> syncChats(@NotNull final SyncChatsRequest request)
    {
        final SettableFuture<SyncChatsResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }

    public ListenableFuture<MagicContactsResponse> magicContacts(@NotNull final MagicContactsRequest request)
    {
        final SettableFuture<MagicContactsResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }

    public ListenableFuture<HistorySearchResponse> historySearch(@NotNull final HistorySearchRequest request)
    {
        final SettableFuture<HistorySearchResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }
    public ListenableFuture<FetchMessagesResponse> latestFetch(@NotNull final LatestFetchRequest request)
    {
        final SettableFuture<FetchMessagesResponse> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }

   

Open in new window



I tried reducing the above all code to the following function :

 public <K extends HistoryRequest,T> ListenableFuture<T> Fetch(final K request)
    {
        final SettableFuture<T> settableFuture = SettableFuture.create();
        _httpClient.processRequest(new HttpRequest(request.getRequestBody(), request.getRequestSpecificPath(), request.getUrlParams(), request.isMethodPost(), request.getTenantVersion(), new SettableFutureResponseCallback<>(request,settableFuture)));
        return settableFuture;
    }
}

Open in new window


Although the above code is running which is bit surprise to me as
how is the following line getting instantiated :
        final SettableFuture<T> settableFuture = SettableFuture.create();
As i dont provide the value of T in the parameters or anywhere.

I executed the code with the following line :

        ListenableFuture<FetchMessagesResponse> future = client.Fetch(latestFetchRequest);