From: Debayan Sutradhar Date: Mon, 22 Mar 2021 13:00:33 +0530 Subject: lots of work --- lots of work --- --- '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 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() { - @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() { + @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() { - @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() { + @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) 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 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 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) 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;