Skip to content

Commit c163340

Browse files
committed
Refactor composer setter
1 parent 19575b5 commit c163340

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,9 @@ public class FooComposer extends AbstractChildComposer<FooView> implements FooVi
252252
...
253253
}
254254
```
255-
3. Composer Assignment. To assign a `Composer` to the `ViewModel`, the public method
256-
`AbstractComponentViewModel#setComposer(...)` is used, and for the `View``AbstractComponentView#setComposer(...)`.
257-
There is also the method `AbstractComponentView#createComposer()`, which can be overridden to automate `Composer`
258-
creation during construction.
255+
3. Composer Assignment. To assign a `Composer` to the `View` and `ViewModel`, use the public method
256+
`AbstractComponentView#setComposer(...)`. There is also the method `AbstractComponentView#createComposer()`, which can
257+
be overridden to automate `Composer` creation during construction.
259258

260259
Advantages of this approach:
261260

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,7 @@ public abstract class AbstractComponentView<T extends AbstractComponentViewModel
3333

3434
public AbstractComponentView(T viewModel) {
3535
this.viewModel = viewModel;
36-
var composer = createComposer();
37-
this.composer = composer;
38-
if (this.composer != null) {
39-
viewModel.setComposer(composer.getViewModelComposer());
40-
}
36+
setComposer(createComposer());
4137
}
4238

4339
@Override
@@ -99,8 +95,24 @@ public ComponentView.Composer getComposer() {
9995
return composer;
10096
}
10197

102-
public void setComposer(ComponentView.Composer composer) {
98+
/**
99+
* Assigns the given {@link ComponentComposer} to this view and propagates its corresponding
100+
* {@link ComponentViewModel.Composer} to the view model.
101+
*
102+
* <p>Since {@link ComponentComposer} extends {@link ComponentView.Composer}, it contains all composition logic
103+
* required by the view itself, while also providing a dedicated composer for the associated view model.
104+
*
105+
* <p>If {@code composer} is {@code null}, both the view and the view model are detached from any composer.
106+
*
107+
* @param composer the composer instance to attach to this view; may be {@code null}
108+
*/
109+
public void setComposer(ComponentComposer<?> composer) {
103110
this.composer = composer;
111+
if (composer == null) {
112+
viewModel.setComposer(null);
113+
} else {
114+
viewModel.setComposer(composer.getViewModelComposer());
115+
}
104116
}
105117

106118
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public Composer getComposer() {
117117
return composer;
118118
}
119119

120-
public void setComposer(Composer composer) {
120+
protected void setComposer(Composer composer) {
121121
this.composer = composer;
122122
}
123123

0 commit comments

Comments
 (0)