Skip to content

Commit 685296f

Browse files
committed
Add component params
1 parent 7828e3b commit 685296f

20 files changed

Lines changed: 165 additions & 85 deletions

File tree

README.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,12 @@ maintain references to parent and child components, and also holds a `Composer`
533533

534534
A component consists of the following classes: a `View`, `FxView`, `Presenter`. In addition to them, a component
535535
always has a `Descriptor` (which is provided by the framework and normally does not require custom implementation)
536-
and may include `Composer`, `Port` and a `History` classes.
536+
and may include `Params`, `Composer`, `Port` and a `History` classes.
537+
538+
`Params` contains the initial parameter values required for component construction. Before use, the params are validated,
539+
and after the constructor completes, they are not retained. Using a `Params` object ensures that all required
540+
parameters are explicitly defined before initialization, preventing missing values at runtime. Additionally, `Params`
541+
is a convenient data container for passing information to the `Composer` when creating components.
537542

538543
`Port` is an interface implemented by a `Presenter` to enable explicit communication between presenters. A single
539544
`Presenter` may implement multiple distinct `Port`s.
@@ -586,7 +591,7 @@ public interface FooView extends ParentView {
586591

587592
interface Composer extends ParentView.Composer {
588593

589-
void addBar();
594+
void addBar(ComponentConfig config);
590595

591596
BarPort getBar();
592597
}
@@ -608,7 +613,9 @@ public class FooPresenter<V extends FooView> extends AbstractParentPresenter<V>
608613
}
609614

610615
public void onAction() {
611-
getView().getComposer().addBar();
616+
var config = new ComponentConfig();
617+
...
618+
getView().getComposer().addBar(config);
612619
// use bar
613620
}
614621

@@ -624,9 +631,9 @@ public class FooFxView<P extends FooPresenter<?>> extends AbstractParentFxView<P
624631
public class Composer extends AbstractParentFxView<P>.Composer implements FooView.Composer {
625632

626633
@Override
627-
public void addBar() {
634+
public void addBar(ComponentConfig config) {
628635
bar = new BarFxView();
629-
var p = new BarPresenter(bar);
636+
var p = new BarPresenter(bar, config);
630637
p.initialize();
631638
getModifiableChildren().add(bar);
632639
someNode.getChildren().add(bar.getNode()); // adding bar view into foo view

patternfx-core/src/main/java/com/techsenger/patternfx/core/ComponentHistory.java renamed to patternfx-core/src/main/java/com/techsenger/patternfx/core/AbstractComponentHistory.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,11 @@
1616

1717
package com.techsenger.patternfx.core;
1818

19-
import java.io.Serializable;
20-
2119
/**
22-
* Represents a serializable snapshot of a component's state. A history object stores only the information that
23-
* must persist between component sessions and excludes all transient or runtime aspects.
2420
*
2521
* @author Pavel Castornii
2622
*/
27-
public interface ComponentHistory extends Serializable {
23+
public abstract class AbstractComponentHistory {
2824

2925
/**
3026
* Returns whether this history instance is new, meaning it was newly created and has not yet been used to
@@ -36,17 +32,21 @@ public interface ComponentHistory extends Serializable {
3632
*
3733
* @return {@code true} if this history is new and has not yet been used, {@code false} otherwise
3834
*/
39-
boolean isNew();
35+
public abstract boolean isNew();
4036

4137
/**
4238
* Method called before the component is serialized. This can be used to prepare the object's state
4339
* before saving it in a binary format.
4440
*/
45-
void preSerialize();
41+
public void preSerialize() {
42+
43+
}
4644

4745
/**
4846
* Method called after the component is deserialized. This can be used to restore the object's state
4947
* after loading it from a binary format.
5048
*/
51-
void postDeserialize();
49+
public void postDeserialize() {
50+
51+
}
5252
}

patternfx-core/src/main/java/com/techsenger/patternfx/core/HistoryProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* @author Pavel Castornii
2525
*/
2626
@FunctionalInterface
27-
public interface HistoryProvider<T extends ComponentHistory> {
27+
public interface HistoryProvider<T extends AbstractComponentHistory> {
2828

2929
T provide();
3030
}

patternfx-demo/src/main/java/com/techsenger/patternfx/demo/MvpRunner.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.techsenger.patternfx.demo.model.PersonService;
2020
import com.techsenger.patternfx.demo.mvp.RegistryFxView;
21+
import com.techsenger.patternfx.demo.mvp.RegistryParams;
2122
import com.techsenger.patternfx.demo.mvp.RegistryPresenter;
2223

2324
/**
@@ -28,9 +29,9 @@ public class MvpRunner implements Runnable {
2829

2930
@Override
3031
public void run() {
31-
var service = new PersonService();
3232
var view = new RegistryFxView<>();
33-
var presenter = new RegistryPresenter<>(view, service);
33+
var params = new RegistryParams(new PersonService());
34+
var presenter = new RegistryPresenter<>(view, params);
3435
presenter.initialize();
3536
}
3637

patternfx-demo/src/main/java/com/techsenger/patternfx/demo/mvp/DialogPresenter.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import com.techsenger.patternfx.demo.model.Person;
2222
import com.techsenger.patternfx.demo.model.PersonValidator;
2323
import com.techsenger.patternfx.mvp.AbstractParentPresenter;
24-
import com.techsenger.patternfx.mvp.Descriptor;
24+
import com.techsenger.patternfx.mvp.ComponentDescriptor;
25+
import com.techsenger.patternfx.mvp.ComponentParams;
2526

2627
/**
2728
*
@@ -37,8 +38,8 @@ public class DialogPresenter<V extends DialogView> extends AbstractParentPresent
3738

3839
private @Nullable Person result;
3940

40-
public DialogPresenter(V view) {
41-
super(view);
41+
public DialogPresenter(V view, ComponentParams params) {
42+
super(view, params);
4243
}
4344

4445
@Override
@@ -47,8 +48,8 @@ public DialogPresenter(V view) {
4748
}
4849

4950
@Override
50-
protected Descriptor createDescriptor() {
51-
return new Descriptor(DemoNames.PERSON_DIALOG);
51+
protected ComponentDescriptor createDescriptor() {
52+
return new ComponentDescriptor(DemoNames.PERSON_DIALOG);
5253
}
5354

5455
protected void onFirstNameChanged(String value) {

patternfx-demo/src/main/java/com/techsenger/patternfx/demo/mvp/RegistryFxView.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.techsenger.patternfx.demo.Style;
2121
import com.techsenger.patternfx.demo.model.Person;
2222
import com.techsenger.patternfx.mvp.AbstractParentFxView;
23+
import com.techsenger.patternfx.mvp.ComponentParams;
2324
import java.util.List;
2425
import javafx.beans.property.SimpleObjectProperty;
2526
import javafx.beans.property.SimpleStringProperty;
@@ -48,7 +49,7 @@ public class Composer extends AbstractParentFxView<P>.Composer implements Regist
4849
@Override
4950
public DialogPort showDialog() {
5051
var v = new DialogFxView(view.getStage());
51-
var p = new DialogPresenter<>(v);
52+
var p = new DialogPresenter<>(v, new ComponentParams());
5253
p.initialize();
5354
v.getDialog().showAndWait();
5455
return p;
@@ -68,7 +69,7 @@ public void addReport() {
6869
throw new IllegalStateException("Report has been added");
6970
}
7071
var reportV = new ReportFxView();
71-
var reportP = new ReportPresenter(reportV);
72+
var reportP = new ReportPresenter(reportV, new ComponentParams());
7273
reportP.initialize();
7374
view.root.getChildren().add(reportV.getNode());
7475
view.getModifiableChildren().add(reportV);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2024-2025 Pavel Castornii.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.techsenger.patternfx.demo.mvp;
18+
19+
import com.techsenger.patternfx.demo.model.PersonService;
20+
import com.techsenger.patternfx.mvp.ComponentParams;
21+
22+
/**
23+
*
24+
* @author Pavel Castornii
25+
*/
26+
public class RegistryParams extends ComponentParams {
27+
28+
private final PersonService service;
29+
30+
public RegistryParams(PersonService service) {
31+
this.service = service;
32+
}
33+
34+
public PersonService getService() {
35+
return service;
36+
}
37+
}

patternfx-demo/src/main/java/com/techsenger/patternfx/demo/mvp/RegistryPresenter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import com.techsenger.patternfx.demo.model.Person;
2121
import com.techsenger.patternfx.demo.model.PersonService;
2222
import com.techsenger.patternfx.mvp.AbstractParentPresenter;
23-
import com.techsenger.patternfx.mvp.Descriptor;
23+
import com.techsenger.patternfx.mvp.ComponentDescriptor;
2424
import java.util.ArrayList;
2525
import java.util.List;
2626
import java.util.Objects;
@@ -37,14 +37,14 @@ public class RegistryPresenter<V extends RegistryView> extends AbstractParentPre
3737

3838
private int selectedIndex;
3939

40-
public RegistryPresenter(V view, PersonService service) {
41-
super(view);
42-
this.service = service;
40+
public RegistryPresenter(V view, RegistryParams params) {
41+
super(view, params);
42+
this.service = params.getService();
4343
}
4444

4545
@Override
46-
protected Descriptor createDescriptor() {
47-
return new Descriptor(DemoNames.PERSON_REGISTRY);
46+
protected ComponentDescriptor createDescriptor() {
47+
return new ComponentDescriptor(DemoNames.PERSON_REGISTRY);
4848
}
4949

5050
protected void onSelectedChanged(int value) {

patternfx-demo/src/main/java/com/techsenger/patternfx/demo/mvp/ReportPresenter.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import com.techsenger.patternfx.demo.DemoNames;
2020
import com.techsenger.patternfx.demo.model.Person;
2121
import com.techsenger.patternfx.mvp.AbstractChildPresenter;
22-
import com.techsenger.patternfx.mvp.Descriptor;
22+
import com.techsenger.patternfx.mvp.ComponentDescriptor;
23+
import com.techsenger.patternfx.mvp.ComponentParams;
2324
import java.util.List;
2425

2526
/**
@@ -28,8 +29,8 @@
2829
*/
2930
public class ReportPresenter extends AbstractChildPresenter<ReportView> implements ReportPort {
3031

31-
public ReportPresenter(ReportView view) {
32-
super(view);
32+
public ReportPresenter(ReportView view, ComponentParams params) {
33+
super(view, params);
3334
}
3435

3536
@Override
@@ -40,7 +41,7 @@ public void refresh(List<Person> persons) {
4041
}
4142

4243
@Override
43-
protected Descriptor createDescriptor() {
44-
return new Descriptor(DemoNames.PERSON_REPORT);
44+
protected ComponentDescriptor createDescriptor() {
45+
return new ComponentDescriptor(DemoNames.PERSON_REPORT);
4546
}
4647
}

patternfx-mvp/src/main/java/com/techsenger/patternfx/mvp/AbstractChildPresenter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
public abstract class AbstractChildPresenter<V extends ChildView> extends AbstractParentPresenter<V>
2626
implements ChildPresenter<V> {
2727

28-
public AbstractChildPresenter(V view) {
29-
super(view);
28+
public AbstractChildPresenter(V view, ComponentParams params) {
29+
super(view, params);
3030
}
3131

3232
@Override

0 commit comments

Comments
 (0)