From f4cdd773291ad4dbf86965a615e1fddf69fdfdbd Mon Sep 17 00:00:00 2001
From: Constantin Jucovschi <jucovschi@gmail.com>
Date: Tue, 22 Apr 2014 21:28:00 +0200
Subject: [PATCH] more progress

---
 .../kwarc/sally4/mathhubworker/LMHClient.java |  7 ++
 .../sally4/mathhubworker/PlanetaryClient.java |  4 +-
 .../impl/LMHWorkflowInstance.java             | 10 ++-
 .../impl/MathHubEnvironment.java              | 38 ++++++---
 .../impl/MathHubManagerModel.java             | 40 ----------
 .../impl/MathHubWorkerSelectorService.java    | 77 ++++++++++++++-----
 .../impl/PlanetaryClientWorkflowInstance.java |  5 ++
 .../main/resources/templates/mhwsettings.html | 16 ++--
 8 files changed, 118 insertions(+), 79 deletions(-)
 create mode 100644 MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/LMHClient.java
 delete mode 100644 MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubManagerModel.java

diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/LMHClient.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/LMHClient.java
new file mode 100644
index 0000000..ac0efa6
--- /dev/null
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/LMHClient.java
@@ -0,0 +1,7 @@
+package info.kwarc.sally4.mathhubworker;
+
+import info.kwarc.sally4.docmanager.SallyDoc;
+
+public interface LMHClient {
+	SallyDoc getLMHDoc();
+}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java
index 34f9c6b..08775ad 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java
@@ -2,8 +2,10 @@ package info.kwarc.sally4.mathhubworker;
 
 import info.kwarc.sally.comm.planetaryclient.NewService;
 import info.kwarc.sally.comm.planetaryclient.RemoveService;
+import info.kwarc.sally4.docmanager.SallyDoc;
 
 public interface PlanetaryClient {
 	void newService(NewService service);
-	void stopService(RemoveService service);	
+	void stopService(RemoveService service);
+	SallyDoc getPlanetaryDoc();
 }
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java
index 463f918..7aa3118 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java
@@ -4,17 +4,20 @@ import info.kwarc.sally4.core.CamelContextProvider;
 import info.kwarc.sally4.core.SallyInteraction;
 import info.kwarc.sally4.docmanager.SallyDoc;
 import info.kwarc.sally4.marshalling.CommUtils;
+import info.kwarc.sally4.mathhubworker.LMHClient;
 import info.kwarc.sally4.planetary.PlanetaryConnection;
 import info.kwarc.sally4.servlet.SallyServlet;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.DataFormat;
 import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Provides;
 import org.apache.felix.ipojo.annotations.Requires;
 import org.apache.felix.ipojo.annotations.Validate;
 
 @Component(name="LMHWorkflowInstance")
-public class LMHWorkflowInstance extends RouteBuilder {
+@Provides(specifications=LMHClient.class)
+public class LMHWorkflowInstance extends RouteBuilder implements LMHClient{
 	String planetaryClientNamespace = "http://kwarc.info/sally/comm/planetaryclient";
 
 	@Requires
@@ -49,4 +52,9 @@ public class LMHWorkflowInstance extends RouteBuilder {
 			.to("direct:requestAuthKey");
 	}
 
+	@Override
+	public SallyDoc getLMHDoc() {
+		return route;
+	}
+
 }
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubEnvironment.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubEnvironment.java
index 925d206..0dfda73 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubEnvironment.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubEnvironment.java
@@ -1,19 +1,37 @@
 package info.kwarc.sally4.mathhubworker.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import info.kwarc.sally4.mathhubworker.LMHClient;
+import info.kwarc.sally4.mathhubworker.PlanetaryClient;
 
 public class MathHubEnvironment {
 
-	List<String> services;
-
+	PlanetaryClient planetaryClient;
+	LMHClient lmhClient;
+	
 	public MathHubEnvironment() {
-		services = new ArrayList<String>();
-	}	
-
-	public void addService(String serviceName) {
-
 	}
 
+	public PlanetaryClient getPlanetaryClient() {
+		return planetaryClient;
+	}
+	
+	public void setPlanetaryClient(PlanetaryClient  planetaryClient) {
+		this.planetaryClient = planetaryClient;
+	}
+	
+	public LMHClient getLmhClient() {
+		return lmhClient;
+	}
+	
+	public void setLmhClient(LMHClient lmhClient) {
+		this.lmhClient = lmhClient;
+	}
+	
+	public String getDescription() {
+		StringBuilder desc = new StringBuilder();
+		if (lmhClient !=null)
+			desc.append("LMH");
+		return desc.toString();
+	}
+	
 }
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubManagerModel.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubManagerModel.java
deleted file mode 100644
index d235114..0000000
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubManagerModel.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package info.kwarc.sally4.mathhubworker.impl;
-
-import info.kwarc.sally4.docmanager.DocumentManager;
-
-import java.util.HashMap;
-
-/**
- * Manages the connection between documents and MathHubWorker environments
- * @author Constantin Jucovschi
- *
- */
-public class MathHubManagerModel {
-	// mapping between a document alex route and an environment
-	HashMap<String, String> docEnvMapping;
-	DocumentManager docManager;
-	
-	public MathHubManagerModel(DocumentManager docManager) {
-		docEnvMapping = new HashMap<String, String>();
-		this.docManager = docManager;
-	}
-	
-	public HashMap<String, MathHubEnvironment> getAvailableWorkersForRoute(String docQueue) {
-		HashMap<String, MathHubEnvironment> environments= new HashMap<String, MathHubEnvironment>();
-		if (docQueue == null)
-			return environments;
-		/*
-		for (IDocWorkflowInstance instance : docManager.getDocWorkflowInstances(new String[]{"lmhworker"})) {
-			String envID = instance.getRoute().getEnvironmentID();
-			if (!environments.containsKey(envID))
-				environments.put(envID, new MathHubEnvironment());
-			environments.get(envID).add(new MathHubService(instance, "LMH"));
-		}
-		*/
-		return environments;
-	}
-	
-	public void connect(String docQueue, String environment) {
-		this.docEnvMapping.put(docQueue, environment);
-	}
-}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
index 39bc990..5d5fd1c 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
@@ -3,6 +3,7 @@ package info.kwarc.sally4.mathhubworker.impl;
 import info.kwarc.sally.comm.planetaryclient.NewService;
 import info.kwarc.sally.comm.planetaryclient.RemoveService;
 import info.kwarc.sally4.core.CamelContextProvider;
+import info.kwarc.sally4.mathhubworker.LMHClient;
 import info.kwarc.sally4.mathhubworker.PlanetaryClient;
 import info.kwarc.sally4.processors.FileServeProcessor;
 import info.kwarc.sally4.servlet.utils.QueryParser;
@@ -28,13 +29,36 @@ import org.slf4j.LoggerFactory;
 @Instantiate
 public class MathHubWorkerSelectorService extends RouteBuilder {
 	Logger log;
-	
+
 	@Requires
 	CamelContextProvider camelContextProvider;
-	
+
 	@Requires
 	PlanetaryClient [] planetaryClients;
-	
+
+	HashMap<String, MathHubEnvironment> environments;
+
+	@Bind(aggregate=true)
+	public void bindLMHClient(LMHClient lmhClient) {
+		String envid = lmhClient.getLMHDoc().getEnvironmentID();
+		if (!environments.containsKey(lmhClient.getLMHDoc().getEnvironmentID())) {
+			environments.put(envid, new MathHubEnvironment());
+		}
+		log.info(">>>> Adding LMHClient "+envid);
+		environments.get(envid).setLmhClient(lmhClient);
+	}	
+
+	@Unbind(aggregate=true)
+	public void unbindLMHClient(LMHClient lmhClient) {
+		String envid = lmhClient.getLMHDoc().getEnvironmentID();
+		if (!environments.containsKey(lmhClient.getLMHDoc().getEnvironmentID())) {
+			return;
+		}
+		log.info(">>>> Removing LMHClient "+envid);
+		environments.get(envid).setLmhClient(null);		
+	}	
+
+
 	@Bind(aggregate=true)
 	public void addPlanetaryClient(PlanetaryClient planetaryClients) {
 		NewService serv = new NewService();
@@ -43,33 +67,43 @@ public class MathHubWorkerSelectorService extends RouteBuilder {
 		serv.setId("mhwsettings");
 		serv.setName("Math Hub Worker Settings");
 		serv.setType("toolbar");
-		serv.setUrl(host+"/planetary/mhwsettings?id=123");//+route.getDocQueue());
+		serv.setUrl(host+"/planetary/mhwsettings?id="+planetaryClients.getPlanetaryDoc().getDocQueue());
 		planetaryClients.newService(serv);
 	}
 
 	@Unbind(aggregate=true)
 	public void removePlanetaryClient(PlanetaryClient planetaryClients) {
-		
+
 	}
 
-	
-	HashMap<String, MathHubEnvironment> environments;
-	
 	public MathHubWorkerSelectorService() {
 		log = LoggerFactory.getLogger(getClass());
 		environments = new HashMap<String, MathHubEnvironment>();
 	}
 
-	
+
 	public HashMap<String, Object> getSettings(@Header(QueryParser.QueryMapHeader) HashMap<String, String> query) {
 		HashMap<String, Object> data = new HashMap<String, Object>();
 		String id = query.get("id");
-		//data.put("env", model.getAvailableWorkersForRoute());
+
+		data.put("env", environments);
+		data.put("doc_queue_id", id);
+		return data;
+	}
+
+	public HashMap<String, Object> setMHW(@Header(QueryParser.QueryMapHeader) HashMap<String, String> query) {
+		HashMap<String, Object> data = new HashMap<String, Object>();
+		String id = query.get("id");
+		String envid = query.get("envid");
+
+		data.put("env", environments);
+		data.put("doc_queue_id", id);
 		return data;
 	}
+
 	
 	CamelContext resourceContext;
-	
+
 	@Validate
 	public void start() {
 		resourceContext = new DefaultCamelContext();
@@ -81,7 +115,7 @@ public class MathHubWorkerSelectorService extends RouteBuilder {
 			e.printStackTrace();
 		}
 	}
-	
+
 	@Invalidate
 	public void stop() {
 		try {
@@ -99,15 +133,20 @@ public class MathHubWorkerSelectorService extends RouteBuilder {
 
 	@Override
 	public void configure() throws Exception {
-//		getContext().addComponent("freemarker", new TemplatingComponent("templates/", getClass().getClassLoader()));
+		//		getContext().addComponent("freemarker", new TemplatingComponent("templates/", getClass().getClassLoader()));
 		getContext().addComponent("freemarker", new FreemarkerComponent());
 		from("sallyservlet:///planetary/libs?matchOnUriPrefix=true")
-			.process(new FileServeProcessor("libs", getClass().getClassLoader() ));
-		
+		.process(new FileServeProcessor("libs", getClass().getClassLoader() ));
+
 		from("sallyservlet:///planetary/mhwsettings")
-			.process(new QueryParser())
-			.bean(method(this, "getSettings"))
-			.to("freemarker:file:///home/costea/workspace_sally4/sally4.git/MathHubWorker/src/main/resources/templates/mhwsettings.html")
-			.to("mock:result");
+		.process(new QueryParser())
+		.bean(method(this, "getSettings"))
+		.to("freemarker:file:///home/costea/workspace_sally4/sally4.git/MathHubWorker/src/main/resources/templates/mhwsettings.html");
+
+		from("sallyservlet:///planetary/setmhw")
+		.process(new QueryParser())
+		.bean(method(this, "getSettings"))
+		.to("freemarker:file:///home/costea/workspace_sally4/sally4.git/MathHubWorker/src/main/resources/templates/mhwsettings.html");
+
 	}
 }
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
index 3e6b719..c5710f4 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
@@ -140,4 +140,9 @@ public class PlanetaryClientWorkflowInstance extends RouteBuilder implements Pla
 		context.createProducerTemplate().sendBody("direct:sendToPlanetaryClient", service);		
 	}
 
+	@Override
+	public SallyDoc getPlanetaryDoc() {
+		return route;
+	}
+
 }
diff --git a/MathHubWorker/src/main/resources/templates/mhwsettings.html b/MathHubWorker/src/main/resources/templates/mhwsettings.html
index eb8b4e5..46ef9f3 100644
--- a/MathHubWorker/src/main/resources/templates/mhwsettings.html
+++ b/MathHubWorker/src/main/resources/templates/mhwsettings.html
@@ -13,18 +13,18 @@
   </div>
 </div>
 
-
 	<#list body.env?keys as e>
+		<form action="setmhw">
 		<div class="row-fluid">
 			<div class="span1">${e_index+1}.</div>
-			<div class="span11 btn">
-				<#list body.env[e] as workflowInstances>
-					 ${workflowInstances.getServiceName()}
-				</#list>
-			</div>
+			<button class="span11 btn">
+				${body.env[e].getDescription()}
+			</button>
+			<input type="hidden" name="envid" value="${e}" />
+			<input type="hidden" name="id" value="${body.doc_queue_id}" />
 		</div>
-
+		</form>
 	</#list>
-
+	
 </body>
 </html>
\ No newline at end of file
-- 
GitLab