Skip to content

Commit

Permalink
Refactor of application (#8)
Browse files Browse the repository at this point in the history
* Cleanup

* Removed email marker

* Cleanups

* Cleanups

* Cleanups

* Cleanups

* Remove dependencies that are vulnerable and not used

* Removed not needed gps location classes

* Further cleanups

* Add modernizer plugin and fix some of the problems reported

* Spotless apply

* Spotless apply

* Cleanups

* Enable hibernate pool

* Cleanups and improve docker run

* Enable build of refactor branch

* Update workflow file

* Revert wrong exclusion from equals computation

* Revert wrong exclusion from equals computation

* Cleanup getDirectionIds Route method
  • Loading branch information
vesavlad authored Dec 31, 2023
1 parent 7387703 commit e809741
Show file tree
Hide file tree
Showing 415 changed files with 2,511 additions and 173,092 deletions.
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
logs
.git
.github
.idea
5 changes: 4 additions & 1 deletion .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ name: Java CI with Maven

on:
push:
branches: [ "main" ]
branches: [ "main", "refactor" ]
pull_request:
branches: [ "main" ]

Expand All @@ -21,12 +21,15 @@ jobs:

steps:
- uses: actions/checkout@v3
name: Checkout

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven

- name: Build with Maven
run: mvn -B package --file pom.xml

Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
.flattened-pom.xml
dependency-reduced-pom.xml
target
logs


HELP.md
Expand All @@ -34,7 +35,6 @@ target/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
Expand Down
80 changes: 36 additions & 44 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,82 +6,74 @@ ARG GTFS_URL="https://data.opentransport.ro/routing/gtfs/gtfs-stpt.zip"
ARG GTFSRTVEHICLEPOSITIONS="https://api.opentransport.ro/realtime/vehicle-positions/tm"
ARG TRANSITCLOCK_PROPERTIES="docker/config/transitclock.properties"

RUN apt-get update && apt-get install -y postgresql-client git-core vim jq

ENV AGENCYID ${AGENCYID}
ENV AGENCYNAME ${AGENCYNAME}
ENV GTFS_URL ${GTFS_URL}
ENV GTFSRTVEHICLEPOSITIONS ${GTFSRTVEHICLEPOSITIONS}
ENV TRANSITCLOCK_PROPERTIES ${TRANSITCLOCK_PROPERTIES}
ENV TRANSITCLOCK_CORE /transitclock-core

RUN apt-get update && apt-get install -y postgresql-client git-core vim jq

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.5.97
ENV TOMCAT_MAJOR 9
ENV TOMCAT_VERSION 9.0.84
ENV TOMCAT_TGZ_URL https://dlcdn.apache.org/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

EXPOSE 8080
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

RUN set -x \
&& curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \
&& tar -xvf tomcat.tar.gz --strip-components=1 \
&& rm bin/*.bat \
&& rm tomcat.tar.gz*

EXPOSE 8080

WORKDIR /
RUN mkdir /usr/local/transitclock && mkdir /usr/local/transitclock/db && mkdir /usr/local/transitclock/config && \
mkdir /usr/local/transitclock/logs && mkdir /usr/local/transitclock/cache && mkdir /usr/local/transitclock/data && \
mkdir /usr/local/transitclock/test && mkdir /usr/local/transitclock/test/config
RUN mkdir /usr/local/transitclock && \
mkdir /usr/local/transitclock/db && \
mkdir /usr/local/transitclock/config && \
mkdir /usr/local/transitclock/logs && \
mkdir /usr/local/transitclock/cache && \
mkdir /usr/local/transitclock/data && \
mkdir /usr/local/transitclock/test && \
mkdir /usr/local/transitclock/test/config

WORKDIR /usr/local/transitclock

ADD webapp/target/web.war /usr/local/transitclock/
ADD api/target/api.war /usr/local/transitclock/
ADD core/target/Core.jar /usr/local/transitclock/

# Deploy API which talks to core using RMI calls.
RUN mv api.war /usr/local/tomcat/webapps

# Deploy webapp which is a UI based on the API.
RUN mv web.war /usr/local/tomcat/webapps
COPY webapp/target/web.war /usr/local/tomcat/webapps/web.war
COPY api/target/api.war /usr/local/tomcat/webapps/api.war
COPY core/target/Core.jar /usr/local/transitclock/core.jar

# Scripts required to start transiTime.
ADD docker/bin/check_db_up.sh /usr/local/transitclock/bin/check_db_up.sh
ADD docker/bin/generate_sql.sh /usr/local/transitclock/bin/generate_sql.sh
ADD docker/bin/create_tables.sh /usr/local/transitclock/bin/create_tables.sh
ADD docker/bin/create_api_key.sh /usr/local/transitclock/bin/create_api_key.sh
ADD docker/bin/create_webagency.sh /usr/local/transitclock/bin/create_webagency.sh
ADD docker/bin/import_gtfs.sh /usr/local/transitclock/bin/import_gtfs.sh
ADD docker/bin/start_transitclock.sh /usr/local/transitclock/bin/start_transitclock.sh
ADD docker/bin/get_api_key.sh /usr/local/transitclock/bin/get_api_key.sh
ADD docker/bin/import_avl.sh /usr/local/transitclock/bin/import_avl.sh
ADD docker/bin/process_avl.sh /usr/local/transitclock/bin/process_avl.sh
ADD docker/bin/update_traveltimes.sh /usr/local/transitclock/bin/update_traveltimes.sh
ADD docker/bin/set_config.sh /usr/local/transitclock/bin/set_config.sh
COPY docker/bin/check_db_up.sh /usr/local/transitclock/bin/check_db_up.sh
COPY docker/bin/generate_sql.sh /usr/local/transitclock/bin/generate_sql.sh
COPY docker/bin/create_tables.sh /usr/local/transitclock/bin/create_tables.sh
COPY docker/bin/create_api_key.sh /usr/local/transitclock/bin/create_api_key.sh
COPY docker/bin/create_webagency.sh /usr/local/transitclock/bin/create_webagency.sh
COPY docker/bin/import_gtfs.sh /usr/local/transitclock/bin/import_gtfs.sh
COPY docker/bin/start_transitclock.sh /usr/local/transitclock/bin/start_transitclock.sh
COPY docker/bin/get_api_key.sh /usr/local/transitclock/bin/get_api_key.sh
COPY docker/bin/import_avl.sh /usr/local/transitclock/bin/import_avl.sh
COPY docker/bin/process_avl.sh /usr/local/transitclock/bin/process_avl.sh
COPY docker/bin/update_traveltimes.sh /usr/local/transitclock/bin/update_traveltimes.sh
COPY docker/bin/set_config.sh /usr/local/transitclock/bin/set_config.sh

# Handy utility to allow you connect directly to database
ADD docker/bin/connect_to_db.sh /usr/local/transitclock/bin/connect_to_db.sh
COPY docker/bin/connect_to_db.sh /usr/local/transitclock/bin/connect_to_db.sh

ENV PATH="/usr/local/transitclock/bin:${PATH}"

# This is a way to copy in test data to run a regression test.
# ADD docker/data/avl.csv /usr/local/transitclock/data/avl.csv
# ADD docker/data/gtfs_hart_old.zip /usr/local/transitclock/data/gtfs_hart_old.zip
# COPY docker/data/avl.csv /usr/local/transitclock/data/avl.csv
# COPY docker/data/gtfs_hart_old.zip /usr/local/transitclock/data/gtfs_hart_old.zip

RUN \
sed -i 's/\r//' /usr/local/transitclock/bin/*.sh &&\
chmod 777 /usr/local/transitclock/bin/*.sh

ADD docker/config/postgres_hibernate.cfg.xml /usr/local/transitclock/config/hibernate.cfg.xml
ADD ${TRANSITCLOCK_PROPERTIES} /usr/local/transitclock/config/transitclock.properties

# This adds the transitime configs to test.
ADD docker/config/test/* /usr/local/transitclock/config/test/

EXPOSE 8080
COPY docker/config/postgres_hibernate.cfg.xml /usr/local/transitclock/config/hibernate.cfg.xml
COPY ${TRANSITCLOCK_PROPERTIES} /usr/local/transitclock/config/transitclock.properties

CMD ["/start_transitclock.sh"]
63 changes: 24 additions & 39 deletions api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,77 +14,57 @@

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- jax-rs 2.0 -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>4.0.4</version>
</dependency>
<!-- jersey implementation library -->
<!-- <dependency>-->
<!-- <groupId>org.glassfish.jaxb</groupId>-->
<!-- <artifactId>jaxb-runtime</artifactId>-->
<!-- <version>3.0.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.24.1</version>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
<!-- <scope>provided</scope> -->
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.24.1</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>TheTransitClock</groupId>
<artifactId>core</artifactId>
<version>${revision}</version>
<exclusions>
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.bundles.repackaged</groupId>
<artifactId>jersey-guava</artifactId>
<version>2.6</version>
</dependency>
<!--SWAGGER DOCS-->

<!-- https://mvnrepository.com/artifact/io.swagger/swagger-jaxrs -->
<!-- https://mvnrepository.com/artifact/io.swagger/swagger-jersey2-jaxrs -->
<!-- <dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.20</version>
</dependency>-->
<!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-jaxrs2 -->
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-jaxrs2</artifactId>
<version>2.0.2</version>
<version>2.2.15</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.webjars/swagger-ui -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>3.17.1</version>
<version>4.19.1</version>
</dependency>

</dependencies>
Expand All @@ -98,6 +78,11 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
/* (C)2023 */
package org.transitclock.api.data;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Data;

@XmlRootElement(name = "adherenceSummary")
@Data
Expand Down
21 changes: 9 additions & 12 deletions api/src/main/java/org/transitclock/api/data/ApiExportsData.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,12 @@
package org.transitclock.api.data;

import java.io.Serializable;
import java.sql.Date;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.transitclock.db.structs.ExportTable;

/**
Expand Down Expand Up @@ -49,18 +46,18 @@ public ApiExportsData(List<ExportTable> exportData) {
// Determine UI type for vehicle
exportsData.add(new ApiExportData(oneExportData));
}*/
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
Iterator itr = exportData.iterator();
while (itr.hasNext()) {
Object[] obj = (Object[]) itr.next();
// now you have one array of Object for each row
exportsData.add(new ApiExportData(
Long.valueOf(obj[0].toString()),
Date.valueOf(obj[1].toString()),
DateTime.parse(obj[2].toString(), formatter).toDate(),
Integer.valueOf(obj[3].toString()),
Integer.valueOf(obj[4].toString()),
String.valueOf(obj[5])));
// exportsData.add(new ApiExportData(
// Long.valueOf(obj[0].toString()),
// Date.valueOf(obj[1].toString()),
// formatter.parse(obj[2].toString()).toDate(),
// Integer.valueOf(obj[3].toString()),
// Integer.valueOf(obj[4].toString()),
// String.valueOf(obj[5])));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ public class ApiTransientLocation {
@XmlAttribute
private double lon;

/********************** Member Functions **************************/

/**
* Need a no-arg constructor for Jersey. Otherwise get really obtuse "MessageBodyWriter not
* found for media type=application/json" exception.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ protected ApiTravelTimes() {}
*/
public ApiTravelTimes(TravelTimesForTrip travelTimes) {
this.configRev = travelTimes.getConfigRev();
this.travelTimeRev = travelTimes.getTravelTimeRev();
this.travelTimeRev = travelTimes.getTravelTimesRev();
this.tripPatternId = travelTimes.getTripPatternId();
this.tripCreatedForId = travelTimes.getTripCreatedForId();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,9 @@ public PredictionsInterface getPredictionsInterface() throws WebApplicationExcep
*/
public ConfigInterface getConfigInterface() throws WebApplicationException {
ConfigInterface configInterface = ConfigInterfaceFactory.get(agencyId);
if (configInterface == null) throw WebUtils.badRequestException("Agency ID " + agencyId + " is not valid");
if (configInterface == null) {
throw WebUtils.badRequestException("Agency ID " + agencyId + " is not valid");
}

return configInterface;
}
Expand Down
12 changes: 11 additions & 1 deletion api/src/main/java/org/transitclock/api/utils/WebUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static String apiKey() {
*/
public static WebApplicationException badRequestException(Throwable ex) {
logger.error("Bad Request", ex);
return badRequestException(Status.BAD_REQUEST.getStatusCode(), ex.getMessage());
return badRequestException(ex, Status.BAD_REQUEST.getStatusCode(), ex.getMessage());
}

/**
Expand All @@ -47,6 +47,16 @@ public static WebApplicationException badRequestException(String s) {
return badRequestException(Status.BAD_REQUEST.getStatusCode(), s);
}

public static WebApplicationException badRequestException(Throwable cause, int response, String s) {
return new WebApplicationException(
cause,
Response.status(response)
.entity(s)
.type(MediaType.TEXT_PLAIN)
.header("Access-Control-Allow-Origin", "*")
.build());
}

/**
* Convenience method for when need to throw a special HTTP response exception, such as 429
* which means Too Many Requests. See http://en.wikipedia.org/wiki/List_of_HTTP_status_codes for
Expand Down
Loading

0 comments on commit e809741

Please sign in to comment.