package org.societies.webapp.controller;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.societies.api.comm.xmpp.interfaces.ICommManager;
import org.societies.api.identity.INetworkNode;
import org.societies.api.internal.comm.ICommManagerController;
import org.societies.api.internal.css.management.ICSSLocalManager;
import org.societies.api.internal.css.ICSSInternalManager;
import org.societies.api.internal.servicelifecycle.IServiceDiscovery;
import org.societies.api.schema.cssmanagement.CssInterfaceResult;
import org.societies.api.schema.cssmanagement.CssNode;
import org.societies.api.schema.cssmanagement.CssRecord;
import org.societies.api.schema.servicelifecycle.model.Service;
import org.societies.webapp.models.CssNodeForm;
@Controller
public class CssNodeController {
/**
* OSGI service get auto injected
*/
@Autowired
private ICSSInternalManager cssLocalManager;
@Autowired
private ICommManager commManager;
@Autowired
private IServiceDiscovery sdService;
public IServiceDiscovery getSDService() {
return sdService;
}
public void getSDService(IServiceDiscovery sdService) {
this.sdService = sdService;
}
public ICSSInternalManager getCssLocalManager() {
return cssLocalManager;
}
public void setCssLocalManager(ICSSInternalManager cssLocalManager) {
this.cssLocalManager = cssLocalManager;
}
@RequestMapping(value = "/cssnodemgmt.html", method = RequestMethod.GET)
public ModelAndView cssManager() {
//CREATE A HASHMAP OF ALL OBJECTS REQUIRED TO PROCESS THIS PAGE
Map<String, Object> model = new HashMap<String, Object>();
model.put("message", "Please input values and submit");
//ADD THE BEAN THAT CONTAINS ALL THE FORM DATA FOR THIS PAGE
CssNodeForm cnForm = new CssNodeForm();
model.put("cnForm", cnForm);
//ADD ALL THE SELECT BOX VALUES USED ON THE FORM
Map<String, String> methods = new LinkedHashMap<String, String>();
Map<String, String> nodetypes = new LinkedHashMap<String, String>();
Map<String, String> nodestatus = new LinkedHashMap<String, String>();
Map<String, String> nodeinteractable = new LinkedHashMap<String, String>();
methods.put("addnode", "Add a Node");
methods.put("removenode", "Remove a Node");
methods.put("returnnodetype", "Find Node Type");
nodetypes.put("Android", "Android");
nodetypes.put("Rich", "Rich");
nodetypes.put("Cloud", "Cloud");
nodestatus.put("Available", "Available");
nodestatus.put("Unavailable", "Unavailable");
nodestatus.put("Hibernating", "Hibernating");
nodeinteractable.put("True", "True");
nodeinteractable.put("False", "False");
model.put("methods", methods);
model.put("nodetypes", nodetypes);
model.put("nodestatus", nodestatus);
model.put("nodeinteractable", nodeinteractable);
model.put("cssnodemgmtResult", "CSS Node Mgmt Result :");
return new ModelAndView("cssnodemgmt", model);
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/cssnodemgmt.html", method = RequestMethod.POST)
public ModelAndView cssManager(@Valid CssNodeForm cnForm,
BindingResult result, Map model) {
if (result.hasErrors()) {
model.put("result", "CSS Node manager form error");
return new ModelAndView("cssnodemgmt", model);
}
if (getCssLocalManager() == null) {
model.put("errormsg", "CSS Manager reference not available");
return new ModelAndView("error", model);
}
int Android = 0;
int Cloud = 1;
int Rich = 2;
int nodeType = 0;
int nodestates = 0;
String nodetypes = cnForm.getnodetypes();
String method = cnForm.getMethod();
String nodestatus = cnForm.getnodestatus();
String nodeinteractable = cnForm.getInteractable();
CssRecord cssrecord = null;
List<CssNode> cssNodes = new ArrayList<CssNode>();
List<Service> nodes = new ArrayList<Service>();
Future<CssInterfaceResult> cssDetails = null;
//put getrecord back in here
cssDetails = getCssLocalManager().getCssRecord();
try {
cssrecord = cssDetails.get().getProfile();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String res = null;
try {
if (method.equalsIgnoreCase("addnode")) {
res="Node Added";
CssNode cssnode = new CssNode();
cssnode.setIdentity(cnForm.getCssNodeId());
//cssnode.setStatus(cnForm.getcssNodeStatus());
//cssnode.setType(cnForm.getcssNodeType());
if (nodetypes.equalsIgnoreCase("Android")) {
nodeType = Android;
}
if (nodetypes.equalsIgnoreCase("Rich")) {
nodeType = Rich;
}
if (nodetypes.equalsIgnoreCase("Cloud")) {
nodeType = Cloud;
}
if (nodestatus.equalsIgnoreCase("Available")) {
nodestates = 0;
}
if (nodestatus.equalsIgnoreCase("Unavailable")) {
nodestates = 1;
}
if (nodestatus.equalsIgnoreCase("Hibernating")) {
nodestates = 2;
}
cssNodes = cssrecord.getCssNodes();
cssLocalManager.setNodeType(cssrecord, cnForm.getCssNodeId(), nodestates, nodeType, cnForm.getcssNodeMAC(), cnForm.getInteractable());
res="CSS Node Result ";
model.put("cssNodes", cssNodes);
}else if (method.equalsIgnoreCase("removenode")) {
res="Node Removed";
CssNode cssnode = new CssNode();
cssnode.setIdentity(cnForm.getCssNodeId());
//cssnode.setStatus(cnForm.getcssNodeStatus());
//cssnode.setType(cnForm.getcssNodeType());
cssNodes = cssrecord.getCssNodes();
cssLocalManager.removeNode(cssrecord, cnForm.getCssNodeId());
res="CSS Node Removed ";
//nodes = asynchResult.get();
model.put("cssNodes", cssNodes);
//model.put("services", nodes);
}else if (method.equalsIgnoreCase("returnnodetype")) {
Future<String> Type;
Type = cssLocalManager.getthisNodeType(cnForm.getCssNodeId());
//res="CSS Node Type Result ";
res = "CSS Node Type is: " +Type.get().toString();
//model.put("cssNodes", Type);
}else{
res="error unknown metod";
}
model.put("result", res);
}
catch (Exception ex)
{
res = "Oops!!!! <br/>";
};
return new ModelAndView("cssnodemgmtresult", model);
}
}