From 7b5c26bbb95c7f7f58c9c3bcdecc46a194b13cb5 Mon Sep 17 00:00:00 2001 From: Nico Schmitz Date: Tue, 26 Mar 2019 22:36:24 +0100 Subject: [PATCH] Remove clone() for AutomationEvent and Action --- .../general/automation/AutomationEvent.java | 29 ++-------------- .../general/automation/actions/Action.java | 24 ++++++++----- .../actions/ActionStartTempTarget.java | 21 +----------- .../automation/dialogs/EditActionDialog.java | 34 +++++++++---------- .../automation/dialogs/EditEventDialog.java | 6 ++-- 5 files changed, 38 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationEvent.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationEvent.java index d868bfda62..bdc5c01e2e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationEvent.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationEvent.java @@ -9,10 +9,11 @@ import java.util.List; import info.nightscout.androidaps.plugins.general.automation.actions.Action; import info.nightscout.androidaps.plugins.general.automation.triggers.Trigger; +import info.nightscout.androidaps.plugins.general.automation.triggers.TriggerConnector; -public class AutomationEvent implements Cloneable { +public class AutomationEvent { - private Trigger trigger; + private Trigger trigger = new TriggerConnector(); private List actions = new ArrayList<>(); private String title; @@ -70,28 +71,4 @@ public class AutomationEvent implements Cloneable { } return this; } - - public void apply(AutomationEvent event) { - trigger = event.trigger; - actions = event.actions; - title = event.title; - } - - @Override - public AutomationEvent clone() throws CloneNotSupportedException { - AutomationEvent e = (AutomationEvent) super.clone(); - e.title = title; - - // clone actions - e.actions = new ArrayList<>(); - for(Action a : actions) { - e.actions.add(a.clone()); - } - - // clone triggers - if (trigger != null) { - e.trigger = trigger.clone(); - } - return e; - } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/Action.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/Action.java index 7400fae27d..546cc6b272 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/Action.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/Action.java @@ -9,7 +9,7 @@ import org.json.JSONObject; import info.nightscout.androidaps.queue.Callback; -public abstract class Action implements Cloneable { +public abstract class Action { public abstract int friendlyName(); @@ -31,14 +31,7 @@ public abstract class Action implements Cloneable { public abstract Optional icon(); - public void copy(Action action) { } - - @Override - public Action clone() throws CloneNotSupportedException { - return (Action) super.clone(); - } - - /*package*/ Action fromJSON(String data) { + public Action fromJSON(String data) { return this; } @@ -53,4 +46,17 @@ public abstract class Action implements Cloneable { } return null; } + + public void apply(Action a) { + try { + JSONObject object = new JSONObject(a.toJSON()); + String type = object.getString("type"); + JSONObject data = object.getJSONObject("data"); + if (type.equals(getClass().getName())) { + fromJSON(data.toString()); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java index 1978edfcf0..0fc40204e8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java @@ -81,7 +81,7 @@ public class ActionStartTempTarget extends Action { } @Override - Action fromJSON(String data) { + public Action fromJSON(String data) { try { JSONObject d = new JSONObject(data); reason = JsonHelper.safeGetString(d, "reason"); @@ -94,25 +94,6 @@ public class ActionStartTempTarget extends Action { return this; } - @Override - public void copy(Action action) { - if (action instanceof ActionStartTempTarget) { - ActionStartTempTarget src = (ActionStartTempTarget)action; - this.duration = src.duration; - this.value = src.value; - this.reason = src.reason; - } - } - - @Override - public ActionStartTempTarget clone() throws CloneNotSupportedException { - ActionStartTempTarget a = (ActionStartTempTarget) super.clone(); - a.reason = reason; - a.value = value; - a.duration = duration; - return a; - } - @Override public Optional icon() { return Optional.of(R.drawable.icon_cp_cgm_target); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.java index da83a4ebf1..f0338afbfe 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.java @@ -36,13 +36,7 @@ public class EditActionDialog extends DialogFragment { Bundle args = new Bundle(); EditActionDialog fragment = new EditActionDialog(); fragment.setArguments(args); - - // clone action to static object - try { - resultAction = action.clone(); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - } + resultAction = action; return fragment; } @@ -52,18 +46,22 @@ public class EditActionDialog extends DialogFragment { View view = inflater.inflate(R.layout.automation_dialog_action, container, false); mUnbinder = ButterKnife.bind(this, view); + // get json data for action + String actionData = null; if (savedInstanceState != null) { - String actionData = savedInstanceState.getString("action"); - if (actionData != null) { - try { - mAction = Action.instantiate(new JSONObject(actionData)); - } catch (JSONException e) { - e.printStackTrace(); - } - } + actionData = savedInstanceState.getString("action"); } - if (mAction == null) - mAction = resultAction; + if (actionData == null) { + actionData = resultAction.toJSON(); + } + + // create action from json + try { + mAction = Action.instantiate(new JSONObject(actionData)); + } catch (JSONException e) { + e.printStackTrace(); + } + mViewActionTitle.setText(mAction.friendlyName()); mRootLayout.removeAllViews(); @@ -80,7 +78,7 @@ public class EditActionDialog extends DialogFragment { @OnClick(R.id.ok) public void onButtonOk(View view) { - resultAction.copy(mAction); + resultAction.apply(mAction); dismiss(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.java index a455aa08d2..535aee578a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.java @@ -62,8 +62,8 @@ public class EditEventDialog extends DialogFragment { fragment.setArguments(args); // clone event try { - fragment.mEvent = event.clone(); - } catch (CloneNotSupportedException e) { + fragment.mEvent = new AutomationEvent().fromJSON(event.toJSON()); + } catch (Exception e) { e.printStackTrace(); } fragment.mAddNew = addNew; @@ -149,7 +149,7 @@ public class EditEventDialog extends DialogFragment { } // apply changes - staticEvent.apply(mEvent); + staticEvent.fromJSON(mEvent.toJSON()); // add new if (mAddNew) {