summaryrefslogtreecommitdiff
path: root/src/main/java/events/VSAbstractEvent.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-06 08:02:52 +0300
committerPaul Buetow <paul@buetow.org>2025-06-06 08:02:52 +0300
commit1d99762c7965d351510cfb5e08eac25e48d96038 (patch)
treef469493e911878ab9055ccf0494211bf9015922d /src/main/java/events/VSAbstractEvent.java
parent4d35597bd92607c4d194686e20b125044506c79a (diff)
Modernize project structure, update Maven config, move sources, add logging config, update README and .gitignore
Diffstat (limited to 'src/main/java/events/VSAbstractEvent.java')
-rw-r--r--src/main/java/events/VSAbstractEvent.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/main/java/events/VSAbstractEvent.java b/src/main/java/events/VSAbstractEvent.java
new file mode 100644
index 0000000..52c2423
--- /dev/null
+++ b/src/main/java/events/VSAbstractEvent.java
@@ -0,0 +1,243 @@
+package events;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import core.VSAbstractProcess;
+import core.VSInternalProcess;
+import exceptions.VSEventNotCopyableException;
+import prefs.VSPrefs;
+import prefs.VSSerializablePrefs;
+import serialize.VSSerialize;
+
+/**
+ * The class VSAbstractEvent. This abstract class defines the basic framework
+ * of each event. an event is used to fullfill a specific task. An event object
+ * will get stored in a VSTask object.
+ *
+ * @author Paul C. Buetow
+ */
+abstract public class VSAbstractEvent extends VSSerializablePrefs {
+ /** The prefs. */
+ public VSPrefs prefs;
+
+ /** The process. */
+ public VSAbstractProcess process;
+
+ /** The event shortname. */
+ private String eventShortname;
+
+ /** The event classname. */
+ private String eventClassname;
+
+ /**
+ * Creates a copy of the event and using a new process.
+ *
+ * @param theProcess The new process
+ * @return The copy
+ */
+ final public VSAbstractEvent getCopy(VSInternalProcess theProcess)
+ throws VSEventNotCopyableException {
+
+ if (theProcess == null)
+ theProcess = (VSInternalProcess) process;
+
+ if (!(this instanceof VSCopyableEvent))
+ throw new VSEventNotCopyableException(
+ eventShortname + " (" + eventClassname + ")");
+
+ VSAbstractEvent copy =
+ VSRegisteredEvents.createEventInstanceByClassname(
+ eventClassname, theProcess);
+
+ ((VSCopyableEvent) this).initCopy(copy);
+ copy.setShortname(eventShortname);
+
+ return copy;
+ }
+
+ /**
+ * Creates a copy of the event.
+ *
+ * @return The copy
+ */
+ final public VSAbstractEvent getCopy() throws VSEventNotCopyableException {
+ return getCopy(null);
+ }
+
+ /**
+ * Inits the event.
+ *
+ * @param process the process
+ */
+ public void init(VSInternalProcess process) {
+ if (this.process == null) {
+ this.process = process;
+ this.prefs = process.getPrefs();
+ init();
+ }
+ }
+
+ /**
+ * Inits the event without setting the processes and prefs variables
+ * of the object.
+ */
+ public void init() {
+ onInit();
+ }
+
+ /**
+ * Sets the classname.
+ *
+ * @param eventClassname the new classname
+ */
+ public final void setClassname(String eventClassname) {
+ if (eventClassname.startsWith("class "))
+ eventClassname = eventClassname.substring(6);
+
+ this.eventClassname = eventClassname;
+ }
+
+ /**
+ * Gets the classname.
+ *
+ * @return the classname
+ */
+ public String getClassname() {
+ return eventClassname;
+ }
+
+ /**
+ * Gets the name.
+ *
+ * @return the name
+ */
+ public String getName() {
+ return VSRegisteredEvents.getNameByClassname(eventClassname);
+ }
+
+ /**
+ * Sets the shortname.
+ *
+ * @param eventShortname the new shortname
+ */
+ public void setShortname(String eventShortname) {
+ this.eventShortname = eventShortname;
+ }
+
+ /**
+ * Gets the shortname.
+ *
+ * @return the shortname
+ */
+ public String getShortname() {
+ if (eventShortname == null)
+ return VSRegisteredEvents.getShortnameByClassname(eventClassname);
+
+ return eventShortname;
+ }
+
+ /**
+ * Gets the process.
+ *
+ * @return the process
+ */
+ public VSAbstractProcess getProcess() {
+ return process;
+ }
+
+ /**
+ * Logg a specific message.
+ *
+ * @param message the loging message
+ */
+ public void log(String message) {
+ process.log(/*toString() + "; " + */message);
+ }
+
+ /**
+ * Checks if the event equals to another event..
+ *
+ * @param event the event to compare against.
+ *
+ * @return true, if the events are the same (have the same event id)
+ */
+ public boolean equals(VSAbstractEvent event) {
+ return super.getID() == event.getID();
+ }
+
+ /**
+ * Every event has its own initialize method.
+ */
+ abstract public void onInit();
+
+ /**
+ * Every event can get started. This method get's executed if the event
+ * takes place.
+ */
+ abstract public void onStart();
+
+ /**
+ * Every event has to be able to set its own shortname
+ *
+ * @param shortName The saved short name. May be overwritten due wrong lang
+ *
+ * @return The event's shortname
+ */
+ abstract protected String createShortname(String savedShortname);
+
+ /* (non-Javadoc)
+ * @see serialize.VSSerializable#serialize(serialize.VSSerialize,
+ * java.io.ObjectOutputStream)
+ */
+ public synchronized void serialize(VSSerialize serialize,
+ ObjectOutputStream objectOutputStream)
+ throws IOException {
+ super.serialize(serialize, objectOutputStream);
+
+ if (VSSerialize.DEBUG)
+ System.out.println("Serializing: VSAbstractEvent; id="+getID());
+
+ /** For later backwards compatibility, to add more stuff */
+ objectOutputStream.writeObject(Boolean.valueOf(false));
+
+ objectOutputStream.writeObject(Integer.valueOf(super.getID()));
+ objectOutputStream.writeObject(eventShortname);
+ objectOutputStream.writeObject(eventClassname);
+
+ /** For later backwards compatibility, to add more stuff */
+ objectOutputStream.writeObject(Boolean.valueOf(false));
+ }
+
+ /* (non-Javadoc)
+ * @see serialize.VSSerializable#deserialize(serialize.VSSerialize,
+ * java.io.ObjectInputStream)
+ */
+ public synchronized void deserialize(VSSerialize serialize,
+ ObjectInputStream objectInputStream)
+ throws IOException, ClassNotFoundException {
+ super.deserialize(serialize, objectInputStream);
+
+ if (VSSerialize.DEBUG)
+ System.out.print("Deserializing: VSAbstractEvent ");
+
+ /** For later backwards compatibility, to add more stuff */
+ objectInputStream.readObject();
+
+ int id = ((Integer) objectInputStream.readObject()).intValue();
+ String savedEventShortname = (String) objectInputStream.readObject();
+ this.eventClassname = (String) objectInputStream.readObject();
+ this.eventShortname = createShortname(savedEventShortname);
+
+ if (VSSerialize.DEBUG) {
+ System.out.println("eventClassname: " + eventClassname);
+ System.out.println("eventShortname: " + eventShortname);
+ }
+
+ serialize.setObject(id, "event", this);
+
+ /** For later backwards compatibility, to add more stuff */
+ objectInputStream.readObject();
+ }
+}