Skip to content

Commit 0a05ed6

Browse files
committed
Introduce LegacyCatchAllController to handle legacy URL mappings and centralize fallback logic.
1 parent 9418935 commit 0a05ed6

File tree

2 files changed

+170
-20
lines changed

2 files changed

+170
-20
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package org.openmrs.web.controller;
2+
3+
4+
5+
import jakarta.servlet.http.HttpServletRequest;
6+
import jakarta.servlet.http.HttpServletResponse;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.servlet.ModelAndView;
10+
import org.springframework.web.servlet.mvc.Controller;
11+
12+
@org.springframework.stereotype.Controller
13+
@RequestMapping("/**") // handled via PathPattern with /** mapping in XML
14+
public class LegacyCatchAllController implements Controller {
15+
16+
@Autowired
17+
private Controller springController;
18+
@Autowired
19+
private Controller fieldGenController;
20+
@Autowired
21+
private Controller portletController;
22+
23+
@Autowired
24+
private Controller globalPropertyPortletController;
25+
26+
@Autowired
27+
private Controller addressLayoutPortletController;
28+
29+
@Autowired
30+
private Controller nameLayoutPortletController;
31+
32+
@Autowired
33+
private Controller patientProgramsPortletController;
34+
35+
@Autowired
36+
private Controller personRelationshipsPortletController;
37+
38+
@Autowired
39+
private Controller patientEncountersPortletController;
40+
41+
@Autowired
42+
private Controller patientVisitsPortletController;
43+
44+
@Autowired
45+
private Controller personFormEntryPortletController;
46+
47+
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
48+
String path = request.getRequestURI();
49+
if (path == null) {
50+
response.sendError(HttpServletResponse.SC_NOT_FOUND);
51+
return null;
52+
}
53+
54+
// Normalize (strip context path if present)
55+
String ctx = request.getContextPath();
56+
if (ctx != null && !ctx.isEmpty() && path.startsWith(ctx)) {
57+
path = path.substring(ctx.length());
58+
}
59+
60+
if (path.endsWith("/globalProperties.portlet")) {
61+
return globalPropertyPortletController.handleRequest(request, response);
62+
}
63+
if (path.endsWith("/addressLayout.portlet")) {
64+
return addressLayoutPortletController.handleRequest(request, response);
65+
}
66+
if (path.endsWith("/nameLayout.portlet")) {
67+
return nameLayoutPortletController.handleRequest(request, response);
68+
}
69+
if (path.endsWith("/patientPrograms.portlet")) {
70+
return patientProgramsPortletController.handleRequest(request, response);
71+
}
72+
if (path.endsWith("/personRelationships.portlet")) {
73+
return personRelationshipsPortletController.handleRequest(request, response);
74+
}
75+
if (path.endsWith("/patientEncounters.portlet")) {
76+
return patientEncountersPortletController.handleRequest(request, response);
77+
}
78+
if (path.endsWith("/patientVisits.portlet")) {
79+
return patientVisitsPortletController.handleRequest(request, response);
80+
}
81+
if (path.endsWith("/personFormEntry.portlet")) {
82+
return personFormEntryPortletController.handleRequest(request, response);
83+
}
84+
85+
if (path.endsWith(".field")) {
86+
return fieldGenController.handleRequest(request, response);
87+
}
88+
if (path.endsWith(".htm")) {
89+
return springController.handleRequest(request, response);
90+
}
91+
if (path.endsWith(".portlet")) {
92+
return portletController.handleRequest(request, response);
93+
}
94+
95+
// Default fallback – nothing matched
96+
response.sendError(HttpServletResponse.SC_NOT_FOUND, "No handler found for " + path);
97+
return null;
98+
}
99+
100+
101+
public void setSpringController(Controller springController) {
102+
this.springController = springController;
103+
}
104+
105+
public void setFieldGenController(Controller fieldGenController) {
106+
this.fieldGenController = fieldGenController;
107+
}
108+
109+
public void setPortletController(Controller portletController) {
110+
this.portletController = portletController;
111+
}
112+
113+
public void setGlobalPropertyPortletController(Controller globalPropertyPortletController) {
114+
this.globalPropertyPortletController = globalPropertyPortletController;
115+
}
116+
117+
public void setAddressLayoutPortletController(Controller addressLayoutPortletController) {
118+
this.addressLayoutPortletController = addressLayoutPortletController;
119+
}
120+
121+
public void setNameLayoutPortletController(Controller nameLayoutPortletController) {
122+
this.nameLayoutPortletController = nameLayoutPortletController;
123+
}
124+
125+
public void setPatientProgramsPortletController(Controller patientProgramsPortletController) {
126+
this.patientProgramsPortletController = patientProgramsPortletController;
127+
}
128+
129+
public void setPersonRelationshipsPortletController(Controller personRelationshipsPortletController) {
130+
this.personRelationshipsPortletController = personRelationshipsPortletController;
131+
}
132+
133+
public void setPatientEncountersPortletController(Controller patientEncountersPortletController) {
134+
this.patientEncountersPortletController = patientEncountersPortletController;
135+
}
136+
137+
public void setPatientVisitsPortletController(Controller patientVisitsPortletController) {
138+
this.patientVisitsPortletController = patientVisitsPortletController;
139+
}
140+
141+
public void setPersonFormEntryPortletController(Controller personFormEntryPortletController) {
142+
this.personFormEntryPortletController = personFormEntryPortletController;
143+
}
144+
}
145+

omod/src/main/resources/webModuleApplicationContext.xml

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
1717

1818
<!-- Add here beans related to the web context -->
19-
20-
<bean id="legacyUiUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
21-
<property name="patternParser"><null/></property>
19+
20+
21+
22+
23+
<bean id="legacyUiUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
2224
<property name="interceptors">
2325
<list>
2426
<ref bean="localeChangeInterceptor" />
@@ -46,7 +48,6 @@
4648

4749
<prop key="admin/person/addPerson.htm">addPerson</prop>
4850

49-
<prop key="**/*.portlet">portletController</prop>
5051

5152
<prop key="admin/modules/module.list">moduleListController</prop>
5253
<prop key="admin/modules/moduleProperties.form">modulePropertiesFormController</prop>
@@ -115,33 +116,37 @@
115116

116117
<prop key="forgotPassword.form">forgotPasswordForm</prop>
117118

118-
<prop key="**/globalProperties.portlet">globalPropertyPortletController</prop>
119-
<prop key="**/addressLayout.portlet">addressLayoutPortletController</prop>
120-
<prop key="**/nameLayout.portlet">nameLayoutPortletController</prop>
121-
<prop key="**/patientPrograms.portlet">patientProgramsPortletController</prop>
122-
<prop key="**/personRelationships.portlet">personRelationshipsPortletController</prop>
123-
<prop key="**/patientEncounters.portlet">patientEncountersPortletController</prop>
124-
<prop key="**/patientVisits.portlet">patientVisitsPortletController</prop>
125-
<prop key="**/personFormEntry.portlet">personFormEntryPortletController</prop>
126-
127-
<prop key="**/*.field">fieldGenController</prop>
128-
129119
<prop key="admin/visits/visitType.list">visitTypeList</prop>
130120
<prop key="admin/visits/visitType.form">visitTypeForm</prop>
131121
<prop key="admin/visits/visitAttributeType.list">visitAttributeTypeList</prop>
132122
<prop key="admin/visits/visitAttributeType.form">visitAttributeTypeForm</prop>
133123

134124
<prop key="admin/provider/providerAttributeType.list">providerAttributeTypeList</prop>
135-
<prop key="admin/provider/providerAttributeType.form">providerAttributeTypeForm</prop>
125+
<prop key="admin/provider/providerAttributeType.form">providerAttributeTypeForm</prop>
136126

137-
<prop key="**/*.htm">springController</prop>
138-
</props>
127+
<prop key="/**">legacyCatchAllController</prop>
128+
</props>
139129
</property>
140130
</bean>
141131

142132
<bean id="springController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
143-
144-
<!-- ** Patient ** -->
133+
134+
<bean id="legacyCatchAllController" class="org.openmrs.web.controller.LegacyCatchAllController">
135+
<property name="springController" ref="springController"/>
136+
<property name="fieldGenController" ref="fieldGenController"/>
137+
<property name="portletController" ref="portletController"/>
138+
139+
<property name="globalPropertyPortletController" ref="globalPropertyPortletController"/>
140+
<property name="addressLayoutPortletController" ref="addressLayoutPortletController"/>
141+
<property name="nameLayoutPortletController" ref="nameLayoutPortletController"/>
142+
<property name="patientProgramsPortletController" ref="patientProgramsPortletController"/>
143+
<property name="personRelationshipsPortletController" ref="personRelationshipsPortletController"/>
144+
<property name="patientEncountersPortletController" ref="patientEncountersPortletController"/>
145+
<property name="patientVisitsPortletController" ref="patientVisitsPortletController"/>
146+
<property name="personFormEntryPortletController" ref="personFormEntryPortletController"/>
147+
</bean>
148+
149+
<!-- ** Patient ** -->
145150

146151
<bean id="patientForm" class="org.openmrs.web.controller.patient.PatientFormController">
147152
<property name="commandName" value="patient"/>

0 commit comments

Comments
 (0)