Skip to content

Refactoring structure. #266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/edu/ie3/simona/api/ExtLinkInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

package edu.ie3.simona.api;

import edu.ie3.simona.api.data.ExtSimAdapterData;
import edu.ie3.simona.api.exceptions.NoExtSimulationException;
import edu.ie3.simona.api.simulation.ExtSimAdapterData;
import edu.ie3.simona.api.simulation.ExtSimulation;

/**
Expand Down

This file was deleted.

10 changes: 0 additions & 10 deletions src/main/java/edu/ie3/simona/api/data/ExtDataContainer.java

This file was deleted.

35 changes: 35 additions & 0 deletions src/main/java/edu/ie3/simona/api/data/ExtDataContainerQueue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* © 2024. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/

package edu.ie3.simona.api.data;

import edu.ie3.simona.api.data.container.ExtDataContainer;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.function.Function;

/** Data queue to allow data flow between SimonaAPI and an external simulation */
public final class ExtDataContainerQueue<V extends ExtDataContainer> {
private final LinkedBlockingDeque<V> receiverTriggerDeque = new LinkedBlockingDeque<>();

public void queueData(V data) throws InterruptedException {
receiverTriggerDeque.putLast(data);
}

public V takeAll() throws InterruptedException {
return receiverTriggerDeque.takeFirst();
}

public <R> R takeData(Function<V, R> extractor) throws InterruptedException {
V data = receiverTriggerDeque.takeFirst();
R result = extractor.apply(data);

if (!data.isEmpty()) {
receiverTriggerDeque.putFirst(data);
}

return result;
}
}
29 changes: 0 additions & 29 deletions src/main/java/edu/ie3/simona/api/data/ExtInputDataConnection.java

This file was deleted.

69 changes: 0 additions & 69 deletions src/main/java/edu/ie3/simona/api/data/ExtInputDataContainer.java

This file was deleted.

31 changes: 0 additions & 31 deletions src/main/java/edu/ie3/simona/api/data/ExtOutputDataConnection.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
* Research group Distribution grid planning and operation
*/

package edu.ie3.simona.api.simulation;
package edu.ie3.simona.api.data;

import edu.ie3.simona.api.simulation.ontology.ControlMessageToExt;
import edu.ie3.simona.api.simulation.ontology.ControlResponseMessageFromExt;
import edu.ie3.simona.api.ontology.simulation.ControlMessageToExt;
import edu.ie3.simona.api.ontology.simulation.ControlResponseMessageFromExt;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.pekko.actor.typed.ActorRef;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* © 2025. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/

package edu.ie3.simona.api.data.connection;

import edu.ie3.simona.api.ontology.DataMessageFromExt;
import edu.ie3.simona.api.ontology.DataResponseMessageToExt;
import java.util.concurrent.LinkedBlockingQueue;

/**
* Enables bidirectional communication when extended by an external data connection.
*
* @param <M> type of message to SIMONA
* @param <R> type of response messages to ext
*/
public abstract class BiDirectional<
M extends DataMessageFromExt, R extends DataResponseMessageToExt>
extends ExtInputDataConnection<M> implements ExtOutputDataConnection<R> {

/** Data message queue containing messages from SIMONA */
public final LinkedBlockingQueue<R> receiveTriggerQueue = new LinkedBlockingQueue<>();

protected BiDirectional() {
super();
}

public final void queueExtResponseMsg(R msg) throws InterruptedException {
receiveTriggerQueue.put(msg);
}

public final R receiveAny() throws InterruptedException {
return receiveTriggerQueue.take();
}

@SuppressWarnings("unchecked")
public final <T extends R> T receiveWithType(Class<T> expectedMessageClass)
throws InterruptedException {
// blocks until actor puts something here
R msg = receiveTriggerQueue.take();

if (msg.getClass().equals(expectedMessageClass)) {
return (T) msg;
} else
throw new RuntimeException(

Check warning on line 47 in src/main/java/edu/ie3/simona/api/data/connection/BiDirectional.java

View check run for this annotation

SonarQubeGithubPRChecks / simonaAPI Sonarqube Results

src/main/java/edu/ie3/simona/api/data/connection/BiDirectional.java#L47

Define and throw a dedicated exception instead of using a generic one.
"Received unexpected message '"
+ msg
+ "', expected type '"
+ expectedMessageClass
+ "'");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Research group Distribution grid planning and operation
*/

package edu.ie3.simona.api.data;
package edu.ie3.simona.api.data.connection;

/** Interface that defines a data connection between SIMONA and an external simulation. */
public interface ExtDataConnection {}
Loading
Loading