Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 12f8dd5

Browse files
committed
refactor(MergeFeedsJob): add storeNewVersion option
1 parent bea6caf commit 12f8dd5

File tree

2 files changed

+26
-29
lines changed

2 files changed

+26
-29
lines changed

src/main/java/com/conveyal/datatools/manager/jobs/MergeFeedsJob.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.conveyal.datatools.manager.auth.Auth0UserProfile;
66
import com.conveyal.datatools.manager.gtfsplus.tables.GtfsPlusTable;
77
import com.conveyal.datatools.manager.models.FeedSource;
8-
import com.conveyal.datatools.manager.models.FeedSource.FeedRetrievalMethod;
98
import com.conveyal.datatools.manager.models.FeedVersion;
109
import com.conveyal.datatools.manager.models.Project;
1110
import com.conveyal.datatools.manager.persistence.FeedStore;
@@ -136,14 +135,19 @@ public class MergeFeedsJob extends MonitorableJob {
136135
final FeedVersion mergedVersion;
137136
public boolean failOnDuplicateTripId = true;
138137

138+
public MergeFeedsJob(Auth0UserProfile owner, Set<FeedVersion> feedVersions, String file, MergeFeedsType mergeType) {
139+
this(owner, feedVersions, file, mergeType, true);
140+
}
141+
139142
/**
140-
* @param owner user ID that initiated job
141-
* @param feedVersions set of feed versions to merge
142-
* @param file resulting merge filename (without .zip)
143-
* @param mergeType the type of merge to perform (@link MergeFeedsType)
143+
* @param owner user ID that initiated job
144+
* @param feedVersions set of feed versions to merge
145+
* @param file resulting merge filename (without .zip)
146+
* @param mergeType the type of merge to perform {@link MergeFeedsType}
147+
* @param storeNewVersion whether to store merged feed as new version
144148
*/
145149
public MergeFeedsJob(Auth0UserProfile owner, Set<FeedVersion> feedVersions, String file,
146-
MergeFeedsType mergeType) {
150+
MergeFeedsType mergeType, boolean storeNewVersion) {
147151
super(owner, mergeType.equals(REGIONAL) ? "Merging project feeds" : "Merging feed versions",
148152
JobType.MERGE_FEED_VERSIONS);
149153
this.feedVersions = feedVersions;
@@ -158,7 +162,7 @@ public MergeFeedsJob(Auth0UserProfile owner, Set<FeedVersion> feedVersions, Stri
158162
// Grab parent feed source depending on merge type.
159163
FeedSource regionalFeedSource = null;
160164
// If storing a regional merge as a new version, find the feed source designated by the project.
161-
if (mergeType.equals(REGIONAL)) {
165+
if (mergeType.equals(REGIONAL) && storeNewVersion) {
162166
regionalFeedSource = Persistence.feedSources.getById(project.regionalFeedSourceId);
163167
// Create new feed source if this is the first regional merge.
164168
if (regionalFeedSource == null) {
@@ -175,11 +179,13 @@ public MergeFeedsJob(Auth0UserProfile owner, Set<FeedVersion> feedVersions, Stri
175179
this.feedSource = mergeType.equals(REGIONAL)
176180
? regionalFeedSource
177181
: feedVersions.iterator().next().parentFeedSource();
178-
// Set feed source for merged version.
179-
this.mergedVersion = new FeedVersion(this.feedSource);
180-
this.mergedVersion.retrievalMethod = mergeType.equals(REGIONAL)
181-
? FeedRetrievalMethod.REGIONAL_MERGE
182-
: FeedRetrievalMethod.SERVICE_PERIOD_MERGE;
182+
// Merged version will be null if the new version should not be stored.
183+
this.mergedVersion = storeNewVersion ? new FeedVersion(this.feedSource) : null;
184+
if (this.mergedVersion != null) {
185+
this.mergedVersion.retrievalMethod = mergeType.equals(REGIONAL)
186+
? REGIONAL_MERGE
187+
: FeedSource.FeedRetrievalMethod.SERVICE_PERIOD_MERGE;
188+
}
183189
this.mergeFeedsResult = new MergeFeedsResult(mergeType);
184190
}
185191

src/test/java/com/conveyal/datatools/manager/jobs/MergeFeedsJobTest.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static com.conveyal.datatools.TestUtils.createFeedVersion;
2727
import static com.conveyal.datatools.TestUtils.createFeedVersionFromGtfsZip;
2828
import static com.conveyal.datatools.TestUtils.zipFolderFiles;
29+
import static com.conveyal.datatools.manager.models.FeedSource.FeedRetrievalMethod.MANUALLY_UPLOADED;
2930
import static org.junit.Assert.assertEquals;
3031
import static org.junit.Assert.assertTrue;
3132
import static org.junit.Assert.fail;
@@ -60,27 +61,23 @@ public static void setUp() throws IOException {
6061
Persistence.projects.create(project);
6162

6263
// Bart
63-
FeedSource bart = new FeedSource("BART");
64-
bart.projectId = project.id;
64+
FeedSource bart = new FeedSource("BART", project.id, MANUALLY_UPLOADED);
6565
Persistence.feedSources.create(bart);
6666
bartVersion1 = createFeedVersionFromGtfsZip(bart, "bart_old.zip");
6767
bartVersion2 = createFeedVersionFromGtfsZip(bart, "bart_new.zip");
6868

6969
// Caltrain
70-
FeedSource caltrain = new FeedSource("Caltrain");
71-
caltrain.projectId = project.id;
70+
FeedSource caltrain = new FeedSource("Caltrain", project.id, MANUALLY_UPLOADED);
7271
Persistence.feedSources.create(caltrain);
7372
calTrainVersion = createFeedVersionFromGtfsZip(caltrain, "caltrain_gtfs.zip");
7473

7574
// Napa
76-
FeedSource napa = new FeedSource("Napa");
77-
napa.projectId = project.id;
75+
FeedSource napa = new FeedSource("Napa", project.id, MANUALLY_UPLOADED);
7876
Persistence.feedSources.create(napa);
7977
napaVersion = createFeedVersionFromGtfsZip(napa, "napa-no-agency-id.zip");
8078

8179
// Fake agencies (for testing calendar service_id merges with MTC strategy).
82-
FeedSource fakeAgency = new FeedSource("Fake Agency");
83-
fakeAgency.projectId = project.id;
80+
FeedSource fakeAgency = new FeedSource("Fake Agency", project.id, MANUALLY_UPLOADED);
8481
Persistence.feedSources.create(fakeAgency);
8582
bothCalendarFilesVersion = createFeedVersion(
8683
fakeAgency,
@@ -589,16 +586,10 @@ private void assertFeedMergeSucceeded(MergeFeedsJob mergeFeedsJob) {
589586
* Merges a set of FeedVersions and then creates a new FeedSource and FeedVersion of the merged feed.
590587
*/
591588
private FeedVersion regionallyMergeVersions(Set<FeedVersion> versions) {
592-
String mergeName = UUID.randomUUID().toString();
593-
MergeFeedsJob mergeFeedsJob = new MergeFeedsJob(user, versions, mergeName, MergeFeedsType.REGIONAL);
589+
MergeFeedsJob mergeFeedsJob = new MergeFeedsJob(user, versions, project.id, MergeFeedsType.REGIONAL);
594590
// Run the job in this thread (we're not concerned about concurrency here).
595591
mergeFeedsJob.run();
596-
// Create a new feed source/version for the merged feed, so we can easily analyze its contents.
597-
FeedSource source = new FeedSource(mergeName);
598-
source.projectId = project.id;
599-
Persistence.feedSources.create(source);
600-
File feed = FeedVersion.feedStore.getFeed(mergeName + ".zip");
601-
LOG.info("Regional merged file: {}", feed.getAbsolutePath());
602-
return createFeedVersion(source, feed);
592+
LOG.info("Regional merged file: {}", mergeFeedsJob.mergedVersion.retrieveGtfsFile().getAbsolutePath());
593+
return mergeFeedsJob.mergedVersion;
603594
}
604595
}

0 commit comments

Comments
 (0)