From e09f501c45a87d82b0aaf26a8bc77fb5eb2c258d Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Sun, 21 Nov 2021 11:10:39 +0100 Subject: [PATCH] #174 - Add interfaces to base data structure --- .../playpad/trigger/CartTriggerItem.java | 9 +++--- .../trigger/CartTriggerViewController.java | 6 ++-- .../trigger/VolumeTriggerViewController.java | 3 +- .../main/java/de/tobias/playpad/pad/Pad.java | 3 +- .../de/tobias/playpad/project/Project.java | 3 +- .../playpad/project/ProjectSettings.java | 3 +- .../de/tobias/playpad/project/api/IPad.java | 15 +++++++++ .../de/tobias/playpad/project/api/IPage.java | 5 +++ .../tobias/playpad/project/api/IProject.java | 11 +++++++ .../playpad/project/api/IProjectSettings.java | 8 +++++ .../de/tobias/playpad/project/page/Page.java | 3 +- .../playpad/tigger/TriggerItemFactory.java | 1 - .../playpad/view/main/ProjectPreviewView.java | 22 ++++++------- .../plugin/api/trigger/RemoteTriggerItem.java | 31 +++++++++++++++++++ .../api/trigger/RemoteTriggerItemFactory.java | 24 ++++++++++++++ .../RemoteTriggerItemSettingsController.java | 4 +++ .../main/resources/plugin/webapi/Trigger.xml | 3 ++ .../plugin/webapi/lang/base_de.properties | 2 ++ .../playpad/plugin/api/WebApiPlugin.scala | 4 ++- 19 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java create mode 100644 PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java index 7bb7597b..a9bb720c 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java +++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java @@ -19,14 +19,13 @@ public class CartTriggerItem extends TriggerItem { private boolean allCarts; private PadStatus newStatus; // Only Play, Pause, Stop - private String type; + private final String type; CartTriggerItem(String type) { - super(); this.type = type; - newStatus = PadStatus.PLAY; - allCarts = false; - uuids = new UniqList<>(); + this.newStatus = PadStatus.PLAY; + this.allCarts = false; + this.uuids = new UniqList<>(); } public List<UUID> getCarts() { diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java index 1168ae13..1d58f123 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/CartTriggerViewController.java @@ -3,9 +3,9 @@ package de.tobias.playpad.viewcontroller.option.pad.trigger; import de.thecodelabs.utils.ui.NVC; import de.thecodelabs.utils.util.Localization; import de.tobias.playpad.PlayPadMain; -import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.project.Project; +import de.tobias.playpad.project.api.IPad; import de.tobias.playpad.trigger.CartTriggerItem; import de.tobias.playpad.view.main.ProjectPreviewView; import de.tobias.playpad.viewcontroller.main.IMainViewController; @@ -35,12 +35,12 @@ public class CartTriggerViewController extends NVC { this.item = item; Project project = PlayPadMain.getProgramInstance().getCurrentProject(); - final List<Pad> pads = item.getCarts().stream().map(project::getPad).collect(Collectors.toList()); + final List<? extends IPad> pads = item.getCarts().stream().map(project::getPad).collect(Collectors.toList()); projectPreviewView = new ProjectPreviewView(project, pads, mainViewController.getPage()); projectPreviewView.setPadding(new Insets(0, 0, 0, 164)); projectPreviewView.selectedProperty().addListener((InvalidationListener) observable -> { item.getCarts().clear(); - for (Pad pad : projectPreviewView.getSelected()) { + for (IPad pad : projectPreviewView.getSelected()) { item.getCarts().add(pad.getUuid()); } }); diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java index f48a5734..66718e15 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/trigger/VolumeTriggerViewController.java @@ -6,6 +6,7 @@ import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.Strings; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.project.Project; +import de.tobias.playpad.project.api.IPad; import de.tobias.playpad.trigger.VolumeTriggerItem; import de.tobias.playpad.view.main.ProjectPreviewView; import de.tobias.playpad.viewcontroller.main.IMainViewController; @@ -48,7 +49,7 @@ public class VolumeTriggerViewController extends NVC { projectPreviewView.setPadding(new Insets(0, 0, 0, 164)); projectPreviewView.selectedProperty().addListener((InvalidationListener) observable -> { item.getCarts().clear(); - for (Pad pad : projectPreviewView.getSelected()) { + for (IPad pad : projectPreviewView.getSelected()) { item.getCarts().add(pad.getUuid()); } }); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java index cbefe4d2..cfc4fdd2 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java @@ -16,6 +16,7 @@ import de.tobias.playpad.pad.mediapath.MediaPath; import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectSettings; +import de.tobias.playpad.project.api.IPad; import de.tobias.playpad.project.page.PadIndex; import de.tobias.playpad.project.page.Page; import de.tobias.playpad.project.page.PageCoordinate; @@ -39,7 +40,7 @@ import java.util.UUID; * @author tobias * @version 6.2.0 */ -public class Pad { +public class Pad implements IPad { private UUID uuid; private IntegerProperty positionProperty = new SimpleIntegerProperty(); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java index eedc4bca..9d9d3962 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/Project.java @@ -3,6 +3,7 @@ package de.tobias.playpad.project; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.mediapath.MediaPath; +import de.tobias.playpad.project.api.IProject; import de.tobias.playpad.project.page.PadIndex; import de.tobias.playpad.project.page.Page; import de.tobias.playpad.project.ref.ProjectReference; @@ -27,7 +28,7 @@ import java.util.stream.Collectors; * @author tobias * @since 6.0.0 */ -public class Project { +public class Project implements IProject { /** * Project file extension. diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java index 0e4d089f..34c06549 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java @@ -2,10 +2,11 @@ package de.tobias.playpad.project; import de.thecodelabs.storage.settings.annotation.Key; import de.thecodelabs.utils.application.ApplicationUtils; +import de.tobias.playpad.project.api.IProjectSettings; import java.nio.file.Path; -public class ProjectSettings { +public class ProjectSettings implements IProjectSettings { public static final int MAX_PAGES; diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java new file mode 100644 index 00000000..cca8d720 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPad.java @@ -0,0 +1,15 @@ +package de.tobias.playpad.project.api; + +import de.tobias.playpad.pad.PadStatus; + +import java.util.UUID; + +public interface IPad { + UUID getUuid(); + + String getName(); + + PadStatus getStatus(); + + int getPositionReadable(); +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java new file mode 100644 index 00000000..23ba1b4a --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IPage.java @@ -0,0 +1,5 @@ +package de.tobias.playpad.project.api; + +public interface IPage { + IPad getPad(int x, int y); +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java new file mode 100644 index 00000000..1b19a1ba --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProject.java @@ -0,0 +1,11 @@ +package de.tobias.playpad.project.api; + +import java.util.List; + +public interface IProject { + List<? extends IPage> getPages(); + + IPage getPage(int index); + + IProjectSettings getSettings(); +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java new file mode 100644 index 00000000..d2970dcb --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/api/IProjectSettings.java @@ -0,0 +1,8 @@ +package de.tobias.playpad.project.api; + +public interface IProjectSettings { + + int getColumns(); + + int getRows(); +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java index 24f20789..1419a7e8 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/page/Page.java @@ -3,6 +3,7 @@ package de.tobias.playpad.project.page; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectSettings; +import de.tobias.playpad.project.api.IPage; import de.tobias.playpad.server.sync.command.CommandManager; import de.tobias.playpad.server.sync.command.Commands; import de.tobias.playpad.server.sync.listener.upstream.PageUpdateListener; @@ -16,7 +17,7 @@ import java.util.*; * @author tobias * @since 6.0.0 */ -public class Page { +public class Page implements IPage { private UUID id; private IntegerProperty positionProperty; diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java index 118dc560..38723727 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerItemFactory.java @@ -13,5 +13,4 @@ public abstract class TriggerItemFactory extends Component { public abstract TriggerItem newInstance(Trigger trigger); public abstract NVC getSettingsController(TriggerItem item, IMainViewController mainViewController); - } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java index 2e16c3cb..849d9300 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/ProjectPreviewView.java @@ -1,9 +1,9 @@ package de.tobias.playpad.view.main; -import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; -import de.tobias.playpad.project.Project; -import de.tobias.playpad.project.page.Page; +import de.tobias.playpad.project.api.IPad; +import de.tobias.playpad.project.api.IPage; +import de.tobias.playpad.project.api.IProject; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Insets; @@ -18,10 +18,10 @@ import java.util.List; public class ProjectPreviewView extends Pagination { - private final Project project; - private final ObservableList<Pad> selected; + private final IProject project; + private final ObservableList<IPad> selected; - public ProjectPreviewView(Project project, List<Pad> preSelect, int initialPage) { + public ProjectPreviewView(IProject project, List<? extends IPad> preSelect, int initialPage) { super(project.getPages().size()); this.project = project; this.selected = FXCollections.observableArrayList(preSelect); @@ -38,10 +38,10 @@ public class ProjectPreviewView extends Pagination { gridPane.setPadding(new Insets(0, 0, 7, 0)); - final Page page = project.getPage(index); + final IPage page = project.getPage(index); for (int x = 0; x < project.getSettings().getColumns(); x++) { for (int y = 0; y < project.getSettings().getRows(); y++) { - final Pad pad = page.getPad(x, y); + final IPad pad = page.getPad(x, y); ToggleButton toggleButton = getToggleButton(selected, pad); gridPane.add(toggleButton, x, y); @@ -50,7 +50,7 @@ public class ProjectPreviewView extends Pagination { return gridPane; } - private ToggleButton getToggleButton(List<Pad> preSelect, Pad pad) { + private ToggleButton getToggleButton(List<IPad> preSelect, IPad pad) { ToggleButton toggleButton = new ToggleButton(String.valueOf(pad.getPositionReadable())); if (pad.getStatus() != PadStatus.EMPTY) { toggleButton.setTooltip(new Tooltip(pad.getName())); @@ -72,11 +72,11 @@ public class ProjectPreviewView extends Pagination { return toggleButton; } - public List<Pad> getSelected() { + public List<? extends IPad> getSelected() { return selected; } - public ObservableList<Pad> selectedProperty() { + public ObservableList<? extends IPad> selectedProperty() { return selected; } } diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java new file mode 100644 index 00000000..87371e60 --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItem.java @@ -0,0 +1,31 @@ +package de.tobias.playpad.plugin.api.trigger; + +import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.profile.Profile; +import de.tobias.playpad.project.Project; +import de.tobias.playpad.tigger.TriggerItem; +import de.tobias.playpad.viewcontroller.main.IMainViewController; + +public class RemoteTriggerItem extends TriggerItem { + + private final String type; + + public RemoteTriggerItem(String type) { + this.type = type; + } + + @Override + public String getType() { + return type; + } + + @Override + public void performAction(Pad pad, Project project, IMainViewController controller, Profile profile) { + + } + + @Override + public TriggerItem copy() { + return null; + } +} diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java new file mode 100644 index 00000000..1e5bb19c --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemFactory.java @@ -0,0 +1,24 @@ +package de.tobias.playpad.plugin.api.trigger; + +import de.thecodelabs.utils.ui.NVC; +import de.tobias.playpad.tigger.Trigger; +import de.tobias.playpad.tigger.TriggerItem; +import de.tobias.playpad.tigger.TriggerItemFactory; +import de.tobias.playpad.viewcontroller.main.IMainViewController; + +public class RemoteTriggerItemFactory extends TriggerItemFactory { + + public RemoteTriggerItemFactory(String type) { + super(type); + } + + @Override + public TriggerItem newInstance(Trigger trigger) { + return new RemoteTriggerItem(getType()); + } + + @Override + public NVC getSettingsController(TriggerItem item, IMainViewController mainViewController) { + return null; + } +} diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java new file mode 100644 index 00000000..235f933d --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/trigger/RemoteTriggerItemSettingsController.java @@ -0,0 +1,4 @@ +package de.tobias.playpad.plugin.api.trigger; + +public class RemoteTriggerItemSettingsController { +} diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml new file mode 100644 index 00000000..5fb97b9b --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/Trigger.xml @@ -0,0 +1,3 @@ +<Actions> + <Component id="RemoteCart" name="Trigger.RemoteCart.Name">de.tobias.playpad.plugin.api.trigger.RemoteTriggerItemFactory</Component> +</Actions> \ No newline at end of file diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties index 7a95dbf9..74bfbb3a 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources/plugin/webapi/lang/base_de.properties @@ -11,3 +11,5 @@ webapi-settings.remote.address=IP-Address/Host webapi-settings.remote.port=Port webapi-settings.remote.add=Hinzuf\u00FCgen webapi-settings.remote.remove=L\u00F6schen + +Trigger.RemoteCart.Name=Remote Kachel \ No newline at end of file diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala index 23e9900a..d9323118 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/scala/de/tobias/playpad/plugin/api/WebApiPlugin.scala @@ -27,12 +27,15 @@ class WebApiPlugin extends PlayPadPluginStub with PluginArtifact { override def startup(descriptor: PluginDescriptor): Unit = { module = new Module(descriptor.getName, descriptor.getArtifactId) + Localization.addResourceBundle("plugin/webapi/lang/base", getClass.getClassLoader) PlayPadPlugin.getInstance().addPadListener(new PadStatusListener) PlayPadPlugin.getInstance().addGlobalListener(new ProjectListener) Logger.debug("Enable Web API Plugin") + PlayPadPlugin.getRegistries.getTriggerItems.loadComponentsFromFile("plugin/webapi/Trigger.xml", getClass.getClassLoader, module, Localization.getBundle) + val settingsPath = WebApiPlugin.getWebApiSettingsPath if (Files.exists(settingsPath)) { webApiSettings = Storage.load(StorageTypes.JSON, classOf[WebApiSettings]) @@ -62,7 +65,6 @@ class WebApiPlugin extends PlayPadPluginStub with PluginArtifact { }) PlayPadPlugin.getInstance().addGlobalSettingsTab(() => new WebApiSettingsViewController(webApiSettings)) - Localization.addResourceBundle("plugin/webapi/lang/base", getClass.getClassLoader) } override def shutdown(): Unit = { -- GitLab