implements PR-10e bank composition workspacebus events and local orchestration
This commit is contained in:
parent
454f78d0fe
commit
401f27a5bb
@ -13,6 +13,11 @@ import p.studio.projects.ProjectReference;
|
|||||||
import p.studio.utilities.i18n.I18n;
|
import p.studio.utilities.i18n.I18n;
|
||||||
import p.studio.workspaces.assets.details.AssetDetailsUiSupport;
|
import p.studio.workspaces.assets.details.AssetDetailsUiSupport;
|
||||||
import p.studio.workspaces.assets.messages.AssetWorkspaceDetailsViewState;
|
import p.studio.workspaces.assets.messages.AssetWorkspaceDetailsViewState;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetBankCompositionAppliedEvent;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetBankCompositionApplyFailedEvent;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetBankCompositionApplyRequestedEvent;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetBankCompositionCapacityChangedEvent;
|
||||||
|
import p.studio.workspaces.assets.messages.events.StudioAssetBankCompositionDraftChangedEvent;
|
||||||
import p.studio.workspaces.assets.messages.events.StudioAssetsDetailsViewStateChangedEvent;
|
import p.studio.workspaces.assets.messages.events.StudioAssetsDetailsViewStateChangedEvent;
|
||||||
import p.studio.workspaces.framework.StudioSubscriptionBag;
|
import p.studio.workspaces.framework.StudioSubscriptionBag;
|
||||||
|
|
||||||
@ -44,6 +49,7 @@ public final class AssetDetailsBankCompositionControl extends VBox implements St
|
|||||||
viewState = event.viewState();
|
viewState = event.viewState();
|
||||||
coordinator.replaceDetails(viewState == null ? null : viewState.selectedAssetDetails());
|
coordinator.replaceDetails(viewState == null ? null : viewState.selectedAssetDetails());
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,18 +76,22 @@ public final class AssetDetailsBankCompositionControl extends VBox implements St
|
|||||||
dualListView.setOnMoveToRight(items -> {
|
dualListView.setOnMoveToRight(items -> {
|
||||||
coordinator.moveToSelected(items);
|
coordinator.moveToSelected(items);
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
});
|
});
|
||||||
dualListView.setOnMoveToLeft(items -> {
|
dualListView.setOnMoveToLeft(items -> {
|
||||||
coordinator.moveToAvailable(items);
|
coordinator.moveToAvailable(items);
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
});
|
});
|
||||||
dualListView.setOnMoveUp(index -> {
|
dualListView.setOnMoveUp(index -> {
|
||||||
coordinator.moveUp(index);
|
coordinator.moveUp(index);
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
});
|
});
|
||||||
dualListView.setOnMoveDown(index -> {
|
dualListView.setOnMoveDown(index -> {
|
||||||
coordinator.moveDown(index);
|
coordinator.moveDown(index);
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
});
|
});
|
||||||
|
|
||||||
capacityMeter.setProgress(viewModel.capacityState().progress());
|
capacityMeter.setProgress(viewModel.capacityState().progress());
|
||||||
@ -112,20 +122,56 @@ public final class AssetDetailsBankCompositionControl extends VBox implements St
|
|||||||
private void beginEdit() {
|
private void beginEdit() {
|
||||||
coordinator.beginEdit();
|
coordinator.beginEdit();
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyDraft() {
|
private void applyDraft() {
|
||||||
coordinator.apply();
|
if (viewState == null || viewState.selectedAssetReference() == null) {
|
||||||
render();
|
return;
|
||||||
|
}
|
||||||
|
workspaceBus.publish(new StudioAssetBankCompositionApplyRequestedEvent(viewState.selectedAssetReference()));
|
||||||
|
try {
|
||||||
|
coordinator.apply();
|
||||||
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
|
workspaceBus.publish(new StudioAssetBankCompositionAppliedEvent(viewState.selectedAssetReference()));
|
||||||
|
} catch (RuntimeException exception) {
|
||||||
|
workspaceBus.publish(new StudioAssetBankCompositionApplyFailedEvent(
|
||||||
|
viewState.selectedAssetReference(),
|
||||||
|
exception.getMessage()));
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetDraft() {
|
private void resetDraft() {
|
||||||
coordinator.reset();
|
coordinator.reset();
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelEdit() {
|
private void cancelEdit() {
|
||||||
coordinator.cancel();
|
coordinator.cancel();
|
||||||
render();
|
render();
|
||||||
|
publishStateNotifications();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void publishStateNotifications() {
|
||||||
|
if (viewState == null || viewState.selectedAssetReference() == null || !coordinator.ready()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final AssetDetailsBankCompositionViewModel viewModel = coordinator.viewModel();
|
||||||
|
workspaceBus.publish(new StudioAssetBankCompositionDraftChangedEvent(
|
||||||
|
viewState.selectedAssetReference(),
|
||||||
|
viewModel.editing(),
|
||||||
|
viewModel.dirty(),
|
||||||
|
viewModel.availableFiles().size(),
|
||||||
|
viewModel.selectedFiles().size()));
|
||||||
|
workspaceBus.publish(new StudioAssetBankCompositionCapacityChangedEvent(
|
||||||
|
viewState.selectedAssetReference(),
|
||||||
|
viewModel.capacityState().progress(),
|
||||||
|
viewModel.capacityState().severity(),
|
||||||
|
viewModel.capacityState().blocked(),
|
||||||
|
viewModel.capacityState().labelText(),
|
||||||
|
viewModel.capacityState().hintText()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
package p.studio.workspaces.assets.messages.events;
|
||||||
|
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.studio.events.StudioEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record StudioAssetBankCompositionAppliedEvent(
|
||||||
|
AssetReference assetReference) implements StudioEvent {
|
||||||
|
public StudioAssetBankCompositionAppliedEvent {
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
package p.studio.workspaces.assets.messages.events;
|
||||||
|
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.studio.events.StudioEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record StudioAssetBankCompositionApplyFailedEvent(
|
||||||
|
AssetReference assetReference,
|
||||||
|
String message) implements StudioEvent {
|
||||||
|
public StudioAssetBankCompositionApplyFailedEvent {
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
message = Objects.requireNonNullElse(message, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package p.studio.workspaces.assets.messages.events;
|
||||||
|
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.studio.events.StudioEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record StudioAssetBankCompositionApplyRequestedEvent(
|
||||||
|
AssetReference assetReference) implements StudioEvent {
|
||||||
|
public StudioAssetBankCompositionApplyRequestedEvent {
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package p.studio.workspaces.assets.messages.events;
|
||||||
|
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.studio.controls.banks.StudioAssetCapacitySeverity;
|
||||||
|
import p.studio.events.StudioEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record StudioAssetBankCompositionCapacityChangedEvent(
|
||||||
|
AssetReference assetReference,
|
||||||
|
double progress,
|
||||||
|
StudioAssetCapacitySeverity severity,
|
||||||
|
boolean blocked,
|
||||||
|
String labelText,
|
||||||
|
String hintText) implements StudioEvent {
|
||||||
|
|
||||||
|
public StudioAssetBankCompositionCapacityChangedEvent {
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
severity = severity == null ? StudioAssetCapacitySeverity.GREEN : severity;
|
||||||
|
if (progress < 0.0d || progress > 1.0d) {
|
||||||
|
throw new IllegalArgumentException("progress must be in the 0..1 range");
|
||||||
|
}
|
||||||
|
labelText = Objects.requireNonNullElse(labelText, "");
|
||||||
|
hintText = Objects.requireNonNullElse(hintText, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package p.studio.workspaces.assets.messages.events;
|
||||||
|
|
||||||
|
import p.packer.messages.AssetReference;
|
||||||
|
import p.studio.events.StudioEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record StudioAssetBankCompositionDraftChangedEvent(
|
||||||
|
AssetReference assetReference,
|
||||||
|
boolean editing,
|
||||||
|
boolean dirty,
|
||||||
|
int availableCount,
|
||||||
|
int selectedCount) implements StudioEvent {
|
||||||
|
|
||||||
|
public StudioAssetBankCompositionDraftChangedEvent {
|
||||||
|
Objects.requireNonNull(assetReference, "assetReference");
|
||||||
|
if (availableCount < 0 || selectedCount < 0) {
|
||||||
|
throw new IllegalArgumentException("counts must be non-negative");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user