Commit 27db30c4 authored by Julian Zobel's avatar Julian Zobel
Browse files

Merge commit '9e3b2ede' into jz/bachelor-henry-kalff

parents 42c76212 9e3b2ede
...@@ -59,32 +59,7 @@ ...@@ -59,32 +59,7 @@
<updatePolicy>always</updatePolicy> <updatePolicy>always</updatePolicy>
</releases> </releases>
</repository> </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> <repository>
<id>Google Maven Central</id> <id>Google Maven Central</id>
<url>https://maven-central.storage.googleapis.com/repos/central/data/</url> <url>https://maven-central.storage.googleapis.com/repos/central/data/</url>
...@@ -101,248 +76,144 @@ ...@@ -101,248 +76,144 @@
<dependencies> <dependencies>
<!-- XML --> <!-- XML -->
<!-- https://mvnrepository.com/artifact/javax.xml/jsr173 -->
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jsr173</artifactId>
<version>1.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.glassfish.jaxb</groupId> <groupId>org.glassfish.jaxb</groupId>
<artifactId>txw2</artifactId> <artifactId>txw2</artifactId>
<version>3.0.2</version> <version>3.0.2</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/stax/stax -->
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<version>1.2.0</version>
</dependency>
<dependency> <dependency>
<groupId>xerces</groupId> <groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId> <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> </dependency>
<!-- SVG --> <!-- SVG -->
<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/fop -->
<dependency> <dependency>
<groupId>batik</groupId> <groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-1.5-fop</artifactId> <artifactId>fop</artifactId>
<version>0.20-5</version> <version>2.7</version>
</dependency> </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 --> <!-- Testing -->
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.13</version> <version>4.13.2</version>
</dependency> </dependency>
<dependency>
<groupId>junit-addons</groupId>
<artifactId>junit-addons</artifactId>
<version>1.4</version>
</dependency>
<!-- Logging with Log4j --> <!-- Logging with Log4j: Requires API and CORE -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId> <artifactId>log4j-core</artifactId>
<version>2.16.0</version> <version>2.19.0</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId> <artifactId>log4j-api</artifactId>
<version>2.16.0</version> <version>2.19.0</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <!-- Graphs -->
<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>
-->
<dependency> <dependency>
<groupId>org.jgrapht</groupId> <groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId> <artifactId>jgrapht-core</artifactId>
<version>1.5.0</version> <version>1.5.1</version>
</dependency> </dependency>
<!-- Chart creation --> <!-- Chart creation -->
<!-- unused? <dependency> <groupId>jfree</groupId> <artifactId>jcommon</artifactId>
<version>1.0.16</version> </dependency> -->
<dependency> <dependency>
<groupId>org.jfree</groupId> <groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId> <artifactId>jfreechart</artifactId>
<version>1.0.19</version> <version>1.5.3</version>
</dependency> </dependency>
<!-- Database --> <!-- Database -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version> <version>8.0.30</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version> <version>6.1.3.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>
</dependency> </dependency>
<!-- Dependencies and convenience libraries --> <!-- Dependencies and convenience libraries -->
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>18.0</version> <version>31.1-jre</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency> </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> <dependency>
<groupId>commons-net</groupId> <groupId>com.google.inject</groupId>
<artifactId>commons-net</artifactId> <artifactId>guice</artifactId>
<version>2.0</version> <version>5.1.0</version>
</dependency> </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/commons-net/commons-net -->
<!-- https://mvnrepository.com/artifact/ca.umontreal.iro.simul/ssj -->
<dependency> <dependency>
<groupId>ca.umontreal.iro.simul</groupId> <groupId>commons-net</groupId>
<artifactId>ssj</artifactId> <artifactId>commons-net</artifactId>
<version>3.3.1</version> <version>3.8.0</version>
</dependency> </dependency>
<!-- Date & Time calculations --> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency> <dependency>
<groupId>joda-time</groupId> <groupId>org.apache.commons</groupId>
<artifactId>joda-time</artifactId> <artifactId>commons-lang3</artifactId>
<version>2.1</version> <version>3.12.0</version>
</dependency> </dependency>
<!-- Other dependencies --> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency> <dependency>
<groupId>javax.inject</groupId> <groupId>org.apache.commons</groupId>
<artifactId>javax.inject</artifactId> <artifactId>commons-compress</artifactId>
<version>1</version> <version>1.21</version>
</dependency> </dependency>
<!-- unused <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<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> -->
<dependency> <dependency>
<groupId>commons-lang</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang</artifactId> <artifactId>commons-collections4</artifactId>
<version>2.4</version> <version>4.4</version>
</dependency> </dependency>
<!-- Math -->
<!-- https://mvnrepository.com/artifact/ca.umontreal.iro.simul/ssj -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>ca.umontreal.iro.simul</groupId>
<artifactId>commons-compress</artifactId> <artifactId>ssj</artifactId>
<version>1.4.1</version> <version>3.3.2</version>
</dependency> </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 --> <!-- JUNG Graph Library -->
<!-- unused<dependency> <groupId>net.sf.jung</groupId> <artifactId>jung2</artifactId>
<version>2.0.1</version> <type>pom</type> </dependency> -->
<dependency> <dependency>
<groupId>net.sf.jung</groupId> <groupId>net.sf.jung</groupId>
<artifactId>jung-api</artifactId> <artifactId>jung-api</artifactId>
<version>2.0.1</version> <version>2.0.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.sf.jung</groupId> <groupId>net.sf.jung</groupId>
<artifactId>jung-graph-impl</artifactId> <artifactId>jung-graph-impl</artifactId>
...@@ -358,41 +229,23 @@ ...@@ -358,41 +229,23 @@
<artifactId>jung-io</artifactId> <artifactId>jung-io</artifactId>
<version>2.0.1</version> <version>2.0.1</version>
</dependency> </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 -->
<!-- <!-- Routing and navigation -->
<dependency> <!-- https://mvnrepository.com/artifact/com.graphhopper/graphhopper-core -->
<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>
-->
<dependency> <dependency>
<groupId>com.graphhopper</groupId> <groupId>com.graphhopper</groupId>
<artifactId>graphhopper-core</artifactId> <artifactId>graphhopper-core</artifactId>
<version>0.13.0</version> <version>6.0</version>
</dependency>
<dependency>
<groupId>com.graphhopper</groupId>
<artifactId>graphhopper-reader-osm</artifactId>
<version>0.13.0</version>
</dependency> </dependency>
<!-- Json (used for OSM-Movement-Model) --> <!-- JSON in Java -->
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20140107</version> <version>20220924</version>
</dependency> </dependency>
...@@ -402,7 +255,6 @@ ...@@ -402,7 +255,6 @@
<artifactId>simonstrator-api</artifactId> <artifactId>simonstrator-api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -232,7 +232,7 @@ public class DefaultConfigurator implements Configurator { ...@@ -232,7 +232,7 @@ public class DefaultConfigurator implements Configurator {
*/ */
} }
factory.setNamespaceAware(false); factory.setNamespaceAware(true);
factory.setValidating(false); factory.setValidating(false);
SAXParser parser = factory.newSAXParser(); SAXParser parser = factory.newSAXParser();
......
...@@ -28,7 +28,6 @@ import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Value; ...@@ -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.configuration.beans.Variation;
import de.tud.kom.p2psim.impl.scenario.simcfg2.utils.SimCfgUtil; import de.tud.kom.p2psim.impl.scenario.simcfg2.utils.SimCfgUtil;
import de.tud.kom.p2psim.impl.util.Tuple; import de.tud.kom.p2psim.impl.util.Tuple;
import org.apache.commons.lang.StringUtils;
import java.io.File; import java.io.File;
import java.util.Collection; import java.util.Collection;
......
...@@ -75,7 +75,7 @@ public class SimCfgFileParser { ...@@ -75,7 +75,7 @@ public class SimCfgFileParser {
} }
private File extractImportedFile(String filename, File relativeFile) { 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("~")) { if (importedFile.contains("~")) {
return new File(importedFile.replace("~", "config")); return new File(importedFile.replace("~", "config"));
......
...@@ -32,7 +32,7 @@ import de.tud.kom.p2psim.impl.scenario.simcfg2.annotations.Configure; ...@@ -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.annotations.UnknownSetting;
import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Value; import de.tud.kom.p2psim.impl.scenario.simcfg2.configuration.beans.Value;
import de.tud.kom.p2psim.impl.util.Tuple; 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 * Contains a some convenience methods used by the SimCfgConfigurator and
......
...@@ -25,9 +25,6 @@ import java.util.LinkedHashMap; ...@@ -25,9 +25,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Map; 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.topology.movement.UAVMovementModel;
import de.tud.kom.p2psim.api.uav.MulticopterModel; import de.tud.kom.p2psim.api.uav.MulticopterModel;
import de.tud.kom.p2psim.impl.energy.components.ActuatorComponent; import de.tud.kom.p2psim.impl.energy.components.ActuatorComponent;
...@@ -36,6 +33,9 @@ import de.tud.kom.p2psim.impl.topology.util.PositionVector; ...@@ -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.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.ReachedLocationCallback; 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. * Simplified thrust-based local movement model based on the Intel Aero UAV.
......
...@@ -24,9 +24,9 @@ import java.util.LinkedHashMap; ...@@ -24,9 +24,9 @@ import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Table; import jakarta.persistence.Table;
import de.tud.kom.p2psim.api.topology.movement.UAVMovementModel; import de.tud.kom.p2psim.api.topology.movement.UAVMovementModel;
import de.tud.kom.p2psim.api.uav.MulticopterModel; import de.tud.kom.p2psim.api.uav.MulticopterModel;
......
...@@ -29,6 +29,7 @@ import com.graphhopper.util.PointList; ...@@ -29,6 +29,7 @@ import com.graphhopper.util.PointList;
import com.graphhopper.util.shapes.GHPoint3D; import com.graphhopper.util.shapes.GHPoint3D;
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator; 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.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.location.Location;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.route.Route; import de.tudarmstadt.maki.simonstrator.api.component.sensor.route.Route;
...@@ -68,11 +69,7 @@ public class RouteImpl implements Route { ...@@ -68,11 +69,7 @@ public class RouteImpl implements Route {
private int currentIndex; private int currentIndex;
private int currentSegmentIndex; private int currentSegmentIndex;
private int routeLength;
private int routeSegmentsLength;
private boolean reachedTarget; private boolean reachedTarget;
/** /**
...@@ -92,16 +89,12 @@ public class RouteImpl implements Route { ...@@ -92,16 +89,12 @@ public class RouteImpl implements Route {
this.destination = destination; this.destination = destination;
this.pointList = pointList; this.pointList = pointList;
this.positionsList = new LinkedList<>(); this.positionsList = new LinkedList<>();
// Create Position vectors ONCE // Create PositionVectors ONCE
for (GHPoint3D temp : pointList) { for (GHPoint3D temp : pointList) {
positionsList positionsList.add(GPSCalculation.transformGPSWindowToOwnWorld(temp.getLat(), temp.getLon()));
.add(RealWorldStreetsMovement.transformGPSWindowToOwnWorld(
temp.getLat(), temp.getLon()));
} }
routeLength = positionsList.size();
this.segmentListeners = segmentListeners; this.segmentListeners = segmentListeners;
this.routeSegments = routeSegments; this.routeSegments = routeSegments;
this.routeSegmentsLength = routeSegments.size();
} }
/** /**
...@@ -131,7 +124,7 @@ public class RouteImpl implements Route { ...@@ -131,7 +124,7 @@ public class RouteImpl implements Route {
@Override @Override
public boolean hasSegmentInformation() { public boolean hasSegmentInformation() {
return routeSegmentsLength != 0; return this.routeSegments.size() != 0;
} }
@Override @Override
...@@ -150,7 +143,7 @@ public class RouteImpl implements Route { ...@@ -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)"); "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 return Collections.unmodifiableList(routeSegments
.subList(currentSegmentIndex, routeSegmentsLength)); .subList(currentSegmentIndex, this.routeSegments.size()));
} }
@Override @Override
...@@ -172,8 +165,7 @@ public class RouteImpl implements Route { ...@@ -172,8 +165,7 @@ public class RouteImpl implements Route {
*/ */
public PositionVector updateCurrentLocation(SimLocationActuator comp, public PositionVector updateCurrentLocation(SimLocationActuator comp,
double speed, double tolerance) { double speed, double tolerance) {
List<PositionVector> sublist = positionsList.subList(currentIndex, List<PositionVector> sublist = positionsList.subList(currentIndex, this.pointList.size());
routeLength);
PositionVector newPosition = null; PositionVector newPosition = null;
for (PositionVector candidate : sublist) { for (PositionVector candidate : sublist) {
newPosition = comp.getRealPosition().moveStep(candidate, speed); newPosition = comp.getRealPosition().moveStep(candidate, speed);
...@@ -187,10 +179,10 @@ public class RouteImpl implements Route { ...@@ -187,10 +179,10 @@ public class RouteImpl implements Route {
/* /*
* Segment handling (also inform listeners!) * Segment handling (also inform listeners!)
*/ */
if (routeSegmentsLength > 0 if (this.routeSegments.size() > 0
&& routeSegmentsLength > currentSegmentIndex) { && this.routeSegments.size() > currentSegmentIndex) {
List<RouteSegmentImpl> segmentSublist = routeSegments List<RouteSegmentImpl> segmentSublist = routeSegments
.subList(currentSegmentIndex + 1, routeSegmentsLength); .subList(currentSegmentIndex + 1, this.routeSegments.size());
for (RouteSegmentImpl candidate : segmentSublist) { for (RouteSegmentImpl candidate : segmentSublist) {
if (candidate.getFromRouteIndex() >= currentIndex) { if (candidate.getFromRouteIndex() >= currentIndex) {
break; break;
...@@ -205,7 +197,7 @@ public class RouteImpl implements Route { ...@@ -205,7 +197,7 @@ public class RouteImpl implements Route {
/* /*
* Reached target flag * Reached target flag
*/ */
if (currentIndex >= routeLength) { if (currentIndex >= this.pointList.size()) {
reachedTarget = true; reachedTarget = true;
} }
...@@ -224,7 +216,7 @@ public class RouteImpl implements Route { ...@@ -224,7 +216,7 @@ public class RouteImpl implements Route {
@Override @Override
public String toString() { public String toString() {
return "\n\tfrom " + start.toString() + " to " + destination.toString() return "\n\tfrom " + start.toString() + " to " + destination.toString()
+ "\n\tstep: " + currentIndex + " length: " + routeLength; + "\n\tstep: " + currentIndex + " points: " + this.pointList.size();
} }
public PointList getPointList() { public PointList getPointList() {
......
...@@ -141,7 +141,8 @@ public class GPSCalculation { ...@@ -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 lat
* @param lon * @param lon
* @return The projected position in world-dimensions * @return The projected position in world-dimensions
...@@ -153,6 +154,24 @@ public class GPSCalculation { ...@@ -153,6 +154,24 @@ public class GPSCalculation {
return new PositionVector(x, y); 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. * Checks if the given latitute and longitude is within the simulated GPS area.
* *
......
...@@ -20,11 +20,20 @@ ...@@ -20,11 +20,20 @@
package de.tud.kom.p2psim.impl.util; 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> { public class Either<A, B> {
private A left = null; private A left = null;
private B right = null; private B right = null;
protected Either(A a,B b) { protected Either(A a, B b) {
left = a; left = a;
right = b; right = b;
} }
......
...@@ -20,7 +20,12 @@ ...@@ -20,7 +20,12 @@
package de.tud.kom.p2psim.impl.util; 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> { public class Triple<A, B, C> {
private A a; private A a;
......
...@@ -29,16 +29,24 @@ import java.util.List; ...@@ -29,16 +29,24 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; 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; A a;
T2 b; B b;
public Tuple() { public Tuple() {
} }
public Tuple(T1 a, T2 b) { public Tuple(A a, B b) {
super(); super();
this.a = a; this.a = a;
this.b = b; this.b = b;
...@@ -49,16 +57,16 @@ public class Tuple<T1, T2> { ...@@ -49,16 +57,16 @@ public class Tuple<T1, T2> {
return "(" + a + ", " + b + ")"; return "(" + a + ", " + b + ")";
} }
public T1 getA() { public A getA() {
return a; return a;
} }
public void setA(T1 a) { public void setA(A a) {
this.a = a; this.a = a;
} }
public T2 getB() { public B getB() {
return b; return b;
} }
public void setB(T2 b) { public void setB(B b) {
this.b = b; this.b = b;
} }
......
...@@ -23,8 +23,6 @@ package de.tud.kom.p2psim.impl.util.db.dao; ...@@ -23,8 +23,6 @@ package de.tud.kom.p2psim.impl.util.db.dao;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.EntityManager;
import org.hibernate.Session; import org.hibernate.Session;
import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement; import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
......
...@@ -23,22 +23,12 @@ package de.tud.kom.p2psim.impl.util.db.dao; ...@@ -23,22 +23,12 @@ package de.tud.kom.p2psim.impl.util.db.dao;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; 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.HibernateException;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement; import de.tud.kom.p2psim.impl.util.db.metric.CustomMeasurement;
import de.tud.kom.p2psim.impl.util.db.metric.Experiment; import de.tud.kom.p2psim.impl.util.db.metric.Experiment;
...@@ -58,6 +48,8 @@ import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription; ...@@ -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;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level; import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
import de.tudarmstadt.maki.simonstrator.api.web.WebConfigurationManager; 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 * This class represents a simple access to persist objects with Hibernate. It
...@@ -70,6 +62,7 @@ import de.tudarmstadt.maki.simonstrator.api.web.WebConfigurationManager; ...@@ -70,6 +62,7 @@ import de.tudarmstadt.maki.simonstrator.api.web.WebConfigurationManager;
* *
* @author Christoph Münker * @author Christoph Münker
* @author Andreas Hemel * @author Andreas Hemel
* @author Julian Zobel
*/ */
public class DAO { public class DAO {
...@@ -137,22 +130,24 @@ public class DAO { ...@@ -137,22 +130,24 @@ public class DAO {
*/ */
cfg.setProperty("hibernate.show_sql", "false"); cfg.setProperty("hibernate.show_sql", "false");
cfg.setProperty("hibernate.format_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 // Default user/pass/database, overwrite using MetricOutputDAO
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://"+ address + ":" + port + "/" + database); cfg.setProperty("hibernate.connection.url", "jdbc:mysql://"+ address + ":" + port + "/" + database);
cfg.setProperty("hibernate.connection.username", username); cfg.setProperty("hibernate.connection.username", username);
cfg.setProperty("hibernate.connection.password", password); cfg.setProperty("hibernate.connection.password", password);
// mySQL 5 // mySQL 5
cfg.setProperty("hibernate.dialect", cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
"org.hibernate.dialect.MySQL5InnoDBDialect");
cfg.setProperty("hibernate.transaction.factory_class", cfg.setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory");
"org.hibernate.transaction.JDBCTransactionFactory");
cfg.setProperty("hibernate.pool_size", "1"); cfg.setProperty("hibernate.pool_size", "1");
cfg.setProperty("hibernate.hbm2ddl.auto", "update"); cfg.setProperty("hibernate.hbm2ddl.auto", "update");
cfg.setProperty("hibernate.current_session_context_class", "thread"); cfg.setProperty("hibernate.current_session_context_class", "thread");
// new org.hibernate.dialect.MySQLDialect();
// Add core classes // Add core classes
cfg.addAnnotatedClass(CustomMeasurement.class); cfg.addAnnotatedClass(CustomMeasurement.class);
cfg.addAnnotatedClass(Experiment.class); cfg.addAnnotatedClass(Experiment.class);
...@@ -321,8 +316,23 @@ public class DAO { ...@@ -321,8 +316,23 @@ public class DAO {
public static <T extends Object> List<T> retrieve(Class<T> pClass) { public static <T extends Object> List<T> retrieve(Class<T> pClass) {
begin(); 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(); commit();
return objects; return objects;
...@@ -449,8 +459,7 @@ public class DAO { ...@@ -449,8 +459,7 @@ public class DAO {
public static <T> T update(T o) { public static <T> T update(T o) {
commitQueue(); commitQueue();
begin(); begin();
@SuppressWarnings("unchecked") T objRef = getSession().merge(o);
T objRef = (T) getSession().merge(o);
commit(); commit();
close(); close();
......
...@@ -27,14 +27,14 @@ import java.util.List; ...@@ -27,14 +27,14 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; 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.simengine.Simulator;
import de.tud.kom.p2psim.impl.util.db.dao.DAO; 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.Experiment;
import de.tud.kom.p2psim.impl.util.db.metric.Metric; import de.tud.kom.p2psim.impl.util.db.metric.Metric;
import de.tudarmstadt.maki.simonstrator.api.Time; 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. * This class provides access to the single {@link Experiment} instance.
...@@ -98,18 +98,36 @@ public class ExperimentDAO extends DAO { ...@@ -98,18 +98,36 @@ public class ExperimentDAO extends DAO {
public static Experiment retrieveExperiment(long pSeed, Map<String, String> pVariables) { public static Experiment retrieveExperiment(long pSeed, Map<String, String> pVariables) {
begin(); 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()) { 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(); commit();
if (experiments.size() > 0) { if (experiments.size() > 0) {
return experiments.get(experiments.size() - 1); return experiments.get(experiments.size() - 1);
} }
return null; return null;
} }
/** Called by the {@link Time} when the simulation is shut down. */ /** 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; ...@@ -3,16 +3,16 @@ package de.tud.kom.p2psim.impl.util.db.dao.metric;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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.Tuple;
import de.tud.kom.p2psim.impl.util.db.dao.DAO; 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.Metric;
import de.tud.kom.p2psim.impl.util.db.metric.MetricDescription; 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. /** Data Access Object to store and retrieve {@link Metric} instances.
* *
...@@ -61,11 +61,41 @@ public class MetricDAO extends DAO { ...@@ -61,11 +61,41 @@ public class MetricDAO extends DAO {
public static List<Metric> getMetricsForExperiment(int pExperimentID) { public static List<Metric> getMetricsForExperiment(int pExperimentID) {
begin(); begin();
Criteria criteria = getSession().createCriteria(Experiment.class);
if (pExperimentID != -1) { // using new JPA criteria API instead of old hibernate API
criteria = criteria.add(Restrictions.eq("experimentID", pExperimentID)); CriteriaBuilder builder = getSession().getCriteriaBuilder();
} CriteriaQuery<Metric> criteriaQuery = builder.createQuery(Metric.class);
List<Metric> metrics = criteria.list();
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(); commit();
return metrics; return metrics;
} }
......
...@@ -20,17 +20,17 @@ ...@@ -20,17 +20,17 @@
package de.tud.kom.p2psim.impl.util.db.metric; package de.tud.kom.p2psim.impl.util.db.metric;
import javax.persistence.CascadeType; import jakarta.persistence.CascadeType;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import javax.persistence.Index; import jakarta.persistence.Index;
import javax.persistence.Inheritance; import jakarta.persistence.Inheritance;
import javax.persistence.InheritanceType; import jakarta.persistence.JoinColumn;
import javax.persistence.JoinColumn; import jakarta.persistence.ManyToOne;
import javax.persistence.ManyToOne; import jakarta.persistence.Table;
import javax.persistence.Table; import jakarta.persistence.InheritanceType;
@Entity @Entity
@Table(name = "custom_measurements", indexes = { @Index(columnList = "hostMetricId", name = "hostMetricId") }) @Table(name = "custom_measurements", indexes = { @Index(columnList = "hostMetricId", name = "hostMetricId") })
...@@ -46,7 +46,6 @@ public class CustomMeasurement implements HostMetricBound { ...@@ -46,7 +46,6 @@ public class CustomMeasurement implements HostMetricBound {
/** /**
* The simulation time for to this measurement in simulator time, that is, microseconds. * The simulation time for to this measurement in simulator time, that is, microseconds.
*/ */
@SuppressWarnings("unused")
protected long time; protected long time;
/** /**
...@@ -70,7 +69,7 @@ public class CustomMeasurement implements HostMetricBound { ...@@ -70,7 +69,7 @@ public class CustomMeasurement implements HostMetricBound {
} }
public void afterPersist() { public void afterPersist() {
//
} }
public HostMetric getHostMetric() { public HostMetric getHostMetric() {
......
...@@ -2,14 +2,13 @@ package de.tud.kom.p2psim.impl.util.db.metric; ...@@ -2,14 +2,13 @@ package de.tud.kom.p2psim.impl.util.db.metric;
import java.util.Date; import java.util.Date;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.GenerationType;
import javax.persistence.Index; import jakarta.persistence.Id;
import javax.persistence.Table; import jakarta.persistence.Index;
import jakarta.persistence.Table;
import org.hibernate.annotations.Type;
/** Database representation of an experiment, that is, a simulator run. /** Database representation of an experiment, that is, a simulator run.
* *
...@@ -30,8 +29,8 @@ public class Experiment { ...@@ -30,8 +29,8 @@ public class Experiment {
/** /**
* A unique id of this experiment, which will be set by the database. * A unique id of this experiment, which will be set by the database.
*/ */
@Id @Id
@GeneratedValue @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; private int id;
/** /**
...@@ -63,14 +62,16 @@ public class Experiment { ...@@ -63,14 +62,16 @@ public class Experiment {
/** /**
* The parsed XML-configuration * The parsed XML-configuration
*/ */
@Type(type="text") @Column(columnDefinition = "text")
//@Type(type="text")
private String system; private String system;
/** /**
* The variables of this experiment. (The variables of the XML-Config or * The variables of this experiment. (The variables of the XML-Config or
* variables which are given as parameter by start) * variables which are given as parameter by start)
*/ */
@Type(type="text") @Column(columnDefinition = "text")
//@Type(type="text")
private String workload; private String workload;
/** /**
......
...@@ -20,14 +20,16 @@ ...@@ -20,14 +20,16 @@
package de.tud.kom.p2psim.impl.util.db.metric; package de.tud.kom.p2psim.impl.util.db.metric;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.Id; import jakarta.persistence.GenerationType;
import javax.persistence.Index; import jakarta.persistence.Id;
import javax.persistence.JoinColumn; import jakarta.persistence.Index;
import javax.persistence.ManyToOne; import jakarta.persistence.JoinColumn;
import javax.persistence.Table; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity @Entity
@Table(name = "groupmetrics", indexes = { @Table(name = "groupmetrics", indexes = {
...@@ -44,7 +46,7 @@ import javax.persistence.Table; ...@@ -44,7 +46,7 @@ import javax.persistence.Table;
public class GroupMetric { public class GroupMetric {
@Id @Id
@GeneratedValue @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; private int id;
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment