![JAR search and dependency download from the Maven repository](/logo.png)
info.kwarc.sally4.mhw.base.factories.MathHubDocumentFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mhw-base Show documentation
Show all versions of mhw-base Show documentation
Implements the interaction of assigning a MathHub document to a Worker.
The newest version!
package info.kwarc.sally4.mhw.base.factories;
import info.kwarc.sally.comm.mathhubdocument.GetDocumentMeta;
import info.kwarc.sally.comm.mathhubdocument.GetDocumentMetaResponse;
import info.kwarc.sally4.framing.SallyFrameMenu;
import info.kwarc.sally4.lmh.impl.LMHImpl;
import info.kwarc.sally4.mhw.base.IMathHubUser;
import info.kwarc.sally4.mhw.base.IMathHubWorker;
import info.kwarc.sally4.mhw.base.ISessionManager;
import info.kwarc.sally4.mhw.base.impl.MathHubDocument;
import info.kwarc.sally4.os.events.EventBusContext;
import info.kwarc.sally4.registration.SallyClient;
import info.kwarc.sally4.theo.Theo;
import info.kwarc.sally4.util.InstanceCreator;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.felix.ipojo.Factory;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@Component
@Instantiate
public class MathHubDocumentFactory {
@Requires(filter="(factory.name="+MathHubDocument.factory_id+")")
Factory mathHubDocFactory;
@Requires
ISessionManager sessionManager;
Logger log = LoggerFactory.getLogger(getClass());
List contexts = new ArrayList();
@Invalidate
void stop() {
for (EventBusContext context : contexts) {
context.unregister(this);
}
}
@Bind(aggregate=true, optional=true)
public void onNewDocument(final SallyClient client) {
if (client.supports("mathhubdocument", "frames")) {
contexts.add(client.getEventBusContext());
client.getEventBusContext().register(this);
ListenableFuture futureResponse = client.sendRequest(new GetDocumentMeta(), GetDocumentMetaResponse.class);
Futures.addCallback(futureResponse, new FutureCallback() {
@Override
public void onSuccess(GetDocumentMetaResponse arg0) {
try {
IMathHubUser user = sessionManager.getUser(arg0.getSessionid());
if (user == null) {
log.error("No user could be assigned to session "+arg0.getSessionid());
return;
}
String userId = user.getUserId();
log.info("Session "+arg0.getSessionid()+" belongs to "+userId);
String repoName = LMHImpl._getRepoFromFilePath(arg0.getDocPath());
for (IMathHubWorker worker : user.getAssignedWorkers()) {
worker.ensureRunningRepository(repoName);
InstanceCreator.init(mathHubDocFactory).setInstanceName("MHDoc for "+arg0.getDocPath()+"@"+client.getDocQueue()).setProperty("userId", userId)
.setProperty("filePath", arg0.getDocPath())
.setDynamicRequirement("user", "userId", userId)
.setDynamicRequirement("client", SallyClient.clientQueue, client.getDocQueue())
.setDynamicRequirement("frame", SallyFrameMenu.clientProperty, client.getDocQueue())
.setDynamicRequirement("theo", Theo.environmentID, client.getEnvironmentID())
.setDynamicRequirement(MathHubDocument.mathHubWorker, "mhwid", worker.getMHWID())
.setDynamicRequirement(MathHubDocument.mathHubRepository, "(&(mhwid="+worker.getMHWID()+")(repoName="+repoName+"))")
.create();
}
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
log.error(sw.toString()); // stack trace as a string
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
}
});
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy