package edu.asu.spring.quadriga.web.network;
import java.security.Principal;
import java.util.List;
import javax.xml.bind.JAXBException;
import org.codehaus.jettison.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import edu.asu.spring.quadriga.domain.IUser;
import edu.asu.spring.quadriga.domain.network.INetwork;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.IUserManager;
import edu.asu.spring.quadriga.service.network.ID3Creator;
import edu.asu.spring.quadriga.service.network.INetworkManager;
import edu.asu.spring.quadriga.service.network.INetworkTransformationManager;
import edu.asu.spring.quadriga.service.network.domain.ITransformedNetwork;
/**
* This class will handle list {@link INetwork} of the {@link IUser} and fetch the {@link INetwork} details from DB and QStore.
*
* @author : Lohith Dwaraka
*
*/
@Controller
public class NetworkListController {
@Autowired
private INetworkManager networkManager;
@Autowired
private INetworkTransformationManager transformationManager;
@Autowired
private ID3Creator d3Creator;
@Autowired
private IUserManager userManager;
private static final Logger logger = LoggerFactory
.getLogger(NetworkListController.class);
/**
* This method helps in listing of network belonging to the user in tree view.
* @author Lohith Dwaraka
* @param model
* @param principal
* @return
* @throws QuadrigaStorageException
* @throws JSONException
*/
@RequestMapping(value = "auth/networks", method = RequestMethod.GET)
public String listNetworks(ModelMap model, Principal principal) throws QuadrigaStorageException, JSONException {
IUser user = userManager.getUser(principal.getName());
List<INetwork> networkList=networkManager.getNetworkList(user);
model.addAttribute("userId", user.getUserName());
model.addAttribute("networkList", networkList);
return "auth/networks";
}
/**
* Get the network displayed on to JSP by passing JSON string
* @author Lohith Dwaraka
* @param networkId
* @param model
* @param principal
* @return
* @throws QuadrigaStorageException
* @throws JAXBException
*/
@RequestMapping(value = "auth/networks/visualize/{networkId}", method = RequestMethod.GET)
public String visualizeNetworks(@PathVariable("networkId") String networkId, ModelMap model, Principal principal) throws QuadrigaStorageException, JAXBException {
INetwork network = networkManager.getNetwork(networkId);
if(network==null){
return "auth/404";
}
ITransformedNetwork transformedNetwork= transformationManager.getTransformedNetwork(networkId);
String nwId = "\""+networkId+"\"";
model.addAttribute("networkid",nwId);
model.addAttribute("network", network);
String json = null;
if(transformedNetwork!=null){
json = d3Creator.getD3JSON(transformedNetwork.getNodes(), transformedNetwork.getLinks());
}
model.addAttribute("jsonstring",json);
return "auth/networks/visualize";
}
}