Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b64a353

Browse files
Generify UseCase<T>
1 parent 70eeacf commit b64a353

File tree

7 files changed

+15
-42
lines changed

7 files changed

+15
-42
lines changed

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@
2828
* This class is an implementation of {@link UseCase} that represents a use case for
2929
* retrieving data related to an specific {@link User}.
3030
*/
31-
public class GetUserDetails extends UseCase {
31+
public class GetUserDetails extends UseCase<User> {
3232

33-
public static final String NAME = "userDetails";
3433
public static final String PARAM_USER_ID_KEY = "userId";
3534

3635
@VisibleForTesting
@@ -39,13 +38,13 @@ public class GetUserDetails extends UseCase {
3938
private final UserRepository userRepository;
4039

4140
@Inject
42-
publicGetUserDetails(UserRepository userRepository, ThreadExecutor threadExecutor,
41+
GetUserDetails(UserRepository userRepository, ThreadExecutor threadExecutor,
4342
PostExecutionThread postExecutionThread) {
4443
super(threadExecutor, postExecutionThread);
4544
this.userRepository = userRepository;
4645
}
4746

48-
@Override protected Observable buildUseCaseObservable(Optional<Params> params) {
47+
@Override protected Observable<User> buildUseCaseObservable(Optional<Params> params) {
4948
if (params.isPresent()) {
5049
final int userId = params.get().getInt(PARAM_USER_ID_KEY, PARAM_USER_ID_DEFAULT_VALUE);
5150
return this.userRepository.user(userId);

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@
2121
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
2222
import com.fernandocejas.arrow.optional.Optional;
2323
import io.reactivex.Observable;
24+
import java.util.List;
2425
import javax.inject.Inject;
2526

2627
/**
2728
* This class is an implementation of {@link UseCase} that represents a use case for
2829
* retrieving a collection of all {@link User}.
2930
*/
30-
public class GetUserList extends UseCase {
31-
32-
public static final String NAME = "userList";
31+
public class GetUserList extends UseCase<List<User>> {
3332

3433
private final UserRepository userRepository;
3534

@@ -40,7 +39,7 @@ public class GetUserList extends UseCase {
4039
this.userRepository = userRepository;
4140
}
4241

43-
@Override public Observable buildUseCaseObservable(Optional<Params> params) {
42+
@Override public Observable<List<User>> buildUseCaseObservable(Optional<Params> params) {
4443
return this.userRepository.users();
4544
}
4645
}

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
* By convention each UseCase implementation will return the result using a {@link DisposableObserver}
3434
* that will execute its job in a background thread and will post the result in the UI thread.
3535
*/
36-
public abstract class UseCase {
36+
public abstract class UseCase<T> {
3737

3838
private final ThreadExecutor threadExecutor;
3939
private final PostExecutionThread postExecutionThread;
@@ -48,7 +48,7 @@ public abstract class UseCase {
4848
/**
4949
* Builds an {@link Observable} which will be used when executing the current {@link UseCase}.
5050
*/
51-
protectedabstract Observable buildUseCaseObservable(Optional<Params> params);
51+
abstract Observable<T> buildUseCaseObservable(Optional<Params> params);
5252

5353
/**
5454
* Executes the current use case.
@@ -57,9 +57,8 @@ public abstract class UseCase {
5757
* by {@link #buildUseCaseObservable(Optional)} ()} method.
5858
* @param params Parameters used to build execute this use case.
5959
*/
60-
@SuppressWarnings("unchecked")
61-
public void execute(DisposableObserver observer, Params params) {
62-
final Observable<?> observable = this.buildUseCaseObservable(Optional.of(params))
60+
public void execute(DisposableObserver<T> observer, Params params) {
61+
final Observable<T> observable = this.buildUseCaseObservable(Optional.of(params))
6362
.subscribeOn(Schedulers.from(threadExecutor))
6463
.observeOn(postExecutionThread.getScheduler());
6564
addDisposable(observable.subscribeWith(observer));

‎domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/UseCaseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void testSubscriptionWhenExecutingUseCase() {
6363
assertThat(testObserver.isDisposed()).isTrue();
6464
}
6565

66-
private static class UseCaseTestClass extends UseCase {
66+
private static class UseCaseTestClass extends UseCase<Object> {
6767

6868
UseCaseTestClass(ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
6969
super(threadExecutor, postExecutionThread);

‎presentation/src/main/java/com/fernandocejas/android10/sample/presentation/internal/di/modules/UserModule.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,7 @@
1515
*/
1616
package com.fernandocejas.android10.sample.presentation.internal.di.modules;
1717

18-
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
19-
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
20-
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetails;
21-
import com.fernandocejas.android10.sample.domain.interactor.GetUserList;
22-
import com.fernandocejas.android10.sample.domain.interactor.UseCase;
23-
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
24-
import com.fernandocejas.android10.sample.presentation.internal.di.PerActivity;
2518
import dagger.Module;
26-
import dagger.Provides;
27-
import javax.inject.Named;
2819

2920
/**
3021
* Dagger module that provides user related collaborators.
@@ -33,15 +24,4 @@
3324
public class UserModule {
3425

3526
public UserModule() {}
36-
37-
@Provides @PerActivity @Named(GetUserList.NAME) UseCase provideGetUserListUseCase(
38-
GetUserList getUserList) {
39-
return getUserList;
40-
}
41-
42-
@Provides @PerActivity @Named(GetUserDetails.NAME) UseCase provideGetUserDetailsUseCase(
43-
UserRepository userRepository, ThreadExecutor threadExecutor,
44-
PostExecutionThread postExecutionThread) {
45-
return new GetUserDetails(userRepository, threadExecutor, postExecutionThread);
46-
}
4727
}

‎presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserDetailsPresenter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,13 @@
2121
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
2222
import com.fernandocejas.android10.sample.domain.interactor.DefaultObserver;
2323
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetails;
24-
import com.fernandocejas.android10.sample.domain.interactor.UseCase;
2524
import com.fernandocejas.android10.sample.domain.interactor.Params;
2625
import com.fernandocejas.android10.sample.presentation.exception.ErrorMessageFactory;
2726
import com.fernandocejas.android10.sample.presentation.internal.di.PerActivity;
2827
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
2928
import com.fernandocejas.android10.sample.presentation.model.UserModel;
3029
import com.fernandocejas.android10.sample.presentation.view.UserDetailsView;
3130
import javax.inject.Inject;
32-
import javax.inject.Named;
3331

3432
/**
3533
* {@link Presenter} that controls communication between views and models of the presentation
@@ -40,11 +38,11 @@ public class UserDetailsPresenter implements Presenter {
4038

4139
private UserDetailsView viewDetailsView;
4240

43-
private final UseCase getUserDetailsUseCase;
41+
private final GetUserDetails getUserDetailsUseCase;
4442
private final UserModelDataMapper userModelDataMapper;
4543

4644
@Inject
47-
public UserDetailsPresenter(@Named(GetUserDetails.NAME) UseCase getUserDetailsUseCase,
45+
public UserDetailsPresenter(GetUserDetails getUserDetailsUseCase,
4846
UserModelDataMapper userModelDataMapper) {
4947
this.getUserDetailsUseCase = getUserDetailsUseCase;
5048
this.userModelDataMapper = userModelDataMapper;

‎presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.fernandocejas.android10.sample.domain.exception.ErrorBundle;
2222
import com.fernandocejas.android10.sample.domain.interactor.DefaultObserver;
2323
import com.fernandocejas.android10.sample.domain.interactor.GetUserList;
24-
import com.fernandocejas.android10.sample.domain.interactor.UseCase;
2524
import com.fernandocejas.android10.sample.domain.interactor.Params;
2625
import com.fernandocejas.android10.sample.presentation.exception.ErrorMessageFactory;
2726
import com.fernandocejas.android10.sample.presentation.internal.di.PerActivity;
@@ -31,7 +30,6 @@
3130
import java.util.Collection;
3231
import java.util.List;
3332
import javax.inject.Inject;
34-
import javax.inject.Named;
3533

3634
/**
3735
* {@link Presenter} that controls communication between views and models of the presentation
@@ -42,11 +40,11 @@ public class UserListPresenter implements Presenter {
4240

4341
private UserListView viewListView;
4442

45-
private final UseCase getUserListUseCase;
43+
private final GetUserList getUserListUseCase;
4644
private final UserModelDataMapper userModelDataMapper;
4745

4846
@Inject
49-
public UserListPresenter(@Named(GetUserList.NAME) UseCase getUserListUserCase,
47+
public UserListPresenter(GetUserList getUserListUserCase,
5048
UserModelDataMapper userModelDataMapper) {
5149
this.getUserListUseCase = getUserListUserCase;
5250
this.userModelDataMapper = userModelDataMapper;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /