Skip to content

Commit 7ca3da4

Browse files
committed
Add generic types for component and mediator
1 parent b68ffe9 commit 7ca3da4

26 files changed

+65
-99
lines changed

README.md

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -320,39 +320,35 @@ public interface FooMediator extends ChildMediator {
320320
`ComponentViewModel` class:
321321

322322
```java
323-
public class FooViewModel extends AbstractChildViewModel {
323+
public class FooViewModel extends AbstractChildViewModel<FooMediator> {
324324

325-
public void addBar() {
325+
public FooViewModel() {
326+
...
327+
}
328+
329+
public void doSomething() {
326330
var bar = new BarViewModel();
327331
... // set up the bar
328332
getMediator().addBar(bar);
329333
}
330334

331-
332-
@Override
333-
public FooMediator getMediator() {
334-
return (FooMediator) super.getMediator();
335-
}
336-
337335
...
338336
}
339337
```
340338

341339
`ComponentView` class:
342340

343341
```java
344-
public class FooView extends AbstractChildView<FooViewModel> {
342+
public class FooView extends AbstractChildView<FooViewModel, FooComponent> {
345343

346344
public FooView(FooViewModel viewModel) {
347345
...
348346
}
349347

350-
...
351-
352-
@Override
353-
public FooComponent getComponent() {
354-
return (FooComponent) super.getComponent();
348+
protected void initialize() {
349+
logger.debug("{} View is initializing", getComponent().getLogPrefix());
355350
}
351+
...
356352
}
357353
```
358354

@@ -380,7 +376,7 @@ public class FooComponent extends AbstractChildComponent<FooView> {
380376
...
381377

382378
@Override
383-
public FooMediator createMediator() {
379+
protected FooMediator createMediator() {
384380
return new FooComponent.Mediator(); // the mediator is created at the beginning of initialization
385381
}
386382
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractChildComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*
2424
* @author Pavel Castornii
2525
*/
26-
public abstract class AbstractChildComponent<T extends AbstractChildView<?>> extends AbstractParentComponent<T>
26+
public abstract class AbstractChildComponent<T extends AbstractChildView<?, ?>> extends AbstractParentComponent<T>
2727
implements ChildComponent<T> {
2828

2929
protected abstract class Mediator extends AbstractParentComponent.Mediator implements ChildMediator {

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractChildView.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,10 @@
2020
*
2121
* @author Pavel Castornii
2222
*/
23-
public abstract class AbstractChildView<T extends AbstractChildViewModel> extends AbstractParentView<T>
24-
implements ChildView<T> {
23+
public abstract class AbstractChildView<T extends AbstractChildViewModel<?>, S extends AbstractChildComponent<?>>
24+
extends AbstractParentView<T, S> implements ChildView<T, S> {
2525

2626
public AbstractChildView(T viewModel) {
2727
super(viewModel);
2828
}
29-
30-
@Override
31-
public AbstractChildComponent<?> getComponent() {
32-
return (AbstractChildComponent<?>) super.getComponent();
33-
}
3429
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractChildViewModel.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,10 @@
2020
*
2121
* @author Pavel Castornii
2222
*/
23-
public abstract class AbstractChildViewModel extends AbstractParentViewModel implements ChildViewModel {
23+
public abstract class AbstractChildViewModel<M extends ChildMediator> extends AbstractParentViewModel<M>
24+
implements ChildViewModel<M> {
2425

2526
public AbstractChildViewModel() {
2627
super();
2728
}
28-
29-
@Override
30-
public ChildMediator getMediator() {
31-
return (ChildMediator) super.getMediator();
32-
}
3329
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
*
2929
* @author Pavel Castornii
3030
*/
31-
public abstract class AbstractComponent<T extends AbstractComponentView<?>> implements Component<T> {
31+
public abstract class AbstractComponent<T extends AbstractComponentView<?, ?>> implements Component<T> {
3232

3333
private static final Logger logger = LoggerFactory.getLogger(AbstractComponent.class);
3434

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractComponentView.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,16 @@
1616

1717
package com.techsenger.mvvm4fx.core;
1818

19-
import org.slf4j.Logger;
20-
import org.slf4j.LoggerFactory;
21-
2219
/**
2320
*
2421
* @author Pavel Castornii
2522
*/
26-
public abstract class AbstractComponentView<T extends AbstractComponentViewModel> implements ComponentView<T> {
27-
28-
private static final Logger logger = LoggerFactory.getLogger(AbstractComponentView.class);
23+
public abstract class AbstractComponentView<T extends AbstractComponentViewModel<?>, S extends AbstractComponent<?>>
24+
implements ComponentView<T, S> {
2925

3026
private final T viewModel;
3127

32-
private AbstractComponent<?> component;
28+
private S component;
3329

3430
public AbstractComponentView(T viewModel) {
3531
this.viewModel = viewModel;
@@ -41,7 +37,7 @@ public T getViewModel() {
4137
}
4238

4339
@Override
44-
public AbstractComponent<?> getComponent() {
40+
public S getComponent() {
4541
return component;
4642
}
4743

@@ -113,6 +109,6 @@ protected void unbind() { }
113109
protected void unbuild() { }
114110

115111
void setComponent(AbstractComponent<?> component) {
116-
this.component = component;
112+
this.component = (S) component;
117113
}
118114
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractComponentViewModel.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
*
2828
* @author Pavel Castornii
2929
*/
30-
public abstract class AbstractComponentViewModel implements ComponentViewModel {
30+
public abstract class AbstractComponentViewModel<T extends ComponentMediator> implements ComponentViewModel<T> {
3131

3232
private static final Logger logger = LoggerFactory.getLogger(AbstractComponentViewModel.class);
3333

34-
private ComponentMediator mediator;
34+
private T mediator;
3535

36-
public ComponentMediator getMediator() {
36+
public T getMediator() {
3737
return this.mediator;
3838
}
3939

@@ -108,6 +108,6 @@ protected void initialize() { }
108108
protected void deinitialize() { }
109109

110110
protected void setMediator(ComponentMediator mediator) {
111-
this.mediator = mediator;
111+
this.mediator = (T) mediator;
112112
}
113113
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractParentComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
*
2626
* @author Pavel Castornii
2727
*/
28-
public abstract class AbstractParentComponent<T extends AbstractParentView<?>> extends AbstractComponent<T>
28+
public abstract class AbstractParentComponent<T extends AbstractParentView<?, ?>> extends AbstractComponent<T>
2929
implements ParentComponent<T> {
3030

3131
protected abstract class Mediator extends AbstractComponent.Mediator implements ParentMediator {

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractParentView.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,11 @@
2020
*
2121
* @author Pavel Castornii
2222
*/
23-
public abstract class AbstractParentView<T extends AbstractParentViewModel> extends AbstractComponentView<T>
24-
implements ParentView<T> {
23+
public abstract class AbstractParentView<T extends AbstractParentViewModel<?>, S extends AbstractParentComponent<?>>
24+
extends AbstractComponentView<T, S> implements ParentView<T, S> {
2525

2626

2727
public AbstractParentView(T viewModel) {
2828
super(viewModel);
2929
}
30-
31-
@Override
32-
public AbstractParentComponent<?> getComponent() {
33-
return (AbstractParentComponent<?>) super.getComponent();
34-
}
3530
}

mvvm4fx-core/src/main/java/com/techsenger/mvvm4fx/core/AbstractParentViewModel.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,10 @@
2020
*
2121
* @author Pavel Castornii
2222
*/
23-
public abstract class AbstractParentViewModel extends AbstractComponentViewModel implements ParentViewModel {
23+
public abstract class AbstractParentViewModel<T extends ParentMediator> extends AbstractComponentViewModel<T>
24+
implements ParentViewModel<T> {
2425

2526
public AbstractParentViewModel() {
2627
super();
2728
}
28-
29-
30-
@Override
31-
public ParentMediator getMediator() {
32-
return (ParentMediator) super.getMediator();
33-
}
3429
}

0 commit comments

Comments
 (0)