![JAR search and dependency download from the Maven repository](/logo.png)
info.kwarc.sally4.mhw.base.impl.MHWorkerSelector Maven / Gradle / Ivy
package info.kwarc.sally4.mhw.base.impl;
import info.kwarc.sally.comm.planetaryclient.NewService;
import info.kwarc.sally.comm.planetaryclient.RemoveService;
import info.kwarc.sally4.components.TemplatingComponent;
import info.kwarc.sally4.core.CamelContextProvider;
import info.kwarc.sally4.docmanager.DocumentManager;
import info.kwarc.sally4.mhw.base.IWorker;
import info.kwarc.sally4.planetarybase.PlanetaryDoc;
import info.kwarc.sally4.processors.FileServeProcessor;
import info.kwarc.sally4.servlet.SallyServlet;
import info.kwarc.sally4.servlet.utils.QueryParser;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.camel.CamelContext;
import org.apache.camel.Header;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.felix.ipojo.annotations.Bind;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Unbind;
import org.apache.felix.ipojo.annotations.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Instantiate
public class MHWorkerSelector extends RouteBuilder {
Logger log;
@Requires
SallyServlet servlet;
@Requires
CamelContextProvider camelContextProvider;
WorkerAssigner assignerModel;
@Requires
DocumentManager docMan;
@Requires(optional=true)
PlanetaryDoc [] planetaryClients;
List bindRequests = new ArrayList();
boolean started = false;
public MHWorkerSelector() {
log = LoggerFactory.getLogger(getClass());
}
@Bind(aggregate=true, optional=true)
public void bindMathHubWorker(IWorker worker) {
if (!started) {
bindRequests.add(worker);
return;
}
assignerModel.addWorker(worker);
}
@Unbind(aggregate=true, optional=true)
public void unbindMathHubWorker(IWorker worker) {
try {
assignerModel.removeWorker(worker.getWorkerID());
} catch (Exception e) {
e.printStackTrace();
}
}
@Bind(aggregate=true, optional=true)
public void addPlanetaryClient(PlanetaryDoc planetaryClients) {
NewService serv = new NewService();
String host = servlet.getURL();
serv.setIcon(host+"/mhw/libs/mhwsettings.png");
serv.setId("mhwsettings");
serv.setName("Math Hub Worker Settings");
serv.setType("toolbar");
serv.setUrl(host+"/mhw/mhwsettings?uid="+planetaryClients.getUserID());
planetaryClients.newService(serv);
}
public HashMap getMathHubWorkers(@Header(QueryParser.QueryMapHeader) HashMap query) {
HashMap data = new HashMap();
String userid = query.get("uid");
String worker = assignerModel.getWorkerAssignedToUser(userid);
if (worker !=null) {
data.put("assigned", true);
ArrayList w = new ArrayList();
w.add(assignerModel.getWorkerFromId(worker));
data.put("mhworkers", w);
} else {
data.put("assigned", false);
data.put("mhworkers", assignerModel.getFreeWorkers());
}
data.put("uid", userid);
return data;
}
public HashMap setMHW(@Header(QueryParser.QueryMapHeader) HashMap query) throws Exception {
HashMap data = new HashMap();
String uid = query.get("uid");
String mhwqueue = query.get("mhwqueue");
String action = query.get("action");
if (action.equals("connect")) {
assignerModel.assignWorkerToUser(mhwqueue, uid);
}
if (action.equals("disconnect")) {
assignerModel.unassignWorkerFromUser(mhwqueue, uid);
}
return data;
}
CamelContext resourceContext;
@Validate
public void start() {
assignerModel = new WorkerAssigner();
resourceContext = new DefaultCamelContext();
resourceContext.addComponent("sallyservlet", camelContextProvider.getComponent("sallyservlet"));
try {
resourceContext.addRoutes(this);
resourceContext.start();
} catch (Exception e) {
e.printStackTrace();
}
started = true;
for (IWorker doc : bindRequests) {
bindMathHubWorker(doc);
}
}
@Invalidate
public void stop() {
try {
resourceContext.stop();
for (PlanetaryDoc client : planetaryClients) {
RemoveService rm = new RemoveService();
rm.setId("mhwsettings");
client.stopService(rm);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void configure() throws Exception {
getContext().addComponent("freemarker", new TemplatingComponent("templates/", getClass().getClassLoader()));
// getContext().addComponent("freemarker", new FreemarkerComponent());
from("sallyservlet:///mhw/libs?matchOnUriPrefix=true")
.process(new FileServeProcessor("libs", getClass().getClassLoader() ));
from("sallyservlet:///mhw/mhwsettings")
.process(new QueryParser())
.bean(method(this, "getMathHubWorkers"))
// .to("freemarker:file:///home/costea/workspace_sally4/sally4/mhw-sally-service/src/main/resources/templates/mhwsettings.html");
.to("freemarker:mhwsettings.html");
from("sallyservlet:///mhw/setmhw")
.process(new QueryParser())
.bean(method(this, "setMHW"))
// .to("freemarker:file:///home/costea/workspace_sally4/sally4/mhw-sally-service/src/main/resources/templates/mhwset.html");
.to("freemarker:mhwset.html");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy