Skip to content
Open
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
6b51f70
Introduce HTTP handler for TRIAS/OJP
leonardehrenfried Dec 26, 2025
2cab565
Flesh out the OJP interface
leonardehrenfried Dec 26, 2025
47e7eef
Expose OJP API
leonardehrenfried Dec 26, 2025
6e8a50d
Extract separate mappers for request types
leonardehrenfried Dec 27, 2025
0e914cb
Flesh out trip result mapping
leonardehrenfried Dec 27, 2025
ea4b1f6
Implement trip response context
leonardehrenfried Jan 3, 2026
6aec75f
Add xsi to top level schemas
leonardehrenfried Jan 4, 2026
ab7db23
Extract mapper for DatedJourney
leonardehrenfried Jan 4, 2026
1f475e9
Extract separate mapper for RouteRequest
leonardehrenfried Jan 5, 2026
f55e21d
Add separate config, docs
leonardehrenfried Jan 6, 2026
b4ce6d7
Extract reusable doc generator
leonardehrenfried Jan 6, 2026
a3403e2
Add explorer webapp
leonardehrenfried Jan 6, 2026
7494d5d
Bump model version
leonardehrenfried Jan 6, 2026
ee5282d
Improve context mapping
leonardehrenfried Jan 8, 2026
e8cc263
Use correct default request for routing
leonardehrenfried Jan 8, 2026
c7bc480
Bring output in line with XML schema
leonardehrenfried Jan 8, 2026
6a20e98
Rename package to 'resource'
leonardehrenfried Jan 8, 2026
3433022
Move mapper to correct package
leonardehrenfried Jan 9, 2026
18b2a18
Implement modes and transit filters
leonardehrenfried Jan 9, 2026
586be87
Add test for serialization
leonardehrenfried Jan 12, 2026
9d1ec78
Apply review feedback
leonardehrenfried Jan 20, 2026
a5d15c7
Reformat
leonardehrenfried Jan 23, 2026
d74f06f
Apply review feedback
leonardehrenfried Jan 26, 2026
dc8c618
Use brackets as delimiters
leonardehrenfried Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@
<dependency>
<groupId>org.opentripplanner</groupId>
<artifactId>ojp-java-model</artifactId>
<version>2.0.1</version>
<version>2.0.7</version>
</dependency>

<!-- create zip test files-->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package org.opentripplanner.ext.ojp.doc;

import static org.opentripplanner.framework.application.OtpFileNames.ROUTER_CONFIG_FILENAME;
import static org.opentripplanner.framework.io.FileUtils.assertFileEquals;
import static org.opentripplanner.framework.io.FileUtils.readFile;
import static org.opentripplanner.framework.io.FileUtils.writeFile;
import static org.opentripplanner.generate.doc.framework.DocsTestConstants.SANDBOX_TEMPLATE_PATH;
import static org.opentripplanner.generate.doc.framework.DocsTestConstants.SANDBOX_USER_DOC_PATH;
import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection;
import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromPath;
import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4;

import java.io.File;
import org.opentripplanner.generate.doc.framework.DocBuilder;
import org.opentripplanner.generate.doc.framework.ParameterDetailsList;
import org.opentripplanner.generate.doc.framework.ParameterSummaryTable;
import org.opentripplanner.generate.doc.framework.SkipNodes;
import org.opentripplanner.generate.doc.framework.TemplateUtil;
import org.opentripplanner.standalone.config.RouterConfig;
import org.opentripplanner.standalone.config.framework.json.NodeAdapter;
import org.opentripplanner.test.support.ResourceLoader;

class DocTest {

private static final SkipNodes SKIP_NODES = SkipNodes.of().build();

private final String configParam;

private final File template;
private final File outFile;

private final File routerConfigFile;

DocTest(String markdownFile, String configFile, String configParam) {
this.configParam = configParam;
this.template = new File(SANDBOX_TEMPLATE_PATH, markdownFile);
this.outFile = new File(SANDBOX_USER_DOC_PATH, markdownFile);
this.routerConfigFile = ResourceLoader.of(DocTest.class).extTestResourceFile(configFile);
}

void build() {
NodeAdapter node = readConfig();

// Read and close input file (same as output file)
String template = readFile(this.template);
String original = readFile(this.outFile);

template = replaceSection(template, "config", updaterDoc(node));

writeFile(outFile, template);
assertFileEquals(original, outFile);
}

private NodeAdapter readConfig() {
var json = jsonNodeFromPath(routerConfigFile.toPath());
var conf = new RouterConfig(json, routerConfigFile.getName(), false);
return conf.asNodeAdapter().child(configParam);
}

private String updaterDoc(NodeAdapter node) {
DocBuilder buf = new DocBuilder();
addExample(buf, node);
addParameterSummaryTable(buf, node);
addDetailsSection(buf, node);
return buf.toString();
}

private void addParameterSummaryTable(DocBuilder buf, NodeAdapter node) {
buf
.header(3, "Overview", null)
.addSection(new ParameterSummaryTable(SKIP_NODES).createTable(node).toMarkdownTable());
}

private void addDetailsSection(DocBuilder buf, NodeAdapter node) {
buf
.header(3, "Details", null)
.addSection(ParameterDetailsList.listParametersWithDetails(node, SKIP_NODES, HEADER_4));
}

private void addExample(DocBuilder buf, NodeAdapter node) {
var root = TemplateUtil.jsonExampleBuilder(node.rawNode()).wrapInObject(configParam).build();
buf.header(3, "Example configuration", null).addExample(ROUTER_CONFIG_FILENAME, root);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.opentripplanner.ext.ojp.doc;

import org.junit.jupiter.api.Test;
import org.opentripplanner.generate.doc.framework.GeneratesDocumentation;

@GeneratesDocumentation
public class OjpApiDocTest {

@Test
public void update() {
new DocTest("OjpApi.md", "ojp-config.json", "ojpApi").build();
}
}
Original file line number Diff line number Diff line change
@@ -1,81 +1,13 @@
package org.opentripplanner.ext.ojp.doc;

import static org.opentripplanner.framework.application.OtpFileNames.ROUTER_CONFIG_FILENAME;
import static org.opentripplanner.framework.io.FileUtils.assertFileEquals;
import static org.opentripplanner.framework.io.FileUtils.readFile;
import static org.opentripplanner.framework.io.FileUtils.writeFile;
import static org.opentripplanner.generate.doc.framework.DocsTestConstants.SANDBOX_TEMPLATE_PATH;
import static org.opentripplanner.generate.doc.framework.DocsTestConstants.SANDBOX_USER_DOC_PATH;
import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection;
import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromPath;
import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4;

import java.io.File;
import org.junit.jupiter.api.Test;
import org.opentripplanner.generate.doc.framework.DocBuilder;
import org.opentripplanner.generate.doc.framework.GeneratesDocumentation;
import org.opentripplanner.generate.doc.framework.ParameterDetailsList;
import org.opentripplanner.generate.doc.framework.ParameterSummaryTable;
import org.opentripplanner.generate.doc.framework.SkipNodes;
import org.opentripplanner.generate.doc.framework.TemplateUtil;
import org.opentripplanner.standalone.config.RouterConfig;
import org.opentripplanner.standalone.config.framework.json.NodeAdapter;
import org.opentripplanner.test.support.ResourceLoader;

@GeneratesDocumentation
public class TriasApiDocTest {

private static final File TEMPLATE = new File(SANDBOX_TEMPLATE_PATH, "TriasApi.md");
private static final File OUT_FILE = new File(SANDBOX_USER_DOC_PATH, "TriasApi.md");

private static final File ROUTER_CONFIG_FILE = ResourceLoader.of(
TriasApiDocTest.class
).extTestResourceFile(ROUTER_CONFIG_FILENAME);
private static final SkipNodes SKIP_NODES = SkipNodes.of().build();
public static final String CONFIG_PARAM = "triasApi";

@Test
public void update() {
NodeAdapter node = readTriasConfig();

// Read and close input file (same as output file)
String template = readFile(TEMPLATE);
String original = readFile(OUT_FILE);

template = replaceSection(template, "config", updaterDoc(node));

writeFile(OUT_FILE, template);
assertFileEquals(original, OUT_FILE);
}

private NodeAdapter readTriasConfig() {
var json = jsonNodeFromPath(ROUTER_CONFIG_FILE.toPath());
var conf = new RouterConfig(json, ROUTER_CONFIG_FILE.getName(), false);
return conf.asNodeAdapter().child(CONFIG_PARAM);
}

private String updaterDoc(NodeAdapter node) {
DocBuilder buf = new DocBuilder();
addExample(buf, node);
addParameterSummaryTable(buf, node);
addDetailsSection(buf, node);
return buf.toString();
}

private void addParameterSummaryTable(DocBuilder buf, NodeAdapter node) {
buf
.header(3, "Overview", null)
.addSection(new ParameterSummaryTable(SKIP_NODES).createTable(node).toMarkdownTable());
}

private void addDetailsSection(DocBuilder buf, NodeAdapter node) {
buf
.header(3, "Details", null)
.addSection(ParameterDetailsList.listParametersWithDetails(node, SKIP_NODES, HEADER_4));
}

private void addExample(DocBuilder buf, NodeAdapter node) {
var root = TemplateUtil.jsonExampleBuilder(node.rawNode()).wrapInObject(CONFIG_PARAM).build();
buf.header(3, "Example configuration", null).addExample(ROUTER_CONFIG_FILENAME, root);
new DocTest("TriasApi.md", "trias-config.json", "triasApi").build();
}
}
Loading
Loading