@@ -77,12 +77,13 @@ private record ParsedFeedContainer(
7777 "station_status" ,
7878 "free_bike_status" ,
7979 "vehicle_status" ,
80+ "vehicle_availability" ,
81+ "manifest" ,
8082 "system_hours" ,
81- "system_alerts" ,
82- "system_alerts" ,
8383 "system_calendar" ,
8484 "system_regions" ,
8585 "system_pricing_plans" ,
86+ "system_alerts" ,
8687 "geofencing_zones"
8788 );
8889
@@ -110,17 +111,10 @@ public ValidationResult validate(Map<String, InputStream> rawFeeds) {
110111 }
111112
112113 if (parsedContainer .jsonObject () == null ) {
113- // Parsing failed or stream read error
114- FileValidationResult result = new FileValidationResult (
114+ FileValidationResult result = createParsingErrorResult (
115115 feedName ,
116- version .isFileRequired (feedName ),
117- true ,
118- 0 ,
119- version .getSchema (feedName ).toString (),
120- parsedContainer .originalContent (),
121- null ,
122- Collections .emptyList (),
123- parsedContainer .parsingErrors ()
116+ parsedContainer ,
117+ version
124118 );
125119 fileValidations .put (feedName , result );
126120 } else {
@@ -183,19 +177,10 @@ public FileValidationResult validateFile(String fileName, InputStream file) {
183177 ParsedFeedContainer parsedContainer = parseFeed (fileName , file );
184178
185179 if (parsedContainer .jsonObject () == null ) {
186- // Determine version for schema and requirement - this is tricky for a single file
187- // For now, using default version. A more robust approach might require context.
188- Version tempVersion = VersionFactory .createVersion (DEFAULT_VERSION );
189- return new FileValidationResult (
180+ return createParsingErrorResult (
190181 fileName ,
191- tempVersion .isFileRequired (fileName ),
192- true , // File was provided
193- 0 ,
194- tempVersion .getSchema (fileName ).toString (),
195- parsedContainer .originalContent (),
196- null , // File specific version unknown
197- Collections .emptyList (),
198- parsedContainer .parsingErrors ()
182+ parsedContainer ,
183+ VersionFactory .createVersion (DEFAULT_VERSION )
199184 );
200185 } else {
201186 return validateFile (
@@ -350,4 +335,39 @@ private ParsedFeedContainer parseFeed(String name, InputStream raw) {
350335 );
351336 }
352337 }
338+
339+ private FileValidationResult createParsingErrorResult (
340+ String feedName ,
341+ ParsedFeedContainer parsedContainer ,
342+ Version preferredVersion
343+ ) {
344+ Version schemaVersion = resolveVersionForFeed (feedName , preferredVersion );
345+ boolean supportedFeed = schemaVersion .getFileNames ().contains (feedName );
346+
347+ return new FileValidationResult (
348+ feedName ,
349+ supportedFeed && schemaVersion .isFileRequired (feedName ),
350+ true ,
351+ 0 ,
352+ supportedFeed ? schemaVersion .getSchema (feedName ).toString () : null ,
353+ parsedContainer .originalContent (),
354+ null ,
355+ Collections .emptyList (),
356+ parsedContainer .parsingErrors ()
357+ );
358+ }
359+
360+ private Version resolveVersionForFeed (
361+ String feedName ,
362+ Version preferredVersion
363+ ) {
364+ if (preferredVersion .getFileNames ().contains (feedName )) {
365+ return preferredVersion ;
366+ }
367+
368+ return VersionFactory .createLatestVersionSupportingFeed (
369+ feedName ,
370+ preferredVersion .getVersionString ()
371+ );
372+ }
353373}
0 commit comments