Commits (6)
......@@ -59,32 +59,7 @@
<updatePolicy>always</updatePolicy>
</releases>
</repository>
<!-- local kom repository -->
<!--
<repository>
<id>maven.kom</id>
<url>http://www.kom.tu-darmstadt.de/~stingl/PeerfactSim.KOM-Libraries/maven2/</url>
</repository> -->
<!-- -->
<!-- jgrapht can be found there -->
<!--
<repository>
<id>conjars.org</id>
<url>http://conjars.org/repo</url>
</repository>
-->
<!-- uk maven central, since the local central server is slow as hell -->
<!--
<repository>
<id>uk.maven.org</id>
<url>http://uk.maven.org/maven2</url>
</repository>
-->
<repository>
<id>Google Maven Central</id>
<url>https://maven-central.storage.googleapis.com/repos/central/data/</url>
......@@ -101,248 +76,144 @@
<dependencies>
<!-- XML -->
<!-- https://mvnrepository.com/artifact/javax.xml/jsr173 -->
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jsr173</artifactId>
<version>1.0</version>
</dependency>
<!-- XML -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>txw2</artifactId>
<version>3.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/stax/stax -->
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
<version>2.12.2</version>
</dependency>
<!-- XML Documents -->
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<!-- SVG -->
<!-- SVG -->
<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/fop -->
<dependency>
<groupId>batik</groupId>
<artifactId>batik-1.5-fop</artifactId>
<version>0.20-5</version>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>2.7</version>
</dependency>
<!-- unused? <dependency> <groupId>batik</groupId> <artifactId>batik-parser</artifactId>
<version>1.5</version> </dependency> <dependency> <groupId>batik</groupId>
<artifactId>batik-awt-util</artifactId> <version>1.5</version> </dependency> -->
<!-- Testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>junit-addons</groupId>
<artifactId>junit-addons</artifactId>
<version>1.4</version>
</dependency>
<version>4.13.2</version>
</dependency>
<!-- Logging with Log4j -->
<!-- Logging with Log4j: Requires API and CORE -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
<version>2.19.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
<version>2.19.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- Parsing, Bytecode, ... -->
<!-- Unused <dependency> <groupId>antlr</groupId> <artifactId>antlr</artifactId>
<version>2.7.6</version> </dependency> <dependency> <groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId> <version>3.2</version> </dependency>
<dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId>
<version>3.12.0.GA</version> </dependency> -->
<!-- Geometric calculations -->
<!-- deprecated
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.12</version>
</dependency>
-->
<!-- Graphs -->
<!--
<dependency>
<groupId>thirdparty</groupId>
<artifactId>jgrapht-jdk1.6</artifactId>
<version>0.8.2</version>
</dependency>
-->
<!-- Graphs -->
<dependency>
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
<version>1.5.0</version>
<version>1.5.1</version>
</dependency>
<!-- Chart creation -->
<!-- unused? <dependency> <groupId>jfree</groupId> <artifactId>jcommon</artifactId>
<version>1.0.16</version> </dependency> -->
<!-- Chart creation -->
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.19</version>
<version>1.5.3</version>
</dependency>
<!-- Database -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
<version>8.0.30</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.7.2</version>
</dependency>
<!-- Glab Database -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
<version>6.1.3.Final</version>
</dependency>
<!-- Dependencies and convenience libraries -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<version>31.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>2.0</version>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<!-- SimCfg, Xtext, EMF dependencies -->
<!-- unused <dependency> <groupId>org.eclipse</groupId> <artifactId>xtext</artifactId>
<version>2.3.0</version> </dependency> <dependency> <groupId>org.eclipse</groupId>
<artifactId>xtext.util</artifactId> <version>2.3.0</version> </dependency>
<dependency> <groupId>org.eclipse.emf</groupId> <artifactId>ecore</artifactId>
<version>2.8.1</version> </dependency> <dependency> <groupId>org.eclipse.emf</groupId>
<artifactId>ecore.xmi</artifactId> <version>2.8.0</version> </dependency>
<dependency> <groupId>org.eclipse.emf</groupId> <artifactId>ecore.xmi</artifactId>
<version>2.8.0</version> </dependency> <dependency> <groupId>org.eclipse.emf</groupId>
<artifactId>common</artifactId> <version>2.8.0</version> </dependency> <dependency>
<groupId>org.eclipse</groupId> <artifactId>xtext.common.types</artifactId>
<version>2.3.0</version> </dependency> <dependency> <groupId>org.eclipse</groupId>
<artifactId>xtext.util</artifactId> <version>2.3.0</version> </dependency>
<dependency> <groupId>org.eclipse.emf</groupId> <artifactId>mwe2.runtime</artifactId>
<version>2.3.0</version> </dependency> <dependency> <groupId>org.eclipse.emf</groupId>
<artifactId>mwe.core</artifactId> <version>1.2.1</version> </dependency>
<dependency> <groupId>org.eclipse.emf</groupId> <artifactId>mwe.utils</artifactId>
<version>1.2.1</version> </dependency> -->
<!-- Math -->
<!-- https://mvnrepository.com/artifact/ca.umontreal.iro.simul/ssj -->
<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
<dependency>
<groupId>ca.umontreal.iro.simul</groupId>
<artifactId>ssj</artifactId>
<version>3.3.1</version>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.8.0</version>
</dependency>
<!-- Date & Time calculations -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<!-- Other dependencies -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
<!-- unused <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId>
<version>1.0.4</version> </dependency> <dependency> <groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId>
<version>2.1</version> </dependency> -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<!-- Math -->
<!-- https://mvnrepository.com/artifact/ca.umontreal.iro.simul/ssj -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.4.1</version>
<groupId>ca.umontreal.iro.simul</groupId>
<artifactId>ssj</artifactId>
<version>3.3.2</version>
</dependency>
<!-- <dependency> <groupId>com.baulsupp.kolja</groupId> <artifactId>jcurses</artifactId>
<version>0.9.5.3</version> </dependency> -->
<!-- Geodemlia -->
<!-- unused <dependency> <groupId>org.swinglabs</groupId> <artifactId>jxmapviewer</artifactId>
<version>1.0</version> </dependency> <dependency> <groupId>org.swinglabs</groupId>
<artifactId>swingx</artifactId> <version>1.6.1</version> </dependency> -->
<!-- JUNG Graph Library -->
<!-- unused<dependency> <groupId>net.sf.jung</groupId> <artifactId>jung2</artifactId>
<version>2.0.1</version> <type>pom</type> </dependency> -->
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-api</artifactId>
<version>2.0.1</version>
</dependency>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-graph-impl</artifactId>
......@@ -358,41 +229,23 @@
<artifactId>jung-io</artifactId>
<version>2.0.1</version>
</dependency>
<!-- unused <dependency> <groupId>net.sf.jung</groupId> <artifactId>jung-visualization</artifactId>
<version>2.0.1</version> </dependency> <dependency> <groupId>net.sf.jung</groupId>
<artifactId>jung-samples</artifactId> <version>2.0.1</version> </dependency> -->
<!-- OSM-Data for movement models -->
<!--
<dependency>
<groupId>com.graphhopper</groupId>
<artifactId>graphhopper</artifactId>
<version>0.8.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
-->
<!-- Routing and navigation -->
<!-- https://mvnrepository.com/artifact/com.graphhopper/graphhopper-core -->
<dependency>
<groupId>com.graphhopper</groupId>
<artifactId>graphhopper-core</artifactId>
<version>0.13.0</version>
</dependency>
<dependency>
<groupId>com.graphhopper</groupId>
<artifactId>graphhopper-reader-osm</artifactId>
<version>0.13.0</version>
<version>6.0</version>
</dependency>
<!-- Json (used for OSM-Movement-Model) -->
<!-- JSON in Java -->
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
......@@ -402,7 +255,6 @@
<artifactId>simonstrator-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
......@@ -232,7 +232,7 @@ public class DefaultConfigurator implements Configurator {
*/
}
factory.setNamespaceAware(false);
factory.setNamespaceAware(true);
factory.setValidating(false);
SAXParser parser = factory.newSAXParser();
......
......@@ -28,7 +28,6 @@ import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Value;
import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Variation;
import de.tud.kom.p2psim.impl.scenario.simcfg2.utils.SimCfgUtil;
import de.tud.kom.p2psim.impl.util.Tuple;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.util.Collection;
......
......@@ -75,7 +75,7 @@ public class SimCfgFileParser {
}
private File extractImportedFile(String filename, File relativeFile) {
String importedFile = CharMatcher.WHITESPACE.and(CharMatcher.JAVA_ISO_CONTROL).removeFrom(filename);
String importedFile = CharMatcher.whitespace().and(CharMatcher.javaIsoControl()).removeFrom(filename);
if (importedFile.contains("~")) {
return new File(importedFile.replace("~", "config"));
......
......@@ -32,7 +32,7 @@ import de.tud.kom.p2psim.impl.scenario.simcfg2.annotations.Configure;
import de.tud.kom.p2psim.impl.scenario.simcfg2.annotations.UnknownSetting;
import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Value;
import de.tud.kom.p2psim.impl.util.Tuple;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
/**
* Contains a some convenience methods used by the SimCfgConfigurator and
......
......@@ -25,9 +25,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import de.tud.kom.p2psim.api.topology.movement.UAVMovementModel;
import de.tud.kom.p2psim.api.uav.MulticopterModel;
import de.tud.kom.p2psim.impl.energy.components.ActuatorComponent;
......@@ -36,6 +33,9 @@ import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.ReachedLocationCallback;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
/**
* Simplified thrust-based local movement model based on the Intel Aero UAV.
......
......@@ -24,9 +24,9 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import de.tud.kom.p2psim.api.topology.movement.UAVMovementModel;
import de.tud.kom.p2psim.api.uav.MulticopterModel;
......
......@@ -29,6 +29,7 @@ import com.graphhopper.util.PointList;
import com.graphhopper.util.shapes.GHPoint3D;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.GPSCalculation;
import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.route.Route;
......@@ -68,11 +69,7 @@ public class RouteImpl implements Route {
private int currentIndex;
private int currentSegmentIndex;
private int routeLength;
private int routeSegmentsLength;
private boolean reachedTarget;
/**
......@@ -92,16 +89,12 @@ public class RouteImpl implements Route {
this.destination = destination;
this.pointList = pointList;
this.positionsList = new LinkedList<>();
// Create Position vectors ONCE
// Create PositionVectors ONCE
for (GHPoint3D temp : pointList) {
positionsList
.add(RealWorldStreetsMovement.transformGPSWindowToOwnWorld(
temp.getLat(), temp.getLon()));
positionsList.add(GPSCalculation.transformGPSWindowToOwnWorld(temp.getLat(), temp.getLon()));
}
routeLength = positionsList.size();
this.segmentListeners = segmentListeners;
this.routeSegments = routeSegments;
this.routeSegmentsLength = routeSegments.size();
}
/**
......@@ -131,7 +124,7 @@ public class RouteImpl implements Route {
@Override
public boolean hasSegmentInformation() {
return routeSegmentsLength != 0;
return this.routeSegments.size() != 0;
}
@Override
......@@ -150,7 +143,7 @@ public class RouteImpl implements Route {
"To access segments within a Route, you need to enable the respective functionality in the local movement strategy (usually: calculateRouteSegments=true)");
}
return Collections.unmodifiableList(routeSegments
.subList(currentSegmentIndex, routeSegmentsLength));
.subList(currentSegmentIndex, this.routeSegments.size()));
}
@Override
......@@ -172,8 +165,7 @@ public class RouteImpl implements Route {
*/
public PositionVector updateCurrentLocation(SimLocationActuator comp,
double speed, double tolerance) {
List<PositionVector> sublist = positionsList.subList(currentIndex,
routeLength);
List<PositionVector> sublist = positionsList.subList(currentIndex, this.pointList.size());
PositionVector newPosition = null;
for (PositionVector candidate : sublist) {
newPosition = comp.getRealPosition().moveStep(candidate, speed);
......@@ -187,10 +179,10 @@ public class RouteImpl implements Route {
/*
* Segment handling (also inform listeners!)
*/
if (routeSegmentsLength > 0
&& routeSegmentsLength > currentSegmentIndex) {
if (this.routeSegments.size() > 0
&& this.routeSegments.size() > currentSegmentIndex) {
List<RouteSegmentImpl> segmentSublist = routeSegments
.subList(currentSegmentIndex + 1, routeSegmentsLength);
.subList(currentSegmentIndex + 1, this.routeSegments.size());
for (RouteSegmentImpl candidate : segmentSublist) {
if (candidate.getFromRouteIndex() >= currentIndex) {
break;
......@@ -205,7 +197,7 @@ public class RouteImpl implements Route {
/*
* Reached target flag
*/
if (currentIndex >= routeLength) {
if (currentIndex >= this.pointList.size()) {
reachedTarget = true;
}
......@@ -224,7 +216,7 @@ public class RouteImpl implements Route {
@Override
public String toString() {
return "\n\tfrom " + start.toString() + " to " + destination.toString()
+ "\n\tstep: " + currentIndex + " length: " + routeLength;
+ "\n\tstep: " + currentIndex + " points: " + this.pointList.size();
}
public PointList getPointList() {
......
......@@ -141,7 +141,8 @@ public class GPSCalculation {
}
/**
* Projects the gps coordinates in the given gps window to the world-coordinates given in world-dimensions
* Projects the GPS coordinates in the given GPS-based world window to coordinates given in world-dimensions.
*
* @param lat
* @param lon
* @return The projected position in world-dimensions
......@@ -153,6 +154,24 @@ public class GPSCalculation {
return new PositionVector(x, y);
}
/**
* Projects the world coordinates in the given GPS-based world window to GPS-coordinates.
*
* @param x
* @param y
* @return The projected position in GPS-coordinates (lat, long)
*/
public static double[] transformOwnWorldWindowToGPS(double x, double y) {
double[] gps_coordinates = new double[2];
gps_coordinates[0] = getLatLower() + (getLatUpper() - getLatLower()) * (getWorldDimensionsY() - y) / getWorldDimensionsY();
gps_coordinates[1] = getLonLeft() + (getLonRight() - getLonLeft()) * x / getWorldDimensionsX();
return gps_coordinates;
}
public static double[] transformOwnWorldWindowToGPS(PositionVector v) {
return transformOwnWorldWindowToGPS(v.getX(), v.getY());
}
/**
* Checks if the given latitute and longitude is within the simulated GPS area.
*
......
......@@ -20,11 +20,20 @@
package de.tud.kom.p2psim.impl.util;
/**
* Like a {@link Tuple}, but one or both elements can be null. Used for a long time, never documented.
*
* @author ?
* @version ?
*
* @param <A>
* @param <B>
*/
public class Either<A, B> {
private A left = null;
private B right = null;
protected Either(A a,B b) {
protected Either(A a, B b) {
left = a;
right = b;
}
......
......@@ -20,7 +20,12 @@
package de.tud.kom.p2psim.impl.util;
/**
* It's a triple. Used for a long time, never documented.
*
* @version ?
* @author ?
*/
public class Triple<A, B, C> {
private A a;
......
......@@ -29,16 +29,24 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Tuple<T1, T2> {
/**
* It's a tuple. Used for a long time, never documented.
*
* @version ?
* @author ?
* @param <A>
* @param <B>
*/
public class Tuple<A, B> {
T1 a;
T2 b;
A a;
B b;
public Tuple() {
}
public Tuple(T1 a, T2 b) {
public Tuple(A a, B b) {
super();
this.a = a;
this.b = b;
......@@ -49,16 +57,16 @@ public class Tuple<T1, T2> {
return "(" + a + ", " + b + ")";
}
public T1 getA() {
public A getA() {
return a;
}
public void setA(T1 a) {
public void setA(A a) {
this.a = a;
}
public T2 getB() {
public B getB() {
return b;
}
public void setB(T2 b) {
public void setB(B b) {
this.b = b;
}
......
......@@ -23,8 +23,6 @@ package de.tud.kom.p2psim.impl.util.db.dao;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import org.hibernate.Session;
import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
......
......@@ -23,22 +23,12 @@ package de.tud.kom.p2psim.impl.util.db.dao;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.commons.math3.analysis.function.Exp;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.hibernate.service.ServiceRegistry;
import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
import de.tud.kom.p2psim.impl.util.db.metric.Experiment;
......@@ -58,6 +48,8 @@ import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription;
import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
import de.tudarmstadt.maki.simonstrator.api.web.WebConfigurationManager;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
/**
* This class represents a simple access to persist objects with Hibernate. It
......@@ -70,6 +62,7 @@ import de.tudarmstadt.maki.simonstrator.api.web.WebConfigurationManager;
*
* @author Christoph Münker
* @author Andreas Hemel
* @author Julian Zobel
*/
public class DAO {
......@@ -137,22 +130,24 @@ public class DAO {
*/
cfg.setProperty("hibernate.show_sql", "false");
cfg.setProperty("hibernate.format_sql", "false");
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver");
// Default user/pass/database, overwrite using MetricOutputDAO
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://"+ address + ":" + port + "/" + database);
cfg.setProperty("hibernate.connection.username", username);
cfg.setProperty("hibernate.connection.password", password);
// mySQL 5
cfg.setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQL5InnoDBDialect");
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
cfg.setProperty("hibernate.transaction.factory_class",
"org.hibernate.transaction.JDBCTransactionFactory");
cfg.setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory");
cfg.setProperty("hibernate.pool_size", "1");
cfg.setProperty("hibernate.hbm2ddl.auto", "update");
cfg.setProperty("hibernate.current_session_context_class", "thread");
// new org.hibernate.dialect.MySQLDialect();
// Add core classes
cfg.addAnnotatedClass(CustomMeasurement.class);
cfg.addAnnotatedClass(Experiment.class);
......@@ -321,8 +316,23 @@ public class DAO {
public static <T extends Object> List<T> retrieve(Class<T> pClass) {
begin();
Criteria criteria = getSession().createCriteria(pClass);
List<T> objects = criteria.list();
// using new JPA criteria API instead of old hibernate API
CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = builder.createQuery(pClass);
criteriaQuery.from(pClass);
List<T> objects = getSession().createQuery(criteriaQuery).getResultList();
/*
* deprecated code
*
* List<T> nickNames =
* entityManager.createQuery(criteria).getResultList();
*
* Criteria criteria = getSession().createCriteria(pClass); List<T>
* objects = criteria.list();
*/
commit();
return objects;
......@@ -449,8 +459,7 @@ public class DAO {
public static <T> T update(T o) {
commitQueue();
begin();
@SuppressWarnings("unchecked")
T objRef = (T) getSession().merge(o);
T objRef = getSession().merge(o);
commit();
close();
......
......@@ -27,14 +27,14 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tud.kom.p2psim.impl.util.db.dao.DAO;
import de.tud.kom.p2psim.impl.util.db.metric.Experiment;
import de.tud.kom.p2psim.impl.util.db.metric.Metric;
import de.tudarmstadt.maki.simonstrator.api.Time;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
/**
* This class provides access to the single {@link Experiment} instance.
......@@ -98,18 +98,36 @@ public class ExperimentDAO extends DAO {
public static Experiment retrieveExperiment(long pSeed, Map<String, String> pVariables) {
begin();
Criteria criteria = getSession().createCriteria(Experiment.class);
criteria = criteria.add(Restrictions.eq("seed", pSeed));
// using new JPA criteria API instead of old hibernate API
CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<Experiment> criteriaQuery = builder.createQuery(Experiment.class);
Root<Experiment> root = criteriaQuery.from(Experiment.class);
criteriaQuery.select(root);
criteriaQuery.where(builder.equal(root.get("seed"), pSeed));
for (Entry<String, String> entry : pVariables.entrySet()) {
criteria = criteria.add(Restrictions.like("workload", "%" + entry.getKey() + "=" + entry.getValue() + "%"));
criteriaQuery.where(builder.like(root.get("workload"), "%" + entry.getKey() + "=" + entry.getValue() + "%"));
}
List<Experiment> experiments = criteria.list();
List<Experiment> experiments = getSession().createQuery(criteriaQuery).getResultList();
/*
* Criteria criteria = getSession().createCriteria(Experiment.class);
* criteria = criteria.add(Restrictions.eq("seed", pSeed)); for
* (Entry<String, String> entry : pVariables.entrySet()) { criteria =
* criteria.add(Restrictions.like("workload", "%" + entry.getKey() + "="
* + entry.getValue() + "%")); } List<Experiment> experiments =
* criteria.list();
*/
commit();
if (experiments.size() > 0) {
return experiments.get(experiments.size() - 1);
}
return null;
return null;
}
/** Called by the {@link Time} when the simulation is shut down. */
......
......@@ -3,16 +3,16 @@ package de.tud.kom.p2psim.impl.util.db.dao.metric;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import de.tud.kom.p2psim.impl.util.Tuple;
import de.tud.kom.p2psim.impl.util.db.dao.DAO;
import de.tud.kom.p2psim.impl.util.db.metric.Experiment;
import de.tud.kom.p2psim.impl.util.db.metric.Metric;
import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.ParameterExpression;
import jakarta.persistence.criteria.Root;
/** Data Access Object to store and retrieve {@link Metric} instances.
*
......@@ -61,11 +61,41 @@ public class MetricDAO extends DAO {
public static List<Metric> getMetricsForExperiment(int pExperimentID) {
begin();
Criteria criteria = getSession().createCriteria(Experiment.class);
if (pExperimentID != -1) {
criteria = criteria.add(Restrictions.eq("experimentID", pExperimentID));
}
List<Metric> metrics = criteria.list();
// using new JPA criteria API instead of old hibernate API
CriteriaBuilder builder = getSession().getCriteriaBuilder();
CriteriaQuery<Metric> criteriaQuery = builder.createQuery(Metric.class);
Root<Metric> root = criteriaQuery.from(Metric.class);
criteriaQuery.select(root);
criteriaQuery.where(builder.equal(root.get("experimentId"), pExperimentID));
List<Metric> metrics = getSession().createQuery(criteriaQuery).getResultList();
//
// List<Metric> metrics;
//
// if(pExperimentID != -1) {
// ParameterExpression<Integer> paramExperimentID = builder.parameter(Integer.class);
// criteriaQuery.select(root).where(builder.equal(root.get("experimentId"), paramExperimentID));
//
// //paramExperimentID.where(builder.equal(root.get("experimentId"), paramExperimentID));
//
// TypedQuery<Metric> q = getSession().createQuery(criteriaQuery);
// q.setParameter(paramExperimentID, pExperimentID);
//
// metrics = q.getResultList();
// }
// else {
// metrics = getSession().createQuery(criteriaQuery).getResultList();
// }
//
/*
* Criteria criteria = getSession().createCriteria(Experiment.class); if
* (pExperimentID != -1) { criteria =
* criteria.add(Restrictions.eq("experimentID", pExperimentID)); }
* List<Metric> metrics = criteria.list();
*/
commit();
return metrics;
}
......
......@@ -20,17 +20,17 @@
package de.tud.kom.p2psim.impl.util.db.metric;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.Inheritance;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.InheritanceType;
@Entity
@Table(name = "custom_measurements", indexes = { @Index(columnList = "hostMetricId", name = "hostMetricId") })
......@@ -46,7 +46,6 @@ public class CustomMeasurement implements HostMetricBound {
/**
* The simulation time for to this measurement in simulator time, that is, microseconds.
*/
@SuppressWarnings("unused")
protected long time;
/**
......@@ -70,7 +69,7 @@ public class CustomMeasurement implements HostMetricBound {
}
public void afterPersist() {
//
}
public HostMetric getHostMetric() {
......
......@@ -2,14 +2,13 @@ package de.tud.kom.p2psim.impl.util.db.metric;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Table;
import org.hibernate.annotations.Type;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.Table;
/** Database representation of an experiment, that is, a simulator run.
*
......@@ -30,8 +29,8 @@ public class Experiment {
/**
* A unique id of this experiment, which will be set by the database.
*/
@Id
@GeneratedValue
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
......@@ -63,14 +62,16 @@ public class Experiment {
/**
* The parsed XML-configuration
*/
@Type(type="text")
@Column(columnDefinition = "text")
//@Type(type="text")
private String system;
/**
* The variables of this experiment. (The variables of the XML-Config or
* variables which are given as parameter by start)
*/
@Type(type="text")
@Column(columnDefinition = "text")
//@Type(type="text")
private String workload;
/**
......
......@@ -20,14 +20,16 @@
package de.tud.kom.p2psim.impl.util.db.metric;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name = "groupmetrics", indexes = {
......@@ -44,7 +46,7 @@ import javax.persistence.Table;
public class GroupMetric {
@Id
@GeneratedValue
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
......