Skip to content

Commit 9c50234

Browse files
committed
Localization: Solver Clutering
- ensure that the current locale is passed on solver server calls - this is to make localized messages returned in the user's current locale, rather than just using the unitime.locale default
1 parent c9d4f8f commit 9c50234

6 files changed

+39
-11
lines changed

JavaSource/org/unitime/timetable/solver/jgroups/CourseSolverContainerRemote.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.jgroups.util.Rsp;
4242
import org.jgroups.util.RspList;
4343
import org.unitime.commons.hibernate.util.HibernateUtil;
44+
import org.unitime.localization.impl.Localization;
4445
import org.unitime.timetable.model.Assignment;
4546
import org.unitime.timetable.model.Class_;
4647
import org.unitime.timetable.model.Department;
@@ -103,13 +104,14 @@ public boolean createRemoteSolver(String user, DataProperties config, Address ca
103104
}
104105

105106
@Override
106-
public Object invoke(String method, String user, Class[] types, Object[] args) throws Exception {
107+
public Object invoke(String method, String user, String locale, Class[] types, Object[] args) throws Exception {
107108
try {
108109
SolverProxy solver = iCourseSolvers.get(user);
109110
if ("exists".equals(method) && types.length == 0)
110111
return solver != null;
111112
if (solver == null)
112113
throw new Exception("Solver " + user + " does not exist.");
114+
if (locale != null) Localization.setLocale(locale);
113115
return solver.getClass().getMethod(method, types).invoke(solver, args);
114116
} catch (InvocationTargetException e) {
115117
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
@@ -124,7 +126,10 @@ public Object invoke(String method, String user, Class[] types, Object[] args) t
124126
@Override
125127
public Object dispatch(Address address, String user, Method method, Object[] args) throws Exception {
126128
try {
127-
return iDispatcher.callRemoteMethod(address, "invoke", new Object[] { method.getName(), user, method.getParameterTypes(), args }, new Class[] { String.class, String.class, Class[].class, Object[].class }, SolverServerImplementation.sFirstResponse);
129+
return iDispatcher.callRemoteMethod(address, "invoke",
130+
new Object[] { method.getName(), user, Localization.getLocale(), method.getParameterTypes(), args },
131+
new Class[] { String.class, String.class, String.class, Class[].class, Object[].class },
132+
SolverServerImplementation.sFirstResponse);
128133
} catch (InvocationTargetException e) {
129134
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
130135
throw (Exception)e.getTargetException();

JavaSource/org/unitime/timetable/solver/jgroups/ExaminationSolverContainerRemote.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.jgroups.blocks.RpcDispatcher;
3535
import org.jgroups.fork.ForkChannel;
3636
import org.unitime.commons.hibernate.util.HibernateUtil;
37+
import org.unitime.localization.impl.Localization;
3738
import org.unitime.timetable.solver.exam.ExamSolverProxy;
3839

3940
/**
@@ -85,13 +86,14 @@ public boolean createRemoteSolver(String user, DataProperties config, Address ca
8586
}
8687

8788
@Override
88-
public Object invoke(String method, String user, Class[] types, Object[] args) throws Exception {
89+
public Object invoke(String method, String user, String locale, Class[] types, Object[] args) throws Exception {
8990
try {
9091
ExamSolverProxy solver = iExamSolvers.get(user);
9192
if ("exists".equals(method) && types.length == 0)
9293
return solver != null;
9394
if (solver == null)
9495
throw new Exception("Solver " + user + " does not exist.");
96+
if (locale != null) Localization.setLocale(locale);
9597
return solver.getClass().getMethod(method, types).invoke(solver, args);
9698
} catch (InvocationTargetException e) {
9799
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
@@ -106,7 +108,10 @@ public Object invoke(String method, String user, Class[] types, Object[] args) t
106108
@Override
107109
public Object dispatch(Address address, String user, Method method, Object[] args) throws Exception {
108110
try {
109-
return iDispatcher.callRemoteMethod(address, "invoke", new Object[] { method.getName(), user, method.getParameterTypes(), args }, new Class[] { String.class, String.class, Class[].class, Object[].class }, SolverServerImplementation.sFirstResponse);
111+
return iDispatcher.callRemoteMethod(address, "invoke",
112+
new Object[] { method.getName(), user, Localization.getLocale(), method.getParameterTypes(), args },
113+
new Class[] { String.class, String.class, String.class, Class[].class, Object[].class },
114+
SolverServerImplementation.sFirstResponse);
110115
} catch (InvocationTargetException e) {
111116
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
112117
throw (Exception)e.getTargetException();

JavaSource/org/unitime/timetable/solver/jgroups/InstructorSchedulingContainerRemote.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.jgroups.blocks.RpcDispatcher;
3434
import org.jgroups.fork.ForkChannel;
3535
import org.unitime.commons.hibernate.util.HibernateUtil;
36+
import org.unitime.localization.impl.Localization;
3637
import org.unitime.timetable.solver.exam.ExamSolverProxy;
3738
import org.unitime.timetable.solver.instructor.InstructorSchedulingProxy;
3839

@@ -85,13 +86,14 @@ public boolean createRemoteSolver(String user, DataProperties config, Address ca
8586
}
8687

8788
@Override
88-
public Object invoke(String method, String user, Class[] types, Object[] args) throws Exception {
89+
public Object invoke(String method, String user, String locale, Class[] types, Object[] args) throws Exception {
8990
try {
9091
InstructorSchedulingProxy solver = iInstrSchdSolvers.get(user);
9192
if ("exists".equals(method) && types.length == 0)
9293
return solver != null;
9394
if (solver == null)
9495
throw new Exception("Solver " + user + " does not exist.");
96+
if (locale != null) Localization.setLocale(locale);
9597
return solver.getClass().getMethod(method, types).invoke(solver, args);
9698
} catch (InvocationTargetException e) {
9799
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
@@ -106,7 +108,10 @@ public Object invoke(String method, String user, Class[] types, Object[] args) t
106108
@Override
107109
public Object dispatch(Address address, String user, Method method, Object[] args) throws Exception {
108110
try {
109-
return iDispatcher.callRemoteMethod(address, "invoke", new Object[] { method.getName(), user, method.getParameterTypes(), args }, new Class[] { String.class, String.class, Class[].class, Object[].class }, SolverServerImplementation.sFirstResponse);
111+
return iDispatcher.callRemoteMethod(address, "invoke",
112+
new Object[] { method.getName(), user, Localization.getLocale(), method.getParameterTypes(), args },
113+
new Class[] { String.class, String.class, String.class, Class[].class, Object[].class },
114+
SolverServerImplementation.sFirstResponse);
110115
} catch (InvocationTargetException e) {
111116
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
112117
throw (Exception)e.getTargetException();

JavaSource/org/unitime/timetable/solver/jgroups/OnlineStudentSchedulingContainerRemote.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.jgroups.blocks.RpcDispatcher;
3434
import org.jgroups.fork.ForkChannel;
3535
import org.unitime.commons.hibernate.util.HibernateUtil;
36+
import org.unitime.localization.impl.Localization;
3637
import org.unitime.timetable.onlinesectioning.OnlineSectioningServer;
3738
import org.unitime.timetable.onlinesectioning.OnlineSectioningServerContext;
3839
import org.unitime.timetable.solver.SolverProxy;
@@ -85,13 +86,14 @@ public boolean createRemoteSolver(String sessionId, DataProperties config, Addre
8586
}
8687

8788
@Override
88-
public Object invoke(String method, String sessionId, Class[] types, Object[] args) throws Exception {
89+
public Object invoke(String method, String sessionId, String locale, Class[] types, Object[] args) throws Exception {
8990
try {
9091
OnlineSectioningServer solver = iInstances.get(Long.valueOf(sessionId));
9192
if ("exists".equals(method) && types.length == 0)
9293
return solver != null;
9394
if (solver == null)
9495
throw new Exception("Server " + sessionId + " does not exist.");
96+
if (locale != null) Localization.setLocale(locale);
9597
return solver.getClass().getMethod(method, types).invoke(solver, args);
9698
} catch (InvocationTargetException e) {
9799
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
@@ -106,7 +108,10 @@ public Object invoke(String method, String sessionId, Class[] types, Object[] ar
106108
@Override
107109
public Object dispatch(Address address, String sessionId, Method method, Object[] args) throws Exception {
108110
try {
109-
return iDispatcher.callRemoteMethod(address, "invoke", new Object[] { method.getName(), sessionId, method.getParameterTypes(), args }, new Class[] { String.class, String.class, Class[].class, Object[].class }, SolverServerImplementation.sFirstResponse);
111+
return iDispatcher.callRemoteMethod(address, "invoke",
112+
new Object[] { method.getName(), sessionId, Localization.getLocale(), method.getParameterTypes(), args },
113+
new Class[] { String.class, String.class, String.class, Class[].class, Object[].class },
114+
SolverServerImplementation.sFirstResponse);
110115
} catch (InvocationTargetException e) {
111116
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
112117
throw (Exception)e.getTargetException();

JavaSource/org/unitime/timetable/solver/jgroups/RemoteSolverContainer.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ public interface RemoteSolverContainer<T> extends SolverContainer<T> {
3737

3838
public Object dispatch(Address address, String user, Method method, Object[] args) throws Exception;
3939

40-
public Object invoke(String method, String user, Class[] types, Object[] args) throws Exception;
40+
public Object invoke(String method, String user, String locale, Class[] types, Object[] args) throws Exception;
41+
default Object invoke(String method, String user, Class[] types, Object[] args) throws Exception {
42+
return invoke(method, user, null, types, args);
43+
}
4144

4245
public T createProxy(Address address, String user);
4346

JavaSource/org/unitime/timetable/solver/jgroups/StudentSolverContainerRemote.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.jgroups.blocks.RpcDispatcher;
3535
import org.jgroups.fork.ForkChannel;
3636
import org.unitime.commons.hibernate.util.HibernateUtil;
37+
import org.unitime.localization.impl.Localization;
3738
import org.unitime.timetable.solver.studentsct.StudentSolverProxy;
3839

3940
/**
@@ -85,13 +86,14 @@ public boolean createRemoteSolver(String user, DataProperties config, Address ca
8586
}
8687

8788
@Override
88-
public Object invoke(String method, String user, Class[] types, Object[] args) throws Exception {
89+
public Object invoke(String method, String user, String locale, Class[] types, Object[] args) throws Exception {
8990
try {
9091
StudentSolverProxy solver = iStudentSolvers.get(user);
9192
if ("exists".equals(method) && types.length == 0)
9293
return solver != null;
9394
if (solver == null)
9495
throw new Exception("Solver " + user + " does not exist.");
96+
if (locale != null) Localization.setLocale(locale);
9597
return solver.getClass().getMethod(method, types).invoke(solver, args);
9698
} catch (InvocationTargetException e) {
9799
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
@@ -106,7 +108,10 @@ public Object invoke(String method, String user, Class[] types, Object[] args) t
106108
@Override
107109
public Object dispatch(Address address, String user, Method method, Object[] args) throws Exception {
108110
try {
109-
return iDispatcher.callRemoteMethod(address, "invoke", new Object[] { method.getName(), user, method.getParameterTypes(), args }, new Class[] { String.class, String.class, Class[].class, Object[].class }, SolverServerImplementation.sFirstResponse);
111+
return iDispatcher.callRemoteMethod(address, "invoke",
112+
new Object[] { method.getName(), user, Localization.getLocale(), method.getParameterTypes(), args },
113+
new Class[] { String.class, String.class, String.class, Class[].class, Object[].class },
114+
SolverServerImplementation.sFirstResponse);
110115
} catch (InvocationTargetException e) {
111116
if (e.getTargetException() != null && e.getTargetException() instanceof Exception)
112117
throw (Exception)e.getTargetException();

0 commit comments

Comments
 (0)