"git@transfer.hft-stuttgart.de:simstadt/simstadtpy.git" did not exist on "803f6973ef817ebacf11967d16a84b512f258a6d"
Commit 86e2e4f7 authored by Rushikesh Padsala's avatar Rushikesh Padsala
Browse files

fixes in TimeSeries imp-exp, importmanager and marshaller/unmarshaller

parent 96d46e05
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
...@@ -17,7 +16,7 @@ ...@@ -17,7 +16,7 @@
</compositeBuild> </compositeBuild>
</compositeConfiguration> </compositeConfiguration>
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="C:/Gradle" /> <option name="gradleJvm" value="#JAVA_HOME" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
......
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="2">
<item index="0" class="java.lang.String" itemvalue="transformers" />
<item index="1" class="java.lang.String" itemvalue="pygls" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="liberica-17" project-jdk-type="JavaSDK" />
<file type="web" url="file://$PROJECT_DIR$/../digitwins4peds" />
<file type="web" url="file://$PROJECT_DIR$/../energy-ade-2-citygml4j" />
<file type="web" url="file://$PROJECT_DIR$" />
<file type="web" url="file://$PROJECT_DIR$/../energy-ade-3-citygml4j" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="liberica-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project> </project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
...@@ -2,6 +2,5 @@ ...@@ -2,6 +2,5 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" /> <mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../energy-ade-3-citygml4j" vcs="Git" />
</component> </component>
</project> </project>
\ No newline at end of file
...@@ -8,8 +8,8 @@ plugins { ...@@ -8,8 +8,8 @@ plugins {
} }
group = 'de.stuttgart.hft' group = 'de.stuttgart.hft'
version = 'beta7-0.2' version = 'beta7-0.3'
description 'Energy ADE 3 (beta 7) extension for the 3DCityDB - release 0.2' description 'Energy ADE 3 (beta 7) extension for the 3DCityDB - release 0.3'
repositories { repositories {
maven { maven {
......
package de.stuttgart.hft.ade.energy3.exporter; package de.stuttgart.hft.ade.energy3.exporter;
import de.stuttgart.hft.ade.energy3.schema.ADETable; import de.stuttgart.hft.ade.energy3.schema.ADETable;
import net.opengis.gml.UnitOfMeasureType;
import org.citydb.core.ade.exporter.ADEExporter; import org.citydb.core.ade.exporter.ADEExporter;
import org.citydb.core.ade.exporter.CityGMLExportHelper; import org.citydb.core.ade.exporter.CityGMLExportHelper;
import org.citydb.core.operation.exporter.CityGMLExportException; import org.citydb.core.operation.exporter.CityGMLExportException;
...@@ -8,6 +9,7 @@ import org.citygml4j.ade.energy3.model.supportingClasses.*; ...@@ -8,6 +9,7 @@ import org.citygml4j.ade.energy3.model.supportingClasses.*;
import org.citygml4j.model.gml.basicTypes.Code; import org.citygml4j.model.gml.basicTypes.Code;
import org.citygml4j.model.gml.basicTypes.MeasureList; import org.citygml4j.model.gml.basicTypes.MeasureList;
import java.net.URI; import java.net.URI;
import java.sql.*; import java.sql.*;
import java.time.*; import java.time.*;
...@@ -17,6 +19,8 @@ import java.util.Collection; ...@@ -17,6 +19,8 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class TimeSeriesExporter implements ADEExporter { public class TimeSeriesExporter implements ADEExporter {
private final CityGMLExportHelper helper; private final CityGMLExportHelper helper;
...@@ -71,13 +75,30 @@ public class TimeSeriesExporter implements ADEExporter { ...@@ -71,13 +75,30 @@ public class TimeSeriesExporter implements ADEExporter {
if (abstractTimeSeries instanceof RegularTimeSeries) { if (abstractTimeSeries instanceof RegularTimeSeries) {
RegularTimeSeries regularTimeSeries = (RegularTimeSeries) abstractTimeSeries; RegularTimeSeries regularTimeSeries = (RegularTimeSeries) abstractTimeSeries;
Timestamp period_begin = rs.getTimestamp(7);
Timestamp period_end = rs.getTimestamp(8);
if (period_begin != null && period_end != null) { //Timestamp period_begin = rs.getTimestamp(7);
ZoneId zoneId = ZoneId.systemDefault(); //Timestamp period_end = rs.getTimestamp(8);
ZonedDateTime beginZdt = period_begin.toInstant().atZone(zoneId);
ZonedDateTime endZdt = period_end.toInstant().atZone(zoneId); //if (period_begin != null && period_end != null) {
// ZoneId zoneId = ZoneId.systemDefault();
// ZonedDateTime beginZdt = period_begin.toInstant().atZone(zoneId);
// ZonedDateTime endZdt = period_end.toInstant().atZone(zoneId);
//TimePeriod timePeriod = new TimePeriod();
// timePeriod.setBeginPosition(beginZdt);
// timePeriod.setEndPosition(endZdt);
// TimePeriodProperty timePeriodProperty = new TimePeriodProperty();
// timePeriodProperty.setTimePeriod(timePeriod);
//regularTimeSeries.setTemporalExtent(timePeriodProperty);
// }
OffsetDateTime beginOffset = rs.getObject(7, OffsetDateTime.class);
OffsetDateTime endOffset = rs.getObject(8, OffsetDateTime.class);
if (beginOffset != null && endOffset != null) {
ZonedDateTime beginZdt = beginOffset.atZoneSameInstant(ZoneOffset.UTC);
ZonedDateTime endZdt = endOffset.atZoneSameInstant(ZoneOffset.UTC);
TimePeriod timePeriod = new TimePeriod(); TimePeriod timePeriod = new TimePeriod();
timePeriod.setBeginPosition(beginZdt); timePeriod.setBeginPosition(beginZdt);
...@@ -113,10 +134,27 @@ public class TimeSeriesExporter implements ADEExporter { ...@@ -113,10 +134,27 @@ public class TimeSeriesExporter implements ADEExporter {
} else if (abstractTimeSeries instanceof RegularTimeSeriesFile) { } else if (abstractTimeSeries instanceof RegularTimeSeriesFile) {
RegularTimeSeriesFile regularTimeSeriesFile = (RegularTimeSeriesFile) abstractTimeSeries; RegularTimeSeriesFile regularTimeSeriesFile = (RegularTimeSeriesFile) abstractTimeSeries;
ZonedDateTime beginZdt = rs.getObject(7, ZonedDateTime.class); //ZonedDateTime beginZdt = rs.getObject(7, ZonedDateTime.class);
ZonedDateTime endZdt = rs.getObject(8, ZonedDateTime.class); //ZonedDateTime endZdt = rs.getObject(8, ZonedDateTime.class);
//if (beginZdt != null && endZdt != null) {
// TimePeriod timePeriod = new TimePeriod();
// timePeriod.setBeginPosition(beginZdt);
// timePeriod.setEndPosition(endZdt);
// TimePeriodProperty timePeriodProperty = new TimePeriodProperty();
// timePeriodProperty.setTimePeriod(timePeriod);
// regularTimeSeriesFile.setTemporalExtent(timePeriodProperty);
// }
OffsetDateTime beginOffset = rs.getObject(7, OffsetDateTime.class);
OffsetDateTime endOffset = rs.getObject(8, OffsetDateTime.class);
if (beginOffset != null && endOffset != null) {
// Convert to ZonedDateTime if your model requires it
ZonedDateTime beginZdt = beginOffset.atZoneSameInstant(ZoneOffset.UTC);
ZonedDateTime endZdt = endOffset.atZoneSameInstant(ZoneOffset.UTC);
if (beginZdt != null && endZdt != null) {
TimePeriod timePeriod = new TimePeriod(); TimePeriod timePeriod = new TimePeriod();
timePeriod.setBeginPosition(beginZdt); timePeriod.setBeginPosition(beginZdt);
timePeriod.setEndPosition(endZdt); timePeriod.setEndPosition(endZdt);
...@@ -225,12 +263,17 @@ public class TimeSeriesExporter implements ADEExporter { ...@@ -225,12 +263,17 @@ public class TimeSeriesExporter implements ADEExporter {
} else if (abstractTimeSeries instanceof TypicalValuesTimeSeriesFile) { } else if (abstractTimeSeries instanceof TypicalValuesTimeSeriesFile) {
TypicalValuesTimeSeriesFile timeSeriesFile = (TypicalValuesTimeSeriesFile) abstractTimeSeries; TypicalValuesTimeSeriesFile timeSeriesFile = (TypicalValuesTimeSeriesFile) abstractTimeSeries;
Time start_time = rs.getTime(9); // Read the TIME column (no date)
if (start_time != null) { Time sqlTime = rs.getTime(9);
LocalTime localTime = start_time.toLocalTime(); if (sqlTime != null) {
ZonedDateTime zonedDateTime = localTime.atDate(LocalDate.now()) LocalTime localTime = sqlTime.toLocalTime();
.atZone(ZoneId.systemDefault());
timeSeriesFile.setStartTime(zonedDateTime); // Combine with dummy date and force UTC → exports as 12:30:00Z
ZonedDateTime utcTime = localTime
.atDate(LocalDate.of(2000, 1, 1))
.atZone(ZoneOffset.UTC);
timeSeriesFile.setStartTime(utcTime); // Will export as ...T12:30:00Z
} }
Integer start_day = rs.getObject(10) != null ? rs.getInt(10) : null; Integer start_day = rs.getObject(10) != null ? rs.getInt(10) : null;
...@@ -326,7 +369,9 @@ public class TimeSeriesExporter implements ADEExporter { ...@@ -326,7 +369,9 @@ public class TimeSeriesExporter implements ADEExporter {
} }
String uom = rs.getString(18); String uom = rs.getString(18);
if (uom != null) { if (uom != null && !uom.trim().isEmpty()) {
UnitOfMeasureType uomType = new UnitOfMeasureType();
uomType.setUom(uom.trim());
sensorConnection.setUom(uom); sensorConnection.setUom(uom);
} }
...@@ -353,7 +398,7 @@ public class TimeSeriesExporter implements ADEExporter { ...@@ -353,7 +398,7 @@ public class TimeSeriesExporter implements ADEExporter {
String base_url = rs.getString(27); String base_url = rs.getString(27);
if (base_url != null) { if (base_url != null) {
try { try {
sensorConnection.setBaseURL(URI.create(base_url)); sensorConnection.setBaseURL(URI.create(base_url.replace("%20", " ")));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
System.out.println("Invalid base_url for TimeSeries id=" + timeSeriesId + ": " + base_url); System.out.println("Invalid base_url for TimeSeries id=" + timeSeriesId + ": " + base_url);
} }
......
...@@ -132,3 +132,4 @@ public class ImportManager implements ADEImportManager { ...@@ -132,3 +132,4 @@ public class ImportManager implements ADEImportManager {
return type.cast(importer); return type.cast(importer);
} }
} }
...@@ -9,9 +9,13 @@ import org.citydb.core.operation.importer.CityGMLImportException; ...@@ -9,9 +9,13 @@ import org.citydb.core.operation.importer.CityGMLImportException;
import org.citydb.core.operation.importer.util.AttributeValueJoiner; import org.citydb.core.operation.importer.util.AttributeValueJoiner;
import org.citygml4j.ade.energy3.model.supportingClasses.*; import org.citygml4j.ade.energy3.model.supportingClasses.*;
import java.sql.*; import java.sql.*;
import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.util.Collections; import java.util.Collections;
import java.time.ZoneOffset;
public class TimeSeriesImporter implements ADEImporter { public class TimeSeriesImporter implements ADEImporter {
...@@ -49,10 +53,15 @@ public class TimeSeriesImporter implements ADEImporter { ...@@ -49,10 +53,15 @@ public class TimeSeriesImporter implements ADEImporter {
psTimeSeries.setString(17, regularTimeSeries.getValues().getUom()); psTimeSeries.setString(17, regularTimeSeries.getValues().getUom());
} }
if (regularTimeSeries.isSetTemporalExtent()){ if (regularTimeSeries.isSetTemporalExtent()){
Timestamp beginPosition = Timestamp.from(regularTimeSeries.getTemporalExtent().getTimePeriod().getBeginPosition().toInstant()); ZonedDateTime begin = regularTimeSeries.getTemporalExtent().getTimePeriod().getBeginPosition();
Timestamp endPosition = Timestamp.from(regularTimeSeries.getTemporalExtent().getTimePeriod().getEndPosition().toInstant()); ZonedDateTime end = regularTimeSeries.getTemporalExtent().getTimePeriod().getEndPosition();
psTimeSeries.setTimestamp(7, beginPosition);
psTimeSeries.setTimestamp(8, endPosition); // FIX 1: Force UTC so no timezone offset is applied
ZonedDateTime beginUTC = begin.withZoneSameInstant(ZoneOffset.UTC);
ZonedDateTime endUTC = end.withZoneSameInstant(ZoneOffset.UTC);
psTimeSeries.setTimestamp(7, Timestamp.from(beginUTC.toInstant()));
psTimeSeries.setTimestamp(8, Timestamp.from(endUTC.toInstant()));
} }
if (regularTimeSeries.isSetTimeInterval()) { if (regularTimeSeries.isSetTimeInterval()) {
psTimeSeries.setDouble(14, regularTimeSeries.getTimeInterval().getValue()); psTimeSeries.setDouble(14, regularTimeSeries.getTimeInterval().getValue());
...@@ -76,10 +85,15 @@ public class TimeSeriesImporter implements ADEImporter { ...@@ -76,10 +85,15 @@ public class TimeSeriesImporter implements ADEImporter {
if (timeSeriesFile.isSetValueColumnNumber()) if (timeSeriesFile.isSetValueColumnNumber())
psTimeSeries.setLong(23, timeSeriesFile.getValueColumnNumber()); psTimeSeries.setLong(23, timeSeriesFile.getValueColumnNumber());
if (timeSeriesFile.isSetTemporalExtent()){ if (timeSeriesFile.isSetTemporalExtent()){
Timestamp beginPosition = Timestamp.from(timeSeriesFile.getTemporalExtent().getTimePeriod().getBeginPosition().toInstant()); ZonedDateTime begin = timeSeriesFile.getTemporalExtent().getTimePeriod().getBeginPosition();
Timestamp endPosition = Timestamp.from(timeSeriesFile.getTemporalExtent().getTimePeriod().getEndPosition().toInstant()); ZonedDateTime end = timeSeriesFile.getTemporalExtent().getTimePeriod().getEndPosition();
psTimeSeries.setTimestamp(7, beginPosition);
psTimeSeries.setTimestamp(8, endPosition); // FIX 1: Force UTC
ZonedDateTime beginUTC = begin.withZoneSameInstant(ZoneOffset.UTC);
ZonedDateTime endUTC = end.withZoneSameInstant(ZoneOffset.UTC);
psTimeSeries.setTimestamp(7, Timestamp.from(beginUTC.toInstant()));
psTimeSeries.setTimestamp(8, Timestamp.from(endUTC.toInstant()));
} }
if (timeSeriesFile.isSetTimeInterval()) { if (timeSeriesFile.isSetTimeInterval()) {
psTimeSeries.setDouble(14, timeSeriesFile.getTimeInterval().getValue()); psTimeSeries.setDouble(14, timeSeriesFile.getTimeInterval().getValue());
...@@ -115,8 +129,10 @@ public class TimeSeriesImporter implements ADEImporter { ...@@ -115,8 +129,10 @@ public class TimeSeriesImporter implements ADEImporter {
TypicalValuesTimeSeriesFile file = (TypicalValuesTimeSeriesFile) abstractTimeSeries; TypicalValuesTimeSeriesFile file = (TypicalValuesTimeSeriesFile) abstractTimeSeries;
if (file.isSetStartTime()) { if (file.isSetStartTime()) {
LocalTime localTime = file.getStartTime().toLocalTime(); LocalTime localTime = file.getStartTime().toLocalTime();
Time sqlTime = Time.valueOf(localTime); // Store as UTC timestamp (dummy date doesn't matter)
psTimeSeries.setTime(9, sqlTime); ZonedDateTime utc = localTime.atDate(LocalDate.of(2000, 1, 1))
.atZone(ZoneOffset.UTC);
psTimeSeries.setTimestamp(9, Timestamp.from(utc.toInstant()));
} }
if (file.isSetStartDay()) { if (file.isSetStartDay()) {
psTimeSeries.setInt(10, file.getStartDay()); psTimeSeries.setInt(10, file.getStartDay());
...@@ -160,8 +176,9 @@ public class TimeSeriesImporter implements ADEImporter { ...@@ -160,8 +176,9 @@ public class TimeSeriesImporter implements ADEImporter {
} }
if (sensorConnection.isSetObservationProperty()) if (sensorConnection.isSetObservationProperty())
psTimeSeries.setString(36, sensorConnection.getObservationProperty()); psTimeSeries.setString(36, sensorConnection.getObservationProperty());
if (sensorConnection.isSetUom()) if (sensorConnection.isSetUom() && sensorConnection.getUom() != null) {
psTimeSeries.setString(18, sensorConnection.getUom()); psTimeSeries.setString(18, sensorConnection.getUom());
}
if (sensorConnection.isSetSensorID()) if (sensorConnection.isSetSensorID())
psTimeSeries.setString(37, sensorConnection.getSensorID()); psTimeSeries.setString(37, sensorConnection.getSensorID());
if (sensorConnection.isSetSensorName()) if (sensorConnection.isSetSensorName())
...@@ -172,8 +189,11 @@ public class TimeSeriesImporter implements ADEImporter { ...@@ -172,8 +189,11 @@ public class TimeSeriesImporter implements ADEImporter {
psTimeSeries.setString(36, sensorConnection.getObservationProperty()); psTimeSeries.setString(36, sensorConnection.getObservationProperty());
if (sensorConnection.isSetDataStreamID()) if (sensorConnection.isSetDataStreamID())
psTimeSeries.setString(30, sensorConnection.getDataStreamID()); psTimeSeries.setString(30, sensorConnection.getDataStreamID());
if (sensorConnection.isSetBaseURL()) if (sensorConnection.isSetBaseURL()) {
psTimeSeries.setString(27, sensorConnection.getBaseURL().toString()); String url = sensorConnection.getBaseURL().toString();
// Convert space → %20 so PostgreSQL doesn't turn it into +
psTimeSeries.setString(27, url.replace(" ", "%20"));
}
if (sensorConnection.isSetAuthType()) if (sensorConnection.isSetAuthType())
psTimeSeries.setString(25, sensorConnection.getAuthType().getValue()); psTimeSeries.setString(25, sensorConnection.getAuthType().getValue());
psTimeSeries.setString(26, sensorConnection.getAuthType().getCodeSpace()); psTimeSeries.setString(26, sensorConnection.getAuthType().getCodeSpace());
......
...@@ -118,4 +118,4 @@ public class WeatherDataImporter implements ADEImporter { ...@@ -118,4 +118,4 @@ public class WeatherDataImporter implements ADEImporter {
public void close() throws CityGMLImportException, SQLException { public void close() throws CityGMLImportException, SQLException {
ps.close(); ps.close();
} }
} }
\ No newline at end of file
Supports Markdown
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