From c32a88ad46473b665fc3006e92552af1d6aba174 Mon Sep 17 00:00:00 2001 From: David Corsar Date: Thu, 26 Apr 2012 10:59:20 +0100 Subject: [PATCH] initial import of ecosystem transport services --- .classpath | 8 + .project | 23 ++ .settings/org.eclipse.jdt.core.prefs | 6 + .settings/org.maven.ide.eclipse.prefs | 8 + delete | 1 + get | 1 + pom.xml | 53 +++ post | 1 + .../irp/ecosystem/transport/Util.java | 31 ++ .../transport/ecosystemTransportResource.java | 74 ++++ .../transport/models/jaxb/alert/Alert.java | 165 +++++++++ .../transport/models/jaxb/alert/Alerts.java | 21 ++ .../transport/models/jaxb/device/Device.java | 86 +++++ .../transport/models/jaxb/device/Sensor.java | 47 +++ .../transport/models/jaxb/device/Sensors.java | 23 ++ .../models/jaxb/feedback/Feedback.java | 60 +++ .../models/jaxb/feedback/FeedbackPayload.java | 69 ++++ .../models/jaxb/feedback/Feedbacks.java | 31 ++ .../models/jaxb/journey/Journey.java | 69 ++++ .../models/jaxb/journey/JourneyPayload.java | 59 +++ .../models/jaxb/journey/JourneyType.java | 57 +++ .../jaxb/observation/FeatureOfInterest.java | 30 ++ .../models/jaxb/observation/Observation.java | 98 +++++ .../jaxb/observation/ObservationPayload.java | 75 ++++ .../jaxb/observation/ObservationValue.java | 24 ++ .../models/jaxb/observation/Sensing.java | 29 ++ .../models/jaxb/observation/Sensor.java | 29 ++ .../models/jaxb/observation/SensorOutput.java | 47 +++ .../location/LocationDeviceObservation.java | 21 ++ .../LocationDeviceObservationPayload.java | 25 ++ .../LocationDeviceObservationValue.java | 41 +++ .../location/LocationDeviceValues.java | 63 ++++ .../location/LocationObservation.java | 10 + .../location/LocationObservationPayload.java | 10 + .../location/LocationObservationValue.java | 52 +++ .../models/jaxb/timetable/BusLocations.java | 31 ++ .../models/jaxb/timetable/Direction.java | 33 ++ .../models/jaxb/timetable/Directions.java | 31 ++ .../transport/models/jaxb/timetable/Line.java | 64 ++++ .../models/jaxb/timetable/Lines.java | 31 ++ .../models/jaxb/timetable/Location.java | 69 ++++ .../models/jaxb/transport/AdminArea.java | 57 +++ .../models/jaxb/transport/AdminAreas.java | 31 ++ .../models/jaxb/transport/BusStop.java | 45 +++ .../models/jaxb/transport/BusStops.java | 31 ++ .../models/jaxb/transport/Localities.java | 31 ++ .../models/jaxb/transport/Locality.java | 57 +++ .../models/jaxb/transport/Region.java | 45 +++ .../models/jaxb/transport/Regions.java | 31 ++ .../transport/models/jaxb/user/User.java | 95 +++++ .../models/jaxb/user/UserCreation.java | 48 +++ .../queries/alert/BusAlertQueries.java | 93 +++++ .../transport/queries/alert/QueryReader.java | 22 ++ .../transport/queries/alert/ServiceDays.java | 7 + .../queries/feedback/FeedbackQueries.java | 50 +++ .../queries/feedback/QueryReader.java | 22 ++ .../queries/journey/BusJourneyQueries.java | 37 ++ .../queries/journey/DeviceQueries.java | 23 ++ .../queries/journey/QueryReader.java | 22 ++ .../observation/ObservationQueries.java | 126 +++++++ .../queries/observation/QueryReader.java | 22 ++ .../queries/timetable/QueryReader.java | 22 ++ .../queries/timetable/TimetableQueries.java | 130 +++++++ .../queries/transport/NaptanNptgQueries.java | 26 ++ .../queries/transport/QueryReader.java | 22 ++ .../transport/queries/user/QueryReader.java | 22 ++ .../transport/queries/user/UserQueries.java | 74 ++++ .../resources/impl/AlertResource.java | 88 +++++ .../resources/impl/FeedbackResource.java | 209 +++++++++++ .../resources/impl/JourneyResource.java | 218 +++++++++++ .../LocationDeviceObservationResource.java | 341 ++++++++++++++++++ .../resources/impl/TimeTableResource.java | 261 ++++++++++++++ .../resources/impl/TransportResource.java | 201 +++++++++++ .../resources/impl/UserResource.java | 266 ++++++++++++++ src/main/resources/applicationContext.xml | 45 +++ .../queries/alert/queries.properties | 17 + .../queries/feedback/queries.properties | 7 + .../queries/journey/queries.properties | 24 ++ .../queries/observation/queries.properties | 47 +++ .../queries/timetable/queries.properties | 24 ++ .../queries/transport/queries.properties | 4 + .../transport/queries/user/queries.properties | 11 + src/main/webapp/WEB-INF/web.xml | 25 ++ target/classes/applicationContext.xml | 45 +++ .../irp/ecosystem/transport/Util.class | Bin 0 -> 2213 bytes .../ecosystemTransportResource.class | Bin 0 -> 2783 bytes .../transport/models/jaxb/alert/Alert.class | Bin 0 -> 3426 bytes .../transport/models/jaxb/alert/Alerts.class | Bin 0 -> 904 bytes .../transport/models/jaxb/device/Device.class | Bin 0 -> 2354 bytes .../transport/models/jaxb/device/Sensor.class | Bin 0 -> 1456 bytes .../models/jaxb/device/Sensors.class | Bin 0 -> 1110 bytes .../models/jaxb/feedback/Feedback.class | Bin 0 -> 1799 bytes .../jaxb/feedback/FeedbackPayload.class | Bin 0 -> 1688 bytes .../models/jaxb/feedback/Feedbacks.class | Bin 0 -> 1252 bytes .../models/jaxb/journey/Journey.class | Bin 0 -> 2079 bytes .../models/jaxb/journey/JourneyPayload.class | Bin 0 -> 1884 bytes .../models/jaxb/journey/JourneyType.class | Bin 0 -> 1195 bytes .../jaxb/observation/FeatureOfInterest.class | Bin 0 -> 897 bytes .../models/jaxb/observation/Observation.class | Bin 0 -> 3574 bytes .../jaxb/observation/ObservationPayload.class | Bin 0 -> 2176 bytes .../jaxb/observation/ObservationValue.class | Bin 0 -> 800 bytes .../models/jaxb/observation/Sensing.class | Bin 0 -> 876 bytes .../models/jaxb/observation/Sensor.class | Bin 0 -> 864 bytes .../jaxb/observation/SensorOutput.class | Bin 0 -> 1350 bytes .../location/LocationDeviceObservation.class | Bin 0 -> 1177 bytes .../LocationDeviceObservationPayload.class | Bin 0 -> 1181 bytes .../LocationDeviceObservationValue.class | Bin 0 -> 1365 bytes .../location/LocationDeviceValues.class | Bin 0 -> 2177 bytes .../location/LocationObservation.class | Bin 0 -> 569 bytes .../location/LocationObservationPayload.class | Bin 0 -> 597 bytes .../location/LocationObservationValue.class | Bin 0 -> 1553 bytes .../models/jaxb/timetable/BusLocations.class | Bin 0 -> 1266 bytes .../models/jaxb/timetable/Direction.class | Bin 0 -> 1036 bytes .../models/jaxb/timetable/Directions.class | Bin 0 -> 1266 bytes .../models/jaxb/timetable/Line.class | Bin 0 -> 1690 bytes .../models/jaxb/timetable/Lines.class | Bin 0 -> 1229 bytes .../models/jaxb/timetable/Location.class | Bin 0 -> 1629 bytes .../models/jaxb/transport/AdminArea.class | Bin 0 -> 1434 bytes .../models/jaxb/transport/AdminAreas.class | Bin 0 -> 1266 bytes .../models/jaxb/transport/BusStop.class | Bin 0 -> 1184 bytes .../models/jaxb/transport/BusStops.class | Bin 0 -> 1248 bytes .../models/jaxb/transport/Localities.class | Bin 0 -> 1263 bytes .../models/jaxb/transport/Locality.class | Bin 0 -> 1428 bytes .../models/jaxb/transport/Region.class | Bin 0 -> 1193 bytes .../models/jaxb/transport/Regions.class | Bin 0 -> 1239 bytes .../transport/models/jaxb/user/User.class | Bin 0 -> 2029 bytes .../models/jaxb/user/UserCreation.class | Bin 0 -> 1216 bytes .../queries/alert/BusAlertQueries.class | Bin 0 -> 4141 bytes .../transport/queries/alert/QueryReader.class | Bin 0 -> 1290 bytes .../transport/queries/alert/ServiceDays.class | Bin 0 -> 1543 bytes .../queries/alert/queries.properties | 17 + .../queries/feedback/FeedbackQueries.class | Bin 0 -> 2000 bytes .../queries/feedback/QueryReader.class | Bin 0 -> 1299 bytes .../queries/feedback/queries.properties | 7 + .../queries/journey/BusJourneyQueries.class | Bin 0 -> 1629 bytes .../queries/journey/DeviceQueries.class | Bin 0 -> 1394 bytes .../queries/journey/QueryReader.class | Bin 0 -> 1296 bytes .../queries/journey/queries.properties | 24 ++ .../observation/ObservationQueries.class | Bin 0 -> 4783 bytes .../queries/observation/QueryReader.class | Bin 0 -> 1308 bytes .../queries/observation/queries.properties | 47 +++ .../queries/timetable/QueryReader.class | Bin 0 -> 1302 bytes .../queries/timetable/TimetableQueries.class | Bin 0 -> 4360 bytes .../queries/timetable/queries.properties | 24 ++ .../queries/transport/NaptanNptgQueries.class | Bin 0 -> 1288 bytes .../queries/transport/QueryReader.class | Bin 0 -> 1302 bytes .../queries/transport/queries.properties | 4 + .../transport/queries/user/QueryReader.class | Bin 0 -> 1287 bytes .../transport/queries/user/UserQueries.class | Bin 0 -> 2870 bytes .../transport/queries/user/queries.properties | 11 + .../resources/impl/AlertResource.class | Bin 0 -> 4817 bytes .../resources/impl/FeedbackResource.class | Bin 0 -> 8697 bytes .../resources/impl/JourneyResource.class | Bin 0 -> 9828 bytes .../LocationDeviceObservationResource.class | Bin 0 -> 14026 bytes .../resources/impl/TimeTableResource.class | Bin 0 -> 10592 bytes .../resources/impl/TransportResource.class | Bin 0 -> 8345 bytes .../resources/impl/UserResource.class | Bin 0 -> 9248 bytes 157 files changed, 4864 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.maven.ide.eclipse.prefs create mode 100644 delete create mode 100644 get create mode 100644 pom.xml create mode 100644 post create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/Util.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Device.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensors.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/FeedbackPayload.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/Journey.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyType.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Observation.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensing.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationPayload.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/BusLocations.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Direction.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Lines.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminAreas.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStop.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Localities.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Locality.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/User.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/UserCreation.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/BusAlertQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/FeedbackResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/JourneyResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TransportResource.java create mode 100644 src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/UserResource.java create mode 100644 src/main/resources/applicationContext.xml create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties create mode 100644 src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/user/queries.properties create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 target/classes/applicationContext.xml create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/Util.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Device.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensors.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/FeedbackPayload.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/Journey.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyType.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Observation.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensing.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationPayload.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/BusLocations.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Direction.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Lines.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminAreas.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStop.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Localities.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Locality.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/User.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/UserCreation.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/BusAlertQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/queries.properties create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/FeedbackResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/JourneyResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TransportResource.class create mode 100644 target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/UserResource.class diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..70a3874 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..10105a8 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + ecosystem.transport + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ebdef0c --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +#Mon Apr 23 12:08:35 IST 2012 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 0000000..25d00e4 --- /dev/null +++ b/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Mon Apr 23 12:08:35 IST 2012 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/delete b/delete new file mode 100644 index 0000000..2243324 --- /dev/null +++ b/delete @@ -0,0 +1 @@ +curl -sv -X DELETE $1 diff --git a/get b/get new file mode 100644 index 0000000..1e7640b --- /dev/null +++ b/get @@ -0,0 +1 @@ +curl -sv -X GET $1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7976c34 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + uk.ac.dotrural.irp + ecosystem.transport + 0.0.1-SNAPSHOT + war + + + + uk.ac.dotrural.irp + ecosystem.core + 0.0.1-SNAPSHOT + jar + compile + + + uk.me.jstott + jcoord + 1.0 + + + + + 6.1.18 + + + + + + org.mortbay.jetty + maven-jetty-plugin + ${jetty.version} + + + + http.proxyHost + proxy.abdn.ac.uk + + + http.proxyPort + 8080 + + + manual + stop + 9966 + + + + + diff --git a/post b/post new file mode 100644 index 0000000..da56a99 --- /dev/null +++ b/post @@ -0,0 +1 @@ +curl -sv -X POST -HContent-type:application/json --data "$1" $2 diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/Util.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/Util.java new file mode 100644 index 0000000..472d106 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/Util.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport; + +import java.util.ArrayList; +import java.util.List; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Line; +import uk.ac.dotrural.irp.ecosystem.transport.queries.alert.ServiceDays; + +public class Util { + public static ServiceDays[] getServiceDays(boolean... days) { + ArrayList selectedDays = new ArrayList(); + ServiceDays[] serviceDays = ServiceDays.values(); + + for (int i = 0; i < days.length; i++) { + if (days[i]) + selectedDays.add(serviceDays[i]); + } + return selectedDays.toArray(new ServiceDays[selectedDays.size()]); + } + public static Line contains(List lines, String lineUri) { + if (lines.size() == 0) + return null; + + for (Line route : lines) { + if (route.getUri().equals(lineUri.trim())) + return route; + } + + return null; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.java new file mode 100644 index 0000000..cd49d41 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.java @@ -0,0 +1,74 @@ +package uk.ac.dotrural.irp.ecosystem.transport; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; + +@Path("/ecosystem.transport") +@Scope("request") +public class ecosystemTransportResource implements RESTFulSPARQL { + + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint ecosystemTransportEndpoint; + + public void setServiceEndpoint(SPARQLEndpoint ecosystemTransportEndpoint) { + this.ecosystemTransportEndpoint = ecosystemTransportEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) { + return ecosystemTransportEndpoint.init(uriInfo, si); + } + + public void update(Query query) { + ecosystemTransportEndpoint.update(query); + } + + public String query(Query query) { + return Util.resultsetToString(ecosystemTransportEndpoint.query(query)); + } + + public EndpointInfo info() { + return ecosystemTransportEndpoint.info(); + } + + @POST + @Path("create") + public void create(){ + // TODO incomplete method + } + + @GET + @Path("get") + public Object get(){ + // TODO incomplete method + return null; + } + + @DELETE + @Path("delele") + public void delete(){ + // TODO incomplete method + } + + @PUT + @Path("update") + public void update(){ + // TODO incomplete method + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.java new file mode 100644 index 0000000..e77b3fa --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.java @@ -0,0 +1,165 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.alert; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Alert +{ + private String uri; + private String authenticationToken; + private String userUri; + private String lineUri; + private boolean inbound; + private double latitude; + private double longitude; + private int startTimeHour; + private int startTimeMin; + private int endTimeHour; + private int endTimeMin; + private int minutesBefore; + private boolean [] days; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="authenticationToken") + public String getAuthenticationToken() + { + return authenticationToken; + } + + public void setAuthenticationToken(String authenticationToken) + { + this.authenticationToken = authenticationToken; + } + + @XmlElement(name="userUri") + public String getUserUri() + { + return userUri; + } + + public void setUserUri(String userUri) + { + this.userUri = userUri; + } + + @XmlElement(name="lineUri") + public String getLineUri() + { + return lineUri; + } + + public void setLineUri(String lineUri) + { + this.lineUri = lineUri; + } + + @XmlElement(name="inbound") + public boolean getInbound() + { + return inbound; + } + + public void setInbound(boolean inbound) + { + this.inbound = inbound; + } + + @XmlElement(name="latitude") + public double getLatitude() + { + return latitude; + } + + public void setLatitude(double latitude) + { + this.latitude = latitude; + } + + @XmlElement(name="longitude") + public double getLongitude() + { + return longitude; + } + + public void setLongitude(double longitude) + { + this.longitude = longitude; + } + + @XmlElement(name="startTimeHour") + public int getStartTimeHour() + { + return startTimeHour; + } + + public void setStartTimeHour(int startTimeHour) + { + this.startTimeHour = startTimeHour; + } + + @XmlElement(name="startTimeMin") + public int getStartTimeMin() + { + return startTimeMin; + } + + public void setStartTimeMin(int startTimeMin) + { + this.startTimeMin = startTimeMin; + } + + @XmlElement(name="endTimeHour") + public int getEndTimeHour() + { + return endTimeHour; + } + + public void setEndTimeHour(int endTimeHour) + { + this.endTimeHour = endTimeHour; + } + + @XmlElement(name="endTimeMin") + public int getEndTimeMin() + { + return endTimeMin; + } + + public void setEndTimeMin(int endTimeMin) + { + this.endTimeMin = endTimeMin; + } + + @XmlElement(name="minutesBefore") + public int getMinutesBefore() + { + return minutesBefore; + } + + public void setMinutesBefore(int minutesBefore) + { + this.minutesBefore = minutesBefore; + } + + @XmlElement(name="days") + public boolean[] getDays() + { + return days; + } + + public void setDays(boolean[] days) + { + this.days = days; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.java new file mode 100644 index 0000000..837ee6b --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.java @@ -0,0 +1,21 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.alert; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Alerts +{ + private Alert [] alerts; + + @XmlElement(name="alerts") + public Alert[] getAlerts() + { + return alerts; + } + + public void setAlerts(Alert[] alerts) + { + this.alerts = alerts; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Device.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Device.java new file mode 100644 index 0000000..24ca23a --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Device.java @@ -0,0 +1,86 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Device { + private String uri; + private String type; + private String name; + private Sensors sensors; + private String operatingSystem; + private String operatingSystemVersion; + private String uniqueId; + + public Device() { + } + + public Device(String uri) { + this.uri = uri; + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + @XmlElement(name = "type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @XmlElement(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlElement(name = "sensors") + public Sensors getSensors() { + return sensors; + } + + public void setSensors(Sensors sensors) { + this.sensors = sensors; + } + + @XmlElement(name = "operatingSystem") + public String getOperatingSystem() { + return operatingSystem; + } + + public void setOperatingSystem(String operatingSystem) { + this.operatingSystem = operatingSystem; + } + + @XmlElement(name = "operatingSystemVersion") + public String getOperatingSystemVersion() { + return operatingSystemVersion; + } + + public void setOperatingSystemVersion(String operatingSystemVersion) { + this.operatingSystemVersion = operatingSystemVersion; + } + + @XmlElement(name = "uniqueId") + public String getUniqueId() { + return uniqueId; + } + + public void setUniqueId(String uniqueId) { + this.uniqueId = uniqueId; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.java new file mode 100644 index 0000000..28e715b --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.java @@ -0,0 +1,47 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Sensor +{ + private String uri; + private String observes; + private List sensingMethod; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="observes") + public String getObserves() + { + return observes; + } + + public void setObserves(String observes) + { + this.observes = observes; + } + + @XmlElement(name="sensingMethod") + public List getSensingMethod() + { + return sensingMethod; + } + + public void setSensingMethod(List sensingMethod) + { + this.sensingMethod = sensingMethod; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensors.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensors.java new file mode 100644 index 0000000..66f9149 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensors.java @@ -0,0 +1,23 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Sensors +{ + private List sensors; + + @XmlElement(name="sensors") + public List getSensors() + { + return sensors; + } + + public void setSensors(List sensors) + { + this.sensors = sensors; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.java new file mode 100644 index 0000000..68285dc --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.java @@ -0,0 +1,60 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey.Journey; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.User; + +@XmlRootElement +public class Feedback +{ + private String uri; + private Journey journey; + private User user; + private String message; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="journey") + public Journey getJourney() + { + return journey; + } + + public void setJourney(Journey journey) + { + this.journey = journey; + } + + @XmlElement(name="user") + public User getUser() + { + return user; + } + + public void setUser(User user) + { + this.user = user; + } + + @XmlElement(name="message") + public String getMessage() + { + return message; + } + + public void setMessage(String message) + { + this.message = message; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/FeedbackPayload.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/FeedbackPayload.java new file mode 100644 index 0000000..58f888b --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/FeedbackPayload.java @@ -0,0 +1,69 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class FeedbackPayload +{ + private String userUri; + private String feedbackUri; + private String journeyUri; + private String message; + private String authenticationToken; + + @XmlElement(name="userUri") + public String getUserUri() + { + return userUri; + } + + public void setUserUri(String userUri) + { + this.userUri = userUri; + } + + @XmlElement(name="feedbackUri") + public String getFeedbackUri() + { + return feedbackUri; + } + + public void setFeedbackUri(String feedbackUri) + { + this.feedbackUri = feedbackUri; + } + + @XmlElement(name="journeyUri") + public String getJourneyUri() + { + return journeyUri; + } + + public void setJourneyUri(String journeyUri) + { + this.journeyUri = journeyUri; + } + + @XmlElement(name="message") + public String getMessage() + { + return message; + } + + public void setMessage(String message) + { + this.message = message; + } + + @XmlElement(name="authenticationToken") + public String getAuthenticationToken() + { + return authenticationToken; + } + + public void setAuthenticationToken(String authenticationToken) + { + this.authenticationToken = authenticationToken; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.java new file mode 100644 index 0000000..06851eb --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Feedbacks +{ + private List feedbacks; + + public Feedbacks() + {} + + public Feedbacks(List feedbacks) + { + this.feedbacks = feedbacks; + } + + @XmlElement(name="feedbacks") + public List getFeedbacks() + { + return feedbacks; + } + + public void setFeedbacks(List feedbacks) + { + this.feedbacks = feedbacks; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/Journey.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/Journey.java new file mode 100644 index 0000000..01c7d2f --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/Journey.java @@ -0,0 +1,69 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device.Device; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Line; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.User; + +@XmlRootElement +public class Journey +{ + private String uri; + private User user; + private Line line; + private Device device; + + public Journey() + {} + + public Journey(String uri) + { + this.uri = uri; + } + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="user") + public User getUser() + { + return user; + } + + public void setUser(User user) + { + this.user = user; + } + + @XmlElement(name="line") + public Line getLine() + { + return line; + } + + public void setLine(Line line) + { + this.line = line; + } + + @XmlElement(name="device") + public Device getDevice() + { + return device; + } + + public void setDevice(Device device) + { + this.device = device; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.java new file mode 100644 index 0000000..c39be1f --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.java @@ -0,0 +1,59 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device.Device; + +@XmlRootElement +public class JourneyPayload +{ + private String authenticationToken; + private JourneyType type; + private String userUri; + private Device device; + + @XmlElement(name="authenticationToken") + public String getAuthenticationToken() + { + return authenticationToken; + } + + public void setAuthenticationToken(String authenticationToken) + { + this.authenticationToken = authenticationToken; + } + + @XmlElement(name="type") + public JourneyType getType() + { + return type; + } + + public void setType(JourneyType type) + { + this.type = type; + } + + @XmlElement(name="userUri") + public String getUserUri() + { + return userUri; + } + + public void setUserUri(String userUri) + { + this.userUri = userUri; + } + + @XmlElement(name="device") + public Device getDevice() + { + return device; + } + + public void setDevice(Device device) + { + this.device = device; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyType.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyType.java new file mode 100644 index 0000000..4521d08 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyType.java @@ -0,0 +1,57 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class JourneyType +{ + private String uri; + private String lineUri; +// private String serviceUri; + private String direction; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="lineUri") + public String getLineUri() + { + return lineUri; + } + + public void setLineUri(String lineUri) + { + this.lineUri = lineUri; + } + + /* @XmlElement(name="serviceUri") + public String getServiceUri() + { + return serviceUri; + } + + public void setServiceUri(String service) + { + this.serviceUri = service; + } + */ + @XmlElement(name="direction") + public String getDirection() + { + return direction; + } + + public void setDirection(String direction) + { + this.direction = direction; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.java new file mode 100644 index 0000000..24b68c4 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.java @@ -0,0 +1,30 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class FeatureOfInterest { + + private String uri; + + + public FeatureOfInterest(){ + super(); + } + + public FeatureOfInterest(String uri) { + super(); + setUri(uri); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Observation.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Observation.java new file mode 100644 index 0000000..60a99b2 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Observation.java @@ -0,0 +1,98 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Observation { + + private String uri; + private Long observationResultTime, observationSamplingTime, + serverTime; + private SensorOutput observationResult; + private FeatureOfInterest featureOfInterest; + private Sensor observedBy; + private Sensing sensingMethodUsed; + + public Observation() { + super(); + } + + public Observation(String observationUri) { + super(); + setUri(observationUri); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + @XmlElement(name = "observationResult") + public SensorOutput getObservationResult() { + return observationResult; + } + + public void setObservationResult(SensorOutput observationResult) { + this.observationResult = observationResult; + } + + @XmlElement(name = "featureOfInterest") + public FeatureOfInterest getFeatureOfInterest() { + return featureOfInterest; + } + + public void setFeatureOfInterest(FeatureOfInterest featureOfInterest) { + this.featureOfInterest = featureOfInterest; + } + + @XmlElement(name = "observedBy") + public Sensor getObservedBy() { + return observedBy; + } + + public void setObservedBy(Sensor observedBy) { + this.observedBy = observedBy; + } + + @XmlElement(name = "sensingMethodUsed") + public Sensing getSensingMethodUsed() { + return sensingMethodUsed; + } + + public void setSensingMethodUsed(Sensing sensingMethodUsed) { + this.sensingMethodUsed = sensingMethodUsed; + } + + @XmlElement(name = "observationResultTime") + public Long getObservationResultTime() { + return observationResultTime; + } + + public void setObservationResultTime(Long observationResultTime) { + this.observationResultTime = observationResultTime; + } + + @XmlElement(name = "observationSamplingTime") + public Long getObservationSamplingTime() { + return observationSamplingTime; + } + + public void setObservationSamplingTime(Long observationSamplingTime) { + this.observationSamplingTime = observationSamplingTime; + } + + @XmlElement(name = "serverTime") + public Long getServerTime() { + return serverTime; + } + + public void setServerTime(Long serverTime) { + this.serverTime = serverTime; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.java new file mode 100644 index 0000000..7a1b767 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.java @@ -0,0 +1,75 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class ObservationPayload { + + private String userUri, authenticationToken, type, sensor, + sensingMethodUsed, sensingController, featureOfInterest; + + @XmlElement(name = "userUri") + public String getUserUri() { + return userUri; + } + + public void setUserUri(String userUri) { + this.userUri = userUri; + } + + @XmlElement(name = "authenticationToken") + public String getAuthenticationToken() { + return authenticationToken; + } + + public void setAuthenticationToken(String authenticationToken) { + this.authenticationToken = authenticationToken; + } + + @XmlElement(name = "type") + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @XmlElement(name = "sensor") + public String getSensor() { + return sensor; + } + + public void setSensor(String sensor) { + this.sensor = sensor; + } + + @XmlElement(name = "sensingMethodUsed") + public String getSensingMethodUsed() { + return sensingMethodUsed; + } + + public void setSensingMethodUsed(String sensingMethodUsed) { + this.sensingMethodUsed = sensingMethodUsed; + } + + @XmlElement(name = "sensingController") + public String getSensingController() { + return sensingController; + } + + public void setSensingController(String sensingController) { + this.sensingController = sensingController; + } + + @XmlElement(name = "featureOfInterest") + public String getFeatureOfInterest() { + return featureOfInterest; + } + + public void setFeatureOfInterest(String featureOfInterest) { + this.featureOfInterest = featureOfInterest; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.java new file mode 100644 index 0000000..f72ffca --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.java @@ -0,0 +1,24 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class ObservationValue { + + private String uri; + + public ObservationValue() { + super(); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensing.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensing.java new file mode 100644 index 0000000..27ef8b6 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensing.java @@ -0,0 +1,29 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Sensing { + + private String uri; + + public Sensing(){ + super(); + } + + public Sensing(String uru) { + super(); + setUri(uri); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.java new file mode 100644 index 0000000..4ed45f6 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.java @@ -0,0 +1,29 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Sensor { + + private String uri; + + public Sensor(){ + super(); + } + + public Sensor(String uri) { + super(); + setUri(uri); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.java new file mode 100644 index 0000000..6a65934 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.java @@ -0,0 +1,47 @@ +/** + * + */ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author david + * + */ +@XmlRootElement +public class SensorOutput { + + private String uri; + + private ObservationValue hasValue; + + @XmlElement(name = "hasValue") + public ObservationValue getHasValue() { + return hasValue; + } + + public void setHasValue(ObservationValue hasValue) { + this.hasValue = hasValue; + } + + public SensorOutput(){ + super(); + } + + public SensorOutput(String uri) { + super(); + setUri(uri); + } + + @XmlElement(name = "uri") + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.java new file mode 100644 index 0000000..af33e72 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.java @@ -0,0 +1,21 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class LocationDeviceObservation extends LocationObservation { + + + private LocationDeviceValues locationValues; + + @XmlElement(name="locationValues") + public LocationDeviceValues getLocationValues() { + return locationValues; + } + + public void setLocationValues(LocationDeviceValues locationValues) { + this.locationValues = locationValues; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationPayload.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationPayload.java new file mode 100644 index 0000000..bac7fa3 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationPayload.java @@ -0,0 +1,25 @@ +/** + * + */ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author david + * + */ +@XmlRootElement +public class LocationDeviceObservationPayload extends LocationObservationPayload { + private LocationDeviceValues values; + + @XmlElement(name="values") + public LocationDeviceValues getValues() { + return values; + } + + public void setValues(LocationDeviceValues values) { + this.values = values; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.java new file mode 100644 index 0000000..fcb0918 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.java @@ -0,0 +1,41 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class LocationDeviceObservationValue extends LocationObservationValue { + private Double accuracy, heading, speed; + + public LocationDeviceObservationValue() { + super(); + } + + @XmlElement(name = "accuracy") + public Double getAccuracy() { + return accuracy; + } + + public void setAccuracy(Double accuracy) { + this.accuracy = accuracy; + } + + @XmlElement(name = "heading") + public Double getHeading() { + return heading; + } + + public void setHeading(Double heading) { + this.heading = heading; + } + + @XmlElement(name = "speed") + public Double getSpeed() { + return speed; + } + + public void setSpeed(Double speed) { + this.speed = speed; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.java new file mode 100644 index 0000000..a1d9fda --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.java @@ -0,0 +1,63 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlElement; + +public class LocationDeviceValues { + + private Long gpsTime, deviceTime; + private Integer accuracy; + private Double latitude, longitude, heading, speed; + + @XmlElement(name="gpsTime") + public Long getGpsTime() { + return this.gpsTime; + } + public void setGpsTime(Long gpsTime) { + this.gpsTime = gpsTime; + } + @XmlElement(name="deviceTime") + public Long getDeviceTime() { + return deviceTime; + } + public void setDeviceTime(Long deviceTime) { + this.deviceTime = deviceTime; + } + @XmlElement(name="accuracy") + public Integer getAccuracy() { + return accuracy; + } + public void setAccuracy(Integer accuracy) { + this.accuracy = accuracy; + } + @XmlElement(name="latitude") + public Double getLatitude() { + return latitude; + } + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + @XmlElement(name="longitude") + public Double getLongitude() { + return longitude; + } + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + @XmlElement(name="heading") + public Double getHeading() { + return heading; + } + public void setHeading(Double heading) { + this.heading = heading; + } + @XmlElement(name="speed") + public Double getSpeed() { + return speed; + } + public void setSpeed(Double speed) { + this.speed = speed; + } + + + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.java new file mode 100644 index 0000000..92c62a0 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.java @@ -0,0 +1,10 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.Observation; + +@XmlRootElement +public class LocationObservation extends Observation { + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.java new file mode 100644 index 0000000..be7734e --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.java @@ -0,0 +1,10 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.ObservationPayload; + +@XmlRootElement +public class LocationObservationPayload extends ObservationPayload { + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.java new file mode 100644 index 0000000..d98f34d --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.java @@ -0,0 +1,52 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.ObservationValue; + + +@XmlRootElement +public class LocationObservationValue extends ObservationValue{ + + private Double longitude, latitude, easting, northing; + + public LocationObservationValue(){ + super(); + } + @XmlElement(name = "longitude") + public Double getLongitude() { + return longitude; + } + + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + @XmlElement(name = "latitude") + public Double getLatitude() { + return latitude; + } + + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + @XmlElement(name = "easting") + public Double getEasting() { + return easting; + } + + public void setEasting(Double easting) { + this.easting = easting; + } + @XmlElement(name = "northing") + public Double getNorthing() { + return northing; + } + + public void setNorthing(Double northing) { + this.northing = northing; + } + + + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/BusLocations.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/BusLocations.java new file mode 100644 index 0000000..c907364 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/BusLocations.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class BusLocations +{ + private List locations; + + public BusLocations() + {} + + public BusLocations(List locations) + { + this.locations = locations; + } + + @XmlElement(name="locations") + public List getLocations() + { + return locations; + } + + public void setLocations(List locations) + { + this.locations = locations; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Direction.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Direction.java new file mode 100644 index 0000000..a41e82b --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Direction.java @@ -0,0 +1,33 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Direction +{ + private String direction; + private String directionDescription; + + @XmlElement(name="direction") + public String getDirection() + { + return direction; + } + + public void setDirection(String direction) + { + this.direction = direction; + } + + @XmlElement(name="directionDescription") + public String getDirectionDescription() + { + return directionDescription; + } + + public void setDirectionDescription(String directionDescription) + { + this.directionDescription = directionDescription; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.java new file mode 100644 index 0000000..07308b7 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Directions +{ + private List directions; + + public Directions() + {} + + public Directions(List directions) + { + this.directions = directions; + } + + @XmlElement(name="directions") + public List getDirections() + { + return directions; + } + + public void setDirections(List directions) + { + this.directions = directions; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.java new file mode 100644 index 0000000..048aff3 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.java @@ -0,0 +1,64 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Line +{ + private String uri; + private String label; + private String altLabel; + private Directions directions; + + public Line() + {} + + public Line(String uri) + { + this.uri = uri; + } + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="label") + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + @XmlElement(name="altLabel") + public String getAltLabel() + { + return altLabel; + } + + public void setAltLabel(String altLabel) + { + this.altLabel = altLabel; + } + + public Directions getDirections() + { + return directions; + } + + public void setDirections(Directions directions) + { + this.directions = directions; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Lines.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Lines.java new file mode 100644 index 0000000..5f479db --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Lines.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Lines +{ + private List lines; + + public Lines() + {} + + public Lines(List lines) + { + this.lines = lines; + } + + @XmlElement(name="lines") + public List getRoute() + { + return lines; + } + + public void setRoute(List route) + { + lines = route; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.java new file mode 100644 index 0000000..8cdf53e --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.java @@ -0,0 +1,69 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Location +{ + private String time; + private double easting; + private double westing; + private double longitude; + private double latitude; + + @XmlElement(name="time") + public String getTime() + { + return time; + } + + public void setTime(String time) + { + this.time = time; + } + + @XmlElement(name="easting") + public double getEasting() + { + return easting; + } + + public void setEasting(double easting) + { + this.easting = easting; + } + + @XmlElement(name="westing") + public double getWesting() + { + return westing; + } + + public void setWesting(double westing) + { + this.westing = westing; + } + + @XmlElement(name="longitude") + public double getLongitude() + { + return longitude; + } + + public void setLongitude(double longitude) + { + this.longitude = longitude; + } + + @XmlElement(name="latitude") + public double getLatitude() + { + return latitude; + } + + public void setLatitude(double latitude) + { + this.latitude = latitude; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.java new file mode 100644 index 0000000..cba1f39 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.java @@ -0,0 +1,57 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class AdminArea +{ + private String uri; + private String atcoAreaCode; + private String adminAreaCode; + private String prefLabel; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="atcoAreaCode") + public String getAtcoAreaCode() + { + return atcoAreaCode; + } + + public void setAtcoAreaCode(String atcoAreaCode) + { + this.atcoAreaCode = atcoAreaCode; + } + + @XmlElement(name="adminAreaCode") + public String getAdminAreaCode() + { + return adminAreaCode; + } + + public void setAdminAreaCode(String adminAreaCode) + { + this.adminAreaCode = adminAreaCode; + } + + @XmlElement(name="prefLabel") + public String getPrefLabel() + { + return prefLabel; + } + + public void setPrefLabel(String prefLabel) + { + this.prefLabel = prefLabel; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminAreas.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminAreas.java new file mode 100644 index 0000000..9e6fe17 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminAreas.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class AdminAreas +{ + private List adminAreas; + + public AdminAreas() + {} + + public AdminAreas(List adminAreas) + { + this.adminAreas = adminAreas; + } + + @XmlElement(name="adminAreas") + public List getAdminAreas() + { + return adminAreas; + } + + public void setAdminAreas(List adminAreas) + { + this.adminAreas = adminAreas; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStop.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStop.java new file mode 100644 index 0000000..0c87377 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStop.java @@ -0,0 +1,45 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class BusStop +{ + private String uri; + private String prefLabel; + private String street; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="prefLabel") + public String getPrefLabel() + { + return prefLabel; + } + + public void setPrefLabel(String prefLabel) + { + this.prefLabel = prefLabel; + } + + @XmlElement(name="street") + public String getStreet() + { + return street; + } + + public void setStreet(String street) + { + this.street = street; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.java new file mode 100644 index 0000000..c50d6be --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class BusStops +{ + private List busStops; + + public BusStops() + {} + + public BusStops(List busStops) + { + this.busStops = busStops; + } + + @XmlElement(name="busStops") + public List getBusStops() + { + return busStops; + } + + public void setBusStops(List busStops) + { + this.busStops = busStops; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Localities.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Localities.java new file mode 100644 index 0000000..647c252 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Localities.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Localities +{ + private List localities; + + public Localities() + {} + + public Localities(List localities) + { + this.localities = localities; + } + + @XmlElement(name="localities") + public List getLocalities() + { + return localities; + } + + public void setLocalities(List localities) + { + this.localities = localities; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Locality.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Locality.java new file mode 100644 index 0000000..9e365ec --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Locality.java @@ -0,0 +1,57 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Locality +{ + private String uri; + private String prefLabel; + private String altLabel; + private String nptgLocalityCode; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="prefLabel") + public String getPrefLabel() + { + return prefLabel; + } + + public void setPrefLabel(String prefLabel) + { + this.prefLabel = prefLabel; + } + + @XmlElement(name="altLabel") + public String getAltLabel() + { + return altLabel; + } + + public void setAltLabel(String altLabel) + { + this.altLabel = altLabel; + } + + @XmlElement(name="nptgLocalityCode") + public String getNptgLocalityCode() + { + return nptgLocalityCode; + } + + public void setNptgLocalityCode(String nptgLocalityCode) + { + this.nptgLocalityCode = nptgLocalityCode; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.java new file mode 100644 index 0000000..f18b902 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.java @@ -0,0 +1,45 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Region +{ + private String uri; + private String prefLabel; + private String regionCode; + + @XmlElement(name="uri") + public String getUri() + { + return uri; + } + + public void setUri(String uri) + { + this.uri = uri; + } + + @XmlElement(name="prefLabel") + public String getPrefLabel() + { + return prefLabel; + } + + public void setPrefLabel(String prefLabel) + { + this.prefLabel = prefLabel; + } + + @XmlElement(name="regionCode") + public String getRegionCode() + { + return regionCode; + } + + public void setRegionCode(String regionCode) + { + this.regionCode = regionCode; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.java new file mode 100644 index 0000000..bc98276 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.java @@ -0,0 +1,31 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Regions +{ + private List regions; + + public Regions() + {} + + public Regions(List regions) + { + this.regions = regions; + } + + @XmlElement(name="regions") + public List getRegions() + { + return regions; + } + + public void setRegions(List regions) + { + this.regions = regions; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/User.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/User.java new file mode 100644 index 0000000..b21ed37 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/User.java @@ -0,0 +1,95 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class User +{ + private String userUri; + private String nickname; + private String email; + private String password; + private String authenticationToken; + private boolean exists; + + public User() + {} + + public User(String userUri) + { + this.userUri = userUri; + this.exists = true; + } + + public User(boolean exists) + { + this.exists = exists; + } + + @XmlElement(name="nickname") + public String getNickname() + { + return nickname; + } + + public void setNickname(String nickname) + { + this.nickname = nickname; + } + + @XmlElement(name="email") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @XmlElement(name="password") + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + @XmlElement(name="userUri") + public String getUserUri() + { + return userUri; + } + + public void setUserUri(String userUri) + { + this.userUri = userUri; + } + + @XmlElement(name="authenticationToken") + public String getAuthenticationToken() + { + return authenticationToken; + } + + public void setAuthenticationToken(String authenticationToken) + { + this.authenticationToken = authenticationToken; + } + + @XmlElement(name="exists") + public boolean getExists() + { + return exists; + } + + public void setExists(boolean exists) + { + this.exists = exists; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/UserCreation.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/UserCreation.java new file mode 100644 index 0000000..2271092 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/user/UserCreation.java @@ -0,0 +1,48 @@ +package uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class UserCreation { + + private boolean created; + private String userUri; + private String reason; + + public UserCreation(){ + super(); + } + + @XmlElement(name="created") + public boolean getCreated() { + return created; + } + + public void setCreated(boolean created) { + this.created = created; + } + + @XmlElement(name="userUri") + public String getUserUri() { + return userUri; + } + + public void setUserUri(String userUri) { + this.userUri = userUri; + } + + @XmlElement(name="reason") + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + + + + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/BusAlertQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/BusAlertQueries.java new file mode 100644 index 0000000..f69f65d --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/BusAlertQueries.java @@ -0,0 +1,93 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.alert; + + +import java.text.DecimalFormat; + +public class BusAlertQueries { + private static DecimalFormat format = new DecimalFormat("00"); + + public static String getCreateAlertUpdate(String newAlertUri, String userUri, String routeUri, + boolean inbound, double latitude, double longitude, + int startTimeHour, int startTimeMin, int endTimeHour, + int endTimeMin, int minutesBefore, + ServiceDays... daysOfWeek) { + return String + .format(QueryReader.getString("BusAlertQueries.update.create"), //$NON-NLS-1$ + newAlertUri, + userUri, + routeUri, + ((inbound) ? QueryReader + .getString("BusAlertQueries.inboundString") : QueryReader.getString("BusAlertQueries.outboundString")), //$NON-NLS-1$ //$NON-NLS-2$ + makeDaysString(daysOfWeek), + makeTimeAsXsdTime(startTimeHour, startTimeMin,0), + makeTimeAsXsdTime(endTimeHour, endTimeMin,0), + minutesBefore, toXsdDouble(latitude), + toXsdDouble(longitude)); + } + + public static String getDeleteAlertUpdate(String alertUri) { + return String.format( + QueryReader.getString("BusAlertQueries.update.delete"), //$NON-NLS-1$ + alertUri, alertUri, alertUri, alertUri, alertUri, alertUri, + alertUri, alertUri, alertUri, alertUri); + } + + + public static String getAlertsForUserQuery(String userUri) { + return String.format(QueryReader + .getString("BusAlertQueries.query.getForUser"), + userUri); + } + + public static String getAlertQuery(String alertUri) { + return String.format( + QueryReader.getString("BusAlertQueries.query.get"), alertUri, + alertUri, alertUri, alertUri, alertUri, alertUri, alertUri, + alertUri, alertUri); + } + + private static String makeDaysString(ServiceDays[] array) { + StringBuilder sb = new StringBuilder(); + for (ServiceDays day : array) { + if (ServiceDays.MONDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.mondayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.TUESDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.tuesdayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.WEDNESDAY == day) { + sb.append(QueryReader + .getString("BusAlertQueries.wednesdayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.THURSDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.thursdayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.FRIDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.fridayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.SATURDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.saturdayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.SUNDAY == day) { + sb.append(QueryReader.getString("BusAlertQueries.sundayTrue")); //$NON-NLS-1$ + } else if (ServiceDays.BANK_HOLIDAYS == day) { + sb.append(QueryReader + .getString("BusAlertQueries.bankholidaysTrue")); //$NON-NLS-1$ + } + } + return sb.toString(); + } + + public static String toXsdDouble(double d) { + StringBuilder sb = new StringBuilder("\""); + sb.append(d).append("\"^^xsd:double"); + return sb.toString(); + } + + public static String makeTimeAsXsdTime(int hour, int min, int seconds) { + StringBuilder sb = new StringBuilder("\""); + sb.append(makeTime(hour, min, seconds)).append("\"^^xsd:time"); + return sb.toString(); + } + + public static String makeTime(int hour, int min, int seconds) { + StringBuilder sb = new StringBuilder(format.format(hour)); + sb.append(":").append(format.format(min)).append(":") + .append(format.format(seconds)); + return sb.toString(); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/QueryReader.java new file mode 100644 index 0000000..680b8db --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.alert; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.alert.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.java new file mode 100644 index 0000000..39293a0 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.java @@ -0,0 +1,7 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.alert; + +public enum ServiceDays { + + SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, BANK_HOLIDAYS + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.java new file mode 100644 index 0000000..5ab3bf9 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.java @@ -0,0 +1,50 @@ +/** + * + */ +package uk.ac.dotrural.irp.ecosystem.transport.queries.feedback; + +/** + * @author david corsar + * + */ +public class FeedbackQueries { + public static String getFeedbackQuery(String feedbackUri) { + return String + .format(QueryReader.getString("FeedbackQueries.query.get"), + feedbackUri); + } + + public static String getFeedbackForUserQuery(String userUri) { + return String.format( + QueryReader.getString("FeedbackQueries.query.getForUser"), + userUri); + } + + public static String getDeleteFeedbackUpdate(String feedbackUri) { + return String.format( + QueryReader.getString("FeedbackQueries.update.delete"), + feedbackUri, feedbackUri); + } + + public static String getCreateFeedbackUpdate(String userUri, + String journeyUri, String feedback, String feedbackUri) { + return String.format( + QueryReader.getString("FeedbackQueries.update.create"), + feedbackUri, journeyUri, userUri, toXsdString(feedback)); + } + + public static String getUpdateFeedbackUpdate(String feedbackUri, + String newFeedback) { + return String + .format(QueryReader.getString("FeedbackQueries.update"), + feedbackUri, feedbackUri, toXsdString(newFeedback), + feedbackUri); + + } + + public static String toXsdString(String str) { + StringBuilder sb = new StringBuilder("\""); + sb.append(str).append("\"^^xsd:string"); + return sb.toString(); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/QueryReader.java new file mode 100644 index 0000000..cefd0ef --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.feedback; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.feedback.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.java new file mode 100644 index 0000000..a434dd8 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.java @@ -0,0 +1,37 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.journey; + + + +/** + * + * @author david corsar + * + */ +public class BusJourneyQueries { + public static String getCreateBusJourneyUpdate(String userUri, String deviceUri, + String lineUri, String uri, String direction) { + String updateQuery = String.format( + QueryReader.getString("JourneyQueries.update.create"), uri, + lineUri, direction, deviceUri, userUri); + return updateQuery; + } + public static String getBusJourneyQuery(String journeyUri) { + return String.format( + QueryReader.getString("JourneyQueries.query.get"), journeyUri); + } + public static String getBusJourneysByUserQuery(String userUri) { + return String.format( + QueryReader.getString("JourneyQueries.query.getByUser"), + userUri); + } + public static String getBusJourneysOnRouteQuery(String routeUri) { + return String.format( + QueryReader.getString("JourneyQueries.query.getByRoute"), + routeUri); + } + public static String getDeleteBusJourneyUpdate(String journeyUri) { + return String.format( + QueryReader.getString("JourneyQueries.update.delete"), + journeyUri, journeyUri); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.java new file mode 100644 index 0000000..41ca0ec --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.java @@ -0,0 +1,23 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.journey; + + + +/** + * + * @author david corsar + * + */ +public class DeviceQueries { + public static String getCreateAndroidPhone(String phoneUri, String locationSensingDeviceUri, String osVersion, String deviceId){ + return getCreatePhoneString(QueryReader.getString("DeviceQueries.update.create.iPhone"), phoneUri, locationSensingDeviceUri, osVersion, deviceId); + } + + public static String getCreateiPhone(String phoneUri, String locationSensingDeviceUri, String osVersion, String deviceId){ + return getCreatePhoneString(QueryReader.getString("DeviceQueries.update.create.android"), phoneUri, locationSensingDeviceUri, osVersion, deviceId); + } + + private static String getCreatePhoneString(String queryString, String phoneUri, String locationSensingDeviceUri, String osVersion, String deviceId){ + return String.format(queryString, locationSensingDeviceUri, phoneUri, phoneUri, osVersion, deviceId); + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/QueryReader.java new file mode 100644 index 0000000..48be123 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.journey; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.journey.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.java new file mode 100644 index 0000000..1b2f13d --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.java @@ -0,0 +1,126 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.observation; + +import uk.me.jstott.jcoord.LatLng; +import uk.me.jstott.jcoord.OSRef; + +public class ObservationQueries { + + public static String createLocationDeviceObservationUpdate( + String journeyUri, double latitude, double longitude, + long gpsTime, long deviceTime, Integer accuracy, + Double heading, Double speed, String observationUri, + String outputUri, String valueUri, long serverTime, + String deviceSensorUri, String deviceLocationSensingUri) { + + // create all the value triples for each optional property + StringBuilder values = new StringBuilder(); + if (accuracy != null) { + values.append(String.format( + QueryReader + .getString("ObservationQueries.locationDevice.update.create.accuracy"), + accuracy)); + } else if (heading != null) { + values.append(String.format( + QueryReader + .getString("ObservationQueries.locationDevice.update.create.heading"), + heading)); + } else if (speed != null) { + values.append(String.format( + QueryReader + .getString("ObservationQueries.locationDevice.update.create.speed"), + speed)); + + } + + OSRef osRef = new LatLng(latitude, longitude).toOSRef(); + // determine easting and northing + double easting = osRef.getEasting(); + double northing = osRef.getNorthing(); + + // create value triple for sensing method used by if provided + String sensingMethodUsedTriple = (null == deviceLocationSensingUri) ? "" + : String.format( + QueryReader + .getString("ObservationQueries.locationDevice.update.create.sensingMethodUsed"), + deviceLocationSensingUri); + + String updateQuery = String.format(QueryReader + .getString("ObservationQueries.locationDevice.update.create"), + valueUri, values.toString(), latitude, longitude, easting, + northing, outputUri, valueUri, observationUri, outputUri, + sensingMethodUsedTriple, journeyUri, deviceSensorUri, + deviceTime, gpsTime, serverTime); + return updateQuery.toString(); + } + + public static String deleteLocationObservationUpdate(String observationUri) { + return String.format( + QueryReader.getString("ObservationQueries.update.delete"), + observationUri, observationUri); + } + + + public static String getLocationDeviceObservationQuery(String observationUri) { + return String + .format(QueryReader + .getString("ObservationQueries.locationDevice.query.get.observation"), + observationUri, observationUri); + } + + public static String getLocationDeviceSensorOutputQuery( + String sensorOutputUri) { + return String + .format(QueryReader + .getString("ObservationQueries.locationDevice.query.get.sensorOutput"), + sensorOutputUri); + } + + public static String getLocationDeviceObservationValueQuery( + String observationValueUri) { + return String + .format(QueryReader + .getString("ObservationQueries.locationDevice.query.get.observationValue"), + observationValueUri, observationValueUri, observationValueUri, observationValueUri); + } + + public static String getLocationDeviceObservationValueForObservationQuery( + String observationUri) { + return String + .format(QueryReader + .getString("ObservationQueries.locationDevice.query.get.outputValueForObservation"), + observationUri); + } + + + + + public static Object getLocationDeviceObservationType() { + return QueryReader + .getString("ObservationQueries.type.locationDeviceObservation"); + } + + public static String deleteLocationDeviceObservation(String observationUri) { + return String.format(QueryReader.getString("ObservationQueries.locationDevice.update.delete.observation"), observationUri, observationUri); + + } + + public static String deleteLocationDeviceObservationSensingMethodUsed( + String observationUri) { + return String.format(QueryReader.getString("ObservationQueries.locationDevice.update.delete.observation.sensingMethodUsed"), observationUri, observationUri); + } + + public static String deleteLocationDeviceObservationSpeed( + String observationUri) { + return String.format(QueryReader.getString("ObservationQueries.locationDevice.update.delete.observation.speed"), observationUri); + } + + public static String deleteLocationDeviceObservationHeading( + String observationUri) { + return String.format(QueryReader.getString("ObservationQueries.locationDevice.update.delete.observation.heading"), observationUri); + } + + public static String deleteLocationDeviceObservationAccuracy( + String observationUri) { + return String.format(QueryReader.getString("ObservationQueries.locationDevice.update.delete.observation.accuracy"), observationUri); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/QueryReader.java new file mode 100644 index 0000000..b48d8d0 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.observation; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.observation.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.java new file mode 100644 index 0000000..0ad2b37 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.timetable; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.timetable.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.java new file mode 100644 index 0000000..1c15e6e --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.java @@ -0,0 +1,130 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.timetable; + +import java.util.Calendar; + +public class TimetableQueries { + + public static String getRoutesInAdminAreaQuery(String adminAreaUri, + boolean includeDirections) { + return getLinesInAdminAreaQuery( + QueryReader.getString("TimetableQueries.query.get.lines.route.type"), + (includeDirections) ? String.format( + QueryReader.getString("TimetableQueries.query.get.lines.direction"), + QueryReader.getString("TimetableQueries.query.get.lines.route.property")) + : "", adminAreaUri); + } + + public static String getServicesInAdminAreaQuery(String adminAreaUri, + boolean includeDirections) { + return getLinesInAdminAreaQuery( + QueryReader.getString("TimetableQueries.query.get.lines.service.type"), + (includeDirections) ? String.format( + QueryReader.getString("TimetableQueries.query.get.lines.direction"), + QueryReader.getString("TimetableQueries.query.get.lines.service.property")) + : "", adminAreaUri); + } + + private static String getLinesInAdminAreaQuery(String lineType, + String directionQuery, String adminAreaUri) { + return String.format( + QueryReader.getString("TimetableQueries.query.get.lines"), + lineType, adminAreaUri, directionQuery); + } + + public static String getRouteDirectionsQuery(String routeUri) { + return getLineDirectionsQuery( + QueryReader.getString("TimetableQueries.query.get.lines.route.property"), + routeUri); + } + + public static String getServiceDirectionsQuery(String serviceUri) { + return getLineDirectionsQuery( + QueryReader.getString("TimetableQueries.query.get.lines.service.property"), + serviceUri); + + } + + private static String getLineDirectionsQuery(String lineLinkProperty, + String lineUri) { + return String.format( + QueryReader.getString("TimetableQueries.query.get.direction"), + lineLinkProperty, lineUri); + } + + public static String getServicesOnRouteQuery(String routeUri) { + return String.format(QueryReader + .getString("TimetableQueries.query.get.servicesOnRoute"), + routeUri); + } + + public static String getBusLocationsOnRouteQuery(String routeUri, + boolean inbound) { + return getBusLocationsOnLine( + QueryReader.getString("TimetableQueries.query.get.lines.route.property"),routeUri, + inbound); + } + + public static String getBusLocationsOnServiceQuery(String serviceUri, + boolean inbound) { + return getBusLocationsOnLine( + QueryReader.getString("TimetableQueries.query.get.lines.servuce.property"),serviceUri, + inbound); + } + + private static String getBusLocationsOnLine(String lineLink, String lineUri, boolean inbound) { + Calendar cal = Calendar.getInstance(); + String dayOfWeek = getDayOfWeekProperty(cal); + String time = currentTimeString(cal).toString(); + String query = String + .format(QueryReader + .getString("TimetableQueries.query.get.busLocation"), + lineLink, + lineUri, + ((inbound) ? QueryReader + .getString("TimetableQueries.query.get.busLocation.inbound") + : QueryReader + .getString("TimetableQueries.query.get.busLocation.outbound")), + dayOfWeek, time, time); + return query; + } + + private static String getDayOfWeekProperty(Calendar cal) { + switch (cal.get(Calendar.DAY_OF_WEEK)) { + case Calendar.MONDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.monday"); + case Calendar.TUESDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.tuesday"); + case Calendar.WEDNESDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.wednesday"); + case Calendar.THURSDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.thursday"); + case Calendar.FRIDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.friday"); + case Calendar.SATURDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.saturday"); + case Calendar.SUNDAY: + return QueryReader + .getString("TimetableQueries.query.get.busLocation.sunday"); + } + return "[]"; + } + + private static StringBuilder currentTimeString(Calendar cal) { + StringBuilder time = new StringBuilder(""); + if (cal.get(Calendar.HOUR_OF_DAY) < 10) { + time.append("0"); + } + time.append(cal.get(Calendar.HOUR_OF_DAY)).append(":"); + if (cal.get(Calendar.MINUTE) < 10) { + time.append("0"); + } + time.append(cal.get(Calendar.MINUTE)).append(":00"); + return time; + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.java new file mode 100644 index 0000000..fc3c524 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.java @@ -0,0 +1,26 @@ +/** + * + */ +package uk.ac.dotrural.irp.ecosystem.transport.queries.transport; + + +/** + * @author david corsar + * + */ +public class NaptanNptgQueries { + public static String getNptgRegionsQuery(){ + return QueryReader.getString("NaptanNptgQueries.query.get.nptgRegions"); + } + public static String getNptgAdminAreasQuery(String regionUri) { + return String.format(QueryReader.getString("NaptanNptgQueries.query.get.nptgAdminAreas"), regionUri); + } + + public static String getNptgLocalitiesQuery(String adminAreaUri) { + return String.format(QueryReader.getString("NaptanNptgQueries.query.get.nptgLocalities"), adminAreaUri); + } + + public static String getBusStopPointsInLocalityQuery(String localityUri) { + return String.format(QueryReader.getString("NaptanNptgQueries.query.get.busStopPointsInLocality"), localityUri); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.java new file mode 100644 index 0000000..5a44b07 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.transport; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.transport.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.java new file mode 100644 index 0000000..f88fef5 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.java @@ -0,0 +1,22 @@ +package uk.ac.dotrural.irp.ecosystem.transport.queries.user; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class QueryReader { + private static final String BUNDLE_NAME = "uk.ac.dotrural.irp.ecosystem.transport.queries.user.queries"; + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private QueryReader() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.java new file mode 100644 index 0000000..4069da4 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.java @@ -0,0 +1,74 @@ +/** + * + */ +package uk.ac.dotrural.irp.ecosystem.transport.queries.user; + +import java.util.UUID; + +/** + * @author david corsar + * + */ +public class UserQueries { + public static String getUserByEmailQuery(String email) { + return String.format(QueryReader.getString("UserQueries.query.get.email"), + email); + } + + public static String getUserByUriQuery(String userUri) { + return String.format(QueryReader.getString("UserQueries.query.get.uri"), + userUri); + } + + public static String getExistsQuery(String email) { + return String.format(QueryReader.getString("UserQueries.query.exists"), + email); + } + + public static String getUserQuery(String email, String password){ + return String.format(QueryReader.getString("UserQueries.query.get.emailPassword"), + email, encodePassword(password)); + } + + public static String getCreateAuthTokenQuery(String userUri, String token){ + return String.format(QueryReader.getString("UserQueries.update.create.authToken"), + userUri, token); + } + + + public static String getIsValidLoginCredentialsQuery(String email, + String password) { + return String.format(QueryReader.getString("UserQueries.query.isValidLogin"), + email, encodePassword(password)); + } + + public static String getCreateUserUpdate(String nickname, String email, String password) { + String userUrl = QueryReader + .getString("UserQueries.query.create.baseNS") + + UUID.randomUUID().toString(); + return getCreateUserUpdate(userUrl, nickname, email, password); + } + + public static String getCreateUserUpdate(String userUri, String nickname, String email, + String password) { + return String.format( + QueryReader.getString("UserQueries.update.create"), userUri, nickname, + email, encodePassword(password)); + } + + public static String getDeleteUserUpdate(String userUri) { + String query = String.format( + QueryReader.getString("UserQueries.update.delete"), userUri, + userUri); + return query; + } + + public static String getUpdateUserUpdate(String userUri, String nickname, String email, String password){ + return String.format(QueryReader.getString("UserQueries.update"), userUri, userUri, nickname, email, password, userUri); + } + + private static String encodePassword(String password) { + return password; + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.java new file mode 100644 index 0000000..d2ccf7c --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.java @@ -0,0 +1,88 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.UUID; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.transport.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.alert.Alert; +import uk.ac.dotrural.irp.ecosystem.transport.queries.alert.BusAlertQueries; +import uk.ac.dotrural.irp.ecosystem.transport.queries.alert.QueryReader; + +@Path("/alert") +@Scope("request") +public class AlertResource implements RESTFulSPARQL +{ + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint alertEndpoint; + + public void setAlertEndpoint(SPARQLEndpoint gisRoadMapEndpoint) + { + this.alertEndpoint = gisRoadMapEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) + { + return alertEndpoint.init(uriInfo, si); + } + + public void update(Query query) + { + alertEndpoint.update(query); + } + + public String query(Query query) + { + return uk.ac.dotrural.irp.ecosystem.core.util.Util.resultsetToString(alertEndpoint.query(query)); + } + + public EndpointInfo info() + { + return alertEndpoint.info(); + } + + @POST + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + @Path("create") + public void create(Alert alert) + { + if(alert == null) + throw new ExceptionReporter(new NullPointerException("No 'Alert' creation information given.")); + if(alert.getUserUri() == null || alert.getUserUri().equals("")) + throw new ExceptionReporter(new NullPointerException("No 'userUri' given.")); + if(alert.getLineUri() == null || alert.getLineUri().equals("")) + throw new ExceptionReporter(new NullPointerException("No 'lineUri' given.")); + if(alert.getDays() == null) + throw new ExceptionReporter(new NullPointerException("No 'days' specified.")); + + String newAlertUri = QueryReader.getString("BusAlertQueries.query.create.baseNS") + UUID.randomUUID().toString(); + String query = BusAlertQueries.getCreateAlertUpdate(newAlertUri, + alert.getUserUri(), + alert.getLineUri(), + alert.getInbound(), + alert.getLatitude(), alert.getLongitude(), + alert.getStartTimeHour(), alert.getStartTimeMin(), + alert.getEndTimeHour(), alert.getEndTimeMin(), + alert.getMinutesBefore(), + Util.getServiceDays(alert.getDays())); + System.out.format(" (INFO) : %s", query); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/FeedbackResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/FeedbackResource.java new file mode 100644 index 0000000..1b1c741 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/FeedbackResource.java @@ -0,0 +1,209 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback.Feedback; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback.FeedbackPayload; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.feedback.Feedbacks; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey.Journey; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.User; +import uk.ac.dotrural.irp.ecosystem.transport.queries.feedback.FeedbackQueries; +import uk.ac.dotrural.irp.ecosystem.transport.queries.feedback.QueryReader; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/feedback") +@Scope("request") +public class FeedbackResource implements RESTFulSPARQL +{ + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint feedbackEndpoint; + + public void setFeedbackEndpoint(SPARQLEndpoint operatorsEndpoint) + { + this.feedbackEndpoint = operatorsEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) + { + return feedbackEndpoint.init(uriInfo, si); + } + + public void update(Query query) + { + feedbackEndpoint.update(query); + } + + public String query(Query query) + { + return Util.resultsetToString(feedbackEndpoint.query(query)); + } + + public EndpointInfo info() + { + return feedbackEndpoint.info(); + } + + @POST + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + @Path("create") + public Feedback create(FeedbackPayload feedbackPayload) + { + if(feedbackPayload == null) + throw new ExceptionReporter(new NullPointerException("No 'FeedbackPayload' given.")); + + if(feedbackPayload.getUserUri() == null || feedbackPayload.getUserUri().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("User URI needed to create the feedback.")); + if(feedbackPayload.getMessage() == null || feedbackPayload.getMessage().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("A message needed to create the feedback.")); + if(feedbackPayload.getAuthenticationToken() == null || feedbackPayload.getAuthenticationToken().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("An authentication token needed to create the feedback.")); + + String feedbackUri = QueryReader.getString("FeedbackQueries.baseNS") + UUID.randomUUID().toString(); + String query = FeedbackQueries.getCreateFeedbackUpdate(feedbackPayload.getUserUri(), + (feedbackPayload.getJourneyUri()==null)?"":feedbackPayload.getJourneyUri(), + feedbackPayload.getMessage(), + feedbackUri); + Query sparqlQuery = new Query(query); + feedbackEndpoint.update(sparqlQuery); + + Feedback feedback = new Feedback(); + feedback.setUri(feedbackUri); + return feedback; + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("get") + public Feedback get(@DefaultValue("") @QueryParam("feedbackUri") String feedbackUri, + @DefaultValue("") @QueryParam("authenticationToken") String authenticationToken) + { + feedbackUri = feedbackUri.trim(); + authenticationToken = authenticationToken.trim(); + + if(feedbackUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'feedbackUri' is NULL or empty.")); + if(authenticationToken.equals("")) + throw new ExceptionReporter(new NullPointerException("'authenticationToken' is NULL or empty.")); + + String query = FeedbackQueries.getFeedbackQuery(feedbackUri); + Query sparqlQuery = new Query(query); + + ResultSet results = feedbackEndpoint.query(sparqlQuery); + + Feedback feedback = new Feedback(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + feedback.setUri(feedbackUri); + feedback.setUser(new User(Util.getNodeValue(solution.get(vars.get(0))).trim())); + feedback.setJourney(new Journey(Util.getNodeValue(solution.get(vars.get(1))).trim())); + feedback.setMessage(Util.getNodeValue(solution.get(vars.get(2))).trim()); + } + + return feedback; + } + + @POST + @Consumes({MediaType.APPLICATION_JSON}) + @Path("delete") + public void delete(FeedbackPayload feedbackPayload) + { + if(feedbackPayload == null) + throw new ExceptionReporter(new NullPointerException("No 'FeedbackPayload' given.")); + + if(feedbackPayload.getFeedbackUri() == null || feedbackPayload.getFeedbackUri().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("Feedback URI needed to delete the feedback.")); + if(feedbackPayload.getAuthenticationToken() == null || feedbackPayload.getAuthenticationToken().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("An authentication token needed to delete the feedback.")); + + String query = FeedbackQueries.getDeleteFeedbackUpdate(feedbackPayload.getFeedbackUri().trim()); + Query sparqlQuery = new Query(query); + feedbackEndpoint.update(sparqlQuery); + } + + @POST + @Consumes({MediaType.APPLICATION_JSON}) + @Path("update") + public void update(FeedbackPayload feedbackPayload) + { + if(feedbackPayload == null) + throw new ExceptionReporter(new NullPointerException("No 'FeedbackPayload' given.")); + + if(feedbackPayload.getFeedbackUri() == null || feedbackPayload.getFeedbackUri().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("Feedback URI needed to update the feedback.")); + if(feedbackPayload.getMessage() == null || feedbackPayload.getMessage().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("A message needed to update the feedback.")); + if(feedbackPayload.getAuthenticationToken() == null || feedbackPayload.getAuthenticationToken().trim().equals("")) + throw new ExceptionReporter(new NullPointerException("An authentication token needed to update the feedback.")); + + String query = FeedbackQueries.getUpdateFeedbackUpdate(feedbackPayload.getFeedbackUri().trim(), feedbackPayload.getMessage()); + Query sparqlQuery = new Query(query); + feedbackEndpoint.update(sparqlQuery); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getForUser") + public Feedbacks getForUser(@DefaultValue("") @QueryParam("userUri") String userUri, + @DefaultValue("") @QueryParam("authenticationToken") String authenticationToken) + { + userUri = userUri.trim(); + authenticationToken = authenticationToken.trim(); + + if(userUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'userUri' is NULL or empty.")); + if(authenticationToken.equals("")) + throw new ExceptionReporter(new NullPointerException("'authenticationToken' is NULL or empty.")); + + String query = FeedbackQueries.getFeedbackForUserQuery(userUri); + Query sparqlQuery = new Query(query); + + ResultSet results = feedbackEndpoint.query(sparqlQuery); + + List feedbacks = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + Feedback feedback = new Feedback(); + feedback.setMessage(Util.getNodeValue(solution.get(vars.get(0))).trim()); + + feedbacks.add(feedback); + } + + return new Feedbacks(feedbacks); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/JourneyResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/JourneyResource.java new file mode 100644 index 0000000..51ffece --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/JourneyResource.java @@ -0,0 +1,218 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device.Device; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device.Sensor; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.device.Sensors; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey.Journey; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.journey.JourneyPayload; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Line; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.User; +import uk.ac.dotrural.irp.ecosystem.transport.queries.journey.BusJourneyQueries; +import uk.ac.dotrural.irp.ecosystem.transport.queries.journey.DeviceQueries; +import uk.ac.dotrural.irp.ecosystem.transport.queries.journey.QueryReader; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/journey") +@Scope("request") +public class JourneyResource implements RESTFulSPARQL { + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint journeyEndpoint; + + public void setJourneyEndpoint(SPARQLEndpoint routesEndpoint) { + this.journeyEndpoint = routesEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) { + return journeyEndpoint.init(uriInfo, si); + } + + public void update(Query query) { + journeyEndpoint.update(query); + } + + public String query(Query query) { + return Util.resultsetToString(journeyEndpoint.query(query)); + } + + public EndpointInfo info() { + return journeyEndpoint.info(); + } + + @POST + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Path("create") + public Journey create(JourneyPayload journeyPayload) { + if (journeyPayload == null) + throw new ExceptionReporter(new NullPointerException( + "No journey details given.")); + if (journeyPayload.getAuthenticationToken() == null + || journeyPayload.getAuthenticationToken().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "No authentication token given.")); + if (journeyPayload.getType() == null) + throw new ExceptionReporter(new NullPointerException( + "No journey type given.")); + if (journeyPayload.getType().getLineUri() == null + || "".equals(journeyPayload.getType().getLineUri().trim())) + throw new ExceptionReporter(new NullPointerException( + "No lineUri given in journey type")); + if (journeyPayload.getType().getDirection() == null + || "".equals(journeyPayload.getType().getDirection().trim())) + throw new ExceptionReporter(new NullPointerException( + "No direction given in journey type")); + if (!("inbound".equals(journeyPayload.getType().getDirection().trim())) + && !("outbound".equals(journeyPayload.getType().getDirection() + .trim()))) + throw new ExceptionReporter( + new NullPointerException( + "Invalid direction given in journey type: must be 'inbound' or 'outbound'")); + if (journeyPayload.getType().getUri() == null + || "".equals(journeyPayload.getType().getUri().trim())) + throw new ExceptionReporter(new NullPointerException( + "No uri given in journey type")); + if (journeyPayload.getUserUri() == null + || journeyPayload.getUserUri().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "No 'userUri' given.")); + if (journeyPayload.getDevice() == null) + throw new ExceptionReporter(new NullPointerException( + "No 'device' given.")); + + String uri = QueryReader.getString("JourneyQueries.baseNS") + + UUID.randomUUID().toString(); + + List queries = null; + if (journeyPayload.getDevice().getUri() == null) { + queries = new ArrayList(); + String phoneUri = QueryReader.getString("JourneyQueries.baseNS") + + UUID.randomUUID().toString(); + String locationDeviceUri = QueryReader + .getString("JourneyQueries.baseNS") + + UUID.randomUUID().toString(); + List sensingMethod = new ArrayList(); + if ("android".equals(journeyPayload.getDevice().getType())) { + queries.add(new Query(DeviceQueries.getCreateAndroidPhone( + phoneUri, locationDeviceUri, journeyPayload.getDevice() + .getOperatingSystemVersion(), journeyPayload + .getDevice().getUniqueId()))); + sensingMethod.add( QueryReader.getString("DeviceQueries.androidNetworkLocationSensing")); + sensingMethod.add( QueryReader.getString("DeviceQueries.androidPassiveLocationSensing")); + sensingMethod.add( QueryReader.getString("DeviceQueries.androidGPSLocationSensinghttp")); + } else if ("iPhone".equals(journeyPayload.getDevice().getType())) { + queries.add(new Query(DeviceQueries.getCreateiPhone(phoneUri, + locationDeviceUri, journeyPayload.getDevice() + .getOperatingSystemVersion(), journeyPayload + .getDevice().getUniqueId()))); + sensingMethod .add(QueryReader.getString("DeviceQueries.iOSLocationSensing")); + } + // TODO add iPad and unknown devices + Sensor locationSensor = new Sensor(); + locationSensor.setUri(locationDeviceUri); + locationSensor.setObserves("http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/location"); + locationSensor.setSensingMethod(sensingMethod); + journeyPayload.getDevice().setUri(phoneUri); + List sensorList = new ArrayList(); + sensorList.add(locationSensor); + Sensors sensors = new Sensors(); + sensors.setSensors(sensorList); + journeyPayload.getDevice().setSensors(sensors); + } + + String query = BusJourneyQueries.getCreateBusJourneyUpdate( + journeyPayload.getUserUri(), journeyPayload.getDevice() + .getUri(), journeyPayload.getType().getLineUri(), uri, + journeyPayload.getType().getDirection().trim()); + if (queries != null) { + queries.add(new Query(query)); + journeyEndpoint.update(queries); + } else { + Query sparqlQuery = new Query(query); + journeyEndpoint.update(sparqlQuery); + } + + Journey journey = new Journey(); + journey.setUri(uri); + journey.setDevice(journeyPayload.getDevice()); + + return journey; + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("get") + public Journey get( + @DefaultValue("") @QueryParam("journeyUri") String journeyUri) { + journeyUri = journeyUri.trim(); + + if (journeyUri.equals("")) + throw new ExceptionReporter(new NullPointerException( + "'journeyUri' is needed to retrieve the journey.")); + + String query = BusJourneyQueries.getBusJourneyQuery(journeyUri); + Query sparqlQuery = new Query(query); + ResultSet results = journeyEndpoint.query(sparqlQuery); + + List vars = results.getResultVars(); + Journey journey = new Journey(); + + while (results.hasNext()) { + QuerySolution solution = results.next(); + + journey.setLine(new Line(Util.getNodeValue( + solution.get(vars.get(0))).trim())); + journey.setDevice(new Device(Util.getNodeValue( + solution.get(vars.get(1))).trim())); + journey.setUser(new User(Util.getNodeValue( + solution.get(vars.get(2))).trim())); + } + + return journey; + } + + @DELETE + @Consumes({ MediaType.APPLICATION_JSON }) + @Path("delete") + public void delete( + @DefaultValue("") @QueryParam("journeyUri") String journeyUri) { + journeyUri = journeyUri.trim(); + + if (journeyUri.equals("")) + throw new ExceptionReporter(new NullPointerException( + "No journey uri given.")); + + String query = BusJourneyQueries.getDeleteBusJourneyUpdate(journeyUri); + Query sparqlQuery = new Query(query); + journeyEndpoint.update(sparqlQuery); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.java new file mode 100644 index 0000000..081ceb2 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.java @@ -0,0 +1,341 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.FeatureOfInterest; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.Observation; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.ObservationValue; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.Sensing; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.Sensor; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.SensorOutput; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location.LocationDeviceObservation; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location.LocationDeviceObservationPayload; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location.LocationDeviceObservationValue; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.observation.location.LocationDeviceValues; +import uk.ac.dotrural.irp.ecosystem.transport.queries.observation.ObservationQueries; +import uk.ac.dotrural.irp.ecosystem.transport.queries.observation.QueryReader; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/observation") +@Scope("request") +public class LocationDeviceObservationResource implements RESTFulSPARQL { + @Context + private UriInfo uriInfo; + + private SimpleDateFormat dateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss z"); + + private SPARQLEndpoint observationEndpoint; + + public void setObservationEndpoint(SPARQLEndpoint observationsEndpoint) { + this.observationEndpoint = observationsEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) { + return observationEndpoint.init(uriInfo, si); + } + + public void update(Query query) { + observationEndpoint.update(query); + } + + public String query(Query query) { + return Util.resultsetToString(observationEndpoint.query(query)); + } + + public EndpointInfo info() { + return observationEndpoint.info(); + } + + @POST + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Path("create") + public LocationDeviceObservation create( + LocationDeviceObservationPayload locationObservationPayload) { + if (locationObservationPayload == null) { + throw new ExceptionReporter(new NullPointerException( + "No LocationObservationPayload given")); + } + + if (locationObservationPayload.getUserUri() == null + || "".equals(locationObservationPayload.getUserUri().trim())) { + throw new ExceptionReporter(new NullPointerException( + "User uri required to create the location observation")); + } + + if (locationObservationPayload.getType() == null + || "".equals(locationObservationPayload.getType().trim())) { + throw new ExceptionReporter(new NullPointerException( + "Type required to create the location observation")); + } + + if (locationObservationPayload.getSensor() == null + || "".equals(locationObservationPayload.getSensor().trim())) { + throw new ExceptionReporter(new NullPointerException( + "Sensor required to create the location observation")); + } + if (locationObservationPayload.getFeatureOfInterest() == null + || "".equals(locationObservationPayload.getFeatureOfInterest() + .trim())) { + throw new ExceptionReporter( + new NullPointerException( + "Feature of interest required to create the location observation")); + } + + if (locationObservationPayload.getValues() == null) { + throw new ExceptionReporter( + new NullPointerException( + "Location values required to create the location observation")); + } + if (ObservationQueries.getLocationDeviceObservationType().equals( + locationObservationPayload.getType().trim())) { + // create the location device observation + LocationDeviceValues values = locationObservationPayload + .getValues(); + if (values.getLatitude() == null) { + throw new ExceptionReporter(new NullPointerException( + "Latitude required to create the location observation")); + } + if (values.getLongitude() == null) { + throw new ExceptionReporter( + new NullPointerException( + "Longitude required to create the location observation")); + } + if (values.getGpsTime() == null) { + throw new ExceptionReporter( + new NullPointerException( + "GPS timestamp required to create the location observation")); + } + + if (values.getDeviceTime() == null) { + throw new ExceptionReporter( + new NullPointerException( + "Device time required to create the location observation")); + } + + // bulid query + String observationUri = QueryReader + .getString("ObservationQueries.baseNs") + UUID.randomUUID(); + String outputUri = QueryReader + .getString("ObservationQueries.baseNs") + UUID.randomUUID(); + String valueUri = QueryReader + .getString("ObservationQueries.baseNs") + UUID.randomUUID(); + long serverTime = System.currentTimeMillis(); + String deviceSensorUri = QueryReader + .getString("ObservationQueries.baseNs") + UUID.randomUUID(); + String sensingMethodUsedUri = (locationObservationPayload + .getSensingMethodUsed() == null || "" + .equals(locationObservationPayload.getSensingMethodUsed())) ? null + : locationObservationPayload.getSensingMethodUsed(); + + String queryStr = ObservationQueries + .createLocationDeviceObservationUpdate( + locationObservationPayload.getFeatureOfInterest() + .trim(), + values.getLatitude().doubleValue(), values + .getLongitude().doubleValue(), values + .getGpsTime().longValue(), values.getDeviceTime().longValue(), + values.getAccuracy(), values.getHeading(), values + .getSpeed(), observationUri, outputUri, + valueUri, serverTime, deviceSensorUri, + sensingMethodUsedUri); + + // perform update + Query query = new Query(queryStr); + observationEndpoint.update(query); + + // build result object + LocationDeviceObservation observation = new LocationDeviceObservation(); + observation.setUri(observationUri); + + return observation; + } + + throw new ExceptionReporter(new IllegalArgumentException( + "Unrecognised observation type")); + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("get") + public Observation get( + @DefaultValue("") @QueryParam("observationUri") String observationUri) { + observationUri = observationUri.trim(); + if ("".equals(observationUri)) { + throw new ExceptionReporter(new IllegalArgumentException( + "observationUri is null or empty")); + } + + String query = ObservationQueries + .getLocationDeviceObservationQuery(observationUri); + ResultSet results = observationEndpoint.query(new Query(query)); + Observation obs = new Observation(); + obs.setUri(observationUri); + List vars = results.getResultVars(); + // ?observationResult ?foi ?observedBy ?sensingMethodUsed + // ?osbservationResultTime ?observationSamplingTime ?serverTime + if (results.hasNext()) { + QuerySolution solution = results.next(); + obs.setObservationResult(new SensorOutput(Util.getNodeValue( + solution.get(vars.get(0))).trim())); + obs.setFeatureOfInterest(new FeatureOfInterest(Util.getNodeValue( + solution.get(vars.get(1))).trim())); + obs.setObservedBy(new Sensor(Util.getNodeValue( + solution.get(vars.get(2))).trim())); + String method = Util.getNodeValue(solution.get(vars.get(3))).trim(); + if (null != method && !("".equals(method))) { + obs.setSensingMethodUsed(new Sensing(method)); + } + obs.setObservationResultTime(Util.getNodeLongValue(solution + .get(vars.get(4)))); + obs.setObservationSamplingTime(Util.getNodeLongValue(solution + .get(vars.get(5)))); + obs.setServerTime(Util.getNodeLongValue(solution.get(vars.get(6)))); + } + return obs; + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("getSensorOutput") + public SensorOutput getSensorOutput( + @DefaultValue("") @QueryParam("sensorOutputUri") String sensorOutputUri) { + sensorOutputUri = sensorOutputUri.trim(); + if ("".equals(sensorOutputUri)) { + throw new ExceptionReporter(new IllegalArgumentException( + "observationUri is null or empty")); + } + + // setup and execute the query + String query = ObservationQueries + .getLocationDeviceSensorOutputQuery(sensorOutputUri); + ResultSet results = observationEndpoint.query(new Query(query)); + + List resultVars = results.getResultVars(); + + // process the results + SensorOutput so = new SensorOutput(); + if (results.hasNext()) { + QuerySolution qs = results.next(); + so.setUri(sensorOutputUri); + ObservationValue value = new ObservationValue(); + value.setUri(Util.getNodeValue(qs.get(resultVars.get(0)))); + so.setHasValue(value); + } + return so; + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("getObservationValue") + public ObservationValue getObservationValue( + @DefaultValue("") @QueryParam("observationValueUri") String observationValueUri) { + observationValueUri = observationValueUri.trim(); + if ("".equals(observationValueUri)) { + throw new ExceptionReporter(new IllegalArgumentException( + "observationUri is null or empty")); + } + + // setup and execute the query + String query = ObservationQueries + .getLocationDeviceObservationValueQuery(observationValueUri); + return extractLocationDeviceObservationValue(observationValueUri, query); + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("getValueForObservation") + public ObservationValue getValueForObservation( + @DefaultValue("") @QueryParam("observationUri") String observationUri) { + observationUri = observationUri.trim(); + if ("".equals(observationUri)) { + throw new ExceptionReporter(new IllegalArgumentException( + "observationUri is null or empty")); + } + + // setup and execute the query + String query = ObservationQueries + .getLocationDeviceObservationValueForObservationQuery(observationUri); + return extractLocationDeviceObservationValue(observationUri, query); + } + + private ObservationValue extractLocationDeviceObservationValue(String uri, + String query) { + ResultSet results = observationEndpoint.query(new Query(query)); + + List resultVars = results.getResultVars(); + // process the results + LocationDeviceObservationValue value = new LocationDeviceObservationValue(); + if (results.hasNext()) { + QuerySolution qs = results.next(); + value.setLatitude(Util.getNodeDoubleValue(qs.get(resultVars.get(0)))); + value.setLongitude(Util.getNodeDoubleValue(qs.get(resultVars.get(1)))); + value.setEasting(Util.getNodeDoubleValue(qs.get(resultVars.get(2)))); + value.setNorthing(Util.getNodeDoubleValue(qs.get(resultVars.get(3)))); + value.setAccuracy(Util.getNodeDoubleValue(qs.get(resultVars.get(4)))); + value.setHeading(Util.getNodeDoubleValue(qs.get(resultVars.get(5)))); + value.setSpeed(Util.getNodeDoubleValue(qs.get(resultVars.get(6)))); + value.setUri((resultVars.size() == 7) ? Util.getNodeValue(qs + .get(resultVars.get(7))) : uri); + } + return value; + } + + @DELETE + @Consumes({ MediaType.APPLICATION_JSON }) + @Path("delete") + public void delete( + @DefaultValue("") @QueryParam("observationUri") String observationUri, + @DefaultValue("") @QueryParam("authenticationToken") String authenticationToken) { + observationUri = observationUri.trim(); + authenticationToken = authenticationToken.trim(); + + if (observationUri.equals("") && authenticationToken.equals("")) + throw new ExceptionReporter( + new NullPointerException( + "'observationUri' or 'authenticationToken' is needed to delete the user.")); + + String accuracyQuery = ObservationQueries + .deleteLocationDeviceObservationAccuracy(observationUri); + String headingQuery = ObservationQueries + .deleteLocationDeviceObservationHeading(observationUri); + String speedQuery = ObservationQueries + .deleteLocationDeviceObservationSpeed(observationUri); + String methodQuery = ObservationQueries + .deleteLocationDeviceObservationSensingMethodUsed(observationUri); + String obsQuery = ObservationQueries + .deleteLocationDeviceObservation(observationUri); + + observationEndpoint.update(new Query(accuracyQuery), new Query( + headingQuery), new Query(speedQuery), new Query(methodQuery), + new Query(obsQuery)); + } + +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.java new file mode 100644 index 0000000..cdad176 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.java @@ -0,0 +1,261 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.BusLocations; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Direction; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Directions; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Line; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Lines; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.timetable.Location; +import uk.ac.dotrural.irp.ecosystem.transport.queries.timetable.TimetableQueries; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/timetable") +@Scope("request") +public class TimeTableResource implements RESTFulSPARQL +{ + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint timeTableEndpoint; + + public void setTimeTableEndpoint(SPARQLEndpoint timeTablesEndpoint) + { + this.timeTableEndpoint = timeTablesEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) + { + return timeTableEndpoint.init(uriInfo, si); + } + + public void update(Query query) + { + timeTableEndpoint.update(query); + } + + public String query(Query query) + { + return Util.resultsetToString(timeTableEndpoint.query(query)); + } + + public EndpointInfo info() + { + return timeTableEndpoint.info(); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("get{Line}InAdminArea") + public Lines getLinesInAdminArea(@PathParam("Line") String line, + @DefaultValue("") @QueryParam("adminAreaUri") String adminAreaUri, + @DefaultValue("false") @QueryParam("includeDirections") boolean includeDirections) + { + System.out.println("include directions " + includeDirections); + line = line.trim(); + adminAreaUri = adminAreaUri.trim(); + + if(adminAreaUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'adminAreaUri' is NULL or empty.")); + + String query = ""; + if(line.equals("Routes")) + query = TimetableQueries.getRoutesInAdminAreaQuery(adminAreaUri, includeDirections); + else + query = TimetableQueries.getServicesInAdminAreaQuery(adminAreaUri, includeDirections); + + Query sparqlQuery = new Query(query); + ResultSet results = timeTableEndpoint.query(sparqlQuery); + + List lines = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + String currentLineURI = Util.getNodeValue(solution.get(vars.get(0))).trim(); + Line route = uk.ac.dotrural.irp.ecosystem.transport.Util.contains(lines, currentLineURI); + addRoute(lines,route,vars,solution); + } + + return (new Lines(lines)); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("get{Line}Directions") + public Directions getDirections(@PathParam("Line") String line, + @DefaultValue("") @QueryParam("lineUri") String lineUri) + { + line = line.trim(); + lineUri = lineUri.trim(); + + if(lineUri.equals("")) + throw new ExceptionReporter(new NullPointerException(line + " 'uri' is NULL or empty.")); + + String query = ""; + if(line.equals("Route")) + query = TimetableQueries.getRouteDirectionsQuery(lineUri); + else + query = TimetableQueries.getServiceDirectionsQuery(lineUri); + + Query sparqlQuery = new Query(query); + ResultSet results = timeTableEndpoint.query(sparqlQuery); + + List directions = new ArrayList(); + List vars = results.getResultVars(); + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + Direction direction = new Direction(); + direction.setDirection(Util.getNodeValue(solution.get(vars.get(0))).trim()); + direction.setDirectionDescription(Util.getNodeValue(solution.get(vars.get(1))).trim()); + + directions.add(direction); + } + + return new Directions(directions); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getServicesOnRoute") + public Lines getServicesOnRoute(@DefaultValue("") @QueryParam("lineUri") String lineUri) + { + lineUri = lineUri.trim(); + + if(lineUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'routeUri' is NULL or empty.")); + + String query = TimetableQueries.getServicesOnRouteQuery(lineUri); + + Query sparqlQuery = new Query(query); + ResultSet servicesOnRoute = timeTableEndpoint.query(sparqlQuery); + + List lines = new ArrayList(); + List vars = servicesOnRoute.getResultVars(); + while(servicesOnRoute.hasNext()) + { + QuerySolution solution = servicesOnRoute.next(); + + Line line = new Line(); + line.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + line.setLabel(Util.getNodeValue(solution.get(vars.get(1))).trim()); + + lines.add(line); + } + + return new Lines(lines); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getBusLocationsOn{Line}") + public BusLocations getBusLocations(@PathParam("Line") String line, + @DefaultValue("") @QueryParam("lineUri") String lineUri, + @DefaultValue("inbound") @QueryParam("direction") String direction) + { + line = line.trim(); + lineUri = lineUri.trim(); + direction = direction.trim(); + + if(lineUri.equals("")) + throw new ExceptionReporter(new NullPointerException(line + " 'uri' is NULL or empty.")); + + String query = ""; + if(line.equals("Route")) + query = TimetableQueries.getBusLocationsOnRouteQuery(lineUri, direction.equals("inbound")); + else + query = TimetableQueries.getBusLocationsOnServiceQuery(lineUri, direction.equals("inbound")); + + Query sparqlQuery = new Query(query); + ResultSet busLocationsOnRoute = timeTableEndpoint.query(sparqlQuery); + + List busLocations = new ArrayList(); + List vars = busLocationsOnRoute.getResultVars(); + while(busLocationsOnRoute.hasNext()) + { + QuerySolution solution = busLocationsOnRoute.next(); + + Location location = new Location(); + location.setTime(Util.getNodeValue(solution.get(vars.get(0))).trim()); + location.setEasting(Double.parseDouble(Util.getNodeValue(solution.get(vars.get(3))).trim())); + location.setWesting(Double.parseDouble(Util.getNodeValue(solution.get(vars.get(4))).trim())); + location.setLongitude(Double.parseDouble(Util.getNodeValue(solution.get(vars.get(5))).trim())); + location.setLatitude(Double.parseDouble(Util.getNodeValue(solution.get(vars.get(6))).trim())); + + busLocations.add(location); + } + + return new BusLocations(busLocations); + } + + private void addRoute(List lines, + Line line, + List vars, + QuerySolution solution) + { + List directions = null; + if(line==null) + { + line = new Line(); + line.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + line.setLabel(Util.getNodeValue(solution.get(vars.get(1))).trim()); + line.setAltLabel(Util.getNodeValue(solution.get(vars.get(2))).trim()); + + directions = new ArrayList(); + addDirection( directions, + Util.getNodeValue(solution.get(vars.get(3))).trim(), + Util.getNodeValue(solution.get(vars.get(4))).trim()); + + line.setDirections(new Directions(directions)); + lines.add(line); + } + else + { + directions = line.getDirections().getDirections(); + addDirection( directions, + Util.getNodeValue(solution.get(vars.get(3))).trim(), + Util.getNodeValue(solution.get(vars.get(4))).trim()); + + line.setDirections(new Directions(directions)); + } + } + + private void addDirection(List directions, + String direction, + String directionDescription) + { + Direction d = new Direction(); + d.setDirection(direction); + d.setDirectionDescription(directionDescription); + + directions.add(d); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TransportResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TransportResource.java new file mode 100644 index 0000000..6fbeed3 --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TransportResource.java @@ -0,0 +1,201 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.AdminArea; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.AdminAreas; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.BusStop; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.BusStops; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.Localities; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.Locality; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.Region; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.transport.Regions; +import uk.ac.dotrural.irp.ecosystem.transport.queries.transport.NaptanNptgQueries; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/transport") +@Scope("request") +public class TransportResource implements RESTFulSPARQL +{ + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint naptanEndpoint; + + public void setNaptanEndpoint(SPARQLEndpoint naptanEndpoint) + { + this.naptanEndpoint = naptanEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) + { + return naptanEndpoint.init(uriInfo, si); + } + + public void update(Query query) + { + naptanEndpoint.update(query); + } + + public String query(Query query) + { + return Util.resultsetToString(naptanEndpoint.query(query)); + } + + public EndpointInfo info() + { + return naptanEndpoint.info(); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getNptgRegions") + public Regions getNptgRegions() + { + String query = NaptanNptgQueries.getNptgRegionsQuery(); + + Query sparqlQuery = new Query(query); + ResultSet results = naptanEndpoint.query(sparqlQuery); + + List regions = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + Region region = new Region(); + region.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + region.setPrefLabel(Util.getNodeValue(solution.get(vars.get(1))).trim()); + region.setRegionCode(Util.getNodeValue(solution.get(vars.get(2))).trim()); + + regions.add(region); + } + + System.out.println("returning " + regions.size() + " regions"); + return new Regions(regions); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getNptgAdminAreas") + public AdminAreas getNptgAdminAreas(@DefaultValue("") @QueryParam("regionUri") String regionUri) + { + regionUri = regionUri.trim(); + + if(regionUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'regionUri' is NULL or empty.")); + + String query = NaptanNptgQueries.getNptgAdminAreasQuery(regionUri); + + Query sparqlQuery = new Query(query); + ResultSet results = naptanEndpoint.query(sparqlQuery); + + List adminAreas = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + AdminArea adminArea = new AdminArea(); + adminArea.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + adminArea.setAtcoAreaCode(Util.getNodeValue(solution.get(vars.get(1))).trim()); + adminArea.setAdminAreaCode(Util.getNodeValue(solution.get(vars.get(2))).trim()); + adminArea.setPrefLabel(Util.getNodeValue(solution.get(vars.get(3))).trim()); + + adminAreas.add(adminArea); + } + + return new AdminAreas(adminAreas); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getNptgLocalities") + public Localities getNptgLocalities(@DefaultValue("") @QueryParam("adminAreaUri") String adminAreaUri) + { + adminAreaUri = adminAreaUri.trim(); + + if(adminAreaUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'adminAreaUri' is NULL or empty.")); + + String query = NaptanNptgQueries.getNptgLocalitiesQuery(adminAreaUri); + + Query sparqlQuery = new Query(query); + ResultSet results = naptanEndpoint.query(sparqlQuery); + + List localities = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + Locality locality = new Locality(); + locality.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + locality.setPrefLabel(Util.getNodeValue(solution.get(vars.get(1))).trim()); + locality.setAltLabel(Util.getNodeValue(solution.get(vars.get(2))).trim()); + locality.setNptgLocalityCode(Util.getNodeValue(solution.get(vars.get(3))).trim()); + + localities.add(locality); + } + + return new Localities(localities); + } + + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("getBusStopPointsInLocality") + public BusStops getBusStopPointsInLocality(@DefaultValue("") @QueryParam("localityUri") String localityUri) + { + localityUri = localityUri.trim(); + + if(localityUri.equals("")) + throw new ExceptionReporter(new NullPointerException("'adminAreaUri' is NULL or empty.")); + + String query = NaptanNptgQueries.getBusStopPointsInLocalityQuery(localityUri); + + Query sparqlQuery = new Query(query); + ResultSet results = naptanEndpoint.query(sparqlQuery); + + List busStops = new ArrayList(); + List vars = results.getResultVars(); + + while(results.hasNext()) + { + QuerySolution solution = results.next(); + + BusStop busStop = new BusStop(); + busStop.setUri(Util.getNodeValue(solution.get(vars.get(0))).trim()); + busStop.setPrefLabel(Util.getNodeValue(solution.get(vars.get(1))).trim()); + busStop.setStreet(Util.getNodeValue(solution.get(vars.get(2))).trim()); + + busStops.add(busStop); + } + + return new BusStops(busStops); + } +} diff --git a/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/UserResource.java b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/UserResource.java new file mode 100644 index 0000000..e86905a --- /dev/null +++ b/src/main/java/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/UserResource.java @@ -0,0 +1,266 @@ +package uk.ac.dotrural.irp.ecosystem.transport.resources.impl; + +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.springframework.context.annotation.Scope; + +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.EndpointInfo; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.Query; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.ServiceInitialiser; +import uk.ac.dotrural.irp.ecosystem.core.models.jaxb.system.SystemMessage; +import uk.ac.dotrural.irp.ecosystem.core.resources.RESTFulSPARQL; +import uk.ac.dotrural.irp.ecosystem.core.resources.support.reporters.ExceptionReporter; +import uk.ac.dotrural.irp.ecosystem.core.services.SPARQLEndpoint; +import uk.ac.dotrural.irp.ecosystem.core.util.Util; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.User; +import uk.ac.dotrural.irp.ecosystem.transport.models.jaxb.user.UserCreation; +import uk.ac.dotrural.irp.ecosystem.transport.queries.user.QueryReader; +import uk.ac.dotrural.irp.ecosystem.transport.queries.user.UserQueries; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; + +@Path("/user") +@Scope("request") +public class UserResource implements RESTFulSPARQL { + @Context + private UriInfo uriInfo; + + private SPARQLEndpoint userEndpoint; + + public void setUserEndpoint(SPARQLEndpoint userEndpoint) { + this.userEndpoint = userEndpoint; + } + + public SystemMessage init(ServiceInitialiser si) { + return userEndpoint.init(uriInfo, si); + } + + public void update(Query query) { + userEndpoint.update(query); + } + + public String query(Query query) { + return Util.resultsetToString(userEndpoint.query(query)); + } + + public EndpointInfo info() { + return userEndpoint.info(); + } + + @POST + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Path("create") + public UserCreation create(User userDetails) { + System.out.println("creating user 1"); + if (userDetails == null) + throw new ExceptionReporter(new NullPointerException( + "No 'UserDetails' given.")); + + if (userDetails.getNickname() == null + || userDetails.getNickname().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Nickname needed to create the user.")); + + if (userDetails.getEmail() == null + || userDetails.getEmail().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Email needed to create the user.")); + + if (userDetails.getPassword() == null + || userDetails.getPassword().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Password needed to create the user.")); + + System.out.println("creating users"); + String userUrl = ""; + UserCreation newUser = new UserCreation(); + String query = UserQueries.getExistsQuery(userDetails.getEmail()); + Query sparqlQuery = new Query(query); + if (!userEndpoint.ask(sparqlQuery)) { + userUrl = QueryReader.getString("UserQueries.baseNS") + + UUID.randomUUID().toString(); + query = UserQueries.getCreateUserUpdate(userUrl.trim(), userDetails + .getNickname().trim(), userDetails.getEmail().trim(), + userDetails.getPassword().trim()); + sparqlQuery = new Query(query); + userEndpoint.update(sparqlQuery); + System.out.println("created user"); + newUser.setCreated(true); + newUser.setUserUri(userUrl); + } else{ + newUser.setCreated(false); + newUser.setReason("User with email " + userDetails.getEmail() + " already exists"); + } + return newUser; + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("get") + public User get( + @DefaultValue("") @QueryParam("email") String email, + @DefaultValue("") @QueryParam("userUri") String userUri, + @DefaultValue("") @QueryParam("authenticationToken") String authenticationToken) { +// email = email.trim(); +// userUri = userUri.trim(); +// authenticationToken = authenticationToken.trim(); + + if ("".equals(email.trim()) && "".equals(userUri.trim()) + && "".equals(authenticationToken.trim())) + throw new ExceptionReporter( + new NullPointerException( + "'email' or 'userUri' or 'authenticationToken' is needed to retrieve the user.")); + + User user = getUser(email, userUri); + + return user; + } + + /** + * If email is an empty string, then gets user by URI; if userUri is null, + * then gets user by email + * + * @param email + * @param userUri + * @return + */ + private User getUser(String email, String userUri) { + String query = ""; + if (!email.equals("")) + query = UserQueries.getUserByEmailQuery(email); + else if (!userUri.equals("")) + query = UserQueries.getUserByUriQuery(userUri); + else + return new User(); + + Query sparqlQuery = new Query(query); + ResultSet results = userEndpoint.query(sparqlQuery); + + List vars = results.getResultVars(); + User user = new User(); + + while (results.hasNext()) { + QuerySolution solution = results.next(); + + user.setNickname(Util.getNodeValue(solution.get(vars.get(0))) + .trim()); + user.setUserUri(Util.getNodeValue(solution.get(vars.get(1))).trim()); + user.setExists(true); + } + return user; + } + + @DELETE + @Path("delete") + public void delete( + @DefaultValue("") @QueryParam("userUri") String userUri, + @DefaultValue("") @QueryParam("authenticationToken") String authenticationToken) { + userUri = userUri.trim(); + authenticationToken = authenticationToken.trim(); + + if (userUri.equals("") && authenticationToken.equals("")) + throw new ExceptionReporter( + new NullPointerException( + "'email' or 'userUri' or 'authenticationToken' is needed to delete the user.")); + + String query = UserQueries.getDeleteUserUpdate(userUri); + Query sparqlQuery = new Query(query); + userEndpoint.update(sparqlQuery); + } + + @POST + @Consumes({ MediaType.APPLICATION_JSON }) + @Path("update") + public void update(User userDetails) { + if (userDetails == null) + throw new ExceptionReporter(new NullPointerException( + "No 'UserDetails' given.")); + + if (userDetails.getUserUri() == null + || userDetails.getUserUri().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "User URI needed to update the user.")); + + if (userDetails.getAuthenticationToken() == null + || userDetails.getAuthenticationToken().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Authentication token needed to update the user.")); + + if (userDetails.getEmail() == null + || userDetails.getEmail().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Email needed to update the user.")); + + if (userDetails.getPassword() == null + || userDetails.getPassword().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Password needed to update the user.")); + + if (userDetails.getNickname() == null + || userDetails.getNickname().trim().equals("")) + throw new ExceptionReporter(new NullPointerException( + "Nickname needed to update the user.")); + + String query = UserQueries.getUpdateUserUpdate(userDetails.getUserUri() + .trim(), userDetails.getNickname().trim(), userDetails + .getEmail().trim(), userDetails.getPassword().trim()); + Query sparqlQuery = new Query(query); + userEndpoint.update(sparqlQuery); + } + + @GET + @Produces({ MediaType.APPLICATION_JSON }) + @Path("isValidLoginCredentials") + public User isValidLoginCredentials( + @DefaultValue("") @QueryParam("email") String email, + @DefaultValue("") @QueryParam("password") String password) { + email = email.trim(); + password = password.trim(); + + if (email.equals("")) + throw new ExceptionReporter(new NullPointerException( + "No 'email' given.")); + if (password.equals("")) + throw new ExceptionReporter(new NullPointerException( + "No 'password' given.")); + + String query = UserQueries.getIsValidLoginCredentialsQuery(email, + password); + System.out.println( query); + Query sparqlQuery = new Query(query); + boolean isValid = userEndpoint.ask(sparqlQuery); + + User u = null; + if (isValid) { + u = getUser(email, ""); + String token = generateAuthToken(); + String update = UserQueries.getCreateAuthTokenQuery(u.getUserUri(), token); + userEndpoint.update(new Query(update)); + u.setAuthenticationToken(token); + } else { + u = new User(false); + } + + return u; + } + + private String generateAuthToken(){ + return UUID.randomUUID().toString(); + } + +} diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml new file mode 100644 index 0000000..34a1d19 --- /dev/null +++ b/src/main/resources/applicationContext.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties new file mode 100644 index 0000000..96cee08 --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties @@ -0,0 +1,17 @@ +BusAlertQueries.inboundString="inbound"^^xsd:string +BusAlertQueries.outboundString="outbound"^^xsd:string +BusAlertQueries.mondayTrue=transit:monday "true"^^xsd:boolean; +BusAlertQueries.tuesdayTrue=transit:tuesday "true"^^xsd:boolean; +BusAlertQueries.wednesdayTrue=transit:wednesday "true"^^xsd:boolean; +BusAlertQueries.thursdayTrue=transit:thursday "true"^^xsd:boolean; +BusAlertQueries.fridayTrue=transit:friday "true"^^xsd:boolean; +BusAlertQueries.sundayTrue=transit:sunday "true"^^xsd:boolean; +BusAlertQueries.saturdayTrue=transit:saturday "true"^^xsd:boolean; +BusAlertQueries.bankholidaysTrue=transit:bankHolidays "true"^^xsd:boolean; +BusAlertQueries.update.create=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: INSERT DATA {<%s> a irpalert:BusAlert; sioc:has_owner <%s>; transit:route <%s>; transit:direction %s; %s temporal:starts %s; temporal:finishes %s; irpalert:minutesBefore "%s"^^xsd:integer; wgs84:lat %s; wgs84:long %s.} +BusAlertQueries.update.delete=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: DELETE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; transit:monday ?monday; transit:tuesday ?tuesday; transit:wednesday ?wednesday; transit:thursday ?thursday; transit:friday ?friday; transit:saturday ?saturday; transit:sunday ?sunday; transit:bankHolidays ?bankHolidays; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?before; wgs84:lat ?lat; wgs84:long ?long. } WHERE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?before; wgs84:lat ?lat; wgs84:long ?long. OPTIONAL {<%s> transit:monday ?monday.} OPTIONAL {<%s> transit:tuesday ?tuesday.} OPTIONAL {<%s> transit:wednesday ?wednesday.} OPTIONAL {<%s> transit:thursday ?thursday.} OPTIONAL {<%s> transit:friday ?friday.} OPTIONAL {<%s> transit:saturday ?saturday.} OPTIONAL {<%s> transit:sunday ?sunday.} OPTIONAL {<%s> transit:bankHolidays ?bankHolidays.} } +BusAlertQueries.query.count=PREFIX irpalert: SELECT COUNT(?account) WHERE {?account a irpalert:BusAlert.} +BusAlertQueries.query.getForUser=PREFIX irpalert: PREFIX sioc: SELECT ?alert where {?alert a irpalert:BusAlert; sioc:has_owner <%s>.} +BusAlertQueries.query.getForUser.alert=alert +BusAlertQueries.query.get=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: SELECT ?owner ?route ?direction ?start ?finishes ?minutesBefore ?lat ?long ?monday ?tuesday ?wednesday ?thursday ?friday ?saturday ?sunday ?bankHolidays WHERE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?minutesBefore; wgs84:lat ?lat; wgs84:long ?long. OPTIONAL { <%s> transit:monday ?monday. } OPTIONAL { <%s> transit:tuesday ?tuesday. } OPTIONAL { <%s> transit:wednesday ?wednesday. } OPTIONAL { <%s> transit:thursday ?thursday. } OPTIONAL { <%s> transit:friday ?friday. } OPTIONAL { <%s> transit:saturday ?saturday. } OPTIONAL { <%s> transit:sunday ?sunday. } OPTIONAL{ <%s> transit:bankHolidays ?bankHolidays. } } +BusAlertQueries.query.create.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/ diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties new file mode 100644 index 0000000..45dac25 --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties @@ -0,0 +1,7 @@ +FeedbackQueries.update=PREFIX irpuser: PREFIX xsd: PREFIX sioc: DELETE {<%s> sioc:content ?content.} INSERT {<%s> sioc:content %s.} WHERE { <%s> a irpuser:Feedback; sioc:content ?content.} +FeedbackQueries.update.create=PREFIX irpuser: PREFIX xsd: PREFIX sioc: INSERT DATA {<%s> a irpuser:Feedback; irpuser:onJourney <%s>; sioc:has_creator <%s>; sioc:content %s.} +FeedbackQueries.update.delete=PREFIX irpuser: PREFIX sioc: DELETE { <%s> a irpuser:Feedback; irpuser:onJourney ?j; sioc:has_creator ?hc; sioc:content ?c.} WHERE { <%s> a irpuser:Feedback; irpuser:onJourney ?j; sioc:has_creator ?hc; sioc:content ?c.} +FeedbackQueries.query.getForUser=PREFIX irpuser: PREFIX sioc: SELECT ?feedback WHERE {?feedback a irpuser:Feedback; sioc:has_creator <%s>.} +FeedbackQueries.query.getForUser.feedback=feedback +FeedbackQueries.query.get=PREFIX irpuser: PREFIX sioc: SELECT ?user ?journey ?content WHERE {<%s> a irpuser:Feedback; sioc:has_creator ?user; irpuser:onJourney ?journey; sioc:content ?content.} +FeedbackQueries.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/feedback/ \ No newline at end of file diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties new file mode 100644 index 0000000..994c18b --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties @@ -0,0 +1,24 @@ +# create a new journey - expects args: uri, lineURi, direction(inbound/outbound), deviceUri, userUri +JourneyQueries.update.create=PREFIX xsd: PREFIX irpuser: PREFIX transport: PREFIX transit: INSERT DATA {<%s> a irpuser:BusJourney; transport:line <%s>; transit:direction "%s"^^xsd:string; irpuser:withDevice <%s>; irpuser:user <%s>.} +# get journey by URI +JourneyQueries.query.get=PREFIX irpuser: PREFIX transit: SELECT ?route ?device ?user {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} +# get journeys on route +JourneyQueries.query.getByRoute=PREFIX irpuser: PREFIX transit: SELECT ?journey ?device ?user {?journey a irpuser:BusJourney; transit:route <%s>; irpuser:withDevice ?device; irpuser:user ?user.} +# get journeys by user +JourneyQueries.query.getByUser=PREFIX irpuser: PREFIX transit: SELECT ?journey ?route ?device { ?journey a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user <%s>.} +# delete a journey +JourneyQueries.update.delete=PREFIX irpuser: PREFIX transit: DELETE {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} WHERE {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} +JourneyQueries.baseNS=http://www.dotrural.ac.uk/irp/ontologies/user/ + + +# expects location sensing device URI, phone uri, phone uri, os version, unique device id +DeviceQueries.update.create.iphone=PREFIX irpsen: PREFIX ssn: PREFIX irpdev: PREFIX xsd: INSERT DATA { <%s> a irpsen:iOSLocationSensingDevice; ssn:onPlatform <%s>; ssn:implements irpsen:iOSLocationSensing.<%s> a irpdev:iPhone; irpdev:os irpdev:iOS; irpdev:osversion "%s"^^xsd:string; irpdev:uniqueDeviceId "%s"^^xsd:string.} +DeviceQueries.update.create.android=PREFIX irpsen: PREFIX ssn: PREFIX irpdev: PREFIX xsd: INSERT DATA {<%s> a irpsen:AndroidLocationSensingDevice; ssn:onPlatform <%s>; ssn:implements irpsen:AndroidNetworkLocationSensing; ssn:implements irpsen:AndroidPassiveLocationSensing; ssn:implements irpsen:AndroidGPSLocationSensing. <%s> a irpdev:AndroidPhone; irpdev:os irpdev:android;irpdev:osversion "%s"^^xsd:string; irpdev:uniqueDeviceId "%s"^^xsd:string.} + +DeviceQueries.iOSLocationSensing = http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/iOSLocationSensing +DeviceQueries.androidNetworkLocationSensing = http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidNetworkLocationSensing +DeviceQueries.androidPassiveLocationSensing=http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidPassiveLocationSensing +DeviceQueries.androidGPSLocationSensinghttp://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidGPSLocationSensing +DeviceQueries.iOS = http://www.dotrural.ac.uk/irp/uploads/ontologies/devices/iOS +DeviceQueries.androidOS = http://www.dotrural.ac.uk/irp/uploads/ontologies/devices/android + diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties new file mode 100644 index 0000000..3e05524 --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties @@ -0,0 +1,47 @@ +ObservationQueries.baseNs=http://localhost:8085/observations/ + +# observation create - expects: value uri, optional location triples (accuracy, heading, speed), lat, long, easting, northing, sensor output uri, value uri, observation URI, sensor output URI, optional sensing method used triple, featureOfInterest Uri, observed by URI, observation result time, observation sampling time, server timestamp +ObservationQueries.locationDevice.update.create=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: PREFIX spatialrelations: INSERT DATA { <%s> a irpsens:LocationDeviceValue; %s geo:lat "%s"^^xsd:double; geo:long "%s"^^xsd:double; spatialrelations:easting "%s"^^xsd:double; spatialrelations:northing "%s"^^xsd:double. <%s> a irpsens:LocationDeviceSensorOutput; ssn:hasValue <%s>. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult <%s>; %s ssn:featureOfInterest <%s>; ssn:observedBy <%s>; ssn:observationResultTime "%s"^^xsd:long; ssn:observationSamplingTime "%s"^^xsd:long; irpsens:serverTimestamp "%s"^^xsd:long.} +# create observation accuracy +ObservationQueries.locationDevice.update.create.accuracy=irpsens:accuracy "%s"^^xsd:double; +# create observation heading +ObservationQueries.locationDevice.update.create.heading=irpsens:heading "%s"^^xsd:double; +# create observation speed +ObservationQueries.locationDevice.update.create.speed=irpsens:speed "%s"^^xsd:double. +# create observation sensing method used +ObservationQueries.locationDevice.update.create.sensingMethodUsed= ssn:sensingMethodUsed <%s>; + +# delete observation accuracy - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.accuracy=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:accuracy ?accuracy.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:accuracy ?accuracy.} +# delete observation heading - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.heading=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:heading ?heading.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:heading ?heading.} +# delete observation speed - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.speed=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:speed ?speed.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:speed ?speed.} +# delete observation sensing method used - expects observation uri twice +ObservationQueries.locationDevice.update.delete.observation.sensingMethodUsed=PREFIX ssn: PREFIX irpsens: DELETE { <%s> ssn:sensingMethodUsed ?method.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:sensingMethodUsed ?method.} +# delete observation - expects observation uri +ObservationQueries.locationDevice.update.delete.observation=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: PREFIX spatialrelations: DELETE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long; spatialrelations:easting ?easting; spatialrelations:northing ?northing. ?output a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?output; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:observationResultTime ?obsRT; ssn:observationSamplingTime ?obsST; irpsens:serverTimestamp ?serverT. } WHERE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long; spatialrelations:easting ?easting; spatialrelations:northing ?northing; irpsens:accuracy ?accuracy. ?output a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?output; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:observationResultTime ?obsRT; ssn:observationSamplingTime ?obsST; irpsens:serverTimestamp ?serverT. } + + +PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:accuracy ?accuracy.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:accuracy ?accuracy.} + + +PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: DELETE { ?value a irpsesns:LocationDeviceValue; geo:lat ?lat; geo:long ?long; irpsens:gpsTime ?gpsTime; irpsens:deviceTime ?deviceTime; irpsens:serverTime ?serverTime; irpsens:heading ?heading; irpsens:speed ?speed. ?output a irpsens:LocationSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationObservation; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:sensingMethodUsed ?method; ssn:observationResult ?output.} WHERE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long;irpsens:gpsTime ?gpsTime; irpsens:deviceTime ?deviceTime;irpsens:serverTime ?serverTime;irpsens:accuracy ?accuracy; irpsens:heading ?heading; irpsens:speed ?speed. ?output a irpsens:LocationSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationObservation; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:sensingMethodUsed ?method; ssn:observationResult ?output.} + + + +# get location device observation - expects observationUri twice +ObservationQueries.locationDevice.query.get.observation=PREFIX ssn: PREFIX irpsens: SELECT ?result ?foi ?observedBy ?sensingMethodUsed ?osbservationResultTime ?observationSamplingTime ?serverTime WHERE{ <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?result; ssn:featureOfInterest ?foi; ssn:observedBy ?observedBy; ssn:observationResultTime ?osbservationResultTime; ssn:observationSamplingTime ?observationSamplingTime; irpsens:serverTimestamp ?serverTime. optional {<%s> ssn:sensingMethodUsed ?sensingMethodUsed.}} + +# get location device sensor output - expects LocationSensorOutput URI +ObservationQueries.locationDevice.query.get.sensorOutput=PREFIX ssn: PREFIX irpsens: SELECT ?value WHERE { <%s> a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value.} + + # get location device value - expects LocationDeviceValue URI four times +ObservationQueries.locationDevice.query.get.observationValue=PREFIX irpsens: PREFIX geo: PREFIX spatialrelations: SELECT ?latitude ?longitude ?easting ?northing ?accuracy ?heading ?speed ?obs WHERE{ <%s> a irpsens:LocationDeviceValue; geo:lat ?latitude; geo:long ?longitude; spatialrelations:easting ?easting; spatialrelations:northing ?northing. optional {<%s> irpsens:accuracy ?accuracy.} optional {<%s> irpsens:heading ?heading.} optional {<%s> irpsens:speed ?speed.} } + +# get location device value for an location device observation - expects location device observation uri +ObservationQueries.locationDevice.query.get.outputValueForObservation=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX spatialrelations: SELECT ?latitude ?longitude ?easting ?northing ?accuracy ?heading ?speed ?value WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value a irpsens:LocationDeviceValue; geo:lat ?latitude; geo:long ?longitude; spatialrelations:easting ?easting; spatialrelations:northing ?northing. optional {?value irpsens:accuracy ?accuracy.} optional {?value irpsens:heading ?heading.} optional {?value irpsens:speed ?speed.}} + + +# the type for the device location observation +ObservationQueries.type.locationDeviceObservation=LocationDeviceObservation \ No newline at end of file diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties new file mode 100644 index 0000000..62443e8 --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties @@ -0,0 +1,24 @@ +# args: lineType, adminAreaUri, directionQuery +TimetableQueries.query.get.lines=PREFIX transit: PREFIX rdfs: PREFIX naptan: PREFIX skos: PREFIX irptt: SELECT DISTINCT ?line ?label ?altLabel ?direction ?directionDescription WHERE { ?line a %s; naptan:administrativeArea <%s>; rdfs:label ?label; skos:altLabel ?altLabel. %s} +TimetableQueries.query.get.lines.route.type=transit:Route +TimetableQueries.query.get.lines.route.property=transit:route +TimetableQueries.query.get.lines.service.type=irptt:Service +TimetableQueries.query.get.lines.service.property=irptt:service +TimetableQueries.query.get.lines.direction= ?trip a transit:Trip; %s ?line; transit:direction ?direction; transit:description ?directionDescription. +# args: service/route property, service/route uri +TimetableQueries.query.get.direction=PREFIX transit: PREFIX rdfs: PREFIX naptan: PREFIX skos: PREFIX irptt: SELECT DISTINCT ?direction ?directionDescription WHERE {?trip a transit:Trip; %s <%s>; transit:direction ?direction; transit:description ?directionDescription. +# args: route uri +TimetableQueries.query.get.servicesOnRoute=PREFIX transit: PREFIX rdfs: PREFIX irptt: SELECT DISTINCT ?service ?label WHERE {?service a irptt:Service; rdfs:label ?label. ?trip a transit:Trip; irptt:service ?service; transit:route <%s>. } + + +#args: service/route property, service/route uri, inbound/outbound string, day of week, startTime, endTime +TimetableQueries.query.get.busLocation=PREFIX xsd: PREFIX transit: PREFIX sprel: PREFIX irptt: PREFIX wgs84: SELECT ?arrivalTime ?departureTime ?stop ?easting ?northing ?latitude ?longitude WHERE {?trip a transit:Trip; %s <%s>; transit:direction "%s"^^xsd:string; transit:serviceCalendar ?servCal. ?servCal %s "true"^^xsd:boolean. ?stopTime transit:trip ?trip; transit:arrivalTime ?arrivalTime; transit:departureTime ?departureTime. filter ("%s"^^xsd:time <= ?arrivalTime && ?departureTime <= "%s"^^xsd:time) OPTIONAL {?stopTime transit:stop ?stop.} OPTIONAL {?stopTime sprel:easting ?easting.} OPTIONAL {?stopTime sprel:northing ?northing.} OPTIONAL {?stopTime wgs84:lat ?latitude.} OPTIONAL {?stopTime wgs84:long ?longitude.}} +TimetableQueries.query.get.busLocation.inbound=inbound +TimetableQueries.query.get.busLocation.outbound=outbound +TimetableQueries.query.get.busLocation.monday=transit:monday +TimetableQueries.query.get.busLocation.tuesday=transit:tuesday +TimetableQueries.query.get.busLocation.wednesday=transit:wednesday +TimetableQueries.query.get.busLocation.thursday=transit:thursday +TimetableQueries.query.get.busLocation.friday=transit:friday +TimetableQueries.query.get.busLocation.saturday=transit:saturday +TimetableQueries.query.get.busLocation.sunday=transit:sunday diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties new file mode 100644 index 0000000..493254f --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties @@ -0,0 +1,4 @@ +NaptanNptgQueries.query.get.nptgRegions=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?region ?prefLabel ?regionCode WHERE {?region a naptan:Region; skos:prefLabel ?prefLabel; naptan:regionCode ?regionCode.} +NaptanNptgQueries.query.get.nptgAdminAreas=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?adminArea ?atcoAreaCode ?adminAreaCode ?prefLabel WHERE { ?adminArea a naptan:AdministrativeArea; naptan:region <%s>; naptan:atcoAreaCode ?atcoAreaCode; naptan:administrativeAreaCode ?adminAreaCode; skos:prefLabel ?prefLabel.} +NaptanNptgQueries.query.get.nptgLocalities=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?locality ?prefLabel ?altLabel ?nptgLocalityCode WHERE {?locality a naptan:NptgLocality;skos:prefLabel ?prefLabel;skos:altLabel ?altLabel;naptan:nptgLocalityCode ?nptgLocalityCode;naptan:administrativeArea <%s>.} +NaptanNptgQueries.query.get.busStopPointsInLocality=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?busStop ?prefLabel ?street WHERE { ?busStop a naptan:BusStopPoint; naptan:nptgLocality <%s>; skos:prefLabel ?prefLabel; naptan:street ?street.} diff --git a/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/user/queries.properties b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/user/queries.properties new file mode 100644 index 0000000..7f7ef3e --- /dev/null +++ b/src/main/resources/uk/ac/dotrural/irp/ecosystem/transport/queries/user/queries.properties @@ -0,0 +1,11 @@ +UserQueries.query.isValidLogin=PREFIX xsd: PREFIX sioc: PREFIX irpuser: ASK { ?user a sioc:UserAccount; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} +UserQueries.query.exists=PREFIX xsd: PREFIX sioc: PREFIX irpuser: ASK { ?user a sioc:UserAccount; sioc:email "%s"^^xsd:string.} +UserQueries.query.get.email=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: SELECT ?nick ?user WHERE { ?user a sioc:UserAccount; foaf:nick ?nick; sioc:email "%s"^^xsd:string.} +UserQueries.query.get.uri=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: SELECT ?nick ?email WHERE { <%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email.} +UserQueries.query.get.user=user +UserQueries.update=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: DELETE {<%s> foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} INSERT { <%s> a sioc:UserAccount; foaf:nick "%s"^^xsd:string; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} WHERE {<%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} +UserQueries.update.delete=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: DELETE { <%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} WHERE {<%s> foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} +UserQueries.query.count=PREFIX sioc: SELECT COUNT(?user) WHERE {?user a sioc:UserAccount.} +UserQueries.update.create=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: INSERT DATA { <%s> a sioc:UserAccount; foaf:nick "%s"^^xsd:string; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} +UserQueries.update.create.authToken=PREFIX xsd: PREFIX irpuser: INSERT DATA { <%s> irpuser:authToken "%s"^^xsd:string. } +UserQueries.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/ diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..446697f --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,25 @@ + + + + + contextConfigLocation + classpath:applicationContext.xml + + + org.springframework.web.context.ContextLoaderListener + + + org.springframework.web.context.request.RequestContextListener + + + Jersey Spring Web Application + com.sun.jersey.spi.spring.container.servlet.SpringServlet + + + Jersey Spring Web Application + /* + + + \ No newline at end of file diff --git a/target/classes/applicationContext.xml b/target/classes/applicationContext.xml new file mode 100644 index 0000000..34a1d19 --- /dev/null +++ b/target/classes/applicationContext.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/Util.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/Util.class new file mode 100644 index 0000000000000000000000000000000000000000..68e55e09b06d6816fc3923ca3df10f9be8d4688d GIT binary patch literal 2213 zcmcIl%W@k<6g{nn$C3ueacsvi$W9;xJ?so5Ktg0hjPt-jb^yf=w%D|#E@jL}a^~TR zS+n62!VWems#rK1g+P(Yny=sk_y)r1kzJ9ELy5xFRCV`s-@fS zFc1;Q2VYvUYSmi48@ST3YS*vu@p7 zTUS+Ipl`-*+I~?Wn#nE;#O7Kxl|&Q?6LItj94XmNwHP$klzU6AIZ9xt)T&BnS-Q6V z-`R}$cWh5!y7Vs~6$A$A$}cN-)2^y3a*GPCXDX}NO0Qb(2FkUSXGurV%`Qa+14jjp zh3*FQ-kNn?xmB_~KZ!vkk{HIQff0erJ>q?#B@@Rn#xQP5Cs1_YYUVKDYn0Nt|TrJo_uAhk2aW+pn5<4W|VRzZE(!kjYdI&~d*2n>n4P-1;o6-=w8-sZR|2{xFEuRvRob$FtVuy*10X8_L&}Wa&zy(L~v< zH>DrAOy-aKt@iBLKbR=~Pta3%2NMR~Wm!KjJRK^1aM8qjxWtg!zH+7Ca+%Uhwkvn@ zJNtzcW>7TnK0D2GHM^%KKEP$ts;Ta=c@6Js=xS*!{SO6Zd#vjhhbf6!TrqJK*I3TVz%PrLewiBItv>-3KF z7DKOC!K{|JLpqRngIzHSc}G!w6yh2BI|+HyZ3RBbGj}L-T-s;a0#TPJum)j~qDC7xZy7_-Anzoa4Di=zqvX1WAti7)T(+(d-Cteu;nIU;szB zqc8tJWiiede!<|%BR*k2;n+g7_yEJX^!fWp<)_l;+Bk9h>!?WQo_zQ0k9@w3^sg9h zGr(d^>xNUcytV3lJ8mA?RwnPw&c literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/ecosystemTransportResource.class new file mode 100644 index 0000000000000000000000000000000000000000..f50b36432a9e414385883f75d0edf9fe36c4d051 GIT binary patch literal 2783 zcmb`I?Q+{h6o%h*;y5-6X+kI^e6*#6+HuL!Ld%EKw8nLcXADha$A1|`**Z#P$*fjs zdKFv;|6m3R!w)Wii()vtl0Ta`nY5EgYpryieb1h==luKM-~Rx(iCP9JhH~_j+Ya9g zl#Hb9aaVS^aDwo8s6>Y=Y5QR}kZLg3>`iTpFo>ihGMHw#a9|(W+_U{Qf3$lb9F@Tg z!`BnxP9O!B2_@v))kbqO@)}#^?Zjti`7)tfim4`wex{e5Wthi@P z=$Uobchv^NRKCz+n63nSB8Mp~SeV0`4D)r@7e7RuT_Kw`iDp==2afHvZ0YLfWO7>V zyW~Y>vX--ih%_yRLN#K=J*5mA`N?dv*C+W|Xk|hBZ{ZDCn>2D3R_#?=h2oGB|$@Y%vLK4SPK ze{x2iQ*<1e*X}+;Ds&lYuT2#tchudp73J)`bB6kHB;@l_p``9r9)nYiGEfub;MN;boW2QPyR*nm^|W?9~@t zz0D4OW#KmNQ0h2RnABMuIX_#E8ckiHMkj5xPm}3G+lwgKrrLt4%MwW%Z#4AL!ieR= zs;13Qi4i(YmquPbsMf2^YVW-+y`#okJK8wcFr97F)gN4bxl#05-TE84K ztknbA=3!T7(i3TS#Iry?rT%3)5V!lCiZ`5~D`?q_6qFR9!d0qTQ*@<~qCYBL^gByU zdxpjwjVWDoY0S|xbribK(-WtW(U@NS6Bm9npDof|8v*a&ExKFr2Ux<}^u%zH=40ax zvlM;3TKof-2G%*62c3d6t{B2a^E{IfG+j&43oqlngjFW-+G=j~cU+?D{o)IJ_$y7M zFc5TY2shWq&EXn8HaMyaeVpC}AgghNx<0P%I&DyX2$${SvUGG;4X%J?~*9qg^r$15KX&BV?w)YXg3mxDK;){eF&H8;$ggh-~A6cV!>bl literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alert.class new file mode 100644 index 0000000000000000000000000000000000000000..baba001d184711851bca6028824296926c3954e2 GIT binary patch literal 3426 zcmbuCOLH4V5XXCES+eDoo%jWbfrN*NEQ2=*gaA&A?Z{3{l$Wh2#!i5hv^eYRBef53 z4qV{E1unV3g$o?10;=MoiUS{j4@L3sk!0Dkvs^ety|eT0?%(wE%sPMn^XFegbdFki z%4oC@KQhdw(ek4p4ot_egU5!|^us4%WVuEZm|pnU4zW@2m|xRK zKX`Y;M*JbmYxM+$&PYrZUE7NzD_pid^8-ZBw#+A?Mwx9S&0VrRJ6gbkN;7p#T|pTN z)JIb~Jx9-LG*SiZ&Dd>NLCtJ9@E)!DP1C8Hfz9L2%WU+}M##nL|Eo5tm)o%-QJnG8 zjHbnnoc8h3=()ql5A;>lZ+g8MvJo74V{j& z*T`Wn(Z0h_uk@Om#dmZXW$`e?ho&?t_OzY2cXb+LX|X32QF#G)=$#9W`;kuLUGyW9 zIJMAM#JS0qX0}D?Kh|l2CNYK3?Wz9KwkUjI1IM&!t=fEG3gRM}$A)Q79ANEz-@JY~4kghdAli!KosJs>Q0R#@zru-FM|P2PUkOaM zq#_$mkS)t(_myN7HQBOEW`eAdLdKUAldaHdvSuTR-MlLA=8lqVjXp%o#BN@d$sCZm zDP(+YGTC(%+3^HfRVE9RWH;4hRhjGyknN?A@kP#Lw^U@K39{QV*_TSPbv4;-nd~c& zeVszapB5(DP?3!#$Z9g#H%hX)nye<1eG9VhQposY$7J_ZWaA04O_}Vel59&&wkeZ+ z53(Op$oTWiWZQH*R9WDn$<_D3bzC-f;|9z6m0Za$F7egfIgDP;Ty0sfCbrnsjX L;+xKQZ3s%+h literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/alert/Alerts.class new file mode 100644 index 0000000000000000000000000000000000000000..b6045274954b3c2cfb5c35df1b95933dcc0ef7f9 GIT binary patch literal 904 zcmb`FO-~y!5QbkTAt4_?2_FT@g-aDu35zob6j6GLS_x2u)RT8(Q3tObt-UDxE091) z9QXnJDAe%=N-I@d!ePfVv$O9!Gwa8v`v(BqSg)YKu%DfC5%a$FX_gAjRXXG{w(in- znQ)&9+R4C^38(hzr5BFlYQnG?1}pDCb3vq4TplS&JPK z+f_#SJ%(ayv&T?6Aeb78s5el-G{an18Tma+BAK3uNK1xh*TzEkM5;pkoGkfYDiBQw zNUyo9a5$IyP8^T=BN!io)| zEYd|}C zAHWY~{GVopp7`SX!NrBK^P@bc6_($8Wmx>XF`@7 z@6z+7C4ASgy)(!4h2@lG#S^E-MNyRHxml9pRUqQjrcvtDI5$MauusH6@l=+4jasX& zsZo0GT9fx((>__(sLj7TlMuFHLBu_2dyeaAw6pi`F!@>#MDKCVq-*#{l@E&0XfSkA zkgjJswniOQ+x%FSuge<6HcZ>}H^H6B7QnWHdK1)2X`Q;M2T}J-Tkcn_qI8dpVg=mk zJ*Q+;3WjU)d;PG@e{Z6a?ORk*Yby#F$V8i$Ep(Db!#cH74A3XiKjt>~XR=XS*d11F z-?U`G^h_{r*|y`OGmZ_!sleevTv!!RH0`o58d~wrs_a&zC2b!VF|VE^j%-Jm921P| z6lVeqFF3;!wEGw+Yai*)3`%zuc^OOOWi z!Odmjq(Y}8SC>Z8kQyzI`qbBrU6*vy*>yPT+E~gYA{^KEl6{`()WtqY_*|W%;=EIJ zOEPEjDkf_?GsoW=n)3I_9y*SHHC-AvAyxC?lt@YKSC4J1YwNOU-mC_0d+AdsMf zOd$fk5d5d`wgjm`w$FT{-p_$qAN~^v%cgDAOZ|A#YeqCcgLvZrcks^va2H67@Sv*2E7ABiel1-?|#;*HTBb!40 z=_X`6a_-qf64* z@y0Z>VX{?_tu-Oz&w|OGsCt%+kj;h3UMR`t)jgXFlWl=)y9pV8s7$t?BGV&ei(#^y zl5AN`wiqUR1G2YG$oT4DvZpGtt_aymnCw7FwyGvu36tePcGQH7FEb4rwuYT(q36N9 J!6)lPzX5nIgK7W( literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/device/Sensor.class new file mode 100644 index 0000000000000000000000000000000000000000..0ec23916b4eedb3d04957f520e5af852cda58560 GIT binary patch literal 1456 zcmbu8TT>G;6vt1trKJ}H%N<1oxs)Pge3oInj6PLyC^EjLZKecw6DFHw;9Kd8jx#>^ z0sK&o=j^r=wu>)5v`J1*{^ytT&;I`N^A`X-gS{en3|>T^x#;k&aW=BT=gOXQ*)ic& z=w!g16*@dO*73k}r62M$aoOfwd7(Ozx1qwl0UHC+@+@*}5w-c+H(>{3hhv~ZD?4AxWI`=jy) zc%-nev~mXsQQtmckbjNvWyrx)6{;}7V6v&Sd>;jEX^%zQN8wu2bcBB*tfF;4n0KcN z8DBO3w?~B3lkOvRWTw773e8~gDAG;^@5!{W1*Dvbf0yoOr%@sXr?q}&fWI%>U`j5xn&~Tk#7|_ zUP+$s9=%TnjeocJ$QU_`Ii6QA%ILx2|2>Rw92t&d zjUO=iHBPyY|AjbMf*Q`NNdip646Yc=!W@dv3>^||NxI^TbM{RZF}cG?IS4$Jpkq6aVmHw^n|}krZRO5ZCmFl8CTiT zsf@?Ux;=)@P))ROWg!_(meTw2Wi{;`P>a^S(#jn$H2S+EhUO7D2+_c`2pxnB>#@@E zWtk_kI1x!kLT<(;71>A>%Et?^>E0>JaCB)=mNbPE=@!>U?fSb*&Z%Pb7kEY2v3*=> zr*b(`R*}0yt&I~-8BOLMS32f=o@YE!dd$VIEPtD4&oh}z?Z?*CB9|R7Y)4o@iwxO6 z3~lt6{rHQ2vy5JeA;=-T$N60Yvzt>}9+__)ukkbbJ zEDV9SOM9E50IP)38%9X$8X=r^M*GU(3!;xz$#q)&0Z`dGtx;WoE^bgn!^Z}Z)O5G7 zN!S{pJ^F52>UELz6Sh83MS$O|-G8#)!Ck7VS?^UOuPF}bY-{l3Gq$|8M#U0V=q9!5 iRZP9QYN5|-uMOX)6Sa1atdhO}4=ODWE7jiPBj6{*HyXVF literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedback.class new file mode 100644 index 0000000000000000000000000000000000000000..460a258adf047723562a481ca4a0649339e43417 GIT binary patch literal 1799 zcmb`HTW=CU6vxj11%a)tNLBFCRx5JRPW#}CHN-}(i9t|i{ONdF7LU<3p`Og!J+!nge-*pDEYZxR0 zPcbO8rYlFrQ@X#$ATw|SPs=kTXf1#+KFwc`R8TM#_|jw0TttnI@?&fW%#pq?`jSEV zsnW_c@fy`y8y!5y5ab{Us}@+W%wVOZw0s*l9qGLn9UD&+T5ea^ZQ&^zk0(>+lkyoH zECMzYX#`C7r8%a!7OSgck1>T6B+=Snwradl^R@ zEknCh{{bss!);fvO^1^?C}7_jZGfv##1VrvxQ61_v7g7$4g5+z`utbz86|AhIpoF+-M}A*)2m>ak>1sKt?0qGTM&cIJ>#Q4m=@E}Quo lvPP8baV*)R_-r_2Z}5*&HXFh_<-481dvW21qUk`M!Bks(65JQM#osmB z(lZR4B$m-pq!^Uyz1;&7DcyR`V65vel@!}y5@~snPMko-v1myK(;_h^QXAz7qe6Wc zo=VN2@Iq;2wipam*Nz$FcaX9OLon&W7`O~3>q^VFNzjndp=kK%r&JF;;U9}g(Y&*m zHzz7)uvh<&#lXahEoqLrsn1l`Y{^&l6HF?Q$0}9`w5@e$(hQMjH9c_7&jX(~lx}iy zwaY&Q{wrSwSP=}A*CLRkz~H6}!%)D;@wLda)&9U#tqH{I-XK<+&fjstq4N`X{@NCU zan!!Px)_qKxG+M}ag_FUE|cE7yfu#(|@Lxz59k_vGl2U*YOru3=n8hGv9Fwa#{N`ia{@dGEsC-66 z4tm~7R&Tf9HhQ4LTd2;VE!5V(L8Zr1OjqYH#C+?`F-x|L@mB_r(Nz%Hl8tPnk8C+hR<)Advy&}n$u^K|a{w7N2a(;kk&X6|t!Bxd zSjnn(vehivQzUyffQ;Ie$kuFR#XhoHmTb#P_RvmN%aZLN*~% H6%OzRT7ViU literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/feedback/Feedbacks.class new file mode 100644 index 0000000000000000000000000000000000000000..96edca8b96d99902949cc03907957696563e74ab GIT binary patch literal 1252 zcmb_bU2hUW6g>l5D0E8^Dq6K_UkqU4#P~?l#F*9>qNX*3=+o>n;?Uh$vO8<&ztTiw z;)6fHA7#9=3&eu)iHDt!JLjHz&Yjs`zkmD$@DxX76c|p^OD=pqicFlwBH${Xa_L9O zRbphwO)PXWjbg*YXe5J#PsGgQAEX?4!oTEa^F>mI!%&}yPl5+RkNInFB7MV9SwIsy z?q}zzQ33C(#PsO+LXEXBX)GCrE62zEO(^S~P?^%P(#o7L6x*EvgY$yCR8hpPiwdd? zdwr$lt2Fdv{8o4YiD~pBUjzdYE4!Zu9rICW-B>3&g9;dK zy4XUAp>^Hk)pX(09ZR#kS?Wc*vnrF}-CA&CDj5#WQ*Bfz2P#q2{^wdpMi>=o>i(ll z%Z$&$fO|@hxLBU@VHlhSGL+iBEk}!xZqiMznWw8u`31L=%w4+i5$&sk^gecb34v(nMq8 zg+IU_WjtrL6xl6aENQya**Wu`XU=&$zyJLF1psUCya+i4o6%=3TDAPR)bRdCE@ z%MZ^&BRy^cp~GW8Fx>Oo(hYe>oHlvKj{+^v_}h3aLY~2BN1O=m3Vp=iH#@Rr7z{*# zVlcLMv2tJnrH@`Q$VZ_J7}WPNWT&nC5Fe!DDlHjoWzjLplSVXM$@fqM#R_eCqFN}o znME$%%(txusl8TOnL3uCQf(mV78bA!18~cMn=s5^gtESiyrv935Cv7rZwa>{0!8!g z%e?udLI&GekP>}DsEJCt8`VY$7)(1b2nEDGlID>5HeRWwV;RisN17_vP@zJ~4Xu46 zjPf-?F4_&J{M2)KQ|UGry;c6vb9Y?nNo}ZYT6lQiLfFk!q@>mnZ!qh%JV9rfcc2J2 z7!*n0%5GGyr%D|pNa`7bootW^!x3r4ffAHs(pY;p6KO)4a7&0An-SfU4fwL9iFeh3 zA#hL}D|;@!lZp7UHUXCp@H%P9T}A%|r+c@o(&fRR_J3#X`@T7M7tA5&0N!wU$dRS- zSB~spM=Z7-@enwcF%tia_#DC6I*ts-!P*ZP{c6L;Y)}rLV<>kUKY$x;5RAhF&PZSq zpCqu0i72*A0=4DuFm<6aY>_5VWePh!ZIveD=&lms5H3N?z#Uw>i&{fCyNBP|5Em&4 zw*f@?4W_=}iyX3n-3Kt+m+*d%u#VA0SV+*7?b~@wvG5OBp+{Eekv)Ki7@Hs~rpV@! zWR<>T3-Ab!L&v&AHg{3Cm}~{}uU(|@l57jfwyz)~`!i%(v;KKz`$^7Q2lxwp(Z!em literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/journey/JourneyPayload.class new file mode 100644 index 0000000000000000000000000000000000000000..700959c2d77c64882af4188ad5db5e59bc1e80e8 GIT binary patch literal 1884 zcmb`HTTc@~6vxk$(%P~LQb0gOkc(|mMiO7Vgaid6(5T@SU#Hs%OxX+Boh9^JX`(Ul z!4KevGX7^5ByG1oR35r#X7=p={LW?i>-UeJM6^n)dCD-_icYw&dBfL16bOf_;FL?- z4_l#@F4uwZ!c#xc-1QsM33*eT*Ll;A0#CO1c49w@mg9>?p0bQan&M1wM|em4L%k_& z&8Q?IeJnk#Y@wC!?fWOvV>DX3^4!yb@{V3I%IemsWc04~|4{o-f?_@jWpEHEM!AMO zQ#RCJ_oJSC%r{~U=;mH2Pw6#A1Levgz~7)eMH-+Hi!8dyXt<_4`95;%GT0Y&2VqBR zzAct3f)|%FN!j%PLbl0Lm%7G&6K`~zLhA=hE1KV_s(Ka}* zX#xzEpOW%MO0e+B-nF+UKQNa|Th;SFjj0*5chKJEcf9bW4poz3> zQIUoqj!2i{n|-C$t{o?}hs$ltx5~_Jsr{y}n5)aE`tRA;^?iLgA2bKt0sQS`DPzV1 ztBh$%Y*DS)A{SVb7_JbWx3J@|40f>korb@}ZnyEw#fJqN#o9_7s6=DfF&d`{h~L3_ z2)jxArb5JQSNlrSpW%_AE45Op+C91t1@rM5yfd)5>hd?5zG5lHr;`XV6)TwNhA`nV zE0eHEV}>5!T?bjdi)^-&Y$lcLAwvbk{LKoR$Cs`$x>`{8n z7CXsSK*oEJnV~RbWvX=7tk^|X?Ie4aO7@tZK(nix)lRbKAbZh+%#0}m(@H!)JnpAq HeMXQ$5vp>Ew^O>3b`Rn@+BDzm|9_1JvCLg%y@qT1YVno1|8FAT* z;z?{}$gL4N9!19TFzU-7=0h>=@?n%1Ehqfd)SgU6(xU>S%20e1JP>-o-*ktvXBp)a zqZnOk&u@;cQF`#0kryZ}-@5BkUm2)Xq!|^TD6Q-PJe&I+Mulg{Tc$i+@To*)M(b^O zy-vceG$*1PNEbZniJ&8la{Jj~!M;~9qnGXfQyy@O18Gy*&E|eqIon5xwknhz6)SK& z)jG1m)dY;a)M3oWVZgge_qjN`6C7#^K>V7h<*dMaMm;c literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/FeatureOfInterest.class new file mode 100644 index 0000000000000000000000000000000000000000..b905d543fbf0c5ae646d837f0dcab1ad84bd167c GIT binary patch literal 897 zcmb_aU279T6g`t{H|;jI=~pzi3cg5^LI?3tDTo*lf|XQ*ud~TCPTZX-GqWZBD+NEm z2Y-M+O1!g)jS%t4hrM&}+;h)4GqXQ_e)|sK0q)jNVR%`*<6^|e#@oV*j4OM|<;b}A z&dZ#8E3~^b*7MwqW#;%)%u;SrC+(H+%4pt`!WUMaT|C!bTIqZZ5kq4tt_077p767D zDo387T3E%f+h2Chy;XYhh#`KgwDPBfX?KPU(Noe&P{n2)HLNpi_m!3}iaeF}l}Ixg zXv|1tLt#~@7n_lPs~p3i|G$q!77yC1#yi6VWTlQhH0Tgc`q$xz@nn(gw>zst46Q+- zy~^cKIYs85Xl;CXm*o9^IWXh1Jmaa-V=k_{{7s%c%VaLKCqI!Ex!fT6+jXoVW=PIW zVMns3!u2#)UgacQJ45&1`~zeBZw=fd_A31;43!{3SwuNK2*nMm9@5HaUF&{D@{y7X z>J$@Nfg1$gq6pe6K~!y16$ly>13{0F0h7fO6cG)?jC=)>C*52;#f4jHGhkyV62LSHCk7F>xU@!XJv|47{ z7eN$Qj%f#{CU5!Sn^17q6oKW1r+y$z*KcztG*7Ivrs+3B9=x`M?R#dm_dW(01~Vtt zYs+*j?-)Ow@RndO8U;3ke5LoLE&|&-E;G2Ca8=`Bkc}h^mid=AJ zp1F?Mw7s@zb-$WFyUtUGyWFGV%6OK`$C2j?11><8!5l_SXgDwGDl!bStSRKG0TW0`f1v$%-r z-K&n4RSd|{GD>{!3*H-bKMGoW+ot9^lQ_w1q=`Z4|C>?G_r-Zbf@O>|ivKWNgc0gT z_%=d&AV*}DBSOd#n};0nh{+MFQjVBX9P{W2F93XA#@Rg_8IBi9f5H4aX|{;Z9J(jd z44PiSHzPKJCHMqqSl5LJ0lve+QYdtSh5_ulIEa1j2N>B5#b;lD$x{h)P zVi`WiZ#U4_1kP^a->nd}QV>%b5al1R@)my>L2n?}0g~tl@e;vBw0Hxpi7;DQeGe-= zx>)0N46&Rb%XZ1Ka-)f?07aE-LLn=q$!=-MzJ#xIWTiA&5#yKokWq?>Yz?~@-LO-puHmV>fqx6@>Ik?dX{GAcSE`x?Gc$)**u`)RTVTC#89JM^iL-A|L1k!-yW z865*6dkAHfY*ry#Pm^tG$u{5z9oc%C>1J1N;Z>Lm5{9 literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationPayload.class new file mode 100644 index 0000000000000000000000000000000000000000..943937ea8c931339f4ac39ba247a0ed708bdece0 GIT binary patch literal 2176 zcmb`HZBG+H5XWarX=yomC^$HaDWIZ1~n*=q>54?zTLJ99NgWKyFCKmN)wHV zFZ=+0DC5kvSbMkil`q=ahyTp{c4qf}{`&p{0G8ot8WIdX1ZO6%nRThWz~i=QdFQ66 zN&m`M!ZDS{UH@Eq%5-F1*uHtnFRP}k`og>5%95_R+Zw;;SGMH!G$a`eobn59+T1-x z#i^(%2I&C34m^uNuH4$KD9>__Hy8}@K%EFzS+y|mzC05ygQU7T7YtIqaDC}97^DF@ zycOz1)(?D9Z>?=fS9#L51?i3iSAi#Xk9J%oJmDii>Y3$QYLh`%p?HX)x9~_==z>85 zZa^P{{<7tYcY#wC-afC|m^N3IHEthr&!TyAF{w^0pFySk-z$ez$Q}!Yr)tzGUnuG- zHMSREnH+Iw`4(cmbX}>!njzI}=x}LXI<{H0+`7sC?3y1P`?W0`tT84^y4(>NU@&1o zH>5DL|5xVWLOe0mYy|OM#`{EZrVL0^oDqzpkzoJPcOSb+;u!;aNSsD7tue^pZY69o z?H3Km(0&H@8>k1XxczQFh=R3xAktxp^6Hr&AoB$OFvIQht>_A4>m&oRHWZ4+me3WcOOSY&dn~##MA=!Ed zGI~%%X6nd#V`NKFvJEZSik@sKO7_^P@Vh}PPXK-csSsf3 literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/ObservationValue.class new file mode 100644 index 0000000000000000000000000000000000000000..a7cd776b2e378962399dd464bbe2bd4b067db9ef GIT binary patch literal 800 zcmb_a!A=`75PeRT1VVs9*-#1>E+|PQEX1)DQdPC5sHo6Jy?QrRaPZp5_M-4tRBBbJ zhkigms_J-?7KtKGXtkaa7<0pVa>^4zjI4Li<$oa?yS304&a+h4@)?fP| z3m%*>{?fX@3poRt zxQ(0zr_A^zL*tb)DjZWzw>M-+-Vjv_bu72h#3IAmKpFYIEHddnicHH`#^yo~g;UX= zZzkbfd4>;zNA4&p9Lw-2>fh}4?(1Otv@}5#a;Ur_L9dOmp&AeA*{=>v`LxhHQ)a}) zzbOA)=(k!H(gY$&j40$17&>h%ph2vD&YE`rCykS8o!Qdm@|}t^N$=joK^!$h|6%@9 zYr|g+*dz8jJr0Iilt8FXm@a|VCGw8QGO`Q(?`VA?P(z#67FiHVutHx%RT5UQMjkx} ztW(AY;brok(!c4ceyqsJnN|FX^oBNO6&uy&`n}b*@QkAI@G)ga=0^X;H>7v6vVGBaD^zf$l6 zeDDYOqr@|t*a#J$WZ9W}=iYnnId|sA&u`y}=sq2`sKMy8ddEf1$Hv>rih?V9&Sh@g zd*@}zy%pM>8|!&##TofZ= zRqz*wk$$^ZCar?fwkSH9qK@Ylm2y(2%#0+$->?4^{;|3 z+B>VXSEU>&ry$|6*2dR!go1l@!Hmz!f@eyPxwwq-H)Zj(kfqcf{30z%Od}bZ%I5M^ zh0(MZ_i!8r%_#jh)|oN>Hy+)EoF-lbqef5%D}s$Hz`6?W0d|IcCH+dtM;HxiV@$mB<>K=P<(>yKr&8`K2vweZZ2~l bEe`%*7GE-p>zRew-Ksm@uDOMtcZhxgOboOT literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/Sensor.class new file mode 100644 index 0000000000000000000000000000000000000000..c90af02d093d45a922b5344f62102c28e0d7def5 GIT binary patch literal 864 zcmb`FU279T6o%hPwi~;NZCcxE>IZluNeT|)rKKR!dJ_~H4c^WsLppJHrp(Tk_^%ZF zfL{0m{88dLo7e~yuVmSoGkeZ?-)BzpW$?-t=gtS2yNS*UIaBjgy0p;#LIvZj9BNxQ-#{eLo~a8ZGi9gpbvo1IAW$#8 z5!fEAGQ;4FojwzY4~;e9h-$jMkwEl<3=-7QY@vZ00-FP4^{X;ZwSS}1OtXv|t8Apa z;q&ri6wXW`@N)29?m=9;-RrcyQ3CRB;TGCNUg+?a?-fs%!A`e#y-A>RTH0W8Ju-zM z;^)@7P)&`1A5{%=InOhh8at8dDl6aR*>R?GZ3FQ{R^@t~?Dtz(LoARCUFpaA#PCd- zi}^q10Som1Eqdx)_$`cwBw43FfC?F+SmHukbI(`h8C>}?Vu>a zO?o)0im-uAIAh1>l1*e)z?7fS`A8oYl-vjE_!}YphLq*zBdTV?xPR~kofX~Uj{9VB_Ybo8 TiY#7|)hN%7_bN8_ybt^W69%xX literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/SensorOutput.class new file mode 100644 index 0000000000000000000000000000000000000000..ec24ec29bf7387a3d9e2c06b116db3610f581ff3 GIT binary patch literal 1350 zcmcJOU2hUW6o%j7vjr@+*4DP#N?RMC>cn`dX=03xiB)20iMInx=-}=w*`00hUuoh; z;)OrJA7wl=Yt=dbTS06fA$772z|@p~>>yd9V@4u!{6*yFMl zL?0p}eQrXbqh1gi?gwq@MZ7EeO&&BO8D0vb0?q4EM?qMNO)oZCq!_Mu#iih$&>dcD zc4f;jB;!yqtelK@>LygW^MqmHLPQPW#ggIe$(&YdV_Qy=ZOCX!3!fOIo)hLp5XAzr zSYRlgC@tT_ep7~Lg48X>pe4M92$hY8iz#!VsNCy$UvILT7GE@p@2otp{7i=`4Tj89 zrIk6NYf`Q>a!6vcfOXtrxLKaPG4=$*odUM8MXBWP+}^DW_1R5Usl_wb%mUplAdL(| zt{%i;OCBrBa(VK7AKE;I>c3ld8U*G~+fX9mBz;T?`jNVuQQK(D(9R-qw4SFZPf>yX z*COib5-o5F7>()bXB0ouB!Ojm+ALrVEA+JI=>TqEl}4gL>&zt|xq5WEdiVv!PqaJ8 zw$*@5%Gq)XYc9?V6|B1TW(yPEq1Iy;TO;4FF)g)?6n3sOvrZ)jW{!tua#o;v_!YOu zDoYN|E~)GhjQt5yxsj=y17}U`;4W!R;Y!coDox`mU+IwU$I#(lxJqMp16=p1{(}i; Ulelb48F|`si1(d0yK)cs4W-yE_W%F@ literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservation.class new file mode 100644 index 0000000000000000000000000000000000000000..ee3e247c9f1e5b075717c4e874001eb0f82ddd6f GIT binary patch literal 1177 zcmcIjU279T6g`uqiA`hLrnXuY!52v*IQXm-q#sYALX{v0;_POq)6UM6nb{Ekm4YJp z;1BReN$>1t+epQy=3!^fy?giEbMDOk{`2z}faiGFLXAP>XI!LwY=g_4&|JB5E>r72 z`yewOoG|{}y1+9#mfG`EF-^ElymS*0lr>!2v;@N$*q0NP%GXyVEi@S3-*lU~1`ORw z#YpH}dWH|fo9!XnDS|+d7{jii_5qCU8WDT%%lmVyYx15PeS4gruQ`eiyiKph|;;#hI!SqHu~RYEi@q;oVrRQ?Fgw-YET7AWc)+bg zo4ZuLQ}HOD-FD+&L|Y8q|JysTHvF-Or(~{5e$4WC_1c_RTDi?Ycv)OZWfG>3T-j-7`Oxo%~G}i literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceObservationValue.class new file mode 100644 index 0000000000000000000000000000000000000000..56a640e64a4782baf14dd98cd815a19b7d6a2848 GIT binary patch literal 1365 zcmb`GO>fgc5Qb;-<f z5E2J|06z*bV~2tqx2ImbyOVe4eP(9!>-UeJ0PqCb4wM*tOg?ep^P#a(5{ZDTXu_p$ z;ULo<{?%umH^z|A0*(NtJvG!KlQZF=*~k(?@DzWpcZiy)B>R2Y1? zYOlNtgSzm2tiwNJaI<$Rrh*4TkNA;E27!FWz!^(1RC>gq8c(DgGN?UQTG;~z<<5Se zLFEM&>OvW=d9Va7gO#4r@=X#BWb{s85=xAv27M7JI?sa@J617+aqp^YEbb?kvOJRZ z@VweaXTPZ4)^Vb(3T0o#3SkemHa49XvbNI;Gd>FgK2Und#rd!NeHgq9WGJ;or-~M# zTmlBSJ*Ywrt>gc#o1H~xYNd;Sud{a3GC8 zlSICJrKs_Hm%p*cG;apo%gZ`8#{Ml0cF?tq|AsP@s50D@2r^v}1y=_Z_zv*9jHjo# zGF+?O@8Eq&W!LfR;x#})1w2^6otKGV6>i`OUkuzrMI+TPXkuh7MnB5P@sMTw3hSRS zPy)(WOM|P0*;;T1f2GR@s3zxH_t7_4&+|0UqM2q`%T#k7%1*_S@!cXaXMt=ZPu40V z+bSm8$dhfN|JDU$)P5qnS437{AluH9?G}>l7L#q~$=XQv@B%V=5DYuHmrm(^I!}r` G0Qdu={1^uS literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationDeviceValues.class new file mode 100644 index 0000000000000000000000000000000000000000..09d1a8525d68691264b55888e33d60975e7b5d12 GIT binary patch literal 2177 zcmcJP*-jKe6oyX^%M3%0AUh%;DEm@uf&yZQxFr)!giO3JCOtisp|Pi%^g`gRG|`xN z;REjO`RI` zUl>=0unngy-WM;V8EBL)U;1ZOMPf1ET+O>q`9Py=DRQW;XAIK>mwBVnV2kvv6Uegk zpw8GxAA}`%4YUYO+^}d%toPV(tqIcS(kNL@S)(rhQp%D>-G`QA1xFfnEG`u^>U@Dy zW~qY)b?T#jjr#JIBj1IUqV&!T7;+Mv(=HgE#ox8b&fwhgHTsd{Z0KyYxcUF0oXR*=!KzMwzY0x*L9t;)LV6J%7o4tT@o=4l6QHM3WGox}j&vR~EO~xav8r^IM@A zZ12De#`ERd!6?Orjv@*cMI14TV2vVZqKKS`eQ-c~PtXv2_#*B(AogkZylMN}!9;wM@<7A`AKNdM8$@prRY>wtZ z9jjR;LADSln^2N1(K0*}HCu?2O@VB>4H-8JldaHdk}R7bTZ@y;D#-+GsL0mhWOE>! zZ$rlI%Ve7>GCe`I6(?I#lI^I;w&G-~AX{rg#t(|g9;?W539{Wd*@lwriJELTPPPrQ soi=3r#F^}=itJ8;Y(Gx6rzAU6lkLaJ_Ca>ghK&E|FxfM_)D#{41I0^OBme*a literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservation.class new file mode 100644 index 0000000000000000000000000000000000000000..b1f6fc0821b3bd41573197056bdd8bacdda6f319 GIT binary patch literal 569 zcmbtRO-lnY6rA+iTCMh^M{nAL56=~$h#q87s8R&+klhAM%}2>*OZ{1%1P}fIf0UT4 zMLmd@Ugo`d^GGI>_m9^%07vLGQDL|%9*Ji(vECJqE0S(TBD48Z?u91rxXEYMdD3PKv%#&EIX1;5T?XdFu;{Ru;L|6t5eI}NVdsA8>y zIvNb!L>h5f=v25Ho+`o6i@wyDI~nYll+eQX0rn7r34e=F sSqvm#GcYPSQ18E>^&AEjv;#&NXkk5Ir|j#YZj}0FiCt`k8uzw=Pj1hsWB>pF literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationPayload.class new file mode 100644 index 0000000000000000000000000000000000000000..ffd3094a213d67d1a6f8d6afbaea2e04da3a8e0b GIT binary patch literal 597 zcmbtR%Sr=55Uk1D7>(xUNxW$eHl8Dbh@KYT1h2EZ15TVrn4JyDXL%Al_yK;DII{*l zh#=%r)!o(f6gBT3uWta3FleL3kd{xxGs>-ZrQ?dEo07So}LO5d!okFCIQZyWdo!AG;G literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/observation/location/LocationObservationValue.class new file mode 100644 index 0000000000000000000000000000000000000000..297229b71b1398bbba0c7794b8d2fbf4464ce687 GIT binary patch literal 1553 zcmbu8+invv5QfJ|n&U#C$CMJ9gve8H~Sni*TOTj&%$NaU4Tu(k{Q1*~(dS8+vv`UZBsIit0@wWIvX=M)?|ArO*_Z_h$XDn_1 zy6n|3(I(7umY>-v4(p} zw2t465Opad$HO$^S7>}jLk{x*N|SLVGuu7b!dnVHL~l|qc6;BTk>=SziAJ1Zed?9) zP-GKQ5%SCCyT5+N7hP{?PikgW|OtjWCuvr xUO+~JL1d4z$SQMWdug&>CfPwY*h0(O2`SkOg>39ki*bLNu+#fqEo2{ zVSE-l9Y_}`8=r=elR-Gtek{jo(wEKz+Nr*;<~{TYIeyXkr2j4!(;b{#rCG9#;85@~_=3&;E2OR1Yl>l{#>;=ZxQ9SG!`t)4*P z85yb|k97}aR0KA=#_HEe(AUvB_9jr{e7~n6!~1El;69pI;ML`n&G(J8)td{(J1p_T zV)W|T(dv~UaLvOCiUN&`M$b-XX1$SivnG=1TC=sNQ{ZGNcy%%bb`BHEnaD}t%f7Kgsm@R3ao|7qb)YSeSi!1*?$e7exTze4Ni@(e4Bz$E{Ea;1 zAr)xHNhow}Btwx#kl(CVar;J=N zli46-R*fU8sl4mBK@3^79o!_u8pUtXb2}yw`;aM+eSE|A7YgLk%4{5z{Vxx@OCH`% kJro!8XWiJPQg`OG7tgg9m$Y+)wdW{AEOwcQrDLQxW*0v|giVi|$TFs+ZNip!J0TXY~#GHg?L$f@@^ESIKrt g$?lbt?Or9@Bme!skol1_;=NzYVy~E*&+G%g0ZC)mU;qFB literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Directions.class new file mode 100644 index 0000000000000000000000000000000000000000..ff1e4463604c29dd6c3fdf0ba681e77519ccd4a3 GIT binary patch literal 1266 zcmb_bU2hUW6g>l5C|f896|GveF9tAiVtk}&V*H8;QPUdInEEil1P6C#$Bp zKUzTOyq5wJs{-Cr#&#J>$7-yFO=8LLZt3`-w;plbLn>4_P+HkThJ35tXYihoAs=~E z$|%8SsP>eWuaa;e!SZFV-Xm=5(Jx3W%%birUQ*#&i1DaJZPyhe` literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Line.class new file mode 100644 index 0000000000000000000000000000000000000000..2464d04e53bcae16fc80b9525f080b5300bf9221 GIT binary patch literal 1690 zcmb`GTTc@~6vxlBr7hb+xhq~k5TPx~#HbHOgCQu1vC#yy@palxaBweVcWUrkX`(Ul z!4KevGXBrDw76Y-frrkSo%zo>zjNvDKRX#B$`g2r6c(ypMQa&4oxbvh=*GZXlcpqGscQ9U2HLah8#;~TpTo@%Wr zD7TA59LiFqOeHD{s&EdkyIxC&Z#gGM4%*6Xs?hLv|1f7i7?AB=jErM}X}&sIm0EM0 z1TBdmdv@kp<&Oy)(+j`INNQ`siws?{S)&F1K{UETXC8ibd zX7O*!QHJ}9U52X~Ta+%gNCwt{67z_40$&ec1?*V;2TgvBWmB;zgLM+_Dm0B9%ORo} znuTQtb6DBI9s;q}VF&fi?=(O3G8rRH!^98g;tE~G-6DLI@O2Hp z>k%$Fh>QhH`Hkkk;2=Xx$?pg+(g<%12)ChT!hC|xiBFdhV)+bNen6HVkljopD~ymW zCCS!O$!?{SEe-3|BdZ~P{TwoGE!S)%jjT9Awwff9sbp*EWUEQChah`&4jB&{lii_p stjXqWBtaghg4B?B@9{s)+em_J1LWB`AUy2?E#8dBfgc5Ph5PxM>@b5-3oh98eM@R)}M&N_?IoKq-V=H_0k&u-B2jM(w`>353Lf zAHa`7%-Csw6me+}_IhXDym@aj`SJ7HcK{D?r;MDy~v>gCY;<6m%B5Us3y%LbmAb5fs=Y@D{e|tCoRK z$0fQkL4yz(Wiurj(Vc5NChFe%f*oedQ$6TmDRp9NP-Qb^Y-Q*rBX`VXwg{PZ<47fy zcLi68A?vn_YlPUK_;q@2!~|j=G6k}a&)E4$fn3^|jf1NH~ e%|Eo4R@zGx=T5)1bA+|$a4XevJ5|k?ec%@@Umw)~ literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/timetable/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..15ff7060432369f499ac64d0f4fe31ef0314b88b GIT binary patch literal 1629 zcmb`G-%k@k5XWcR($e-2M35hf@Z4IO$^ezL|Zlv@!<_(xq|( zBOfAA0n#wzfCEzurt3<}4ire`V8G!8gCgk$Z%49S2Z|&sl5F^fE2X{trXR1S1iJ=h-p{kz_o}TI5+scfjf>X!*!za4W_?Z*-iXr?O_gP z(RTU*xCL{#V=xc5G06hj6lxKFOCjd|JK7~Ie?dhGuA|K+M!O3u7=fG*P@TdxTiLmS zb!*2&uIKfwvtG;4jV(Vv~6;> zvV8@sak6#HzcGf4o`T38B$4Gu$Ts6-r9`srWU|dTSry54$B@x*5LqdStS~}Wj+5;t zlI*H*-4|x HdkpX!SIYls literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/AdminArea.class new file mode 100644 index 0000000000000000000000000000000000000000..318e2b9816db1a64659fec4c32b6500b4b2d2604 GIT binary patch literal 1434 zcmb`F-)|B@5XWbMLcwdH*wR*8m1PBBQ(KI2(#s{KJtHjs6W5vb0J#x2a@W0YT zW8#Bz-* zn%-QRK4arYw9 zMtQQWLWLYnt$ibm@-<={#SQ~L@LX;y-Qi+#%intLb60v&8%&bX!jpMmuxr5zWHDyq;g3v%RKMCaK%Y#XU(AD`q07OaxIMDp27Y#i#($IT(_kp+3u zTBw~|FeqI5QQ*ikMGaY>1i4SMz@YK(@-KYfjGq9im?Vuun}HO)0IpJ0Ol*-dwn%`M zaBw8>Z{d!kWoTC#-(l@bEGyza8z1JNgllUkfDI_)j=@#f#Nb=FrXUskwnNPMceJmt z^BEN>m`2-3jCKvKV+3+OMRf{owsGkJ$`%TRidL=K7XvhLVtk}&LW~*{qNX*ZG5RpT1P6C#$^Vfrk99jlXEFg5= zO8~J|KJO`GI}F8BHP*t$kz{zcbbQoXkGRe;70Mqet?V&Fw%O`4Vr^9*`^qSqLRah13adg*LwJ~| znekcR^MTSME*7W!EbyQCGLYI`vYZwH4YX{o`|(c0I2y|5%1yg+>GYAir3~%=)1QQ) zy(obL>SvaID~60~Dy;?DWw41HebWV__ZCH-(8_4tX#YUzYXaG(w?|N*OyF%)=&O{1 zP{j`I96^l`DP=t&I-|YI@f=b6@H=)LTbA-ckCRd*wi;#D6UIi0o-?|Nsmul;(`qiV znaI0|Tf~r7+rw=_Y*G9UJ$DU(oDZG=osVzW{X&6EQrQ^?W&g{={)&e;a}W6?{b@J$ esnoqI+VczT`4#Oh;u3A9GK)| z;$+O76*`$1>v(L2GD`SZOv68{Ptv64%*2NhgX&m(5Ihok#9xMEIdBY$sZ|UvcNaH3 zXO$j3WKf=1`L-)U88Pq@XQf2F_eg2w4$-l_-)B&Iib*R_gbM+bp~7IZtF(NP#-X&Y zMHoqnZ3ZIh3#;fnHS;4PXsC>dHK8t-YF*+7lqwtJ5x$ z=k)-5@(j@P>;hYjI_x`km_*G0)=5-G(ag%A(leIvrhJK7i6{)CDGETUC&qwT;oj6lwZs4n2@bq>D5_JXC7S!;TE`okK>Cfng_aXH&Y9&66y50e%BB{Lv@? literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/BusStops.class new file mode 100644 index 0000000000000000000000000000000000000000..f648582d6edc59b5fb7d8e655fc7f2546991e4f4 GIT binary patch literal 1248 zcmb_bU5^qm6g>r&Z*~z@bk$Y&#Q-KY#z!`rs9Aj>Y8FF?K6RkM;!KB3JBIyNnrKXX z@CW##jJGqeK`=h?F#Wha_uO-CJHLMa_zB=KP725{oW~!z81qSJqc{>iSJ9lyacC}$ zl>xVr&}JS+mIvWP`i9TM!dr_zi_O4>b5lT$p*|Cz1owrW^4H!>jx9scTLS2`pB%?l z`Mj@;?J<-FYN~~eBgrt@I6m#~LRjyN%H&U#R`!e`+wKe*a?i<18Cle-D51=7&{tZ% ziUUtZZ-wWRm_|Pw3x6mg<@U>9&VEpa;pI+*8Pe5kZ+PxGdG9x)JL^PeSOUZKD)x|P zX#MT+a=!9enM%95S87GOv#FBd-BxgCA{mY@Vr^9*hsr4G{!^_(E367NHUB}PWx*GL z&po9lTwI;z-dMBWYD zB!;xw5pEHpLh;-5-7y4mK6nCjKEC4cGX*k9WoI0e{Vxy4TOQslJ>)m^r`l5C|f8LDq6K_UkqU4#P~?l#27UuL``c*jeQwlf|3(0eFIgB619`;&U#Bd=!{44u!{6IOTE} zMDxfeWZ(@HS!}ns~k(zp9t}jAm_luxoKBiY##xE3+i_2VI2_8C%FeoaY4owZq70q?(;o+c zxhR1HYG3HVTq?LWL7uO}R3E((xiP#ubof;&PF_$zxTdxk+a^c90z zXL@pOe5D6Z8I(r8eAf}SbQlzcW8!61kIZ0__Bj@1kbkDMGKZM0+3GULk+%$4xMo2a zDh!r7O3RbbwWa@B*bYY2q6A&xE854-oO!PT1}{7RrDN6e~lGDPKC19{=!2;y5Y7kdl zYt9y>`>_z~baJ;8dDDUdMOqknb-oG3P$KmT zs*~po%I99__v8yjudz6J&IdFG4BG$h{mk>sqj}t}@h2WRW(q$bpui za2)V&;f|waXcyYwVDWP#Tf%=nau%S9YwJ<~%TU7|b^@!Id=1x>q>kTufHnWl_60UR zp&|p*Y|E+HuEPz?K*5Ko&Y;b=55B_2l%*Vb>sVqv%22;l#XQ7H4O1IiX=H^Nvh5_< zRw~)8bh7OvSp)0u%ps#EAhO$OWW^b>Mv`nlmF!MBStChy56SM&A)}!nvb$+yr5Uo_ jB-x`>vi)?j-6Yv#BzrQ4jK-AV8#kl*X+@Jpo;JX57s>I& literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Region.class new file mode 100644 index 0000000000000000000000000000000000000000..99997725c74d1feb81dfb9a53aa172f68f510dd0 GIT binary patch literal 1193 zcmb`FUvCmY5Wr`F-W513)TWt=%^QMmf#!`FV-;%`N(|}~@j>uV=rMocPh?;j6jP%ZZ1JyRm@LZ)R$$;fQCit!4DKEd8I(v{fg;pAC_{z8R$poPJdJ#5UI{MX%WdXFu3l)1~^zXSyXLw*Nf70Jj8l=K1hnZ z>48g;9!6dm7}U^jzA73gIkr96B*z*$E-ko=vp6+@e5Po!)w$&%?TsK3D){M+ZWjVgdPQ0W~=9B+k+dJfr5|GyMWT^9est}B}*mKHn2o9 z%g~&AEqI8P8l^V&^T^yavV&E!{amtJ`D6#HWG$@UzJ!cMPh_|A$Tru=TB~H8T(Ud) dWUW=QBP4rp2^l>GhLgOTZRuXNPtx26_zk4C)Fl7_ literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/models/jaxb/transport/Regions.class new file mode 100644 index 0000000000000000000000000000000000000000..9a4560a8d6b36328fb497f38753cef615c91c26e GIT binary patch literal 1239 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 A9RL6T literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/ServiceDays.class new file mode 100644 index 0000000000000000000000000000000000000000..b7e95fa158359b880cc45efb76229bf4566b8375 GIT binary patch literal 1543 zcmb`HOH&g;5Xb+M*KWcBF$(hXfubbgv7&;HL`)!|pa@A7o5b4kU@c+A#U;VbhN^rZ z?-~wJT2fy1Ls|ArBJ9Nz81*}Q%F=SdFRimcvHe9FW7`AFT zhpJg?G}}$rJWyT7s5cKAj;nrZnT};PRl_!kG}Ae<> z4j4jOrI^d=3@e4p9+0AHTcvI_sa(lxqHg$2K3D9mgcJFIKjus@Ve7Vpx596&=dynr+oBcbUN-PgEHKtBqY#Mlb?~AqB&@ zN!LjCLWbjoi-BpbW7YRk8;NR|Vn-DO5t1Qsm{1^bkU88@Aae+FxThe@A;RH-f(VB` z4siv2925>S3KS0g9Of1DBg9va6bxXHVX$D;&0_0d$8^fZj%_l;3XPg!R}IJFESwSe zF+>+~KUht=!;xXPOj_jQi7S{~1kdqO!V89|XCgv;3Q|Zjgbl|r+O@`En<43)TWM$C zthuQT&nW-7XqF6;=(O~nq3TWRjXQDqU!4yoqu>>?42#|)R&Ar%OnLe`Kl9>_{F#ul zBU+>7)XX)D4?pU8R`WcRZm(H;b;E5rv|aX8(Jx~D`TQMBk6rhl;KngV1dIg) zj0?CG6mVO>-H?Du0rw>VQvx2!0;UBdqTRTppxJ0Qa4stUptJlPjA(kGgKg}DPk?*DW4BL*hMV$(wC?-Pap0;)i?dgGd<0F-tv#1;@RvM+Ud5@ mt;Wt<2$S5Fdo_|2!_SJuSn?FFe}er#&xaLJa}_yZ^M3&fyJ!Re literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties new file mode 100644 index 0000000..96cee08 --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/alert/queries.properties @@ -0,0 +1,17 @@ +BusAlertQueries.inboundString="inbound"^^xsd:string +BusAlertQueries.outboundString="outbound"^^xsd:string +BusAlertQueries.mondayTrue=transit:monday "true"^^xsd:boolean; +BusAlertQueries.tuesdayTrue=transit:tuesday "true"^^xsd:boolean; +BusAlertQueries.wednesdayTrue=transit:wednesday "true"^^xsd:boolean; +BusAlertQueries.thursdayTrue=transit:thursday "true"^^xsd:boolean; +BusAlertQueries.fridayTrue=transit:friday "true"^^xsd:boolean; +BusAlertQueries.sundayTrue=transit:sunday "true"^^xsd:boolean; +BusAlertQueries.saturdayTrue=transit:saturday "true"^^xsd:boolean; +BusAlertQueries.bankholidaysTrue=transit:bankHolidays "true"^^xsd:boolean; +BusAlertQueries.update.create=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: INSERT DATA {<%s> a irpalert:BusAlert; sioc:has_owner <%s>; transit:route <%s>; transit:direction %s; %s temporal:starts %s; temporal:finishes %s; irpalert:minutesBefore "%s"^^xsd:integer; wgs84:lat %s; wgs84:long %s.} +BusAlertQueries.update.delete=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: DELETE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; transit:monday ?monday; transit:tuesday ?tuesday; transit:wednesday ?wednesday; transit:thursday ?thursday; transit:friday ?friday; transit:saturday ?saturday; transit:sunday ?sunday; transit:bankHolidays ?bankHolidays; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?before; wgs84:lat ?lat; wgs84:long ?long. } WHERE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?before; wgs84:lat ?lat; wgs84:long ?long. OPTIONAL {<%s> transit:monday ?monday.} OPTIONAL {<%s> transit:tuesday ?tuesday.} OPTIONAL {<%s> transit:wednesday ?wednesday.} OPTIONAL {<%s> transit:thursday ?thursday.} OPTIONAL {<%s> transit:friday ?friday.} OPTIONAL {<%s> transit:saturday ?saturday.} OPTIONAL {<%s> transit:sunday ?sunday.} OPTIONAL {<%s> transit:bankHolidays ?bankHolidays.} } +BusAlertQueries.query.count=PREFIX irpalert: SELECT COUNT(?account) WHERE {?account a irpalert:BusAlert.} +BusAlertQueries.query.getForUser=PREFIX irpalert: PREFIX sioc: SELECT ?alert where {?alert a irpalert:BusAlert; sioc:has_owner <%s>.} +BusAlertQueries.query.getForUser.alert=alert +BusAlertQueries.query.get=PREFIX xsd: PREFIX temporal: PREFIX wgs84: PREFIX transit: PREFIX irpalert: PREFIX sioc: SELECT ?owner ?route ?direction ?start ?finishes ?minutesBefore ?lat ?long ?monday ?tuesday ?wednesday ?thursday ?friday ?saturday ?sunday ?bankHolidays WHERE { <%s> a irpalert:BusAlert; sioc:has_owner ?owner; transit:route ?route; transit:direction ?direction; temporal:starts ?start; temporal:finishes ?finishes; irpalert:minutesBefore ?minutesBefore; wgs84:lat ?lat; wgs84:long ?long. OPTIONAL { <%s> transit:monday ?monday. } OPTIONAL { <%s> transit:tuesday ?tuesday. } OPTIONAL { <%s> transit:wednesday ?wednesday. } OPTIONAL { <%s> transit:thursday ?thursday. } OPTIONAL { <%s> transit:friday ?friday. } OPTIONAL { <%s> transit:saturday ?saturday. } OPTIONAL { <%s> transit:sunday ?sunday. } OPTIONAL{ <%s> transit:bankHolidays ?bankHolidays. } } +BusAlertQueries.query.create.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/ diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/FeedbackQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..1d091dfd826d30804bf0a1ab77d75c8fe95a1c07 GIT binary patch literal 2000 zcmb_d>uwuG7(L_L+KzME#wiIcH~~^$8ZU(cZBuS_Nhz{GU=pxEmDb)#*wpcw-8JC1 zf@9t9lPeh zu-%a%`;Is9e0gm6t~vBZj_Vsgj-_i$&p43M>Y4qg#%|R4GF;G*5m-7he=?1MIXpDJ z=pD(vFOa)$4{iSgfpoRDFOX?DmMkKTLJ3*q1Qy%&P<}o>?n(D+vp0|edfVxngMHJr z)i|2W_&?a5z~lD+M0bZ|52ZgVVj{3rZJ#RW_^v%X+^Joh%41nzZ8nz9G?hb>CP9n1 zg0hAcf!2Rzt4y7IB~44ZC9Gmmpg`b|Q4ud;UBlWLyThdtUdARX`gvB7j#&59L7mGLG6C zS*9=ZcthZNJQp3c<~UeuT0uZaqvc9&k2i+F0^cX-zbNEIW)e?9?Q(AYfKL$ujS_CE z0?zr)x1JT&NuYS-jNPG}1nTn#(On9)gzV32x${C=5_!HQuo}ai^^mlN^5=L>!#iYf zzR(ZG_JHRwkM{(`W)Zh>SKZxv0_6lswSBeYehKe`mp*5XMsjEgY$t8KV0@HnCy$Q= z<~N@_`NgyDdBHtYs1HhL;h{j@cVZt`stJnu*f2;S<@I<^FU`U#bXbMH+_lxavl817 zTcnJ@21}UcdkJXl@yTMVab)l-_|4XzBmWyaDHPeNWw1BLwiIsQcb=mH7O=<}75s=m zYTvTHbOJr|C(_+?y>o)Azj87J(ve|*oE>>pAQ8Vp+zni#UWH!|F%Xg_8n#JaSz1Apy;RUs9`R4ZTD{3N zWxU1g!J2++nw?oGshe%6%-!6%?5m6b+0UU$eKj(;K@M91i`AJt+{D~(2P_Ke#zz_V z$v|aX{{y$X`n%6@r`@PO!;bzTn{OJ=@bPKQLnoU&J_gF=^Fkq`di(WcTcT`|a*`^83$^UjXK@q9Ddl2T(7Z{&I;aS2rc7&)^xmh>fljE=~cujZ;x){=X{D2!acXo}9>YgwIhMv`} z^|z(s_WGN(B15Kh9LC;_9a_0KtDKLy^P|-uIOO_+n!~Lr8KJcn7 zAWf=W;)2pFnlTcLL!+izQm(fk{8W#hfYIug{q@uuW4{a#lfw_X0 z47qbDty#WLcc87t;ulji0?TzsgmrPqz(@d77nE~dJS|M!j0FA8lA=jpxR|;uhb)OK zPFFsL33MYtmJ(S>vPpUL9Y+!xdg-Ju`ZX|m0;x>$6#d^Z{FRItM(NoX0jUI&qLc*2 zq7!*aLTsfk&|3m@&z@l7JXNJ2P?atUlxbQs2$Q%;R!VB81+YU!WNhvmhG&m)=cx1( zxsU1WDW*;^OP;xO_89ZWcybhBC`9GOC4vLw$q?pXRB5D%hF3&bRvO15mMD|qHQ6yN F{{_4`MNI$z literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties new file mode 100644 index 0000000..45dac25 --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/feedback/queries.properties @@ -0,0 +1,7 @@ +FeedbackQueries.update=PREFIX irpuser: PREFIX xsd: PREFIX sioc: DELETE {<%s> sioc:content ?content.} INSERT {<%s> sioc:content %s.} WHERE { <%s> a irpuser:Feedback; sioc:content ?content.} +FeedbackQueries.update.create=PREFIX irpuser: PREFIX xsd: PREFIX sioc: INSERT DATA {<%s> a irpuser:Feedback; irpuser:onJourney <%s>; sioc:has_creator <%s>; sioc:content %s.} +FeedbackQueries.update.delete=PREFIX irpuser: PREFIX sioc: DELETE { <%s> a irpuser:Feedback; irpuser:onJourney ?j; sioc:has_creator ?hc; sioc:content ?c.} WHERE { <%s> a irpuser:Feedback; irpuser:onJourney ?j; sioc:has_creator ?hc; sioc:content ?c.} +FeedbackQueries.query.getForUser=PREFIX irpuser: PREFIX sioc: SELECT ?feedback WHERE {?feedback a irpuser:Feedback; sioc:has_creator <%s>.} +FeedbackQueries.query.getForUser.feedback=feedback +FeedbackQueries.query.get=PREFIX irpuser: PREFIX sioc: SELECT ?user ?journey ?content WHERE {<%s> a irpuser:Feedback; sioc:has_creator ?user; irpuser:onJourney ?journey; sioc:content ?content.} +FeedbackQueries.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/feedback/ \ No newline at end of file diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/BusJourneyQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..31989ff999324717e9d3bc22d24eeb597741a6ed GIT binary patch literal 1629 zcmb`HT~8B16o%iSyWO@_pyjg&R6#4BUGd{WF_?f+LmG*!kThN`+YuMbF3j$d^iTL( z^h#o)KfoVlJTtp#DYRY~Z#rkDbDqBMIcNIo_xGOw*74ZD0K@C(lW99&U3F=2^sr%LDV+kA%lt=2jH!#Npfc8v`1{$gzEHn@!t0GItM; zxf3#^pShkJZZf16mkt=TZNI^DNFketjx@t?&Gq=3=;V-#clKeEGZbsSV>b_M;mUn- zsD&ThfMKWhzw~Y}l#Y0~Ew~->j+_0{2JIQV#ahRU6$;lo+W225OV>de6c}c@D_V_| zma3y9<}iwJ17i$Z|5yUqsMa308(icufk}oe6(IJ;Q0ZZ~htM2KxM^UztJg6jj~UET z!$0`q#HP+a=|Oyd$$C5?8$Eu6!H5Db_Ju2_;aVR^c!Qt24p$e9CJm5^Qjtu^He5lI z=lUMQU|d4woKR%9(`j{>!99klD|J7Ug{snJhFmi5iZAD-lOJrg_DN)dSz(y#hlwvT zOn2w+dV78p@&r(2DE9}bn+zEtGumQa@Fu@Lycs;`J4+3fLB1?{ybgcq$_F>mF(t*& zGq1{;<2LBk(tibzriflEeHyegX=SwP%ioasO2Ghf$t6%UNO3;CKA%f z0hQv&1&Wy;NYztoR$W`Q>Uv4D>gg4$ZY*0Dn0l(0^e=6C5gNskGmJT+E?`9c(k96w z8l9DCmC-GVq`V3lD3dlB%~K?;R4A`Zqy^gDp-3lfcQKi0dro_qStwRWo2IlWDIFO( z1so#*qnC^put+dzbg2#7Zo`)Q!G@HkDFT%UIN1e^{baG)1Gx5g;4Fb;iDtThW}@(Z o8~7?wI9^;Qpq|*RYga7CD(4BdfCAOD)8FyLHp4?QKY&Mn0EyO$9RL6T literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/DeviceQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..d93175d1665582fbe92542296180a9285e750784 GIT binary patch literal 1394 zcmb_c+iuf95IvhXP2#3BgcMpX0a_@zTS&a1AS7s22`PetX{88Ww)T>4NbIn7D&?=> zi3$lmfR94V+G%M>K%(NoyR)-9Gw003-+z4h2H-v#X(Sl7NAE4}Sgs$ck>Y(zs-Yzu zKNtt07+9g=UNH1kXnhz7B}HKM{E_m+*xD9H(h)CXZ5jqczQ>Qa)#qNg4!dgA$La3Iuce$W>Tg|_eT{ytYypC?KqJd^>$ zPWyjgZ85BLMYyE|55*JDRlan04}Fh9D#n#!zM1{WFDr_$CO4P64! zbRsNG8No1d2`gz78J?b#t}e>>mEf*WIb6mShAa_|`7mtGAvp)G35K;CuHqU)@ibo% z!V^#498a^n&!?G#h#@o7b=p%>_sLA97*_k#JfZYGTX+E#FHUy!KI;ejLIre3ZrrGM zpSje4r_AEyXRyJr@wX!JxMNJ*#l18(r`kSFOb%sKsQ2IbYQSj-9?nVAn=|m^VQI}} zyr{=+e3Ed}rr~qMj*KQ{8l_GLZd1{cG~9qe5{($GX*yZ7Gul(t&&YftApw(CeGQTp zY0bqCXkVgJ78kHg8g0BsjtttD3i)FcsS;yP~7J(-|Hk`A(j znCM#FnT|Xq6&@npPsG+i$S^Di`>JlJZ9ystQqKgbXM)sN zkQxhW#|-_o%EtO;tz6lP>N8A4r32rzv>Ny51O_h!cEjQ%A-!Z+rfvGm49Vh5ouRAj zG`Nf`auNm@#zNU0aup0>h#|Af{fLY~EnYq3%=N`HU>H##qlZ*iO`ER;2ix5Jpl@4T zG|Vw{tFF7Ih~vf7Qm9o%5;qi#qnGshpG=QorTYJqq;`noMB`zYzWzAjpyM%$UgZ_s z!fgq68Akt|b15(_vWbj)xG!P)l2;-M1x3s-NQc4&>pKj?#d6%Y%Y_PfAWr>IAUd?V zE~5Zdfrdv6DZSa`c7tKA6ZA@Uta4FMJQfrS43nK?Tm(K<@C?t%M84B*+EB5BatSXP z3g=E*H9e1RK--L!F9vV=rel)__j!wf(fp?_80R`X4NTq${rt`pp2=RgmZ~U+Jb5fh z_dS6LbR$KP6h>)^$$0dgL>dZuX{RszFEDxnnOyo5{ogVCm4XCD>Dd<&$wZT(loZCo z9kEM3jMEqBEeN`2PcU(wDia7)rHg)QOF^Yloyu-4$w-DI0wT@BM}>3kzi429E(_@OorDKC$Rh% DeFQ}R literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties new file mode 100644 index 0000000..994c18b --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/journey/queries.properties @@ -0,0 +1,24 @@ +# create a new journey - expects args: uri, lineURi, direction(inbound/outbound), deviceUri, userUri +JourneyQueries.update.create=PREFIX xsd: PREFIX irpuser: PREFIX transport: PREFIX transit: INSERT DATA {<%s> a irpuser:BusJourney; transport:line <%s>; transit:direction "%s"^^xsd:string; irpuser:withDevice <%s>; irpuser:user <%s>.} +# get journey by URI +JourneyQueries.query.get=PREFIX irpuser: PREFIX transit: SELECT ?route ?device ?user {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} +# get journeys on route +JourneyQueries.query.getByRoute=PREFIX irpuser: PREFIX transit: SELECT ?journey ?device ?user {?journey a irpuser:BusJourney; transit:route <%s>; irpuser:withDevice ?device; irpuser:user ?user.} +# get journeys by user +JourneyQueries.query.getByUser=PREFIX irpuser: PREFIX transit: SELECT ?journey ?route ?device { ?journey a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user <%s>.} +# delete a journey +JourneyQueries.update.delete=PREFIX irpuser: PREFIX transit: DELETE {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} WHERE {<%s> a irpuser:BusJourney; transit:route ?route; irpuser:withDevice ?device; irpuser:user ?user.} +JourneyQueries.baseNS=http://www.dotrural.ac.uk/irp/ontologies/user/ + + +# expects location sensing device URI, phone uri, phone uri, os version, unique device id +DeviceQueries.update.create.iphone=PREFIX irpsen: PREFIX ssn: PREFIX irpdev: PREFIX xsd: INSERT DATA { <%s> a irpsen:iOSLocationSensingDevice; ssn:onPlatform <%s>; ssn:implements irpsen:iOSLocationSensing.<%s> a irpdev:iPhone; irpdev:os irpdev:iOS; irpdev:osversion "%s"^^xsd:string; irpdev:uniqueDeviceId "%s"^^xsd:string.} +DeviceQueries.update.create.android=PREFIX irpsen: PREFIX ssn: PREFIX irpdev: PREFIX xsd: INSERT DATA {<%s> a irpsen:AndroidLocationSensingDevice; ssn:onPlatform <%s>; ssn:implements irpsen:AndroidNetworkLocationSensing; ssn:implements irpsen:AndroidPassiveLocationSensing; ssn:implements irpsen:AndroidGPSLocationSensing. <%s> a irpdev:AndroidPhone; irpdev:os irpdev:android;irpdev:osversion "%s"^^xsd:string; irpdev:uniqueDeviceId "%s"^^xsd:string.} + +DeviceQueries.iOSLocationSensing = http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/iOSLocationSensing +DeviceQueries.androidNetworkLocationSensing = http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidNetworkLocationSensing +DeviceQueries.androidPassiveLocationSensing=http://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidPassiveLocationSensing +DeviceQueries.androidGPSLocationSensinghttp://www.dotrural.ac.uk/irp/uploads/ontologies/sensors/AndroidGPSLocationSensing +DeviceQueries.iOS = http://www.dotrural.ac.uk/irp/uploads/ontologies/devices/iOS +DeviceQueries.androidOS = http://www.dotrural.ac.uk/irp/uploads/ontologies/devices/android + diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/ObservationQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..bb0a26f09e81b14f323266c082d064469ba50ff3 GIT binary patch literal 4783 zcmb_fTXWmS75>(iM3AB-iV`hDj$%8FWl4?6IE|Y~bS}2(n@n4=DJx;z8$`ks6^fui zP_f!HN!zqd(rYrE$xNm%eM;ZjzQ~@Y?PEHV{+0fPcKYoCB*2TPc-$B8U>EzH@0|1P z+2xo2{p&vfoWjQ;>=U@wcq3&LQbo(L8@5qNmF-%}ELipJx?^sp9NVbYYnJV#?lw%j zY}QlOTHUm_45w^WQ_H@6!<`OcKp?hZY#FJFQ7!R{4YS|~44o-g%g&1e`)B7?1qRMr zMKgl^2uCr9A%W3sxoTc-Y_6I1im_HP1>#w&U{qEOyDZt5?6J*{Cz;JJrQ_&T#g zowCXhA=NM#VT!@sg1g0IZkS$U|DuCl{K7fwG_b|o|1d>q`=^8CNsAx zM^aHdjZ*?4$6C(aH17yZ&(6uc*oC5|(-C|Fr$cyFK;QMFD87m31R|{Q1*7gTEY&13 za_vGCi*j<9lh@gV)>Y7F1fYSv*@R~*hSzHg{n!t#U zp0%naxqew-e0C|gO3u*hV>rj0ZdeVwYHr`M%d(&P%e|&S`W3c2r%_~Q6O1NY;cD+a zRI1fi%A0bAEF(qL5#0f;x#8(OfZA+)jL8#dyH_tD3Q9?k0a^a}p*V)EhEr=e%GOj~ zlo^pH4i5&!X4GYpV<|0LO&@Ycn!Q`ju*hm^NP+Og&;vZ(=$ku`bga74^5H&8W=v*N zom$nCBAaQwQ&B5+xh9XVVYfx9W+rf?XjV-BcnRp%Jy!uKGPWZ5nRkNV)Ns?toC z(?BLx<@WF#-xD|!n3AKsl5}oX-*F%`1w*}d4k-f9?n&Sx`TJt^=)5Ixp<}c^9hF4I zq#cj7@5f+eyGBK|_ZRO}((tapsU9R8uIWfj;Hxf0c8N*DPXy9|CA%cMO`z>sdb(Zo zT`r`uI=b=CcprTPpGhgLHb{Xd_hKQBLk%B1%yHsE2BS@SEp28GZ&$sU;UsKGJtBF~ z4w8!#`os>NSxCsA=NBgR_&=e=)1P4?{(`?WE|)Iq@s~Ihi@9V*a`^#$dhCSN_brxp{q?_g%=#J;s>FIIRh0FoDNu&+^885|b>6&YRX0UZ8!6 zvsqpsuJemL*M5t3ftTF7IF5Um!8^PNet@U&JFff$^Z1nSzvsR1kNivdFFb>P^Wyd& z-uV(pi7A{`_56}PSu@&V|4lA<8v~JO&OlYm*RmwzKuhC+)Y31=cnM><7nNTOR zzDhD8j@zqxuu>phSN67{NNZ zBpBfzP^LA>xZcACSLlpn2yf7uBAW`Iu9Pp4uT*U!zR8LYs)Dmj1M{*HehEg@K3F8_ zG-)gZB%V+qNQql5(5o%bT0hV@2I%=5!Oj!(EF*ZiC$QZDZn7PV*ISb9VCsS{5$Gz@ zd4*!R8~`0dgDH?~w_2b%kL`5)O@f93Daa2p6+=B8+$3m@n!7=5y%KORjcw1t_gfBp z)<5Xa`gH=`ChI&|zZL);YvuTdc-t%7yeb>pP5d2#`jv`s(|~dx#F|2oZ(;nXMdqbe zZGOykyB6H-Wu*WKztHdX0Q>3QV4FR`e%=C0d(6h-@9&l-mz5m=@>BC+51?Q42YRz7 X(64#`{klKUTRngTe#_MF!$-(gwsn(!2KF{F3-0XJ;!>=^6SU10_c zJY?^CwyTUz7+D&I-DdMUkj%ymm(Mx=TPnOT{uJnHT~U#PuED?qh6JzIg;Qgg>lAt^yUB78FJ@pTD5$iHlZcR;ullY<$940_rxIsBMnToiRY?#8ko8fX?n$yx=FXKr!LDO zOFE0w?#D2JZY0Q3A}dKYiI2YHNJ2v|o%BWj2u4pJl}VnW|2u}ik`cowJ^Lacm0(ho zlE7GWB2P(+&GZF&OMvd#6HJ_^suTpO(nWzXO=|>U64%K}N$oTNwyB7W&3(i0>@jW~ zm3|`kF`Yfd)Cp$EGndXDWBwSAjv@?&s64wsaDY4+!W@h$jWp2kf(Xk><5i_@% literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties new file mode 100644 index 0000000..3e05524 --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/observation/queries.properties @@ -0,0 +1,47 @@ +ObservationQueries.baseNs=http://localhost:8085/observations/ + +# observation create - expects: value uri, optional location triples (accuracy, heading, speed), lat, long, easting, northing, sensor output uri, value uri, observation URI, sensor output URI, optional sensing method used triple, featureOfInterest Uri, observed by URI, observation result time, observation sampling time, server timestamp +ObservationQueries.locationDevice.update.create=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: PREFIX spatialrelations: INSERT DATA { <%s> a irpsens:LocationDeviceValue; %s geo:lat "%s"^^xsd:double; geo:long "%s"^^xsd:double; spatialrelations:easting "%s"^^xsd:double; spatialrelations:northing "%s"^^xsd:double. <%s> a irpsens:LocationDeviceSensorOutput; ssn:hasValue <%s>. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult <%s>; %s ssn:featureOfInterest <%s>; ssn:observedBy <%s>; ssn:observationResultTime "%s"^^xsd:long; ssn:observationSamplingTime "%s"^^xsd:long; irpsens:serverTimestamp "%s"^^xsd:long.} +# create observation accuracy +ObservationQueries.locationDevice.update.create.accuracy=irpsens:accuracy "%s"^^xsd:double; +# create observation heading +ObservationQueries.locationDevice.update.create.heading=irpsens:heading "%s"^^xsd:double; +# create observation speed +ObservationQueries.locationDevice.update.create.speed=irpsens:speed "%s"^^xsd:double. +# create observation sensing method used +ObservationQueries.locationDevice.update.create.sensingMethodUsed= ssn:sensingMethodUsed <%s>; + +# delete observation accuracy - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.accuracy=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:accuracy ?accuracy.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:accuracy ?accuracy.} +# delete observation heading - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.heading=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:heading ?heading.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:heading ?heading.} +# delete observation speed - expects observation uri +ObservationQueries.locationDevice.update.delete.observation.speed=PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:speed ?speed.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:speed ?speed.} +# delete observation sensing method used - expects observation uri twice +ObservationQueries.locationDevice.update.delete.observation.sensingMethodUsed=PREFIX ssn: PREFIX irpsens: DELETE { <%s> ssn:sensingMethodUsed ?method.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:sensingMethodUsed ?method.} +# delete observation - expects observation uri +ObservationQueries.locationDevice.update.delete.observation=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: PREFIX spatialrelations: DELETE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long; spatialrelations:easting ?easting; spatialrelations:northing ?northing. ?output a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?output; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:observationResultTime ?obsRT; ssn:observationSamplingTime ?obsST; irpsens:serverTimestamp ?serverT. } WHERE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long; spatialrelations:easting ?easting; spatialrelations:northing ?northing; irpsens:accuracy ?accuracy. ?output a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?output; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:observationResultTime ?obsRT; ssn:observationSamplingTime ?obsST; irpsens:serverTimestamp ?serverT. } + + +PREFIX ssn: PREFIX irpsens: DELETE { ?value irpsens:accuracy ?accuracy.} WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value irpsens:accuracy ?accuracy.} + + +PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX xsd: DELETE { ?value a irpsesns:LocationDeviceValue; geo:lat ?lat; geo:long ?long; irpsens:gpsTime ?gpsTime; irpsens:deviceTime ?deviceTime; irpsens:serverTime ?serverTime; irpsens:heading ?heading; irpsens:speed ?speed. ?output a irpsens:LocationSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationObservation; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:sensingMethodUsed ?method; ssn:observationResult ?output.} WHERE { ?value a irpsens:LocationDeviceValue; geo:lat ?lat; geo:long ?long;irpsens:gpsTime ?gpsTime; irpsens:deviceTime ?deviceTime;irpsens:serverTime ?serverTime;irpsens:accuracy ?accuracy; irpsens:heading ?heading; irpsens:speed ?speed. ?output a irpsens:LocationSensorOutput; ssn:hasValue ?value. <%s> a irpsens:LocationObservation; ssn:featureOfInterest ?foi; ssn:observedBy ?observer; ssn:sensingMethodUsed ?method; ssn:observationResult ?output.} + + + +# get location device observation - expects observationUri twice +ObservationQueries.locationDevice.query.get.observation=PREFIX ssn: PREFIX irpsens: SELECT ?result ?foi ?observedBy ?sensingMethodUsed ?osbservationResultTime ?observationSamplingTime ?serverTime WHERE{ <%s> a irpsens:LocationDeviceObservation; ssn:observationResult ?result; ssn:featureOfInterest ?foi; ssn:observedBy ?observedBy; ssn:observationResultTime ?osbservationResultTime; ssn:observationSamplingTime ?observationSamplingTime; irpsens:serverTimestamp ?serverTime. optional {<%s> ssn:sensingMethodUsed ?sensingMethodUsed.}} + +# get location device sensor output - expects LocationSensorOutput URI +ObservationQueries.locationDevice.query.get.sensorOutput=PREFIX ssn: PREFIX irpsens: SELECT ?value WHERE { <%s> a irpsens:LocationDeviceSensorOutput; ssn:hasValue ?value.} + + # get location device value - expects LocationDeviceValue URI four times +ObservationQueries.locationDevice.query.get.observationValue=PREFIX irpsens: PREFIX geo: PREFIX spatialrelations: SELECT ?latitude ?longitude ?easting ?northing ?accuracy ?heading ?speed ?obs WHERE{ <%s> a irpsens:LocationDeviceValue; geo:lat ?latitude; geo:long ?longitude; spatialrelations:easting ?easting; spatialrelations:northing ?northing. optional {<%s> irpsens:accuracy ?accuracy.} optional {<%s> irpsens:heading ?heading.} optional {<%s> irpsens:speed ?speed.} } + +# get location device value for an location device observation - expects location device observation uri +ObservationQueries.locationDevice.query.get.outputValueForObservation=PREFIX ssn: PREFIX irpsens: PREFIX geo: PREFIX spatialrelations: SELECT ?latitude ?longitude ?easting ?northing ?accuracy ?heading ?speed ?value WHERE { <%s> a irpsens:LocationDeviceObservation; ssn:observationResult/ssn:hasValue ?value. ?value a irpsens:LocationDeviceValue; geo:lat ?latitude; geo:long ?longitude; spatialrelations:easting ?easting; spatialrelations:northing ?northing. optional {?value irpsens:accuracy ?accuracy.} optional {?value irpsens:heading ?heading.} optional {?value irpsens:speed ?speed.}} + + +# the type for the device location observation +ObservationQueries.type.locationDeviceObservation=LocationDeviceObservation \ No newline at end of file diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/QueryReader.class new file mode 100644 index 0000000000000000000000000000000000000000..db40bf118bfaa75b5da0b8bf0e65f0dc56dd5c83 GIT binary patch literal 1302 zcmb_cTT|0e5dKaJO&d}u<&Jo1MJy(?vU_&F{dV^|`Tgg|F90)mqaenx6z&>s@(&p;Bl@dd?d>*kbeB0fbV@MZ0HxQ;Ps-_e2BvK4-!#&-!^cE$ZDCuXE^fO9& zlahW$spVnlsg%~&HY&x^W`hC4Xrp*2Y{#hZzzcngFNSW-;Y1=iZ#lMWiv@;wVY155 zQS@qDMFv>~y$r(<@iw^{`q0mi+To%B#-JCjwmEry@e~*aHK^z!)@9q}tKt3@_dm!H z%aM7O=~PYMmUh#bn2)%sh~tKa5u}N)_+$qR%jN&EO&W-7sIel3iR&ARmfc*XoK{Z5 zE!c9Z3tgm^3=W*NrX(YP4+RKqhoCm9K^HMIUh8|DgL zGUU&-v| z`Hz|0DaKDQMV{$Q?ie%2cybhBC`9GOC4#-=$r5H?RB5n*hF3&bRvN(^<|&imHQ6yN F`~|e%M+N`@ literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/TimetableQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..39cbbc4d28b3ce109b3724201d9340e4d44b088e GIT binary patch literal 4360 zcmb_fTXz#x7~Q8$nrRxK4Q(OZy}e4*>3ixXV|9UWL~B=8a**|3mpE> zS`^1KhF&o21bVSXpq-(7mI6G=a_7LW5i_*>gIbvM+@8#kz$1jv5YCvP}SS2<%AUN$eC@%XCO%g%tL9 zNSL}PL8%+xgv1p{=vCXCwM}W=2G0m|nO45&6^z5xMAFCNg1~xNGQ+-Q<{N2h$Ot_B z*xES$bmc1zg95vno>DE4hGzseKW>_UCVf0b{|c;Jutd-+Yp6u^QB9)yA}g{dfxXx# z&>K`_$q<3PP1Peb`8t01tk0X` zIv9A&a$McYQ%rAPQ0PTNhozCG5;zO)Al;mBSg%Z6J#QFwrRfW7w0L5OZ6wyq2~2}6 z*p>He+pt_|i0bN@Z4zk2GmBh*$?XzeiQ%%qnx)Mj3`yV$US$WlrD}}ss!X+221|~H z8Lr*Scyp%a5)G_brn#}1pvW4oF28=);b*vA1gmjtXqk!zPHtAU>lu!kb4y^b$xPig z3fwc)tk;^)m3z&z{YkGkujs06syKI=kK^dBXRAqXH6O=ed&|tdEzolDvNY?v^5pd% z7nG2NxBr}m54b%I%7Gsx@G(B&4y~8VY+1$(o6)e=)HlXw65?}#4XpSh2Wt3|A%`@4 zO@j;#avMuMa;!i+SMuz1=QVoyV1We;Ktd%Ts$Twn#Cc+TWK#$Q?fU__yhQN1%I_;B~}HK9gb_^yPe6-c_i20!@A^JK16;;>vU^!9UpV^ z*l-`w@SYG!Mavxo^r;cyeg7U))jycMV zOTHa`4%g4)$kHUfNZBvZpfA+1>gTft8kYx~ zAhUl{y6n)&d7L~&d*_BCyq|xFi$l?*&N!VlyA9B88}3n5p6~BNOB(!}n{G=*a?`O? zG&imBMmG+%rP^w8cdLdzfe6Og^e1WiNqX}%-E)Qp&r#+S%XN;vIZsv-IKge}Bwkhu zj``d$8x(IcC?5H$1hpvCYcQGbI7V@u<06c305|v)B~B}fd}`xY9%2H`e+CY}obHT0 z#N1DmPYzHPkhwU;E6r<=*KS_>d5!Qomb^*950Z|$d+L5$-7D(;hPuD0?ssbm7(pi| zUn1NUw%IF$oS|5qum(L?AoMjBWR~J@knnZ6Ycnl#q;!*~r7|wSQOWQd?J`H3#EZ+5 zR3PYwz;2Vj;nH++>o0g`Jl)wrX`S&O5g$mt{}3OZAMjs2#HYzGG)(@Ga-J;JbeTS&Bi$ literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties new file mode 100644 index 0000000..62443e8 --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/timetable/queries.properties @@ -0,0 +1,24 @@ +# args: lineType, adminAreaUri, directionQuery +TimetableQueries.query.get.lines=PREFIX transit: PREFIX rdfs: PREFIX naptan: PREFIX skos: PREFIX irptt: SELECT DISTINCT ?line ?label ?altLabel ?direction ?directionDescription WHERE { ?line a %s; naptan:administrativeArea <%s>; rdfs:label ?label; skos:altLabel ?altLabel. %s} +TimetableQueries.query.get.lines.route.type=transit:Route +TimetableQueries.query.get.lines.route.property=transit:route +TimetableQueries.query.get.lines.service.type=irptt:Service +TimetableQueries.query.get.lines.service.property=irptt:service +TimetableQueries.query.get.lines.direction= ?trip a transit:Trip; %s ?line; transit:direction ?direction; transit:description ?directionDescription. +# args: service/route property, service/route uri +TimetableQueries.query.get.direction=PREFIX transit: PREFIX rdfs: PREFIX naptan: PREFIX skos: PREFIX irptt: SELECT DISTINCT ?direction ?directionDescription WHERE {?trip a transit:Trip; %s <%s>; transit:direction ?direction; transit:description ?directionDescription. +# args: route uri +TimetableQueries.query.get.servicesOnRoute=PREFIX transit: PREFIX rdfs: PREFIX irptt: SELECT DISTINCT ?service ?label WHERE {?service a irptt:Service; rdfs:label ?label. ?trip a transit:Trip; irptt:service ?service; transit:route <%s>. } + + +#args: service/route property, service/route uri, inbound/outbound string, day of week, startTime, endTime +TimetableQueries.query.get.busLocation=PREFIX xsd: PREFIX transit: PREFIX sprel: PREFIX irptt: PREFIX wgs84: SELECT ?arrivalTime ?departureTime ?stop ?easting ?northing ?latitude ?longitude WHERE {?trip a transit:Trip; %s <%s>; transit:direction "%s"^^xsd:string; transit:serviceCalendar ?servCal. ?servCal %s "true"^^xsd:boolean. ?stopTime transit:trip ?trip; transit:arrivalTime ?arrivalTime; transit:departureTime ?departureTime. filter ("%s"^^xsd:time <= ?arrivalTime && ?departureTime <= "%s"^^xsd:time) OPTIONAL {?stopTime transit:stop ?stop.} OPTIONAL {?stopTime sprel:easting ?easting.} OPTIONAL {?stopTime sprel:northing ?northing.} OPTIONAL {?stopTime wgs84:lat ?latitude.} OPTIONAL {?stopTime wgs84:long ?longitude.}} +TimetableQueries.query.get.busLocation.inbound=inbound +TimetableQueries.query.get.busLocation.outbound=outbound +TimetableQueries.query.get.busLocation.monday=transit:monday +TimetableQueries.query.get.busLocation.tuesday=transit:tuesday +TimetableQueries.query.get.busLocation.wednesday=transit:wednesday +TimetableQueries.query.get.busLocation.thursday=transit:thursday +TimetableQueries.query.get.busLocation.friday=transit:friday +TimetableQueries.query.get.busLocation.saturday=transit:saturday +TimetableQueries.query.get.busLocation.sunday=transit:sunday diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/NaptanNptgQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..5b9d3b7fab9a002edf794f535cbe90f828e81eb6 GIT binary patch literal 1288 zcmb_bYi|-k6g>l29;Fs2()z4V3aD(1pA5#NYD_c)wP+LLrvXNs3cENvYr?3OJF{y5*`P6Ilii&=bIv{I-aFraeEA087H+1IV0aR|b9mnwcv=ODj~uBcj_7;- z)YoF{XvJNB;wkOC4}_A!pNn+(M02+@(ZlEAUK%Ne!V&+#oe_73&ePtJ=xc_xyV8~V z9z(KLKV(Qf@CG7>B(iy&z#7A5Te_kXjC(@8;JuMxD7C#lA02Wf%{mIE^jqmOwA=qr zaf@MVD75i#AcoR&ePdCT99*utqa$_x+x zS+5myAoxJ2JSx~`$WoS24MVlIEHOqkLnX4fKNw4QUkM(%%-{?|<4<;Gpd8NOLK^26 zdK`+$V;2{x(QiC8=G5^!G16YosSPKi6{|L@Y$skSY35+52{Su(Mx>^pv~|kh+F#h2 zff(}qS3zvDT`JT4!0&2r^30R2_8+^^>1mXp&TxBGy?XIzhV_w|XQ`()QLgI+sxKZ% zGwPLPLgN{iK=+02Dd>(cb5H1>hN!lhXlH?_VTl;7TiZ8&0_Rmt1^@s6 literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/QueryReader.class new file mode 100644 index 0000000000000000000000000000000000000000..e974d2d6db078e8c9f3bcc82a82bb87070113748 GIT binary patch literal 1302 zcmb_cTT|0e5dKaJO&d}u<&Jo1MJyK|3&0hqxX2?>U!U{BKxt>O4?;OdrUx=oE6j(6z! zd|&fj-S(P}>ua9_?wZ_d@w_L`VU6nz?n>xj$nEL}x@PJ2j<&Y7%MG8QYjI-S+Fc74S4N3~z%yRX5Z#N-9xO&nc8gRS!c? zt+KwhQ7czABL)nkQSrbxEv?2qCvXkE7}yPq6N&V^VVSn+FEAualXZrUveV!)a>z^Q zWf%^Lx5-t|hkl044)-H42DNmx&B^PFXTUJ1Kt>m_u9`Mq4feOV`$6BbxEPsZ=vG~K zO<~8*)O^TQMiMs^j37&V{ZFRHuw4Bg+oXYrhN2ZQOkCekxa@e9Vp;_Sw{Tm+U5255 zcfA;x7D+|MJ=~WtaY-)`gn|+#8KeWDgtcvkfl@i1+~q<=JP>_96cKHPU6)aWszAdd zhLqlHa=XDW-7fS>cFb~4Ks*)@vkYVHXtV}CRqzbYNk+bNHnjdy8|D&TG88Ygv|@T5 z-GVbYR=ya#>6?yCD%|6T42%>o-Xfjr;%Q;>dZ_4SQ>Z4_ay3;^4h2$Kl5Twhqv%A6 zEGe|oWRvvhJBc(DWa*?k{5vpu0-1dJ6g}TD@Rf`NhUnQH0?7oEp_CMc!xM2zN{rKI z=`8>{r%o_>kt$OVs7eO~iZmq(!WeFnl@Z#B0k)}#h%J7@z|=AB994g!_%T;F#rO%P w$TOWQ9AoAfPmV$iiKx7|M6j1UdBW@qD-A|yctwOor4h_wo-!F;lbyiAUqIVOr~m)} literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties new file mode 100644 index 0000000..493254f --- /dev/null +++ b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/transport/queries.properties @@ -0,0 +1,4 @@ +NaptanNptgQueries.query.get.nptgRegions=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?region ?prefLabel ?regionCode WHERE {?region a naptan:Region; skos:prefLabel ?prefLabel; naptan:regionCode ?regionCode.} +NaptanNptgQueries.query.get.nptgAdminAreas=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?adminArea ?atcoAreaCode ?adminAreaCode ?prefLabel WHERE { ?adminArea a naptan:AdministrativeArea; naptan:region <%s>; naptan:atcoAreaCode ?atcoAreaCode; naptan:administrativeAreaCode ?adminAreaCode; skos:prefLabel ?prefLabel.} +NaptanNptgQueries.query.get.nptgLocalities=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?locality ?prefLabel ?altLabel ?nptgLocalityCode WHERE {?locality a naptan:NptgLocality;skos:prefLabel ?prefLabel;skos:altLabel ?altLabel;naptan:nptgLocalityCode ?nptgLocalityCode;naptan:administrativeArea <%s>.} +NaptanNptgQueries.query.get.busStopPointsInLocality=PREFIX naptan: PREFIX rdf: PREFIX skos: SELECT distinct ?busStop ?prefLabel ?street WHERE { ?busStop a naptan:BusStopPoint; naptan:nptgLocality <%s>; skos:prefLabel ?prefLabel; naptan:street ?street.} diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/QueryReader.class new file mode 100644 index 0000000000000000000000000000000000000000..7144045672b21d0a2daaec2483e51d2b2b012990 GIT binary patch literal 1287 zcmbtU+fvg|6kVrV9U{BKxt>O4?;OdrUx=oE6j(6z! zd|&fj-S(P}>uX;E?wZ`w0*|}e2MP{rTyJn!LI*>3S3l4-OSgBlwXI!l_zYdk8>{cC zmCe@>KH zEOHY17)CeU*Q^fINYChB|BZ*rIM$t`r{m-VyuvGoe8B#CAS)#!(Ox}E!aK!NdMWgZx?%=M3 z`wYWZC%hb(78yjw13Z*4dC4Uagn}Zb7^DL+|Fvy~!D2aX+GU~w9*HAA78z~&T$fRR zszAdNhLqlHa=XDW(=PQ|b*!=^Af5_{Ifn6eGA<@QSMUNa$w9u;YT7`tjdBUE84Bk% zS}{G3yx($S<*UJ)zUkOxz&(D*z-agr7hH2wJ`GG>56%4E6o$!OxR9!#L!Jzlq-&nQ z7&?)nND8Ag#pF8rP9hBj-L%sa{tg&DflMxairya>{6;|n!}RP4fnQ`DsgmI>#R)9@1FLpH A4*&oF literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/queries/user/UserQueries.class new file mode 100644 index 0000000000000000000000000000000000000000..5ec84e1cb1dc38c48566b906fd41070fc021588b GIT binary patch literal 2870 zcmbtWYg5}s6g>+D8`tGwaDXNuPM|Iru+m2YDI}CvQc@Q}j7i<34`FYJf-E_Dq-CZ* zs{KMd?X*9jKPr>EtMvmcGE6(nXf5g9bI&>V?uvik{`n7pPoYQA#jxTZX?j_!*q-A% zx~UmXP2*+TJ$5}_)jUVH+?wrp+AE(s26r{z<&IXQ%Wm)>iU`BtOZ~O3nYwkT?Hs)1 zWsjkE*{}@n9z*x^%sxY8-LCLBy3vq&#!T*>cGo5ddFL;h&9WKpuK8j(8;c}bqoG|1# zN0>P-;NloYDvFW+=%{4#nClhpByb4>41EM0@QGs#A4M^K%IDx!0+(@x%zkb=Rh?YF z6Qbs6o0_0IVFDR?qz=)C4nr7*n&uT9Lz0c*I>UIlBfeuWM13-wq8a)rdGlAp^<0(t zF~eAACYK=$2~|r5Gc1N^>ZBOjvl)iT&N>7i^z4!Dy1&>?B@Tw!1m=Y8{oE?ks5V|P z#A+&vVU#l09j<$P)%RZP*+<+`f^MEEBp-y{tu&WqG8jhM-MM&%Z;CC2S>0=H0Lcovf0k-c=0Cm|bvBw0rJ$kMBHysGVJ z#_;6KzCAUp!BA~*lY6{1R55%Xo>Y;6G}o_!<5V89at_;*euM*w_ zQ57rbYb0}(azep8y`>Kna?J|6szNHMovsjO> zjW7k1baJ0qL|e@&lzQe0rQZ2-G%wIxEfVJKw(9Aot7*wYR8LDDqNQocLsb8+IeSl3 zBS({^Q%=h{$J;y**iz8u%Rp4(h}f4khtQc5$AxI ManSFd PREFIX sioc: PREFIX irpuser: ASK { ?user a sioc:UserAccount; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} +UserQueries.query.exists=PREFIX xsd: PREFIX sioc: PREFIX irpuser: ASK { ?user a sioc:UserAccount; sioc:email "%s"^^xsd:string.} +UserQueries.query.get.email=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: SELECT ?nick ?user WHERE { ?user a sioc:UserAccount; foaf:nick ?nick; sioc:email "%s"^^xsd:string.} +UserQueries.query.get.uri=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: SELECT ?nick ?email WHERE { <%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email.} +UserQueries.query.get.user=user +UserQueries.update=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: DELETE {<%s> foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} INSERT { <%s> a sioc:UserAccount; foaf:nick "%s"^^xsd:string; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} WHERE {<%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} +UserQueries.update.delete=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: DELETE { <%s> a sioc:UserAccount; foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} WHERE {<%s> foaf:nick ?nick; sioc:email ?email; irpuser:password ?password.} +UserQueries.query.count=PREFIX sioc: SELECT COUNT(?user) WHERE {?user a sioc:UserAccount.} +UserQueries.update.create=PREFIX foaf: PREFIX xsd: PREFIX sioc: PREFIX irpuser: INSERT DATA { <%s> a sioc:UserAccount; foaf:nick "%s"^^xsd:string; sioc:email "%s"^^xsd:string; irpuser:password "%s"^^xsd:string.} +UserQueries.update.create.authToken=PREFIX xsd: PREFIX irpuser: INSERT DATA { <%s> irpuser:authToken "%s"^^xsd:string. } +UserQueries.baseNS=http://www.dotrural.ac.uk/irp/uploads/ontologies/user/ diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/AlertResource.class new file mode 100644 index 0000000000000000000000000000000000000000..0589cf0d5f8fa7540b52b4f376b87e012dc37e7e GIT binary patch literal 4817 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 literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/LocationDeviceObservationResource.class new file mode 100644 index 0000000000000000000000000000000000000000..f446383eeffd4765fc3d67a5cc0509cbeb1b6950 GIT binary patch literal 14026 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 literal 0 HcmV?d00001 diff --git a/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.class b/target/classes/uk/ac/dotrural/irp/ecosystem/transport/resources/impl/TimeTableResource.class new file mode 100644 index 0000000000000000000000000000000000000000..563e23333b8239e187697390f194637f5cb6ef78 GIT binary patch literal 10592 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 Zpdm`sjoO)usEp5~H>oB{+w7|5Ujuw-JjVb4 literal 0 HcmV?d00001