server

Clone or download

lots of work

Modified Files

--- 'a/src/main/java/com/stream_pi/server/action/ExternalPlugins.java'
+++ b/src/main/java/com/stream_pi/server/action/ExternalPlugins.java
@@ -32,8 +32,8 @@ import com.stream_pi.action_api.action.S
import com.stream_pi.action_api.actionproperty.ServerProperties;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
-import com.stream_pi.action_api.normalaction.ExternalPlugin;
-import com.stream_pi.action_api.normalaction.NormalAction;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
+import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.exception.StreamPiException;
--- 'a/src/main/java/com/stream_pi/server/connection/ClientConnection.java'
+++ b/src/main/java/com/stream_pi/server/connection/ClientConnection.java
@@ -7,9 +7,9 @@ import com.stream_pi.action_api.action.L
import com.stream_pi.action_api.actionproperty.ClientProperties;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
-import com.stream_pi.action_api.normalaction.ExternalPlugin;
-import com.stream_pi.action_api.normalaction.NormalAction;
-import com.stream_pi.action_api.normalaction.ToggleAction;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
+import com.stream_pi.action_api.externalplugin.NormalAction;
+import com.stream_pi.action_api.externalplugin.ToggleAction;
import com.stream_pi.server.action.ExternalPlugins;
import com.stream_pi.server.client.Client;
import com.stream_pi.server.client.ClientProfile;
@@ -623,7 +623,7 @@ public class ClientConnection extends Th
}
- public void saveActionDetails(String profileID, Action action) throws SevereException
+ public synchronized void saveActionDetails(String profileID, Action action) throws SevereException
{
ArrayList<String> a = new ArrayList<>();
--- 'a/src/main/java/com/stream_pi/server/connection/ServerListener.java'
+++ b/src/main/java/com/stream_pi/server/connection/ServerListener.java
@@ -1,7 +1,7 @@
package com.stream_pi.server.connection;
-import com.stream_pi.action_api.normalaction.NormalAction;
-import com.stream_pi.action_api.normalaction.ToggleAction;
+import com.stream_pi.action_api.externalplugin.NormalAction;
+import com.stream_pi.action_api.externalplugin.ToggleAction;
import com.stream_pi.util.exception.SevereException;
public interface ServerListener
--- /dev/null
+++ b/src/main/java/com/stream_pi/server/controller/ActionDataFormats.java
@@ -0,0 +1,18 @@
+package com.stream_pi.server.controller;
+
+import javafx.scene.input.DataFormat;
+
+public class ActionDataFormats
+{
+ public static final DataFormat IS_NEW = new DataFormat("Is New");
+ public static final DataFormat ACTION_TYPE = new DataFormat("Action Type");
+ public static final DataFormat MODULE_NAME = new DataFormat("Module Name");
+ public static final DataFormat CLIENT_PROPERTIES = new DataFormat("Client Properties");
+ public static final DataFormat ICONS = new DataFormat("Icons");
+ public static final DataFormat CURRENT_ICON_STATE = new DataFormat("Current Icon State");
+ public static final DataFormat BACKGROUND_COLOUR = new DataFormat("Background Colour");
+ public static final DataFormat DISPLAY_TEXT_FONT_COLOUR = new DataFormat("Display Text Font Colour");
+ public static final DataFormat DISPLAY_TEXT = new DataFormat("Display Text");
+ public static final DataFormat DISPLAY_TEXT_ALIGNMENT = new DataFormat("Display Text Alignment");
+ public static final DataFormat DISPLAY_TEXT_SHOW = new DataFormat("Display Text Show");
+}
--- 'a/src/main/java/com/stream_pi/server/controller/Controller.java'
+++ b/src/main/java/com/stream_pi/server/controller/Controller.java
@@ -3,8 +3,8 @@ package com.stream_pi.server.controller;
import com.stream_pi.action_api.action.Action;
import com.stream_pi.action_api.action.ServerConnection;
import com.stream_pi.action_api.action.PropertySaver;
-import com.stream_pi.action_api.normalaction.NormalAction;
-import com.stream_pi.action_api.normalaction.ToggleAction;
+import com.stream_pi.action_api.externalplugin.NormalAction;
+import com.stream_pi.action_api.externalplugin.ToggleAction;
import com.stream_pi.server.Main;
import com.stream_pi.server.action.ExternalPlugins;
import com.stream_pi.server.client.ClientProfile;
@@ -582,78 +582,115 @@ public class Controller extends Base imp
}
}
- @Override
- public void saveClientAction(String profileID, String actionID, SocketAddress socketAddress)
+ private void saveClientActionMain(String profileID, String actionID, SocketAddress socketAddress, boolean sendIcons)
{
- new Thread(new Task<Void>() {
- @Override
- protected Void call()
+ try {
+ ClientConnection clientConnection = ClientConnections.getInstance().getClientConnectionBySocketAddress(socketAddress);
+
+ ClientProfile clientProfile = clientConnection.getClient().getProfileByID(profileID);
+
+ Action action = clientProfile.getActionByID(actionID);
+ clientConnection.saveActionDetails(profileID, action);
+
+
+ if(sendIcons && action.isHasIcon())
{
- try {
- ClientConnection clientConnection = ClientConnections.getInstance().getClientConnectionBySocketAddress(socketAddress);
+ saveAllIcons(profileID, actionID, socketAddress, false);
+ }
- ClientProfile clientProfile = clientConnection.getClient().getProfileByID(profileID);
- Action action = clientProfile.getActionByID(actionID);
- clientConnection.saveActionDetails(profileID, action);
+ Platform.runLater(()->{
+ try {
+ if(getDashboardPane().getActionGridPane().getCurrentParent().equals(action.getParent()) &&
+ getDashboardPane().getClientAndProfileSelectorPane().getCurrentSelectedClientProfile().getID().equals(profileID) &&
+ getDashboardPane().getClientAndProfileSelectorPane().getCurrentSelectedClientConnection().getRemoteSocketAddress().equals(socketAddress))
+ {
+ getDashboardPane().getActionGridPane().renderAction(action);
+ }
+
+ if(getDashboardPane().getActionDetailsPane().getAction().getID().equals(actionID))
+ {
+ getDashboardPane().getActionDetailsPane().setAction(action);
+ getDashboardPane().getActionDetailsPane().refresh();
+ }
- Platform.runLater(()->{
- try {
- if(getDashboardPane().getActionGridPane().getCurrentParent().equals(action.getParent()) &&
- getDashboardPane().getClientAndProfileSelectorPane().getCurrentSelectedClientProfile().getID().equals(profileID) &&
- getDashboardPane().getClientAndProfileSelectorPane().getCurrentSelectedClientConnection().getRemoteSocketAddress().equals(socketAddress))
- {
- getDashboardPane().getActionGridPane().renderAction(action);
- }
-
- if(getDashboardPane().getActionDetailsPane().getAction().getID().equals(actionID))
- {
- getDashboardPane().getActionDetailsPane().setAction(action);
- getDashboardPane().getActionDetailsPane().refresh();
- }
-
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- });
}
- catch (SevereException e)
+ catch (Exception e)
{
- handleSevereException(e);
+ e.printStackTrace();
}
- return null;
- }
- }).start();
+ });
+ }
+ catch (SevereException e)
+ {
+ handleSevereException(e);
+ }
+ }
+
+ @Override
+ public void saveClientAction(String profileID, String actionID, SocketAddress socketAddress, boolean sendIcons, boolean runAsync)
+ {
+ if(runAsync)
+ {
+ new Thread(new Task<Void>() {
+ @Override
+ protected Void call()
+ {
+ saveClientActionMain(profileID, actionID, socketAddress, sendIcons);
+ return null;
+ }
+ }).start();
+ }
+ else
+ {
+ saveClientActionMain(profileID, actionID, socketAddress, sendIcons);
+ }
}
@Override
public void saveAllIcons(String profileID, String actionID, SocketAddress socketAddress)
{
- new Thread(new Task<Void>() {
- @Override
- protected Void call()
- {
- try {
- ClientConnection clientConnection = ClientConnections.getInstance().getClientConnectionBySocketAddress(socketAddress);
+ saveAllIcons(profileID, actionID, socketAddress, true);
+ }
- ClientProfile clientProfile = clientConnection.getClient().getProfileByID(profileID);
- Action action = clientProfile.getActionByID(actionID);
- for(String eachState : action.getIcons().keySet())
- {
- clientConnection.sendIcon(profileID, actionID, eachState,
- action.getIcon(eachState));
- }
- }
- catch (SevereException e)
+ public void saveAllIcons(String profileID, String actionID, SocketAddress socketAddress, boolean async)
+ {
+ if(async)
+ {
+ new Thread(new Task<Void>() {
+ @Override
+ protected Void call()
{
- handleSevereException(e);
+ saveAllIconsMain(profileID, actionID, socketAddress);
+ return null;
}
- return null;
+ }).start();
+ }
+ else
+ {
+ saveAllIconsMain(profileID, actionID, socketAddress);
+ }
+ }
+
+ private void saveAllIconsMain(String profileID, String actionID, SocketAddress socketAddress)
+ {
+ try {
+ ClientConnection clientConnection = ClientConnections.getInstance().getClientConnectionBySocketAddress(socketAddress);
+
+ ClientProfile clientProfile = clientConnection.getClient().getProfileByID(profileID);
+ Action action = clientProfile.getActionByID(actionID);
+
+ for(String eachState : action.getIcons().keySet())
+ {
+ clientConnection.sendIcon(profileID, actionID, eachState,
+ action.getIcon(eachState));
}
- }).start();
+ }
+ catch (SevereException e)
+ {
+ handleSevereException(e);
+ }
}
@Override
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/DashboardBase.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/DashboardBase.java
@@ -45,7 +45,7 @@ public class DashboardBase extends Split
setActionGridPane(new ActionGridPane(exceptionAndAlertHandler));
- setActionDetailsPane(new ActionDetailsPane(exceptionAndAlertHandler, hostServices));
+ setActionDetailsPane(new ActionDetailsPane(exceptionAndAlertHandler, hostServices, getActionGridPane()));
getActionGridPane().setActionDetailsPaneListener(getActionDetailsPane());
}
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/PluginsPane.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/PluginsPane.java
@@ -1,15 +1,9 @@
package com.stream_pi.server.window.dashboard;
-import com.stream_pi.action_api.action.Action;
import com.stream_pi.action_api.action.ActionType;
-import com.stream_pi.action_api.action.DisplayTextAlignment;
-import com.stream_pi.action_api.actionproperty.property.Property;
-import com.stream_pi.action_api.actionproperty.property.Type;
-import com.stream_pi.action_api.normalaction.ExternalPlugin;
-import com.stream_pi.action_api.normalaction.NormalAction;
-import com.stream_pi.action_api.otheractions.CombineAction;
-import com.stream_pi.action_api.otheractions.FolderAction;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
import com.stream_pi.server.action.ExternalPlugins;
+import com.stream_pi.server.controller.ActionDataFormats;
import com.stream_pi.util.uihelper.SpaceFiller;
import javafx.application.HostServices;
import javafx.geometry.Insets;
@@ -131,7 +125,9 @@ public class PluginsPane extends VBox {
ClipboardContent content = new ClipboardContent();
- content.put(Action.getDataFormat(), createFakeAction(eachAction, "Untitled action"));
+ content.put(ActionDataFormats.ACTION_TYPE, eachAction.getActionType());
+ content.put(ActionDataFormats.MODULE_NAME, eachAction.getModuleName());
+ content.put(ActionDataFormats.IS_NEW, true);
db.setContent(content);
@@ -169,42 +165,6 @@ public class PluginsPane extends VBox {
private HostServices hostServices;
- public Action createFakeAction(Action action, String displayText)
- {
- Action newAction = new Action(action.getActionType());
-
- if(action.getActionType() == ActionType.NORMAL || action.getActionType() == ActionType.TOGGLE)
- {
- newAction.setModuleName(action.getModuleName());
- newAction.setVersion(action.getVersion());
- newAction.setName(action.getName());
- }
-
- newAction.setClientProperties(action.getClientProperties());
-
- for(Property property : newAction.getClientProperties().get())
- {
- if(property.getType() == Type.STRING || property.getType() == Type.INTEGER || property.getType() == Type.DOUBLE)
- property.setRawValue(property.getDefaultRawValue());
- }
-
- // newAction.setLocation(location);
-
- newAction.setIDRandom();
-
-
- newAction.setShowDisplayText(true);
- newAction.setDisplayText(displayText);
- newAction.setDisplayTextAlignment(DisplayTextAlignment.CENTER);
-
- //action.setParent(root);
-
- newAction.setBgColourHex("");
- newAction.setDisplayTextFontColourHex("");
-
- return newAction;
- }
-
public void loadOtherActions()
{
VBox vBox = new VBox();
@@ -222,7 +182,7 @@ public class PluginsPane extends VBox {
ClipboardContent content = new ClipboardContent();
- content.put(Action.getDataFormat(), createFakeAction(new FolderAction(), "Untitled Folder"));
+ content.put(ActionDataFormats.ACTION_TYPE, ActionType.FOLDER);
db.setContent(content);
@@ -244,7 +204,7 @@ public class PluginsPane extends VBox {
ClipboardContent content = new ClipboardContent();
- content.put(Action.getDataFormat(), createFakeAction(new CombineAction(), "Untitled Combine"));
+ content.put(ActionDataFormats.ACTION_TYPE, ActionType.COMBINE);
db.setContent(content);
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/ActionDetailsPane.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/ActionDetailsPane.java
@@ -4,10 +4,12 @@ import com.stream_pi.action_api.action.A
import com.stream_pi.action_api.action.ActionType;
import com.stream_pi.action_api.action.DisplayTextAlignment;
import com.stream_pi.action_api.action.Location;
+import com.stream_pi.action_api.actionproperty.ClientProperties;
import com.stream_pi.action_api.actionproperty.property.ControlType;
import com.stream_pi.action_api.actionproperty.property.FileExtensionFilter;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
import com.stream_pi.action_api.otheractions.CombineAction;
import com.stream_pi.action_api.otheractions.FolderAction;
import com.stream_pi.server.uipropertybox.UIPropertyBox;
@@ -17,6 +19,8 @@ import com.stream_pi.server.connection.C
import com.stream_pi.server.connection.ClientConnections;
import com.stream_pi.server.window.dashboard.actiongridpane.ActionBox;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
+import com.stream_pi.server.controller.ActionDataFormats;
+import com.stream_pi.server.window.dashboard.actiongridpane.ActionGridPaneListener;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.uihelper.HBoxInputBox;
@@ -24,26 +28,26 @@ import com.stream_pi.util.uihelper.HBoxI
import com.stream_pi.util.uihelper.SpaceFiller;
import javafx.application.HostServices;
import javafx.collections.FXCollections;
+import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.*;
+import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
-import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
-import javafx.scene.paint.Paint;
import javafx.stage.FileChooser;
import javafx.stage.Window;
import javafx.util.Callback;
import org.kordamp.ikonli.javafx.FontIcon;
-import org.w3c.dom.Text;
import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.logging.Logger;
public class ActionDetailsPane extends VBox implements ActionDetailsPaneListener
@@ -70,10 +74,14 @@ public class ActionDetailsPane extends V
private HostServices hostServices;
- public ActionDetailsPane(ExceptionAndAlertHandler exceptionAndAlertHandler, HostServices hostServices)
+ private ActionGridPaneListener actionGridPaneListener;
+
+ public ActionDetailsPane(ExceptionAndAlertHandler exceptionAndAlertHandler, HostServices hostServices,
+ ActionGridPaneListener actionGridPaneListener)
{
this.hostServices = hostServices;
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
+ this.actionGridPaneListener = actionGridPaneListener;
logger = Logger.getLogger(ActionDetailsPane.class.getName());
@@ -343,7 +351,7 @@ public class ActionDetailsPane extends V
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
setOnDragOver(dragEvent -> {
- if (dragEvent.getDragboard().hasContent(Action.getDataFormat()) && action != null) {
+ if (dragEvent.getDragboard().hasContent(ActionDataFormats.ACTION_TYPE) && action != null) {
if (action.getActionType() == ActionType.COMBINE) {
dragEvent.acceptTransferModes(TransferMode.ANY);
@@ -354,13 +362,55 @@ public class ActionDetailsPane extends V
setOnDragDropped(dragEvent -> {
try {
- Action newAction = (Action) dragEvent.getDragboard().getContent(Action.getDataFormat());
- if (newAction.getActionType() == ActionType.NORMAL) {
+ Dragboard db = dragEvent.getDragboard();
+
+ ActionType actionType = (ActionType) db.getContent(ActionDataFormats.ACTION_TYPE);
+
+ if(actionType == ActionType.NORMAL || actionType == ActionType.TOGGLE)
+ {
+ ExternalPlugin newAction = actionGridPaneListener.createNewActionFromExternalPlugin(
+ (String) db.getContent(ActionDataFormats.MODULE_NAME)
+ );
+
+ boolean isNew = (boolean) db.getContent(ActionDataFormats.IS_NEW);
+
+ if(isNew)
+ {
+ newAction.setDisplayText("Untitled Action");
+ newAction.setShowDisplayText(true);
+ newAction.setDisplayTextAlignment(DisplayTextAlignment.CENTER);
+
+ if(actionType == ActionType.TOGGLE)
+ newAction.setCurrentIconState("false__false");
+ }
+ else
+ {
+ newAction.setClientProperties((ClientProperties) db.getContent(ActionDataFormats.CLIENT_PROPERTIES));
+ newAction.setIcons((HashMap<String, byte[]>) db.getContent(ActionDataFormats.ICONS));
+ newAction.setCurrentIconState((String) db.getContent(ActionDataFormats.CURRENT_ICON_STATE));
+ newAction.setBgColourHex((String) db.getContent(ActionDataFormats.BACKGROUND_COLOUR));
+ newAction.setDisplayTextFontColourHex((String) db.getContent(ActionDataFormats.DISPLAY_TEXT_FONT_COLOUR));
+ newAction.setDisplayText((String) db.getContent(ActionDataFormats.DISPLAY_TEXT));
+ newAction.setDisplayTextAlignment((DisplayTextAlignment) db.getContent(ActionDataFormats.DISPLAY_TEXT_ALIGNMENT));
+ newAction.setShowDisplayText((boolean) db.getContent(ActionDataFormats.DISPLAY_TEXT_SHOW));
+ }
+
newAction.setLocation(new Location(-1, -1));
newAction.setParent(this.action.getID());
+ try
+ {
+ if(action instanceof ExternalPlugin)
+ ((ExternalPlugin) action).onActionCreate();
+ }
+ catch (Exception e)
+ {
+ exceptionAndAlertHandler.handleMinorException(new MinorException("Error","onCreate() failed for "+action.getModuleName()+"\n\n"+e.getMessage()));
+ }
+
+
combineActionPropertiesPane.getCombineAction().addChild(newAction.getID());
addActionToCurrentClientProfile(newAction);
@@ -372,8 +422,12 @@ public class ActionDetailsPane extends V
combineActionPropertiesPane.renderProps();
- saveAction();
+ saveAction(true, false);
+
+
+
}
+
} catch (MinorException e) {
exceptionAndAlertHandler.handleMinorException(e);
e.printStackTrace();
@@ -382,6 +436,9 @@ public class ActionDetailsPane extends V
e.printStackTrace();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
+ } catch (Exception e)
+ {
+ e.printStackTrace();
}
});
}
@@ -430,17 +487,17 @@ public class ActionDetailsPane extends V
@Override
public void onActionClicked(Action action, ActionBox actionBox) throws MinorException
{
+ clear();
+
this.action = action;
this.actionBox = actionBox;
- clear();
-
renderActionProperties();
}
public void refresh() throws MinorException
{
- clear();
+ clear(false);
renderActionProperties();
}
@@ -463,7 +520,7 @@ public class ActionDetailsPane extends V
private CheckBox displayTextColourDefaultCheckBox;
private ComboBox<DisplayTextAlignment> displayTextAlignmentComboBox;
- public void clear()
+ public void clear(boolean actionNull)
{
sendIcon = false;
actionClientProperties.clear();
@@ -484,8 +541,17 @@ public class ActionDetailsPane extends V
actionBackgroundColourPicker.setValue(Color.WHITE);
displayTextColourPicker.setValue(Color.WHITE);
- action = null;
- actionBox = null;
+ if(actionNull)
+ {
+ action = null;
+ actionBox = null;
+ }
+ }
+
+ @Override
+ public void clear()
+ {
+ clear(true);
}
boolean isCombineChild = false;
@@ -500,6 +566,8 @@ public class ActionDetailsPane extends V
//Combine Child action
isCombineChild = action.getLocation().getCol() == -1;
+ System.out.println(isCombineChild);
+
System.out.println("DISPLAY : "+action.getDisplayText());
displayNameTextField.setText(action.getDisplayText());
@@ -856,7 +924,7 @@ public class ActionDetailsPane extends V
validateForm();
- saveAction();
+ saveAction(true, true);
}
catch (MinorException e)
{
@@ -878,7 +946,7 @@ public class ActionDetailsPane extends V
}
@Override
- public void saveAction(Action action, boolean runAsync)
+ public void saveAction(Action action, boolean runAsync, boolean runOnActionSavedFromServer)
{
new OnSaveActionTask(
ClientConnections.getInstance().getClientConnectionBySocketAddress(
@@ -900,14 +968,14 @@ public class ActionDetailsPane extends V
"#" + actionBackgroundColourPicker.getValue().toString().substring(2),
getCombineActionPropertiesPane(),
clientProfile, sendIcon, actionBox, actionClientProperties, exceptionAndAlertHandler,
- saveButton, deleteButton, runAsync
+ saveButton, deleteButton, runOnActionSavedFromServer, runAsync
);
}
@Override
- public void saveAction()
+ public void saveAction(boolean runAsync, boolean runOnActionSavedFromServer)
{
- saveAction(action, true);
+ saveAction(action, runAsync, runOnActionSavedFromServer);
}
public void setFolderButtonVisible(boolean visible)
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/ActionDetailsPaneListener.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/ActionDetailsPaneListener.java
@@ -2,15 +2,16 @@ package com.stream_pi.server.window.dash
import com.stream_pi.action_api.action.Action;
import com.stream_pi.server.window.dashboard.actiongridpane.ActionBox;
+import com.stream_pi.server.window.dashboard.actiongridpane.ActionGridPaneListener;
import com.stream_pi.util.exception.MinorException;
import javafx.stage.Window;
public interface ActionDetailsPaneListener {
void onActionClicked(Action action, ActionBox actionBox) throws MinorException;
- void saveAction();
+ void saveAction(boolean runAsync, boolean runOnActionSavedFromServer);
- void saveAction(Action action, boolean runAsync);
+ void saveAction(Action action, boolean runAsync, boolean runOnActionSavedFromServer);
void clear();
@@ -20,4 +21,5 @@ public interface ActionDetailsPaneListen
Window getCurrentWindow();
+
}
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/CombineActionPropertiesPane.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/CombineActionPropertiesPane.java
@@ -52,7 +52,6 @@ public class CombineActionPropertiesPane
Action action = clientProfile.getActionByID(actionID);
System.out.println("232323xxxxxxxxxxxx : "+action.getID());
-
Button settingsButton = new Button();
FontIcon settingsFontIcon = new FontIcon("fas-cog");
@@ -117,7 +116,7 @@ public class CombineActionPropertiesPane
combineAction.addChild(current.getRawValue(), currentIndex-1);
combineAction.addChild(aboveOne.getRawValue(), currentIndex);
- actionDetailsPane.saveAction();
+ actionDetailsPane.saveAction(true, true);
renderProps();
}
}
@@ -143,7 +142,7 @@ public class CombineActionPropertiesPane
combineAction.addChild(current.getRawValue(), currentIndex+1);
combineAction.addChild(belowOne.getRawValue(), currentIndex);
- actionDetailsPane.saveAction();
+ actionDetailsPane.saveAction(true, true);
renderProps();
}
}
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/OnDeleteActionTask.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/OnDeleteActionTask.java
@@ -68,7 +68,7 @@ public class OnDeleteActionTask extends
try {
- actionDetailsPane.saveAction(combineActionPropertiesPane.getCombineAction(), false);
+ actionDetailsPane.saveAction(combineActionPropertiesPane.getCombineAction(), true,true);
System.out.println(combineActionPropertiesPane.getCombineAction().getDisplayText()+"@#@#@#@#@#@#");
actionDetailsPane.onActionClicked(
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/OnSaveActionTask.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiondetailpane/OnSaveActionTask.java
@@ -10,12 +10,14 @@ import com.stream_pi.action_api.action.D
import com.stream_pi.action_api.actionproperty.ClientProperties;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
import com.stream_pi.server.client.ClientProfile;
import com.stream_pi.server.connection.ClientConnection;
import com.stream_pi.server.uipropertybox.UIPropertyBox;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
import com.stream_pi.server.window.dashboard.actiongridpane.ActionBox;
+import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.SevereException;
import javafx.application.Platform;
import javafx.concurrent.Task;
@@ -32,7 +34,7 @@ public class OnSaveActionTask extends Ta
boolean isHideDefaultIcon, boolean isHideToggleOffIcon, boolean isHideToggleOnIcon, DisplayTextAlignment displayTextAlignment, boolean isTransparentBackground, String backgroundColour,
CombineActionPropertiesPane combineActionPropertiesPane, ClientProfile clientProfile, boolean sendIcon, ActionBox actionBox,
ArrayList<UIPropertyBox> actionClientProperties, ExceptionAndAlertHandler exceptionAndAlertHandler, Button saveButton, Button deleteButton,
- boolean runAsync)
+ boolean runOnActionSavedFromServer, boolean runAsync)
{
this.saveButton = saveButton;
this.deleteButton = deleteButton;
@@ -58,7 +60,7 @@ public class OnSaveActionTask extends Ta
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
this.backgroundColour = backgroundColour;
this.actionClientProperties = actionClientProperties;
-
+ this.runOnActionSavedFromServer = runOnActionSavedFromServer;
logger = Logger.getLogger(getClass().getName());
@@ -69,6 +71,8 @@ public class OnSaveActionTask extends Ta
runTask();
}
+ private boolean runOnActionSavedFromServer;
+
private Button saveButton;
private Button deleteButton;
private String delayBeforeRunningString;
@@ -180,7 +184,7 @@ public class OnSaveActionTask extends Ta
else
{
action.setDelayBeforeExecuting(Integer.parseInt(delayBeforeRunningString));
-
+
//properties
for (UIPropertyBox clientProperty : actionClientProperties) {
action.getClientProperties().get().get(clientProperty.getIndex()).setRawValue(clientProperty.getRawValue());
@@ -211,16 +215,36 @@ public class OnSaveActionTask extends Ta
setSaveDeleteButtonState(false);
}
- clientProfile.removeActionByID(action.getID());
- clientProfile.addAction(action);
+ //clientProfile.removeActionByID(action.getID());
+ //clientProfile.addAction(action);
+
+ if(runOnActionSavedFromServer)
+ {
+
+ for(Property property : action.getClientProperties().get())
+ {
+ System.out.println("SSSSSDDD : "+property.getName());
+ System.out.println("@@@@DDD : "+property.getRawValue());
+ }
+ try
+ {
+ if(action instanceof ExternalPlugin)
+ ((ExternalPlugin) action).onActionSavedFromServer();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ exceptionAndAlertHandler.handleMinorException(new MinorException("Error","onActionSavedFromServer() failed for "+action.getModuleName()+"\n\n"+e.getMessage()));
+ }
+ }
}
catch (SevereException e)
{
e.printStackTrace();
exceptionAndAlertHandler.handleSevereException(e);
}
- catch (CloneNotSupportedException e)
+ catch (Exception e)
{
e.printStackTrace();
}
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionBox.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionBox.java
@@ -4,11 +4,14 @@ import com.stream_pi.action_api.action.A
import com.stream_pi.action_api.action.ActionType;
import com.stream_pi.action_api.action.DisplayTextAlignment;
import com.stream_pi.action_api.action.Location;
-import com.stream_pi.server.io.Config;
+import com.stream_pi.action_api.actionproperty.ClientProperties;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
+import com.stream_pi.server.controller.ActionDataFormats;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
import com.stream_pi.server.window.dashboard.actiondetailpane.ActionDetailsPaneListener;
import com.stream_pi.util.exception.MinorException;
import javafx.application.Platform;
+import javafx.concurrent.Task;
import javafx.geometry.Pos;
import javafx.scene.CacheHint;
import javafx.scene.control.ContextMenu;
@@ -31,6 +34,7 @@ import org.kordamp.ikonli.javafx.FontIco
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.nio.ByteBuffer;
+import java.util.HashMap;
public class ActionBox extends StackPane{
@@ -90,7 +94,7 @@ public class ActionBox extends StackPane
setOnDragOver(dragEvent ->
{
- if(dragEvent.getDragboard().hasContent(Action.getDataFormat()))
+ if(dragEvent.getDragboard().hasContent(ActionDataFormats.ACTION_TYPE))
{
dragEvent.acceptTransferModes(TransferMode.ANY);
@@ -104,28 +108,99 @@ public class ActionBox extends StackPane
{
if(action == null)
{
- Action action = (Action) dragEvent.getDragboard().getContent(Action.getDataFormat());
+ Dragboard db = dragEvent.getDragboard();
- action.setLocation(new Location(getRow(),
- getCol()));
+ ActionType actionType = (ActionType) db.getContent(ActionDataFormats.ACTION_TYPE);
- action.setParent(actionGridPaneListener.getCurrentParent());
+ if(actionType == ActionType.NORMAL || actionType == ActionType.TOGGLE)
+ {
+ String moduleName = (String) dragEvent.getDragboard().getContent(ActionDataFormats.MODULE_NAME);
- action.setIDRandom();
+ ExternalPlugin newAction = actionGridPaneListener.createNewActionFromExternalPlugin(moduleName);
- actionGridPaneListener.addActionToCurrentClientProfile(action);
+ boolean isNew = (boolean) db.getContent(ActionDataFormats.IS_NEW);
- setAction(action);
- init();
+ if(isNew)
+ {
+ newAction.setDisplayText("Untitled Action");
+ newAction.setShowDisplayText(true);
+ newAction.setDisplayTextAlignment(DisplayTextAlignment.CENTER);
+
+ if(actionType == ActionType.TOGGLE)
+ newAction.setCurrentIconState("false__false");
+ }
+ else
+ {
+ newAction.setClientProperties((ClientProperties) db.getContent(ActionDataFormats.CLIENT_PROPERTIES));
+ newAction.setIcons((HashMap<String, byte[]>) db.getContent(ActionDataFormats.ICONS));
+ newAction.setCurrentIconState((String) db.getContent(ActionDataFormats.CURRENT_ICON_STATE));
+ newAction.setBgColourHex((String) db.getContent(ActionDataFormats.BACKGROUND_COLOUR));
+ newAction.setDisplayTextFontColourHex((String) db.getContent(ActionDataFormats.DISPLAY_TEXT_FONT_COLOUR));
+ newAction.setDisplayText((String) db.getContent(ActionDataFormats.DISPLAY_TEXT));
+ newAction.setDisplayTextAlignment((DisplayTextAlignment) db.getContent(ActionDataFormats.DISPLAY_TEXT_ALIGNMENT));
+ newAction.setShowDisplayText((boolean) db.getContent(ActionDataFormats.DISPLAY_TEXT_SHOW));
+ }
- actionDetailsPaneListener.onActionClicked(action, this);
-
- if(action.isHasIcon())
- actionDetailsPaneListener.setSendIcon(true);
- actionDetailsPaneListener.saveAction();
+ newAction.setLocation(new Location(getRow(),
+ getCol()));
+
+ newAction.setProfileID(actionGridPaneListener.getCurrentProfile().getID());
+ newAction.setParent(actionGridPaneListener.getCurrentParent());
+
+ try
+ {
+ if(action instanceof ExternalPlugin)
+ ((ExternalPlugin) action).onActionCreate();
+ }
+ catch (Exception e)
+ {
+ exceptionAndAlertHandler.handleMinorException(new MinorException("Error","onCreate() failed for "+action.getModuleName()+"\n\n"+e.getMessage()));
+ }
+
+ actionGridPaneListener.addActionToCurrentClientProfile(newAction);
+
+
+
+ setAction(newAction);
+
+
+ actionDetailsPaneListener.onActionClicked(newAction, this);
+
+ if(newAction.isHasIcon())
+ actionDetailsPaneListener.setSendIcon(true);
+
+
+ actionDetailsPaneListener.saveAction(true, false);
+
+ }
+ else
+ {
+ Action newAction = actionGridPaneListener.createNewOtherAction(actionType);
+
+ newAction.setLocation(new Location(getRow(),
+ getCol()));
+
+ newAction.setParent(actionGridPaneListener.getCurrentParent());
+
+ newAction.setProfileID(actionGridPaneListener.getCurrentProfile().getID());
+
+ actionGridPaneListener.addActionToCurrentClientProfile(newAction);
+
+ setAction(newAction);
+ init();
+
+
+ actionDetailsPaneListener.onActionClicked(newAction, this);
+
+ if(newAction.isHasIcon())
+ actionDetailsPaneListener.setSendIcon(true);
+
+
+ actionDetailsPaneListener.saveAction(true, false);
+ }
}
}
catch (MinorException e)
@@ -133,35 +208,39 @@ public class ActionBox extends StackPane
exceptionAndAlertHandler.handleMinorException(e);
e.printStackTrace();
}
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
});
setOnDragDetected(mouseEvent -> {
- try {
- if(action!=null)
+ if(action!=null)
+ {
+ if(action.getActionType() == ActionType.NORMAL)
{
- if(action.getActionType() == ActionType.NORMAL)
- {
- Dragboard db = startDragAndDrop(TransferMode.ANY);
+ Dragboard db = startDragAndDrop(TransferMode.ANY);
- ClipboardContent content = new ClipboardContent();
+ ClipboardContent content = new ClipboardContent();
- Action newAction = (Action) action.clone();
+ content.put(ActionDataFormats.CLIENT_PROPERTIES, getAction().getClientProperties());
+ content.put(ActionDataFormats.ICONS, getAction().getIcons());
+ content.put(ActionDataFormats.CURRENT_ICON_STATE, getAction().getCurrentIconState());
+ content.put(ActionDataFormats.BACKGROUND_COLOUR, getAction().getBgColourHex());
+ content.put(ActionDataFormats.DISPLAY_TEXT_FONT_COLOUR, getAction().getDisplayTextFontColourHex());
+ content.put(ActionDataFormats.DISPLAY_TEXT, getAction().getDisplayText());
+ content.put(ActionDataFormats.DISPLAY_TEXT_ALIGNMENT, getAction().getDisplayTextAlignment());
+ content.put(ActionDataFormats.DISPLAY_TEXT_SHOW, getAction().isShowDisplayText());
+
+ content.put(ActionDataFormats.IS_NEW, false);
+ content.put(ActionDataFormats.ACTION_TYPE, getAction().getActionType());
+ content.put(ActionDataFormats.MODULE_NAME, getAction().getModuleName());
- newAction.setIDRandom();
- newAction.setParent(actionGridPaneListener.getCurrentParent());
+ db.setContent(content);
- content.put(Action.getDataFormat(), newAction);
-
- db.setContent(content);
-
- mouseEvent.consume();
- }
+ mouseEvent.consume();
}
}
- catch (CloneNotSupportedException e)
- {
- e.printStackTrace();
- }
});
setOnMouseClicked(mouseEvent -> {
@@ -403,6 +482,7 @@ public class ActionBox extends StackPane
private void fakeToggle(boolean isON)
{
+ System.out.println("CURRENT ICONS : "+action.getCurrentIconState());
String[] toggleStatesHiddenStatus = action.getCurrentIconState().split("__");
boolean isToggleOffHidden = toggleStatesHiddenStatus[0].equals("true");
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionGridPane.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionGridPane.java
@@ -1,8 +1,15 @@
package com.stream_pi.server.window.dashboard.actiongridpane;
import com.stream_pi.action_api.action.Action;
+import com.stream_pi.action_api.action.ActionType;
+import com.stream_pi.action_api.action.DisplayTextAlignment;
import com.stream_pi.action_api.action.Location;
+import com.stream_pi.action_api.actionproperty.property.Property;
+import com.stream_pi.action_api.actionproperty.property.Type;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
+import com.stream_pi.action_api.otheractions.CombineAction;
import com.stream_pi.action_api.otheractions.FolderAction;
+import com.stream_pi.server.action.ExternalPlugins;
import com.stream_pi.server.client.Client;
import com.stream_pi.server.client.ClientProfile;
import com.stream_pi.server.io.Config;
@@ -50,6 +57,61 @@ public class ActionGridPane extends Scro
private String currentParent = null;
@Override
+ public ExternalPlugin createNewActionFromExternalPlugin(String moduleName) throws Exception
+ {
+ ExternalPlugin newAction = ExternalPlugins.getInstance().getPluginByModuleName(moduleName).clone();
+
+ if(newAction.getActionType() == ActionType.TOGGLE)
+ {
+ newAction.setCurrentIconState("false__false");
+ }
+
+ newAction.setIDRandom();
+
+ newAction.setShowDisplayText(true);
+ newAction.setDisplayText("Untitled Action");
+ newAction.setDisplayTextAlignment(DisplayTextAlignment.CENTER);
+
+ newAction.setBgColourHex("");
+ newAction.setDisplayTextFontColourHex("");
+
+ return newAction;
+ }
+
+ @Override
+ public Action createNewOtherAction(ActionType actionType) throws Exception
+ {
+ Action newAction;
+
+ String displayText;
+ if(actionType == ActionType.FOLDER)
+ {
+ displayText = "Untitled Folder";
+ newAction = new FolderAction();
+ }
+ else if(actionType == ActionType.COMBINE)
+ {
+ displayText = "Untitled Combine";
+ newAction = new CombineAction();
+ }
+ else
+ throw new IllegalArgumentException("External Plugins are not supported here!");
+
+ newAction.setIDRandom();
+
+
+ newAction.setShowDisplayText(true);
+ newAction.setDisplayText(displayText);
+ newAction.setDisplayTextAlignment(DisplayTextAlignment.CENTER);
+
+ newAction.setBgColourHex("");
+ newAction.setDisplayTextFontColourHex("");
+
+
+ return newAction;
+ }
+
+ @Override
public void setCurrentParent(String currentParent) {
this.currentParent = currentParent;
}
@@ -89,6 +151,11 @@ public class ActionGridPane extends Scro
return currentParent;
}
+ @Override
+ public ClientProfile getCurrentProfile() {
+ return clientProfile;
+ }
+
public StackPane getFolderBackButton() throws SevereException
{
StackPane stackPane = new StackPane();
--- 'a/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionGridPaneListener.java'
+++ b/src/main/java/com/stream_pi/server/window/dashboard/actiongridpane/ActionGridPaneListener.java
@@ -1,14 +1,23 @@
package com.stream_pi.server.window.dashboard.actiongridpane;
import com.stream_pi.action_api.action.Action;
+import com.stream_pi.action_api.action.ActionType;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
import com.stream_pi.action_api.otheractions.FolderAction;
+import com.stream_pi.server.client.ClientProfile;
-public interface ActionGridPaneListener {
+public interface ActionGridPaneListener
+{
void addActionToCurrentClientProfile(Action newAction);
void renderFolder(FolderAction action);
String getCurrentParent();
+ ClientProfile getCurrentProfile();
+
void setCurrentParent(String currentParent);
+
+ ExternalPlugin createNewActionFromExternalPlugin(String module) throws Exception;
+ Action createNewOtherAction(ActionType actionType) throws Exception;
}
--- 'a/src/main/java/com/stream_pi/server/window/settings/PluginsSettings.java'
+++ b/src/main/java/com/stream_pi/server/window/settings/PluginsSettings.java
@@ -1,11 +1,11 @@
package com.stream_pi.server.window.settings;
-import com.stream_pi.action_api.normalaction.ExternalPlugin;
+import com.stream_pi.action_api.externalplugin.ExternalPlugin;
import com.stream_pi.server.uipropertybox.UIPropertyBox;
import com.stream_pi.action_api.actionproperty.property.ControlType;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
-import com.stream_pi.action_api.normalaction.NormalAction;
+import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.server.action.ExternalPlugins;
import com.stream_pi.server.connection.ServerListener;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
--- 'a/src/main/java/module-info.java'
+++ b/src/main/java/module-info.java
@@ -1,7 +1,7 @@
module com.stream_pi.server {
uses com.stream_pi.action_api.action.Action;
- uses com.stream_pi.action_api.normalaction.NormalAction;
- uses com.stream_pi.action_api.normalaction.ExternalPlugin;
+ uses com.stream_pi.action_api.externalplugin.NormalAction;
+ uses com.stream_pi.action_api.externalplugin.ExternalPlugin;
requires com.stream_pi.action_api;
requires com.stream_pi.util;